Assembly Diffs

linux arm

Diffs are based on 2,237,690 contexts (827,812 MinOpts, 1,409,878 FullOpts).

MISSED contexts: 74,588 (3.23%)

Overall (-724 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 15,303,134 -16
benchmarks.run_pgo.linux.arm.checked.mch 61,262,128 -4
benchmarks.run_tiered.linux.arm.checked.mch 22,643,448 -16
coreclr_tests.run.linux.arm.checked.mch 321,791,116 -56
libraries.crossgen2.linux.arm.checked.mch 35,175,262 -104
libraries.pmi.linux.arm.checked.mch 49,615,946 -214
libraries_tests.run.linux.arm.Release.mch 242,762,120 -140
librariestestsnotieredcompilation.run.linux.arm.Release.mch 93,201,612 -150
realworld.run.linux.arm.checked.mch 13,613,446 -24

FullOpts (-724 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 14,913,878 -16
benchmarks.run_pgo.linux.arm.checked.mch 50,464,526 -4
benchmarks.run_tiered.linux.arm.checked.mch 13,536,292 -16
coreclr_tests.run.linux.arm.checked.mch 109,060,982 -56
libraries.crossgen2.linux.arm.checked.mch 35,174,032 -104
libraries.pmi.linux.arm.checked.mch 49,509,442 -214
libraries_tests.run.linux.arm.Release.mch 120,759,176 -140
librariestestsnotieredcompilation.run.linux.arm.Release.mch 83,117,792 -150
realworld.run.linux.arm.checked.mch 13,163,500 -24

Example diffs

benchmarks.run.linux.arm.checked.mch

-12 (-2.06%) : 20211.dasm - System.Collections.Immutable.ImmutableList1+Node[System.Collections.Generic.KeyValuePair2[System.Canon,System.Canon]]:IndexOf(System.Collections.Generic.KeyValuePair2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer1[System.Collections.Generic.KeyValuePair`2[System.Canon,System.Canon]]):int:this (FullOpts)

@@ -8,13 +8,13 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 9, 16 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
+; V00 this [V00,T06] ( 8, 15 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
; V01 arg1 [V01,T10] ( 4, 10 ) struct ( 8) [sp+0x78] do-not-enreg[SA] multireg-arg single-def <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]> ; V02 arg2 [V02,T07] ( 8, 14 ) int -> r5
-; V03 arg3 [V03,T25] ( 4, 4 ) int -> r7 single-def
+; V03 arg3 [V03,T23] ( 4, 4 ) int -> r7 single-def
; V04 arg4 [V04,T14] ( 3, 6 ) ref -> r6 class-hnd <System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]> ; V05 loc0 [V05 ] ( 5, 15 ) struct (40) [sp+0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableList`1+Enumerator[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
-; V06 loc1 [V06,T30] ( 2, 2 ) int -> [sp+0x20] do-not-enreg[Z] EH-live
+; V06 loc1 [V06,T28] ( 2, 2 ) int -> [sp+0x20] do-not-enreg[Z] EH-live
; V07 OutArgs [V07 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -31,30 +31,27 @@ ;* V20 tmp13 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V21 tmp14 [V21,T11] ( 2, 12 ) ref -> [sp+0x14] do-not-enreg[H] hidden-struct-arg "field V13.key (fldOffset=0x0)" P-DEP ; V22 tmp15 [V22,T12] ( 2, 12 ) ref -> [sp+0x18] do-not-enreg[H] hidden-struct-arg "field V13.value (fldOffset=0x4)" P-DEP
-; V23 tmp16 [V23,T33] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V24 tmp17 [V24,T34] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V25 tmp18 [V25,T28] ( 2, 4 ) int -> r1 "argument with side effect"
+; V23 tmp16 [V23,T30] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V24 tmp17 [V24,T31] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V25 tmp18 [V25,T26] ( 2, 4 ) int -> r1 "argument with side effect"
; V26 tmp19 [V26,T03] ( 2, 32 ) int -> r1 "argument with side effect"
-; V27 PSPSym [V27,T32] ( 1, 1 ) int -> [sp+0x50] do-not-enreg[V] "PSPSym"
+; V27 PSPSym [V27,T29] ( 1, 1 ) int -> [sp+0x50] do-not-enreg[V] "PSPSym"
; V28 cse0 [V28,T15] ( 3, 6 ) int -> r9 "CSE - aggressive"
-; V29 cse1 [V29,T29] ( 3, 3 ) int -> r0 "CSE - aggressive"
+; V29 cse1 [V29,T27] ( 3, 3 ) int -> r0 "CSE - aggressive"
; V30 cse2 [V30,T09] ( 10, 12 ) int -> r8 multi-def "CSE - aggressive"
-; V31 rat0 [V31,T21] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V32 rat1 [V32,T26] ( 3, 4 ) int -> r1 "runtime lookup"
+; V31 rat0 [V31,T20] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V32 rat1 [V32,T24] ( 3, 4 ) int -> r1 "runtime lookup"
; V33 rat2 [V33,T16] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
-; V34 rat3 [V34,T22] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V35 rat4 [V35,T27] ( 3, 4 ) int -> r9 "runtime lookup"
+; V34 rat3 [V34,T21] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V35 rat4 [V35,T25] ( 3, 4 ) int -> r9 "runtime lookup"
; V36 rat5 [V36,T17] ( 3, 5.60) int -> r9 "fgMakeTemp is creating a new local variable"
-; V37 rat6 [V37,T23] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V38 rat7 [V38,T31] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V39 rat8 [V39,T18] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V40 rat9 [V40,T05] ( 3, 22.40) int -> r0 "fgMakeTemp is creating a new local variable" -; V41 rat10 [V41,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V42 rat11 [V42,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V43 rat12 [V43,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V44 rat13 [V44,T19] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V45 rat14 [V45,T24] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V46 rat15 [V46,T20] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V37 rat6 [V37,T05] ( 3, 22.40) int -> r0 "fgMakeTemp is creating a new local variable" +; V38 rat7 [V38,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V39 rat8 [V39,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V40 rat9 [V40,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V41 rat10 [V41,T18] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V42 rat11 [V42,T22] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V43 rat12 [V43,T19] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 84 @@ -82,7 +79,7 @@ G_M34258_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr r6, [sp+0x84] // [V04 arg4] ; gcrRegs +[r6] ;; size=46 bbWeight=1 PerfScore 19.00
-G_M34258_IG02: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M34258_IG02: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
cmp r5, 0 blt G_M34258_IG31 cmp r7, 0 @@ -167,14 +164,8 @@ G_M34258_IG09: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b ; gcr arg pop 0 ;; size=30 bbWeight=1 PerfScore 12.00 G_M34258_IG10: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
- ldr r0, [r4] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x08] - cmp r0, 0 - bne SHORT G_M34258_IG15
b SHORT G_M34258_IG15
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M34258_IG11: ; bbWeight=4, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r4] mov r7, r9 @@ -310,7 +301,7 @@ G_M34258_IG28: ; bbWeight=1, epilog, nogc, extend add sp, 8 bx lr ;; size=10 bbWeight=1 PerfScore 4.00
-G_M34258_IG29: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M34258_IG29: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov r0, -1 ;; size=4 bbWeight=1 PerfScore 1.00 G_M34258_IG30: ; bbWeight=1, epilog, nogc, extend @@ -319,7 +310,7 @@ G_M34258_IG30: ; bbWeight=1, epilog, nogc, extend add sp, 8 bx lr ;; size=10 bbWeight=1 PerfScore 4.00
-G_M34258_IG31: ; bbWeight=0, gcVars=0000000000000040 {V00}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
+G_M34258_IG31: ; bbWeight=0, gcVars=00000040 {V00}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[r4] movw r0, 0xd1ff movw r1, 0xd1ff @@ -363,7 +354,7 @@ G_M34258_IG33: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, add r3, r11, 16 str r3, [sp+0x10] ;; size=12 bbWeight=1 PerfScore 4.00
-G_M34258_IG34: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M34258_IG34: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr r4, [r11-0x60] // [V00 this] ; gcrRegs +[r4] ldr r8, [r4] @@ -396,7 +387,7 @@ G_M34258_IG38: ; bbWeight=1, funclet epilog, nogc, extend pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 582, prolog size 46, PerfScore 356.40, instruction count 218, allocated bytes for code 582 (MethodHash=62fd7a2d) for method System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
+; Total bytes of code 570, prolog size 46, PerfScore 350.40, instruction count 212, allocated bytes for code 570 (MethodHash=62fd7a2d) for method System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
; ============================================================ Unwind Info: @@ -408,7 +399,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 258 (0x00102) Actual length = 516 (0x000204)
+ Function Length : 252 (0x000fc) Actual length = 504 (0x0001f8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-4 (-0.18%) : 14561.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person

@@ -54,8 +54,8 @@ ;* V43 tmp38 [V43 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V44 tmp39 [V44 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V45 tmp40 [V45 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op double-align "NewObj constructor temp" <System.DateTime>
-; V46 tmp41 [V46,T96] ( 2, 0 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> -; V47 tmp42 [V47,T95] ( 3, 0 ) ref -> r4 class-hnd exact "NewObj constructor temp" <<unknown class>>
+; V46 tmp41 [V46,T98] ( 2, 0 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> +; V47 tmp42 [V47,T97] ( 3, 0 ) ref -> r4 class-hnd exact "NewObj constructor temp" <<unknown class>>
;* V48 tmp43 [V48 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V49 tmp44 [V49,T31] ( 9, 16 ) int -> r9 "Inline stloc first use temp" ; V50 tmp45 [V50,T32] ( 9, 16 ) int -> r10 "Inline stloc first use temp" @@ -72,7 +72,7 @@ ;* V61 tmp56 [V61,T69] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x4)" P-INDEP ;* V62 tmp57 [V62 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP ;* V63 tmp58 [V63 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x4)" P-INDEP
-;* V64 tmp59 [V64,T59] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
+;* V64 tmp59 [V64,T57] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp60 [V65,T70] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x4)" P-INDEP ;* V66 tmp61 [V66 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP ;* V67 tmp62 [V67 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x4)" P-INDEP @@ -89,63 +89,66 @@ ; V78 tmp73 [V78,T10] ( 6, 24 ) ref -> r0 "argument with side effect" ; V79 tmp74 [V79,T11] ( 6, 24 ) ref -> r0 "argument with side effect" ; V80 tmp75 [V80,T12] ( 6, 24 ) ref -> r0 "argument with side effect"
-; V81 tmp76 [V81,T97] ( 2, 0 ) ref -> r1 "argument with side effect" -; V82 tmp77 [V82,T98] ( 2, 0 ) ref -> r1 "argument with side effect" -; V83 tmp78 [V83,T99] ( 2, 0 ) ref -> r1 "argument with side effect"
+; V81 tmp76 [V81,T99] ( 2, 0 ) ref -> r1 "argument with side effect" +; V82 tmp77 [V82,T100] ( 2, 0 ) ref -> r1 "argument with side effect" +; V83 tmp78 [V83,T101] ( 2, 0 ) ref -> r1 "argument with side effect"
; V84 tmp79 [V84,T13] ( 6, 24 ) ref -> r0 "argument with side effect"
-; V85 tmp80 [V85,T100] ( 2, 0 ) ref -> r2 "argument with side effect"
+; V85 tmp80 [V85,T102] ( 2, 0 ) ref -> r2 "argument with side effect"
;* V86 cse0 [V86 ] ( 0, 0 ) long -> zero-ref "CSE - moderate"
-; V87 cse1 [V87,T47] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V88 cse2 [V88,T48] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V89 cse3 [V89,T49] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V90 cse4 [V90,T88] ( 3, 0.12) ref -> r0 "CSE - conservative" -; V91 cse5 [V91,T89] ( 3, 0.12) ref -> r0 "CSE - conservative" -; V92 cse6 [V92,T90] ( 3, 0.12) ref -> r0 "CSE - conservative" -;* V93 cse7 [V93,T74] ( 0, 0 ) int -> zero-ref hoist multi-def "CSE - moderate" -; V94 rat0 [V94,T57] ( 5, 8.04) int -> r3 "field V44.lo (fldOffset=0x0)" P-INDEP -; V95 rat1 [V95,T58] ( 5, 8.04) int -> lr "field V44.hi (fldOffset=0x4)" P-INDEP -; V96 rat2 [V96,T45] ( 4, 12 ) int -> r0 "field V77.lo (fldOffset=0x0)" P-INDEP -; V97 rat3 [V97,T46] ( 4, 12 ) int -> r1 "field V77.hi (fldOffset=0x4)" P-INDEP -; V98 rat4 [V98,T50] ( 3, 11.88) int -> r0 "field V86.lo (fldOffset=0x0)" P-INDEP -; V99 rat5 [V99,T51] ( 3, 11.88) int -> r1 "field V86.hi (fldOffset=0x4)" P-INDEP -; V100 rat6 [V100,T19] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" -; V101 rat7 [V101,T20] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V102 rat8 [V102,T21] ( 3, 23.76) int -> r9 "ReplaceWithLclVar is creating a new local variable" -; V103 rat9 [V103,T22] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V104 rat10 [V104,T23] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" -; V105 rat11 [V105,T24] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V106 rat12 [V106,T25] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V107 rat13 [V107 ] ( 1, 7.92) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V108 rat14 [V108,T52] ( 2, 11.88) int -> r0 "field V107.lo (fldOffset=0x0)" P-INDEP -; V109 rat15 [V109,T53] ( 2, 11.88) int -> r1 "field V107.hi (fldOffset=0x4)" P-INDEP -; V110 rat16 [V110 ] ( 1, 7.92) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V111 rat17 [V111,T54] ( 2, 11.88) int -> r0 "field V110.lo (fldOffset=0x0)" P-INDEP -; V112 rat18 [V112,T55] ( 2, 11.88) int -> r1 "field V110.hi (fldOffset=0x4)" P-INDEP -; V113 rat19 [V113,T17] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V114 rat20 [V114,T26] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V115 rat21 [V115,T27] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V116 rat22 [V116,T28] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V117 rat23 [V117,T18] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V118 rat24 [V118,T29] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V119 rat25 [V119,T77] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V120 rat26 [V120,T78] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V121 rat27 [V121,T79] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V122 rat28 [V122,T80] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V123 rat29 [V123,T81] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V124 rat30 [V124,T82] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V125 rat31 [V125,T83] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V126 rat32 [V126 ] ( 1, 0.08) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat33 [V127,T91] ( 2, 0.12) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat34 [V128,T92] ( 2, 0.12) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat35 [V129 ] ( 1, 0.08) long -> [sp+0x08] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat36 [V130,T93] ( 2, 0.12) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat37 [V131,T94] ( 2, 0.12) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat38 [V132,T75] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V133 rat39 [V133,T84] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V134 rat40 [V134,T85] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V135 rat41 [V135,T86] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V136 rat42 [V136,T76] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V137 rat43 [V137,T87] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable"
+;* V87 cse1 [V87 ] ( 0, 0 ) long -> zero-ref "CSE - conservative" +; V88 cse2 [V88,T47] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V89 cse3 [V89,T48] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V90 cse4 [V90,T49] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V91 cse5 [V91,T88] ( 3, 0.12) ref -> r0 "CSE - conservative" +; V92 cse6 [V92,T89] ( 3, 0.12) ref -> r0 "CSE - conservative" +; V93 cse7 [V93,T90] ( 3, 0.12) ref -> r0 "CSE - conservative" +;* V94 cse8 [V94,T74] ( 0, 0 ) int -> zero-ref hoist multi-def "CSE - moderate" +; V95 rat0 [V95,T58] ( 4, 8 ) int -> r3 "field V44.lo (fldOffset=0x0)" P-INDEP +; V96 rat1 [V96,T59] ( 4, 8 ) int -> lr "field V44.hi (fldOffset=0x4)" P-INDEP +; V97 rat2 [V97,T45] ( 4, 12 ) int -> r0 "field V77.lo (fldOffset=0x0)" P-INDEP +; V98 rat3 [V98,T46] ( 4, 12 ) int -> r1 "field V77.hi (fldOffset=0x4)" P-INDEP +; V99 rat4 [V99,T50] ( 3, 11.88) int -> r0 "field V86.lo (fldOffset=0x0)" P-INDEP +; V100 rat5 [V100,T51] ( 3, 11.88) int -> r1 "field V86.hi (fldOffset=0x4)" P-INDEP +; V101 rat6 [V101,T91] ( 3, 0.12) int -> r0 "field V87.lo (fldOffset=0x0)" P-INDEP +; V102 rat7 [V102,T92] ( 3, 0.12) int -> r1 "field V87.hi (fldOffset=0x4)" P-INDEP +; V103 rat8 [V103,T19] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" +; V104 rat9 [V104,T20] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V105 rat10 [V105,T21] ( 3, 23.76) int -> r9 "ReplaceWithLclVar is creating a new local variable" +; V106 rat11 [V106,T22] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V107 rat12 [V107,T23] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" +; V108 rat13 [V108,T24] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V109 rat14 [V109,T25] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V110 rat15 [V110 ] ( 1, 7.92) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat16 [V111,T52] ( 2, 11.88) int -> r0 "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat17 [V112,T53] ( 2, 11.88) int -> r1 "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat18 [V113 ] ( 1, 7.92) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat19 [V114,T54] ( 2, 11.88) int -> r0 "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat20 [V115,T55] ( 2, 11.88) int -> r1 "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat21 [V116,T17] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V117 rat22 [V117,T26] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V118 rat23 [V118,T27] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V119 rat24 [V119,T28] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V120 rat25 [V120,T18] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V121 rat26 [V121,T29] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V122 rat27 [V122,T77] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V123 rat28 [V123,T78] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V124 rat29 [V124,T79] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V125 rat30 [V125,T80] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V126 rat31 [V126,T81] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V127 rat32 [V127,T82] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V128 rat33 [V128,T83] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V129 rat34 [V129 ] ( 1, 0.08) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V130 rat35 [V130,T93] ( 2, 0.12) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP +; V131 rat36 [V131,T94] ( 2, 0.12) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP +; V132 rat37 [V132 ] ( 1, 0.08) long -> [sp+0x08] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V133 rat38 [V133,T95] ( 2, 0.12) int -> r0 "field V132.lo (fldOffset=0x0)" P-INDEP +; V134 rat39 [V134,T96] ( 2, 0.12) int -> r1 "field V132.hi (fldOffset=0x4)" P-INDEP +; V135 rat40 [V135,T75] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V136 rat41 [V136,T84] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V137 rat42 [V137,T85] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V138 rat43 [V138,T86] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V139 rat44 [V139,T76] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V140 rat45 [V140,T87] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 84 @@ -820,17 +823,17 @@ G_M14965_IG11: ; bbWeight=0.04, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_DBL2LNG
- adds r3, r9, r0 - adc lr, r10, r1 - movw r0, 0xd1ff - movt r0, 0xd1ff - movw r1, 0xd1ff - movt r1, 0xd1ff - cmp r3, r0 - sbcs r0, lr, r1
+ adds r0, r9, r0 + adc r1, r10, r1 + mov r3, r0 + mov lr, r1 + movw r2, 0xd1ff + movt r2, 0xd1ff + movw r12, 0xd1ff + movt r12, 0xd1ff + cmp r3, r2 + sbcs r2, lr, r12
bhs G_M14965_IG21
- orr r0, r3, 0 - orr r1, lr, 0
str r0, [sp+0x38] // [V68 tmp63] str r1, [sp+0x3C] // [V68 tmp63+0x04] add r0, r8, 24 @@ -864,7 +867,7 @@ G_M14965_IG11: ; bbWeight=0.04, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 blx lr // <unknown method> ldr r0, [r5+0x04] ; gcrRegs +[r0]
- ;; size=622 bbWeight=0.04 PerfScore 8.44
+ ;; size=618 bbWeight=0.04 PerfScore 8.44
G_M14965_IG12: ; bbWeight=0.04, isz, extend movs r1, 0 mov r2, 256 @@ -1128,7 +1131,7 @@ G_M14965_IG24: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=40 bbWeight=0 PerfScore 0.00
-; Total bytes of code 2284, prolog size 14, PerfScore 1300.98, instruction count 782, allocated bytes for code 2284 (MethodHash=528ec58a) for method System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (FullOpts)
+; Total bytes of code 2280, prolog size 14, PerfScore 1300.98, instruction count 782, allocated bytes for code 2280 (MethodHash=528ec58a) for method System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (FullOpts)
; ============================================================ Unwind Info: @@ -1140,7 +1143,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 1142 (0x00476) Actual length = 2284 (0x0008ec)
+ Function Length : 1140 (0x00474) Actual length = 2280 (0x0008e8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 24641.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

benchmarks.run_pgo.linux.arm.checked.mch

-4 (-0.18%) : 48266.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person

@@ -54,8 +54,8 @@ ;* V43 tmp38 [V43 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V44 tmp39 [V44 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V45 tmp40 [V45 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op double-align "NewObj constructor temp" <System.DateTime>
-; V46 tmp41 [V46,T96] ( 2, 0 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> -; V47 tmp42 [V47,T95] ( 3, 0 ) ref -> r4 class-hnd exact "NewObj constructor temp" <<unknown class>>
+; V46 tmp41 [V46,T98] ( 2, 0 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> +; V47 tmp42 [V47,T97] ( 3, 0 ) ref -> r4 class-hnd exact "NewObj constructor temp" <<unknown class>>
;* V48 tmp43 [V48 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V49 tmp44 [V49,T31] ( 9, 16 ) int -> r9 "Inline stloc first use temp" ; V50 tmp45 [V50,T32] ( 9, 16 ) int -> r10 "Inline stloc first use temp" @@ -72,7 +72,7 @@ ;* V61 tmp56 [V61,T69] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x4)" P-INDEP ;* V62 tmp57 [V62 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP ;* V63 tmp58 [V63 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x4)" P-INDEP
-;* V64 tmp59 [V64,T59] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
+;* V64 tmp59 [V64,T57] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp60 [V65,T70] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x4)" P-INDEP ;* V66 tmp61 [V66 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP ;* V67 tmp62 [V67 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x4)" P-INDEP @@ -89,63 +89,66 @@ ; V78 tmp73 [V78,T10] ( 6, 24 ) ref -> r0 "argument with side effect" ; V79 tmp74 [V79,T11] ( 6, 24 ) ref -> r0 "argument with side effect" ; V80 tmp75 [V80,T12] ( 6, 24 ) ref -> r0 "argument with side effect"
-; V81 tmp76 [V81,T97] ( 2, 0 ) ref -> r1 "argument with side effect" -; V82 tmp77 [V82,T98] ( 2, 0 ) ref -> r1 "argument with side effect" -; V83 tmp78 [V83,T99] ( 2, 0 ) ref -> r1 "argument with side effect"
+; V81 tmp76 [V81,T99] ( 2, 0 ) ref -> r1 "argument with side effect" +; V82 tmp77 [V82,T100] ( 2, 0 ) ref -> r1 "argument with side effect" +; V83 tmp78 [V83,T101] ( 2, 0 ) ref -> r1 "argument with side effect"
; V84 tmp79 [V84,T13] ( 6, 24 ) ref -> r0 "argument with side effect"
-; V85 tmp80 [V85,T100] ( 2, 0 ) ref -> r2 "argument with side effect"
+; V85 tmp80 [V85,T102] ( 2, 0 ) ref -> r2 "argument with side effect"
;* V86 cse0 [V86 ] ( 0, 0 ) long -> zero-ref "CSE - moderate"
-; V87 cse1 [V87,T47] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V88 cse2 [V88,T48] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V89 cse3 [V89,T49] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V90 cse4 [V90,T88] ( 3, 0.12) ref -> r0 "CSE - conservative" -; V91 cse5 [V91,T89] ( 3, 0.12) ref -> r0 "CSE - conservative" -; V92 cse6 [V92,T90] ( 3, 0.12) ref -> r0 "CSE - conservative" -;* V93 cse7 [V93,T74] ( 0, 0 ) int -> zero-ref hoist multi-def "CSE - moderate" -; V94 rat0 [V94,T57] ( 5, 8.04) int -> r3 "field V44.lo (fldOffset=0x0)" P-INDEP -; V95 rat1 [V95,T58] ( 5, 8.04) int -> lr "field V44.hi (fldOffset=0x4)" P-INDEP -; V96 rat2 [V96,T45] ( 4, 12 ) int -> r0 "field V77.lo (fldOffset=0x0)" P-INDEP -; V97 rat3 [V97,T46] ( 4, 12 ) int -> r1 "field V77.hi (fldOffset=0x4)" P-INDEP -; V98 rat4 [V98,T50] ( 3, 11.88) int -> r0 "field V86.lo (fldOffset=0x0)" P-INDEP -; V99 rat5 [V99,T51] ( 3, 11.88) int -> r1 "field V86.hi (fldOffset=0x4)" P-INDEP -; V100 rat6 [V100,T19] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" -; V101 rat7 [V101,T20] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V102 rat8 [V102,T21] ( 3, 23.76) int -> r9 "ReplaceWithLclVar is creating a new local variable" -; V103 rat9 [V103,T22] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V104 rat10 [V104,T23] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" -; V105 rat11 [V105,T24] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V106 rat12 [V106,T25] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V107 rat13 [V107 ] ( 1, 7.92) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V108 rat14 [V108,T52] ( 2, 11.88) int -> r0 "field V107.lo (fldOffset=0x0)" P-INDEP -; V109 rat15 [V109,T53] ( 2, 11.88) int -> r1 "field V107.hi (fldOffset=0x4)" P-INDEP -; V110 rat16 [V110 ] ( 1, 7.92) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V111 rat17 [V111,T54] ( 2, 11.88) int -> r0 "field V110.lo (fldOffset=0x0)" P-INDEP -; V112 rat18 [V112,T55] ( 2, 11.88) int -> r1 "field V110.hi (fldOffset=0x4)" P-INDEP -; V113 rat19 [V113,T17] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V114 rat20 [V114,T26] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V115 rat21 [V115,T27] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V116 rat22 [V116,T28] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V117 rat23 [V117,T18] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V118 rat24 [V118,T29] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V119 rat25 [V119,T77] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V120 rat26 [V120,T78] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V121 rat27 [V121,T79] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V122 rat28 [V122,T80] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V123 rat29 [V123,T81] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V124 rat30 [V124,T82] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V125 rat31 [V125,T83] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V126 rat32 [V126 ] ( 1, 0.08) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat33 [V127,T91] ( 2, 0.12) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat34 [V128,T92] ( 2, 0.12) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat35 [V129 ] ( 1, 0.08) long -> [sp+0x08] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat36 [V130,T93] ( 2, 0.12) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat37 [V131,T94] ( 2, 0.12) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat38 [V132,T75] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V133 rat39 [V133,T84] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V134 rat40 [V134,T85] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V135 rat41 [V135,T86] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V136 rat42 [V136,T76] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V137 rat43 [V137,T87] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable"
+;* V87 cse1 [V87 ] ( 0, 0 ) long -> zero-ref "CSE - conservative" +; V88 cse2 [V88,T47] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V89 cse3 [V89,T48] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V90 cse4 [V90,T49] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V91 cse5 [V91,T88] ( 3, 0.12) ref -> r0 "CSE - conservative" +; V92 cse6 [V92,T89] ( 3, 0.12) ref -> r0 "CSE - conservative" +; V93 cse7 [V93,T90] ( 3, 0.12) ref -> r0 "CSE - conservative" +;* V94 cse8 [V94,T74] ( 0, 0 ) int -> zero-ref hoist multi-def "CSE - moderate" +; V95 rat0 [V95,T58] ( 4, 8 ) int -> r3 "field V44.lo (fldOffset=0x0)" P-INDEP +; V96 rat1 [V96,T59] ( 4, 8 ) int -> lr "field V44.hi (fldOffset=0x4)" P-INDEP +; V97 rat2 [V97,T45] ( 4, 12 ) int -> r0 "field V77.lo (fldOffset=0x0)" P-INDEP +; V98 rat3 [V98,T46] ( 4, 12 ) int -> r1 "field V77.hi (fldOffset=0x4)" P-INDEP +; V99 rat4 [V99,T50] ( 3, 11.88) int -> r0 "field V86.lo (fldOffset=0x0)" P-INDEP +; V100 rat5 [V100,T51] ( 3, 11.88) int -> r1 "field V86.hi (fldOffset=0x4)" P-INDEP +; V101 rat6 [V101,T91] ( 3, 0.12) int -> r0 "field V87.lo (fldOffset=0x0)" P-INDEP +; V102 rat7 [V102,T92] ( 3, 0.12) int -> r1 "field V87.hi (fldOffset=0x4)" P-INDEP +; V103 rat8 [V103,T19] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" +; V104 rat9 [V104,T20] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V105 rat10 [V105,T21] ( 3, 23.76) int -> r9 "ReplaceWithLclVar is creating a new local variable" +; V106 rat11 [V106,T22] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V107 rat12 [V107,T23] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" +; V108 rat13 [V108,T24] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V109 rat14 [V109,T25] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V110 rat15 [V110 ] ( 1, 7.92) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat16 [V111,T52] ( 2, 11.88) int -> r0 "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat17 [V112,T53] ( 2, 11.88) int -> r1 "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat18 [V113 ] ( 1, 7.92) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat19 [V114,T54] ( 2, 11.88) int -> r0 "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat20 [V115,T55] ( 2, 11.88) int -> r1 "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat21 [V116,T17] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V117 rat22 [V117,T26] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V118 rat23 [V118,T27] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V119 rat24 [V119,T28] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V120 rat25 [V120,T18] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V121 rat26 [V121,T29] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V122 rat27 [V122,T77] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V123 rat28 [V123,T78] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V124 rat29 [V124,T79] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V125 rat30 [V125,T80] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V126 rat31 [V126,T81] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V127 rat32 [V127,T82] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V128 rat33 [V128,T83] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V129 rat34 [V129 ] ( 1, 0.08) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V130 rat35 [V130,T93] ( 2, 0.12) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP +; V131 rat36 [V131,T94] ( 2, 0.12) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP +; V132 rat37 [V132 ] ( 1, 0.08) long -> [sp+0x08] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V133 rat38 [V133,T95] ( 2, 0.12) int -> r0 "field V132.lo (fldOffset=0x0)" P-INDEP +; V134 rat39 [V134,T96] ( 2, 0.12) int -> r1 "field V132.hi (fldOffset=0x4)" P-INDEP +; V135 rat40 [V135,T75] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V136 rat41 [V136,T84] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V137 rat42 [V137,T85] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V138 rat43 [V138,T86] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V139 rat44 [V139,T76] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V140 rat45 [V140,T87] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 84 @@ -820,17 +823,17 @@ G_M14965_IG11: ; bbWeight=0.04, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_DBL2LNG
- adds r3, r9, r0 - adc lr, r10, r1 - movw r0, 0xd1ff - movt r0, 0xd1ff - movw r1, 0xd1ff - movt r1, 0xd1ff - cmp r3, r0 - sbcs r0, lr, r1
+ adds r0, r9, r0 + adc r1, r10, r1 + mov r3, r0 + mov lr, r1 + movw r2, 0xd1ff + movt r2, 0xd1ff + movw r12, 0xd1ff + movt r12, 0xd1ff + cmp r3, r2 + sbcs r2, lr, r12
bhs G_M14965_IG21
- orr r0, r3, 0 - orr r1, lr, 0
str r0, [sp+0x38] // [V68 tmp63] str r1, [sp+0x3C] // [V68 tmp63+0x04] add r0, r8, 24 @@ -867,7 +870,7 @@ G_M14965_IG11: ; bbWeight=0.04, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 movs r1, 0 mov r2, 256 ldr r3, [r0]
- ;; size=630 bbWeight=0.04 PerfScore 8.56
+ ;; size=626 bbWeight=0.04 PerfScore 8.56
G_M14965_IG12: ; bbWeight=0.04, isz, extend ldr r3, [r3+0x2C] ldr r3, [r3+0x1C] @@ -1128,7 +1131,7 @@ G_M14965_IG24: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=40 bbWeight=0 PerfScore 0.00
-; Total bytes of code 2284, prolog size 14, PerfScore 1300.98, instruction count 782, allocated bytes for code 2284 (MethodHash=528ec58a) for method System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
+; Total bytes of code 2280, prolog size 14, PerfScore 1300.98, instruction count 782, allocated bytes for code 2280 (MethodHash=528ec58a) for method System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -1140,7 +1143,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 1142 (0x00476) Actual length = 2284 (0x0008ec)
+ Function Length : 1140 (0x00474) Actual length = 2280 (0x0008e8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 82712.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

benchmarks.run_tiered.linux.arm.checked.mch

-12 (-2.06%) : 40178.dasm - System.Collections.Immutable.ImmutableList1+Node[System.Collections.Generic.KeyValuePair2[System.Canon,System.Canon]]:IndexOf(System.Collections.Generic.KeyValuePair2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer1[System.Collections.Generic.KeyValuePair`2[System.Canon,System.Canon]]):int:this (Tier0-FullOpts)

@@ -8,13 +8,13 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 9, 16 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
+; V00 this [V00,T06] ( 8, 15 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
; V01 arg1 [V01,T10] ( 4, 10 ) struct ( 8) [sp+0x78] do-not-enreg[SA] multireg-arg single-def <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]> ; V02 arg2 [V02,T07] ( 8, 14 ) int -> r5
-; V03 arg3 [V03,T25] ( 4, 4 ) int -> r7 single-def
+; V03 arg3 [V03,T23] ( 4, 4 ) int -> r7 single-def
; V04 arg4 [V04,T14] ( 3, 6 ) ref -> r6 class-hnd <System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]> ; V05 loc0 [V05 ] ( 5, 15 ) struct (40) [sp+0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableList`1+Enumerator[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
-; V06 loc1 [V06,T30] ( 2, 2 ) int -> [sp+0x20] do-not-enreg[Z] EH-live
+; V06 loc1 [V06,T28] ( 2, 2 ) int -> [sp+0x20] do-not-enreg[Z] EH-live
; V07 OutArgs [V07 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -31,30 +31,27 @@ ;* V20 tmp13 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V21 tmp14 [V21,T11] ( 2, 12 ) ref -> [sp+0x14] do-not-enreg[H] hidden-struct-arg "field V13.key (fldOffset=0x0)" P-DEP ; V22 tmp15 [V22,T12] ( 2, 12 ) ref -> [sp+0x18] do-not-enreg[H] hidden-struct-arg "field V13.value (fldOffset=0x4)" P-DEP
-; V23 tmp16 [V23,T33] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V24 tmp17 [V24,T34] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V25 tmp18 [V25,T28] ( 2, 4 ) int -> r1 "argument with side effect"
+; V23 tmp16 [V23,T30] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V24 tmp17 [V24,T31] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V25 tmp18 [V25,T26] ( 2, 4 ) int -> r1 "argument with side effect"
; V26 tmp19 [V26,T03] ( 2, 32 ) int -> r1 "argument with side effect"
-; V27 PSPSym [V27,T32] ( 1, 1 ) int -> [sp+0x50] do-not-enreg[V] "PSPSym"
+; V27 PSPSym [V27,T29] ( 1, 1 ) int -> [sp+0x50] do-not-enreg[V] "PSPSym"
; V28 cse0 [V28,T15] ( 3, 6 ) int -> r9 "CSE - aggressive"
-; V29 cse1 [V29,T29] ( 3, 3 ) int -> r0 "CSE - aggressive"
+; V29 cse1 [V29,T27] ( 3, 3 ) int -> r0 "CSE - aggressive"
; V30 cse2 [V30,T09] ( 10, 12 ) int -> r8 multi-def "CSE - aggressive"
-; V31 rat0 [V31,T21] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V32 rat1 [V32,T26] ( 3, 4 ) int -> r1 "runtime lookup"
+; V31 rat0 [V31,T20] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V32 rat1 [V32,T24] ( 3, 4 ) int -> r1 "runtime lookup"
; V33 rat2 [V33,T16] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
-; V34 rat3 [V34,T22] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V35 rat4 [V35,T27] ( 3, 4 ) int -> r9 "runtime lookup"
+; V34 rat3 [V34,T21] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V35 rat4 [V35,T25] ( 3, 4 ) int -> r9 "runtime lookup"
; V36 rat5 [V36,T17] ( 3, 5.60) int -> r9 "fgMakeTemp is creating a new local variable"
-; V37 rat6 [V37,T23] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V38 rat7 [V38,T31] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V39 rat8 [V39,T18] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V40 rat9 [V40,T05] ( 3, 22.40) int -> r0 "fgMakeTemp is creating a new local variable" -; V41 rat10 [V41,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V42 rat11 [V42,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V43 rat12 [V43,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V44 rat13 [V44,T19] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V45 rat14 [V45,T24] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V46 rat15 [V46,T20] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V37 rat6 [V37,T05] ( 3, 22.40) int -> r0 "fgMakeTemp is creating a new local variable" +; V38 rat7 [V38,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V39 rat8 [V39,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V40 rat9 [V40,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V41 rat10 [V41,T18] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V42 rat11 [V42,T22] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V43 rat12 [V43,T19] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 84 @@ -82,7 +79,7 @@ G_M34258_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr r6, [sp+0x84] // [V04 arg4] ; gcrRegs +[r6] ;; size=46 bbWeight=1 PerfScore 19.00
-G_M34258_IG02: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M34258_IG02: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
cmp r5, 0 blt G_M34258_IG31 cmp r7, 0 @@ -167,14 +164,8 @@ G_M34258_IG09: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b ; gcr arg pop 0 ;; size=30 bbWeight=1 PerfScore 12.00 G_M34258_IG10: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
- ldr r0, [r4] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x08] - cmp r0, 0 - bne SHORT G_M34258_IG15
b SHORT G_M34258_IG15
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M34258_IG11: ; bbWeight=4, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r4] mov r7, r9 @@ -310,7 +301,7 @@ G_M34258_IG28: ; bbWeight=1, epilog, nogc, extend add sp, 8 bx lr ;; size=10 bbWeight=1 PerfScore 4.00
-G_M34258_IG29: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M34258_IG29: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov r0, -1 ;; size=4 bbWeight=1 PerfScore 1.00 G_M34258_IG30: ; bbWeight=1, epilog, nogc, extend @@ -319,7 +310,7 @@ G_M34258_IG30: ; bbWeight=1, epilog, nogc, extend add sp, 8 bx lr ;; size=10 bbWeight=1 PerfScore 4.00
-G_M34258_IG31: ; bbWeight=0, gcVars=0000000000000040 {V00}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
+G_M34258_IG31: ; bbWeight=0, gcVars=00000040 {V00}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[r4] movw r0, 0xd1ff movw r1, 0xd1ff @@ -363,7 +354,7 @@ G_M34258_IG33: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, add r3, r11, 16 str r3, [sp+0x10] ;; size=12 bbWeight=1 PerfScore 4.00
-G_M34258_IG34: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M34258_IG34: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr r4, [r11-0x60] // [V00 this] ; gcrRegs +[r4] ldr r8, [r4] @@ -396,7 +387,7 @@ G_M34258_IG38: ; bbWeight=1, funclet epilog, nogc, extend pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 582, prolog size 46, PerfScore 356.40, instruction count 218, allocated bytes for code 582 (MethodHash=62fd7a2d) for method System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
+; Total bytes of code 570, prolog size 46, PerfScore 350.40, instruction count 212, allocated bytes for code 570 (MethodHash=62fd7a2d) for method System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -408,7 +399,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 258 (0x00102) Actual length = 516 (0x000204)
+ Function Length : 252 (0x000fc) Actual length = 504 (0x0001f8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-4 (-0.18%) : 32299.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person

@@ -54,8 +54,8 @@ ;* V43 tmp38 [V43 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V44 tmp39 [V44 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" ;* V45 tmp40 [V45 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op double-align "NewObj constructor temp" <System.DateTime>
-; V46 tmp41 [V46,T96] ( 2, 0 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> -; V47 tmp42 [V47,T95] ( 3, 0 ) ref -> r4 class-hnd exact "NewObj constructor temp" <<unknown class>>
+; V46 tmp41 [V46,T98] ( 2, 0 ) ref -> r9 class-hnd "Inline stloc first use temp" <System.String> +; V47 tmp42 [V47,T97] ( 3, 0 ) ref -> r4 class-hnd exact "NewObj constructor temp" <<unknown class>>
;* V48 tmp43 [V48 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V49 tmp44 [V49,T31] ( 9, 16 ) int -> r9 "Inline stloc first use temp" ; V50 tmp45 [V50,T32] ( 9, 16 ) int -> r10 "Inline stloc first use temp" @@ -72,7 +72,7 @@ ;* V61 tmp56 [V61,T69] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x4)" P-INDEP ;* V62 tmp57 [V62 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP ;* V63 tmp58 [V63 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x4)" P-INDEP
-;* V64 tmp59 [V64,T59] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
+;* V64 tmp59 [V64,T57] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp60 [V65,T70] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x4)" P-INDEP ;* V66 tmp61 [V66 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP ;* V67 tmp62 [V67 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x4)" P-INDEP @@ -89,63 +89,66 @@ ; V78 tmp73 [V78,T10] ( 6, 24 ) ref -> r0 "argument with side effect" ; V79 tmp74 [V79,T11] ( 6, 24 ) ref -> r0 "argument with side effect" ; V80 tmp75 [V80,T12] ( 6, 24 ) ref -> r0 "argument with side effect"
-; V81 tmp76 [V81,T97] ( 2, 0 ) ref -> r1 "argument with side effect" -; V82 tmp77 [V82,T98] ( 2, 0 ) ref -> r1 "argument with side effect" -; V83 tmp78 [V83,T99] ( 2, 0 ) ref -> r1 "argument with side effect"
+; V81 tmp76 [V81,T99] ( 2, 0 ) ref -> r1 "argument with side effect" +; V82 tmp77 [V82,T100] ( 2, 0 ) ref -> r1 "argument with side effect" +; V83 tmp78 [V83,T101] ( 2, 0 ) ref -> r1 "argument with side effect"
; V84 tmp79 [V84,T13] ( 6, 24 ) ref -> r0 "argument with side effect"
-; V85 tmp80 [V85,T100] ( 2, 0 ) ref -> r2 "argument with side effect"
+; V85 tmp80 [V85,T102] ( 2, 0 ) ref -> r2 "argument with side effect"
;* V86 cse0 [V86 ] ( 0, 0 ) long -> zero-ref "CSE - moderate"
-; V87 cse1 [V87,T47] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V88 cse2 [V88,T48] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V89 cse3 [V89,T49] ( 3, 11.88) ref -> r0 "CSE - moderate" -; V90 cse4 [V90,T88] ( 3, 0.12) ref -> r0 "CSE - conservative" -; V91 cse5 [V91,T89] ( 3, 0.12) ref -> r0 "CSE - conservative" -; V92 cse6 [V92,T90] ( 3, 0.12) ref -> r0 "CSE - conservative" -;* V93 cse7 [V93,T74] ( 0, 0 ) int -> zero-ref hoist multi-def "CSE - moderate" -; V94 rat0 [V94,T57] ( 5, 8.04) int -> r3 "field V44.lo (fldOffset=0x0)" P-INDEP -; V95 rat1 [V95,T58] ( 5, 8.04) int -> lr "field V44.hi (fldOffset=0x4)" P-INDEP -; V96 rat2 [V96,T45] ( 4, 12 ) int -> r0 "field V77.lo (fldOffset=0x0)" P-INDEP -; V97 rat3 [V97,T46] ( 4, 12 ) int -> r1 "field V77.hi (fldOffset=0x4)" P-INDEP -; V98 rat4 [V98,T50] ( 3, 11.88) int -> r0 "field V86.lo (fldOffset=0x0)" P-INDEP -; V99 rat5 [V99,T51] ( 3, 11.88) int -> r1 "field V86.hi (fldOffset=0x4)" P-INDEP -; V100 rat6 [V100,T19] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" -; V101 rat7 [V101,T20] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V102 rat8 [V102,T21] ( 3, 23.76) int -> r9 "ReplaceWithLclVar is creating a new local variable" -; V103 rat9 [V103,T22] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V104 rat10 [V104,T23] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" -; V105 rat11 [V105,T24] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V106 rat12 [V106,T25] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V107 rat13 [V107 ] ( 1, 7.92) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V108 rat14 [V108,T52] ( 2, 11.88) int -> r0 "field V107.lo (fldOffset=0x0)" P-INDEP -; V109 rat15 [V109,T53] ( 2, 11.88) int -> r1 "field V107.hi (fldOffset=0x4)" P-INDEP -; V110 rat16 [V110 ] ( 1, 7.92) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V111 rat17 [V111,T54] ( 2, 11.88) int -> r0 "field V110.lo (fldOffset=0x0)" P-INDEP -; V112 rat18 [V112,T55] ( 2, 11.88) int -> r1 "field V110.hi (fldOffset=0x4)" P-INDEP -; V113 rat19 [V113,T17] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V114 rat20 [V114,T26] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V115 rat21 [V115,T27] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V116 rat22 [V116,T28] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V117 rat23 [V117,T18] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V118 rat24 [V118,T29] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V119 rat25 [V119,T77] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V120 rat26 [V120,T78] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V121 rat27 [V121,T79] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V122 rat28 [V122,T80] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V123 rat29 [V123,T81] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V124 rat30 [V124,T82] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V125 rat31 [V125,T83] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V126 rat32 [V126 ] ( 1, 0.08) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat33 [V127,T91] ( 2, 0.12) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat34 [V128,T92] ( 2, 0.12) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat35 [V129 ] ( 1, 0.08) long -> [sp+0x08] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat36 [V130,T93] ( 2, 0.12) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat37 [V131,T94] ( 2, 0.12) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat38 [V132,T75] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V133 rat39 [V133,T84] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V134 rat40 [V134,T85] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V135 rat41 [V135,T86] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" -; V136 rat42 [V136,T76] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" -; V137 rat43 [V137,T87] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable"
+;* V87 cse1 [V87 ] ( 0, 0 ) long -> zero-ref "CSE - conservative" +; V88 cse2 [V88,T47] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V89 cse3 [V89,T48] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V90 cse4 [V90,T49] ( 3, 11.88) ref -> r0 "CSE - moderate" +; V91 cse5 [V91,T88] ( 3, 0.12) ref -> r0 "CSE - conservative" +; V92 cse6 [V92,T89] ( 3, 0.12) ref -> r0 "CSE - conservative" +; V93 cse7 [V93,T90] ( 3, 0.12) ref -> r0 "CSE - conservative" +;* V94 cse8 [V94,T74] ( 0, 0 ) int -> zero-ref hoist multi-def "CSE - moderate" +; V95 rat0 [V95,T58] ( 4, 8 ) int -> r3 "field V44.lo (fldOffset=0x0)" P-INDEP +; V96 rat1 [V96,T59] ( 4, 8 ) int -> lr "field V44.hi (fldOffset=0x4)" P-INDEP +; V97 rat2 [V97,T45] ( 4, 12 ) int -> r0 "field V77.lo (fldOffset=0x0)" P-INDEP +; V98 rat3 [V98,T46] ( 4, 12 ) int -> r1 "field V77.hi (fldOffset=0x4)" P-INDEP +; V99 rat4 [V99,T50] ( 3, 11.88) int -> r0 "field V86.lo (fldOffset=0x0)" P-INDEP +; V100 rat5 [V100,T51] ( 3, 11.88) int -> r1 "field V86.hi (fldOffset=0x4)" P-INDEP +; V101 rat6 [V101,T91] ( 3, 0.12) int -> r0 "field V87.lo (fldOffset=0x0)" P-INDEP +; V102 rat7 [V102,T92] ( 3, 0.12) int -> r1 "field V87.hi (fldOffset=0x4)" P-INDEP +; V103 rat8 [V103,T19] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" +; V104 rat9 [V104,T20] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V105 rat10 [V105,T21] ( 3, 23.76) int -> r9 "ReplaceWithLclVar is creating a new local variable" +; V106 rat11 [V106,T22] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V107 rat12 [V107,T23] ( 3, 23.76) int -> r10 "ReplaceWithLclVar is creating a new local variable" +; V108 rat13 [V108,T24] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V109 rat14 [V109,T25] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V110 rat15 [V110 ] ( 1, 7.92) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat16 [V111,T52] ( 2, 11.88) int -> r0 "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat17 [V112,T53] ( 2, 11.88) int -> r1 "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat18 [V113 ] ( 1, 7.92) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat19 [V114,T54] ( 2, 11.88) int -> r0 "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat20 [V115,T55] ( 2, 11.88) int -> r1 "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat21 [V116,T17] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V117 rat22 [V117,T26] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V118 rat23 [V118,T27] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V119 rat24 [V119,T28] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V120 rat25 [V120,T18] ( 3, 23.76) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V121 rat26 [V121,T29] ( 3, 23.76) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V122 rat27 [V122,T77] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V123 rat28 [V123,T78] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V124 rat29 [V124,T79] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V125 rat30 [V125,T80] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V126 rat31 [V126,T81] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V127 rat32 [V127,T82] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V128 rat33 [V128,T83] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V129 rat34 [V129 ] ( 1, 0.08) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V130 rat35 [V130,T93] ( 2, 0.12) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP +; V131 rat36 [V131,T94] ( 2, 0.12) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP +; V132 rat37 [V132 ] ( 1, 0.08) long -> [sp+0x08] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V133 rat38 [V133,T95] ( 2, 0.12) int -> r0 "field V132.lo (fldOffset=0x0)" P-INDEP +; V134 rat39 [V134,T96] ( 2, 0.12) int -> r1 "field V132.hi (fldOffset=0x4)" P-INDEP +; V135 rat40 [V135,T75] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V136 rat41 [V136,T84] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V137 rat42 [V137,T85] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V138 rat43 [V138,T86] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable" +; V139 rat44 [V139,T76] ( 3, 0.24) byref -> r0 "ReplaceWithLclVar is creating a new local variable" +; V140 rat45 [V140,T87] ( 3, 0.24) int -> r0 "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 84 @@ -820,17 +823,17 @@ G_M14965_IG11: ; bbWeight=0.04, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_DBL2LNG
- adds r3, r9, r0 - adc lr, r10, r1 - movw r0, 0xd1ff - movt r0, 0xd1ff - movw r1, 0xd1ff - movt r1, 0xd1ff - cmp r3, r0 - sbcs r0, lr, r1
+ adds r0, r9, r0 + adc r1, r10, r1 + mov r3, r0 + mov lr, r1 + movw r2, 0xd1ff + movt r2, 0xd1ff + movw r12, 0xd1ff + movt r12, 0xd1ff + cmp r3, r2 + sbcs r2, lr, r12
bhs G_M14965_IG21
- orr r0, r3, 0 - orr r1, lr, 0
str r0, [sp+0x38] // [V68 tmp63] str r1, [sp+0x3C] // [V68 tmp63+0x04] add r0, r8, 24 @@ -864,7 +867,7 @@ G_M14965_IG11: ; bbWeight=0.04, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 blx lr // <unknown method> ldr r0, [r5+0x04] ; gcrRegs +[r0]
- ;; size=622 bbWeight=0.04 PerfScore 8.44
+ ;; size=618 bbWeight=0.04 PerfScore 8.44
G_M14965_IG12: ; bbWeight=0.04, isz, extend movs r1, 0 mov r2, 256 @@ -1128,7 +1131,7 @@ G_M14965_IG24: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=40 bbWeight=0 PerfScore 0.00
-; Total bytes of code 2284, prolog size 14, PerfScore 1300.98, instruction count 782, allocated bytes for code 2284 (MethodHash=528ec58a) for method System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
+; Total bytes of code 2280, prolog size 14, PerfScore 1300.98, instruction count 782, allocated bytes for code 2280 (MethodHash=528ec58a) for method System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -1140,7 +1143,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 1142 (0x00476) Actual length = 2284 (0x0008ec)
+ Function Length : 1140 (0x00474) Actual length = 2280 (0x0008e8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 46762.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

coreclr_tests.run.linux.arm.checked.mch

-12 (-3.92%) : 305606.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet1[System.__Canon]):ubyte:this (Tier0-FullOpts)

@@ -8,12 +8,12 @@ ; 0 inlinees with PGO data; 5 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 9, 19 ) ref -> [sp+0x04] this class-hnd EH-live single-def <Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]>
+; V00 this [V00,T04] ( 8, 18 ) ref -> [sp+0x04] this class-hnd EH-live single-def <Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]>
; V01 arg1 [V01,T08] ( 5, 5 ) ref -> r1 class-hnd single-def <Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]> ; V02 loc0 [V02 ] ( 2, 8 ) ref -> [sp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> ; V03 loc1 [V03 ] ( 8, 18 ) struct (16) [sp+0x08] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.Build.Collections.RetrievableEntryHashSet`1+Enumerator[System.__Canon]> ; V04 loc2 [V04,T06] ( 3, 12 ) ref -> r6 class-hnd <System.__Canon>
-;* V05 loc3 [V05,T22] ( 0, 0 ) ubyte -> zero-ref do-not-enreg[Z] EH-live
+;* V05 loc3 [V05,T19] ( 0, 0 ) ubyte -> zero-ref do-not-enreg[Z] EH-live
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V08 tmp2 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -26,27 +26,24 @@ ; V15 tmp9 [V15 ] ( 5, 15 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x4)" P-DEP ; V16 tmp10 [V16 ] ( 4, 11 ) int -> [sp+0x10] do-not-enreg[X] addr-exposed "field V03._index (fldOffset=0x8)" P-DEP ; V17 tmp11 [V17 ] ( 4, 11 ) int -> [sp+0x14] do-not-enreg[X] addr-exposed "field V03._version (fldOffset=0xc)" P-DEP
-; V18 tmp12 [V18,T18] ( 3, 3 ) ref -> r1 single-def "field V12._set (fldOffset=0x0)" P-INDEP -;* V19 tmp13 [V19,T21] ( 0, 0 ) ref -> zero-ref single-def "field V12._current (fldOffset=0x4)" P-INDEP -;* V20 tmp14 [V20,T23] ( 0, 0 ) int -> zero-ref single-def "field V12._index (fldOffset=0x8)" P-INDEP -; V21 tmp15 [V21,T19] ( 2, 2 ) int -> r0 single-def "field V12._version (fldOffset=0xc)" P-INDEP
+; V18 tmp12 [V18,T16] ( 3, 3 ) ref -> r1 single-def "field V12._set (fldOffset=0x0)" P-INDEP +;* V19 tmp13 [V19,T18] ( 0, 0 ) ref -> zero-ref single-def "field V12._current (fldOffset=0x4)" P-INDEP +;* V20 tmp14 [V20,T20] ( 0, 0 ) int -> zero-ref single-def "field V12._index (fldOffset=0x8)" P-INDEP +; V21 tmp15 [V21,T17] ( 2, 2 ) int -> r0 single-def "field V12._version (fldOffset=0xc)" P-INDEP
; V22 tmp16 [V22,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V23 tmp17 [V23,T05] ( 2, 16 ) ref -> r1 "argument with side effect"
-; V24 PSPSym [V24,T24] ( 1, 1 ) int -> [sp+0x20] do-not-enreg[V] "PSPSym" -;* V25 cse0 [V25,T25] ( 0, 0 ) int -> zero-ref "CSE - aggressive" -; V26 cse1 [V26,T13] ( 5, 4.20) int -> r5 multi-def "CSE - aggressive" -;* V27 rat0 [V27,T14] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V28 rat1 [V28,T17] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V24 PSPSym [V24,T21] ( 1, 1 ) int -> [sp+0x20] do-not-enreg[V] "PSPSym" +;* V25 cse0 [V25,T22] ( 0, 0 ) int -> zero-ref "CSE - aggressive" +; V26 cse1 [V26,T12] ( 5, 4.20) int -> r5 multi-def "CSE - aggressive" +;* V27 rat0 [V27,T13] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V28 rat1 [V28,T15] ( 0, 0 ) int -> zero-ref "runtime lookup"
;* V29 rat2 [V29,T09] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V30 rat3 [V30,T15] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V31 rat4 [V31,T20] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V32 rat5 [V32,T10] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V33 rat6 [V33,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V34 rat7 [V34,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V35 rat8 [V35,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V36 rat9 [V36,T11] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V37 rat10 [V37,T16] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V38 rat11 [V38,T12] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V30 rat3 [V30,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V31 rat4 [V31,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V32 rat5 [V32,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V33 rat6 [V33,T10] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V34 rat7 [V34,T14] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V35 rat8 [V35,T11] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 36 @@ -106,14 +103,8 @@ G_M28904_IG08: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r0, [sp+0x14] // [V17 tmp11] ;; size=4 bbWeight=1 PerfScore 2.00 G_M28904_IG09: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r0, [r4] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x0C] - cmp r0, 0 - bne SHORT G_M28904_IG11
b SHORT G_M28904_IG11
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M28904_IG10: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r4] ldr r6, [sp+0x0C] // [V15 tmp9] @@ -255,7 +246,7 @@ G_M28904_IG28: ; bbWeight=1, funclet epilog, nogc, extend pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 306, prolog size 36, PerfScore 272.20, instruction count 122, allocated bytes for code 306 (MethodHash=9d278f17) for method Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (Tier0-FullOpts)
+; Total bytes of code 294, prolog size 36, PerfScore 266.20, instruction count 116, allocated bytes for code 294 (MethodHash=9d278f17) for method Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -267,7 +258,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 123 (0x0007b) Actual length = 246 (0x0000f6)
+ Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-12 (-3.92%) : 477079.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet1[System.__Canon]):ubyte:this (FullOpts)

@@ -8,12 +8,12 @@ ; 0 inlinees with PGO data; 5 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 9, 19 ) ref -> [sp+0x04] this class-hnd EH-live single-def <Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]>
+; V00 this [V00,T04] ( 8, 18 ) ref -> [sp+0x04] this class-hnd EH-live single-def <Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]>
; V01 arg1 [V01,T08] ( 5, 5 ) ref -> r1 class-hnd single-def <Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]> ; V02 loc0 [V02 ] ( 2, 8 ) ref -> [sp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> ; V03 loc1 [V03 ] ( 8, 18 ) struct (16) [sp+0x08] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.Build.Collections.RetrievableEntryHashSet`1+Enumerator[System.__Canon]> ; V04 loc2 [V04,T06] ( 3, 12 ) ref -> r6 class-hnd <System.__Canon>
-;* V05 loc3 [V05,T22] ( 0, 0 ) ubyte -> zero-ref do-not-enreg[Z] EH-live
+;* V05 loc3 [V05,T19] ( 0, 0 ) ubyte -> zero-ref do-not-enreg[Z] EH-live
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V08 tmp2 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -26,27 +26,24 @@ ; V15 tmp9 [V15 ] ( 5, 15 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x4)" P-DEP ; V16 tmp10 [V16 ] ( 4, 11 ) int -> [sp+0x10] do-not-enreg[X] addr-exposed "field V03._index (fldOffset=0x8)" P-DEP ; V17 tmp11 [V17 ] ( 4, 11 ) int -> [sp+0x14] do-not-enreg[X] addr-exposed "field V03._version (fldOffset=0xc)" P-DEP
-; V18 tmp12 [V18,T18] ( 3, 3 ) ref -> r1 single-def "field V12._set (fldOffset=0x0)" P-INDEP -;* V19 tmp13 [V19,T21] ( 0, 0 ) ref -> zero-ref single-def "field V12._current (fldOffset=0x4)" P-INDEP -;* V20 tmp14 [V20,T23] ( 0, 0 ) int -> zero-ref single-def "field V12._index (fldOffset=0x8)" P-INDEP -; V21 tmp15 [V21,T19] ( 2, 2 ) int -> r0 single-def "field V12._version (fldOffset=0xc)" P-INDEP
+; V18 tmp12 [V18,T16] ( 3, 3 ) ref -> r1 single-def "field V12._set (fldOffset=0x0)" P-INDEP +;* V19 tmp13 [V19,T18] ( 0, 0 ) ref -> zero-ref single-def "field V12._current (fldOffset=0x4)" P-INDEP +;* V20 tmp14 [V20,T20] ( 0, 0 ) int -> zero-ref single-def "field V12._index (fldOffset=0x8)" P-INDEP +; V21 tmp15 [V21,T17] ( 2, 2 ) int -> r0 single-def "field V12._version (fldOffset=0xc)" P-INDEP
; V22 tmp16 [V22,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V23 tmp17 [V23,T05] ( 2, 16 ) ref -> r1 "argument with side effect"
-; V24 PSPSym [V24,T24] ( 1, 1 ) int -> [sp+0x20] do-not-enreg[V] "PSPSym" -;* V25 cse0 [V25,T25] ( 0, 0 ) int -> zero-ref "CSE - aggressive" -; V26 cse1 [V26,T13] ( 5, 4.20) int -> r5 multi-def "CSE - aggressive" -;* V27 rat0 [V27,T14] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V28 rat1 [V28,T17] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V24 PSPSym [V24,T21] ( 1, 1 ) int -> [sp+0x20] do-not-enreg[V] "PSPSym" +;* V25 cse0 [V25,T22] ( 0, 0 ) int -> zero-ref "CSE - aggressive" +; V26 cse1 [V26,T12] ( 5, 4.20) int -> r5 multi-def "CSE - aggressive" +;* V27 rat0 [V27,T13] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V28 rat1 [V28,T15] ( 0, 0 ) int -> zero-ref "runtime lookup"
;* V29 rat2 [V29,T09] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V30 rat3 [V30,T15] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V31 rat4 [V31,T20] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V32 rat5 [V32,T10] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V33 rat6 [V33,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V34 rat7 [V34,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V35 rat8 [V35,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V36 rat9 [V36,T11] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V37 rat10 [V37,T16] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V38 rat11 [V38,T12] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V30 rat3 [V30,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V31 rat4 [V31,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V32 rat5 [V32,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V33 rat6 [V33,T10] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V34 rat7 [V34,T14] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V35 rat8 [V35,T11] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 36 @@ -106,14 +103,8 @@ G_M28904_IG08: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r0, [sp+0x14] // [V17 tmp11] ;; size=4 bbWeight=1 PerfScore 2.00 G_M28904_IG09: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r0, [r4] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x0C] - cmp r0, 0 - bne SHORT G_M28904_IG11
b SHORT G_M28904_IG11
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M28904_IG10: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r4] ldr r6, [sp+0x0C] // [V15 tmp9] @@ -255,7 +246,7 @@ G_M28904_IG28: ; bbWeight=1, funclet epilog, nogc, extend pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 306, prolog size 36, PerfScore 272.20, instruction count 122, allocated bytes for code 306 (MethodHash=9d278f17) for method Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (FullOpts)
+; Total bytes of code 294, prolog size 36, PerfScore 266.20, instruction count 116, allocated bytes for code 294 (MethodHash=9d278f17) for method Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -267,7 +258,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 123 (0x0007b) Actual length = 246 (0x0000f6)
+ Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-2.83%) : 463304.dasm - ILCompiler.LazyGenericsSupport+Graph1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph1+Vertex[System.__Canon]):this (FullOpts)

@@ -8,75 +8,71 @@ ; 4 inlinees with PGO data; 2 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T05] ( 14,1267 ) ref -> r5 this class-hnd single-def <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]> -; V01 arg1 [V01,T06] ( 18,1118 ) ref -> r6 class-hnd <ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]>
+; V00 this [V00,T08] ( 13,1139 ) ref -> r6 this class-hnd single-def <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]> +; V01 arg1 [V01,T05] ( 18,1118 ) ref -> r5 class-hnd <ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]>
; V02 loc0 [V02,T04] ( 8,1328 ) ref -> r9 class-hnd <<unknown class>> ; V03 loc1 [V03 ] ( 3, 24 ) struct ( 8) [sp+0x14] do-not-enreg[XS] must-init addr-exposed <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]> ; V04 loc2 [V04 ] ( 4,1296 ) struct ( 8) [sp+0x0C] do-not-enreg[XS] must-init addr-exposed <ILCompiler.LazyGenericsSupport+Graph`1+Edge[System.__Canon]> ;* V05 loc3 [V05 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]>
-; V06 loc4 [V06,T07] ( 9,1216 ) ref -> r9 class-hnd exact <System.Collections.Generic.List`1[System.__Canon]>
+; V06 loc4 [V06,T06] ( 9,1216 ) ref -> r9 class-hnd exact <System.Collections.Generic.List`1[System.__Canon]>
; V07 loc5 [V07,T09] ( 5, 896 ) ref -> r4 class-hnd <ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]> ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp2 [V10,T32] ( 3, 48 ) int -> r4 "VirtualCall with runtime lookup"
+; V10 tmp2 [V10,T28] ( 3, 48 ) int -> r4 "VirtualCall with runtime lookup"
;* V11 tmp3 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp4 [V12,T00] ( 4,3072 ) int -> r4 "VirtualCall with runtime lookup"
-; V13 tmp5 [V13,T20] ( 3, 192 ) ref -> r9 class-hnd exact "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]>
+; V13 tmp5 [V13,T16] ( 3, 192 ) ref -> r9 class-hnd exact "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]>
;* V14 tmp6 [V14 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V15 tmp7 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V16 tmp8 [V16,T29] ( 4, 48 ) int -> r4 "VirtualCall with runtime lookup" -; V17 tmp9 [V17,T34] ( 3, 43.88) int -> r10 "non-inline candidate call"
+; V16 tmp8 [V16,T25] ( 4, 48 ) int -> r4 "VirtualCall with runtime lookup" +; V17 tmp9 [V17,T30] ( 3, 43.88) int -> r10 "non-inline candidate call"
; V18 tmp10 [V18 ] ( 2, 32 ) struct ( 8) [sp+0x04] do-not-enreg[HS] must-init hidden-struct-arg "location for address-of(RValue)" <ILCompiler.LazyGenericsSupport+Graph`1+Edge[System.__Canon]>
-; V19 tmp11 [V19,T28] ( 7, 64 ) ref -> r4 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[System.__Canon]> -; V20 tmp12 [V20,T42] ( 4, 20 ) int -> r9 "Inline stloc first use temp" -; V21 tmp13 [V21,T43] ( 3, 18 ) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>> -; V22 tmp14 [V22,T44] ( 3, 16 ) int -> r0 "Inline return value spill temp" -; V23 tmp15 [V23,T36] ( 3, 36.12) int -> r0 "Inlining Arg" -; V24 tmp16 [V24,T22] ( 7, 160 ) ref -> r6 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]> -; V25 tmp17 [V25,T30] ( 4, 48 ) int -> r4 "Inline stloc first use temp" -; V26 tmp18 [V26,T35] ( 3, 40 ) ref -> r0 class-hnd exact "Inline stloc first use temp" <<unknown class>>
+; V19 tmp11 [V19,T24] ( 7, 64 ) ref -> r4 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[System.__Canon]> +; V20 tmp12 [V20,T38] ( 4, 20 ) int -> r9 "Inline stloc first use temp" +; V21 tmp13 [V21,T39] ( 3, 18 ) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>> +; V22 tmp14 [V22,T40] ( 3, 16 ) int -> r0 "Inline return value spill temp" +; V23 tmp15 [V23,T32] ( 3, 36.12) int -> r0 "Inlining Arg" +; V24 tmp16 [V24,T18] ( 7, 160 ) ref -> r5 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]> +; V25 tmp17 [V25,T26] ( 4, 48 ) int -> r4 "Inline stloc first use temp" +; V26 tmp18 [V26,T31] ( 3, 40 ) ref -> r0 class-hnd exact "Inline stloc first use temp" <<unknown class>>
;* V27 tmp19 [V27 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]>
-; V28 tmp20 [V28,T18] ( 3, 256 ) int -> r0 "Inline return value spill temp" -; V29 tmp21 [V29,T12] ( 3, 702.09) int -> r3 "Inlining Arg" -; V30 tmp22 [V30,T15] ( 3, 577.91) int -> r0 "Inlining Arg" -; V31 tmp23 [V31,T13] ( 3, 628.79) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>>
+; V28 tmp20 [V28,T15] ( 3, 256 ) int -> r0 "Inline return value spill temp" +; V29 tmp21 [V29,T11] ( 3, 702.09) int -> r3 "Inlining Arg" +; V30 tmp22 [V30,T13] ( 3, 577.91) int -> r0 "Inlining Arg" +; V31 tmp23 [V31,T12] ( 3, 628.79) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>>
; V32 tmp24 [V32,T10] ( 4, 745.57) int -> r1 "Inline stloc first use temp"
-; V33 tmp25 [V33,T17] ( 7, 384 ) ref -> r0 class-hnd "Inlining Arg" <System.Collections.Generic.List`1[System.__Canon]> -; V34 tmp26 [V34,T27] ( 3, 93.20) ref -> r1 class-hnd "Inline stloc first use temp" <<unknown class>> -; V35 tmp27 [V35,T26] ( 4, 122.39) int -> r2 "Inline stloc first use temp"
+; V33 tmp25 [V33,T14] ( 7, 384 ) ref -> r0 class-hnd "Inlining Arg" <System.Collections.Generic.List`1[System.__Canon]> +; V34 tmp26 [V34,T23] ( 3, 93.20) ref -> r1 class-hnd "Inline stloc first use temp" <<unknown class>> +; V35 tmp27 [V35,T22] ( 4, 122.39) int -> r2 "Inline stloc first use temp"
;* V36 tmp28 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]> ; V37 tmp29 [V37 ] ( 2, 16 ) ref -> [sp+0x14] do-not-enreg[X] addr-exposed "field V03.Vertex (fldOffset=0x0)" P-DEP ; V38 tmp30 [V38 ] ( 2, 16 ) ref -> [sp+0x18] do-not-enreg[X] addr-exposed "field V03.EdgeEnumeratorPosition (fldOffset=0x4)" P-DEP ; V39 tmp31 [V39 ] ( 4,1296 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V04.Destination (fldOffset=0x0)" P-DEP ; V40 tmp32 [V40 ] ( 1, 512 ) ubyte -> [sp+0x10] do-not-enreg[X] addr-exposed "field V04.Flagged (fldOffset=0x4)" P-DEP
-; V41 tmp33 [V41,T39] ( 3, 32 ) ref -> r1 "field V05.Vertex (fldOffset=0x0)" P-INDEP -; V42 tmp34 [V42,T40] ( 3, 32 ) ref -> r2 "field V05.EdgeEnumeratorPosition (fldOffset=0x4)" P-INDEP -; V43 tmp35 [V43,T41] ( 2, 24 ) ref -> [sp+0x04] do-not-enreg[H] hidden-struct-arg "field V18.Destination (fldOffset=0x0)" P-DEP -; V44 tmp36 [V44,T45] ( 1, 16 ) ubyte -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V18.Flagged (fldOffset=0x4)" P-DEP
+; V41 tmp33 [V41,T35] ( 3, 32 ) ref -> r1 "field V05.Vertex (fldOffset=0x0)" P-INDEP +; V42 tmp34 [V42,T36] ( 3, 32 ) ref -> r2 "field V05.EdgeEnumeratorPosition (fldOffset=0x4)" P-INDEP +; V43 tmp35 [V43,T37] ( 2, 24 ) ref -> [sp+0x04] do-not-enreg[H] hidden-struct-arg "field V18.Destination (fldOffset=0x0)" P-DEP +; V44 tmp36 [V44,T41] ( 1, 16 ) ubyte -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V18.Flagged (fldOffset=0x4)" P-DEP
;* V45 tmp37 [V45 ] ( 0, 0 ) ref -> zero-ref "field V27.Vertex (fldOffset=0x0)" P-INDEP ;* V46 tmp38 [V46 ] ( 0, 0 ) ref -> zero-ref "field V27.EdgeEnumeratorPosition (fldOffset=0x4)" P-INDEP
-; V47 tmp39 [V47,T31] ( 3, 48 ) byref -> r9 "BlockOp address local" -; V48 cse0 [V48,T47] ( 2, 9 ) int -> r8 hoist "CSE - moderate" -; V49 cse1 [V49,T08] ( 3,1152 ) int -> r0 "CSE - aggressive" -; V50 cse2 [V50,T38] ( 4, 32 ) int -> r0 "CSE - moderate" -; V51 cse3 [V51,T46] ( 4, 12.88) int -> r7 hoist "CSE - moderate" -; V52 rat0 [V52,T49] ( 3, 4.72) int -> r0 "Spilling to split statement for tree" -; V53 rat1 [V53,T51] ( 3, 4 ) int -> r8 "runtime lookup" -; V54 rat2 [V54,T48] ( 3, 5.60) int -> r1 "spilling expr" -; V55 rat3 [V55,T50] ( 3, 4.48) int -> r8 "fgMakeTemp is creating a new local variable" -; V56 rat4 [V56,T33] ( 3, 44.80) int -> r0 "spilling expr" -; V57 rat5 [V57,T37] ( 3, 35.84) int -> r4 "fgMakeTemp is creating a new local variable" -; V58 rat6 [V58,T14] ( 2, 512 ) int -> r0 "Spilling to split statement for tree" -;* V59 rat7 [V59,T19] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V60 rat8 [V60,T11] ( 3, 716.80) int -> r0 "spilling expr" -; V61 rat9 [V61,T16] ( 2, 409.60) int -> r0 "fgMakeTemp is creating a new local variable" -; V62 rat10 [V62,T02] ( 3,2416.64) int -> r0 "Spilling to split statement for tree" -; V63 rat11 [V63,T01] ( 3,2867.20) int -> r1 "spilling expr" -; V64 rat12 [V64,T03] ( 3,2293.76) int -> r4 "fgMakeTemp is creating a new local variable" -; V65 rat13 [V65,T23] ( 3, 151.04) int -> r0 "Spilling to split statement for tree" -; V66 rat14 [V66,T25] ( 3, 128 ) int -> r1 "runtime lookup" -; V67 rat15 [V67,T21] ( 3, 179.20) int -> r1 "spilling expr" -; V68 rat16 [V68,T24] ( 3, 143.36) int -> r1 "fgMakeTemp is creating a new local variable"
+; V47 tmp39 [V47,T27] ( 3, 48 ) byref -> r9 "BlockOp address local" +; V48 cse0 [V48,T43] ( 2, 9 ) int -> r8 hoist "CSE - moderate" +; V49 cse1 [V49,T07] ( 3,1152 ) int -> r0 "CSE - aggressive" +; V50 cse2 [V50,T34] ( 4, 32 ) int -> r0 "CSE - moderate" +; V51 cse3 [V51,T42] ( 4, 12.88) int -> r7 "CSE - moderate" +; V52 rat0 [V52,T45] ( 3, 4.72) int -> r0 "Spilling to split statement for tree" +; V53 rat1 [V53,T47] ( 3, 4 ) int -> r8 "runtime lookup" +; V54 rat2 [V54,T44] ( 3, 5.60) int -> r1 "spilling expr" +; V55 rat3 [V55,T46] ( 3, 4.48) int -> r8 "fgMakeTemp is creating a new local variable" +; V56 rat4 [V56,T29] ( 3, 44.80) int -> r0 "spilling expr" +; V57 rat5 [V57,T33] ( 3, 35.84) int -> r4 "fgMakeTemp is creating a new local variable" +; V58 rat6 [V58,T02] ( 3,2416.64) int -> r0 "Spilling to split statement for tree" +; V59 rat7 [V59,T01] ( 3,2867.20) int -> r1 "spilling expr" +; V60 rat8 [V60,T03] ( 3,2293.76) int -> r4 "fgMakeTemp is creating a new local variable" +; V61 rat9 [V61,T19] ( 3, 151.04) int -> r0 "Spilling to split statement for tree" +; V62 rat10 [V62,T21] ( 3, 128 ) int -> r1 "runtime lookup" +; V63 rat11 [V63,T17] ( 3, 179.20) int -> r1 "spilling expr" +; V64 rat12 [V64,T20] ( 3, 143.36) int -> r1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 36 @@ -91,13 +87,13 @@ G_M1799_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stm r4!, {r2,r3} stm r4!, {r2,r3} str r0, [r11-0x24]
- mov r5, r0 - ; gcrRegs +[r5] - mov r6, r1
+ mov r6, r0
; gcrRegs +[r6]
+ mov r5, r1 + ; gcrRegs +[r5]
;; size=32 bbWeight=1 PerfScore 12.00 G_M1799_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
- ldr r7, [r5]
+ ldr r7, [r6]
mov r0, r7 ldr r1, [r0+0x24] ldr r1, [r1] @@ -123,12 +119,12 @@ G_M1799_IG05: ; bbWeight=0.36, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, mov r8, r0 ;; size=20 bbWeight=0.36 PerfScore 2.16 G_M1799_IG06: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
- ldr r0, [r5+0x14] - str r0, [r6+0x0C] - str r0, [r6+0x10]
+ ldr r0, [r6+0x14] + str r0, [r5+0x0C] + str r0, [r5+0x10]
adds r0, r0, 1
- str r0, [r5+0x14] - ldr r4, [r5+0x04]
+ str r0, [r6+0x14] + ldr r4, [r6+0x04]
; gcrRegs +[r4] ldr r9, [r4+0x08] ldr r0, [r4+0x04] @@ -139,7 +135,7 @@ G_M1799_IG06: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, by ;; size=24 bbWeight=8 PerfScore 88.00 G_M1799_IG07: ; bbWeight=2, gcrefRegs=0071 {r0 r4 r5 r6}, byrefRegs=0000 {}, byref, isz mov r1, r9
- mov r2, r6
+ mov r2, r5
; gcrRegs +[r2] movw r3, 0xd1ff movt r3, 0xd1ff @@ -156,7 +152,7 @@ G_M1799_IG07: ; bbWeight=2, gcrefRegs=0071 {r0 r4 r5 r6}, byrefRegs=0000 G_M1799_IG08: ; bbWeight=2, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref mov r0, r4 ; gcrRegs +[r0]
- mov r1, r6
+ mov r1, r5
; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff @@ -167,9 +163,9 @@ G_M1799_IG08: ; bbWeight=2, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, ;; size=16 bbWeight=2 PerfScore 12.00 G_M1799_IG09: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz movs r0, 1
- strb r0, [r6+0x16]
+ strb r0, [r5+0x16]
mov r4, r8
- ldr r0, [r6+0x08]
+ ldr r0, [r5+0x08]
; gcrRegs +[r0] ldr r3, [r4] blx r3 @@ -179,9 +175,9 @@ G_M1799_IG09: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, by cmp r9, 0 bne SHORT G_M1799_IG15 ;; size=20 bbWeight=8 PerfScore 72.00
-G_M1799_IG10: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r6 r9] - ldr r0, [r5+0x10]
+G_M1799_IG10: ; bbWeight=8, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5 r9] + ldr r0, [r6+0x10]
; gcrRegs +[r0] add r1, sp, 20 movw r3, 0xd1ff @@ -191,8 +187,8 @@ G_M1799_IG10: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref blx r3 // System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]:Pop():ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]:this ; gcrRegs -[r0] ; gcr arg pop 0
- ldr r6, [sp+0x14] - ; gcrRegs +[r6]
+ ldr r5, [sp+0x14] + ; gcrRegs +[r5]
ldr r9, [sp+0x18] ; gcrRegs +[r9] ldr r0, [r7+0x24] @@ -207,7 +203,7 @@ G_M1799_IG11: ; bbWeight=6.40, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 beq SHORT G_M1799_IG20 ;; size=6 bbWeight=6.40 PerfScore 19.20 G_M1799_IG12: ; bbWeight=8, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz
- ldr r10, [r6+0x10]
+ ldr r10, [r5+0x10]
add r1, sp, 4 mov r0, r9 ; gcrRegs +[r0] @@ -226,7 +222,7 @@ G_M1799_IG13: ; bbWeight=5.94, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 mov r0, r10 ;; size=2 bbWeight=5.94 PerfScore 5.94 G_M1799_IG14: ; bbWeight=8, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref
- str r0, [r6+0x10]
+ str r0, [r5+0x10]
;; size=2 bbWeight=8 PerfScore 8.00 G_M1799_IG15: ; bbWeight=512, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz mov r0, r9 @@ -238,24 +234,24 @@ G_M1799_IG15: ; bbWeight=512, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 { ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M1799_IG31
+ beq SHORT G_M1799_IG28
;; size=18 bbWeight=512 PerfScore 3584.00
-G_M1799_IG16: ; bbWeight=128, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz - ldr r0, [r5] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r1, [r0+0x04] - cmp r1, 24
+G_M1799_IG16: ; bbWeight=512, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz + ldr r0, [r6] + ldr r1, [r0+0x24] + ldr r1, [r1] + ldr r3, [r1+0x04] + cmp r3, 24
ble SHORT G_M1799_IG21
- ;; size=12 bbWeight=128 PerfScore 768.00 -G_M1799_IG17: ; bbWeight=102.40, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz
...

-12 (-1.72%) : 272471.dasm - ILCompiler.LazyGenericsSupport+Graph1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph1+Vertex[System.__Canon]):this (Tier0-FullOpts)

@@ -8,75 +8,71 @@ ; 4 inlinees with PGO data; 2 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T05] ( 14,1267 ) ref -> r5 this class-hnd single-def <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]> -; V01 arg1 [V01,T06] ( 18,1118 ) ref -> r6 class-hnd <ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]>
+; V00 this [V00,T08] ( 13,1139 ) ref -> r6 this class-hnd single-def <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]> +; V01 arg1 [V01,T05] ( 18,1118 ) ref -> r5 class-hnd <ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]>
; V02 loc0 [V02,T04] ( 8,1328 ) ref -> r9 class-hnd <<unknown class>> ; V03 loc1 [V03 ] ( 3, 24 ) struct ( 8) [sp+0x14] do-not-enreg[XS] must-init addr-exposed <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]> ; V04 loc2 [V04 ] ( 4,1296 ) struct ( 8) [sp+0x0C] do-not-enreg[XS] must-init addr-exposed <ILCompiler.LazyGenericsSupport+Graph`1+Edge[System.__Canon]> ;* V05 loc3 [V05 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]>
-; V06 loc4 [V06,T07] ( 9,1216 ) ref -> r9 class-hnd exact <System.Collections.Generic.List`1[System.__Canon]>
+; V06 loc4 [V06,T06] ( 9,1216 ) ref -> r9 class-hnd exact <System.Collections.Generic.List`1[System.__Canon]>
; V07 loc5 [V07,T09] ( 5, 896 ) ref -> r4 class-hnd <ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]> ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp2 [V10,T32] ( 3, 48 ) int -> r4 "VirtualCall with runtime lookup"
+; V10 tmp2 [V10,T28] ( 3, 48 ) int -> r4 "VirtualCall with runtime lookup"
;* V11 tmp3 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp4 [V12,T00] ( 4,3072 ) int -> r4 "VirtualCall with runtime lookup"
-; V13 tmp5 [V13,T20] ( 3, 192 ) ref -> r9 class-hnd exact "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]>
+; V13 tmp5 [V13,T16] ( 3, 192 ) ref -> r9 class-hnd exact "NewObj constructor temp" <System.Collections.Generic.List`1[System.__Canon]>
;* V14 tmp6 [V14 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V15 tmp7 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V16 tmp8 [V16,T29] ( 4, 48 ) int -> r4 "VirtualCall with runtime lookup" -; V17 tmp9 [V17,T37] ( 3, 32.18) int -> r10 "non-inline candidate call"
+; V16 tmp8 [V16,T25] ( 4, 48 ) int -> r4 "VirtualCall with runtime lookup" +; V17 tmp9 [V17,T33] ( 3, 32.18) int -> r10 "non-inline candidate call"
; V18 tmp10 [V18 ] ( 2, 32 ) struct ( 8) [sp+0x04] do-not-enreg[HS] must-init hidden-struct-arg "location for address-of(RValue)" <ILCompiler.LazyGenericsSupport+Graph`1+Edge[System.__Canon]>
-; V19 tmp11 [V19,T28] ( 7, 64 ) ref -> r4 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[System.__Canon]> -; V20 tmp12 [V20,T42] ( 4, 20 ) int -> r9 "Inline stloc first use temp" -; V21 tmp13 [V21,T43] ( 3, 18 ) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>> -; V22 tmp14 [V22,T44] ( 3, 16 ) int -> r0 "Inline return value spill temp" -; V23 tmp15 [V23,T33] ( 3, 47.82) int -> r0 "Inlining Arg" -; V24 tmp16 [V24,T22] ( 7, 160 ) ref -> r6 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]> -; V25 tmp17 [V25,T30] ( 4, 48 ) int -> r4 "Inline stloc first use temp" -; V26 tmp18 [V26,T35] ( 3, 40 ) ref -> r0 class-hnd exact "Inline stloc first use temp" <<unknown class>>
+; V19 tmp11 [V19,T24] ( 7, 64 ) ref -> r4 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[System.__Canon]> +; V20 tmp12 [V20,T38] ( 4, 20 ) int -> r9 "Inline stloc first use temp" +; V21 tmp13 [V21,T39] ( 3, 18 ) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>> +; V22 tmp14 [V22,T40] ( 3, 16 ) int -> r0 "Inline return value spill temp" +; V23 tmp15 [V23,T29] ( 3, 47.82) int -> r0 "Inlining Arg" +; V24 tmp16 [V24,T18] ( 7, 160 ) ref -> r5 class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]> +; V25 tmp17 [V25,T26] ( 4, 48 ) int -> r4 "Inline stloc first use temp" +; V26 tmp18 [V26,T31] ( 3, 40 ) ref -> r0 class-hnd exact "Inline stloc first use temp" <<unknown class>>
;* V27 tmp19 [V27 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]>
-; V28 tmp20 [V28,T18] ( 3, 256 ) int -> r0 "Inline return value spill temp" -; V29 tmp21 [V29,T16] ( 3, 514.88) int -> r3 "Inlining Arg"
+; V28 tmp20 [V28,T15] ( 3, 256 ) int -> r0 "Inline return value spill temp" +; V29 tmp21 [V29,T13] ( 3, 514.88) int -> r3 "Inlining Arg"
; V30 tmp22 [V30,T10] ( 3, 765.12) int -> r0 "Inlining Arg"
-; V31 tmp23 [V31,T13] ( 3, 628.79) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>>
+; V31 tmp23 [V31,T12] ( 3, 628.79) ref -> r0 class-hnd "Inline stloc first use temp" <<unknown class>>
; V32 tmp24 [V32,T11] ( 4, 745.57) int -> r1 "Inline stloc first use temp"
-; V33 tmp25 [V33,T17] ( 7, 384 ) ref -> r0 class-hnd "Inlining Arg" <System.Collections.Generic.List`1[System.__Canon]> -; V34 tmp26 [V34,T27] ( 3, 93.20) ref -> r1 class-hnd "Inline stloc first use temp" <<unknown class>> -; V35 tmp27 [V35,T26] ( 4, 122.39) int -> r2 "Inline stloc first use temp"
+; V33 tmp25 [V33,T14] ( 7, 384 ) ref -> r0 class-hnd "Inlining Arg" <System.Collections.Generic.List`1[System.__Canon]> +; V34 tmp26 [V34,T23] ( 3, 93.20) ref -> r1 class-hnd "Inline stloc first use temp" <<unknown class>> +; V35 tmp27 [V35,T22] ( 4, 122.39) int -> r2 "Inline stloc first use temp"
;* V36 tmp28 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]> ; V37 tmp29 [V37 ] ( 2, 16 ) ref -> [sp+0x14] do-not-enreg[X] addr-exposed "field V03.Vertex (fldOffset=0x0)" P-DEP ; V38 tmp30 [V38 ] ( 2, 16 ) ref -> [sp+0x18] do-not-enreg[X] addr-exposed "field V03.EdgeEnumeratorPosition (fldOffset=0x4)" P-DEP ; V39 tmp31 [V39 ] ( 4,1296 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V04.Destination (fldOffset=0x0)" P-DEP ; V40 tmp32 [V40 ] ( 1, 512 ) ubyte -> [sp+0x10] do-not-enreg[X] addr-exposed "field V04.Flagged (fldOffset=0x4)" P-DEP
-; V41 tmp33 [V41,T39] ( 3, 32 ) ref -> r1 "field V05.Vertex (fldOffset=0x0)" P-INDEP -; V42 tmp34 [V42,T40] ( 3, 32 ) ref -> r2 "field V05.EdgeEnumeratorPosition (fldOffset=0x4)" P-INDEP -; V43 tmp35 [V43,T41] ( 2, 24 ) ref -> [sp+0x04] do-not-enreg[H] hidden-struct-arg "field V18.Destination (fldOffset=0x0)" P-DEP -; V44 tmp36 [V44,T45] ( 1, 16 ) ubyte -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V18.Flagged (fldOffset=0x4)" P-DEP
+; V41 tmp33 [V41,T35] ( 3, 32 ) ref -> r1 "field V05.Vertex (fldOffset=0x0)" P-INDEP +; V42 tmp34 [V42,T36] ( 3, 32 ) ref -> r2 "field V05.EdgeEnumeratorPosition (fldOffset=0x4)" P-INDEP +; V43 tmp35 [V43,T37] ( 2, 24 ) ref -> [sp+0x04] do-not-enreg[H] hidden-struct-arg "field V18.Destination (fldOffset=0x0)" P-DEP +; V44 tmp36 [V44,T41] ( 1, 16 ) ubyte -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V18.Flagged (fldOffset=0x4)" P-DEP
;* V45 tmp37 [V45 ] ( 0, 0 ) ref -> zero-ref "field V27.Vertex (fldOffset=0x0)" P-INDEP ;* V46 tmp38 [V46 ] ( 0, 0 ) ref -> zero-ref "field V27.EdgeEnumeratorPosition (fldOffset=0x4)" P-INDEP
-; V47 tmp39 [V47,T31] ( 3, 48 ) byref -> r9 "BlockOp address local" -; V48 cse0 [V48,T47] ( 2, 9 ) int -> r8 hoist "CSE - moderate" -; V49 cse1 [V49,T08] ( 3,1152 ) int -> r0 "CSE - aggressive" -; V50 cse2 [V50,T38] ( 4, 32 ) int -> r0 "CSE - moderate" -; V51 cse3 [V51,T46] ( 4, 12.88) int -> r7 hoist "CSE - moderate" -; V52 rat0 [V52,T49] ( 3, 4.72) int -> r0 "Spilling to split statement for tree" -; V53 rat1 [V53,T51] ( 3, 4 ) int -> r8 "runtime lookup" -; V54 rat2 [V54,T48] ( 3, 5.60) int -> r1 "spilling expr" -; V55 rat3 [V55,T50] ( 3, 4.48) int -> r8 "fgMakeTemp is creating a new local variable" -; V56 rat4 [V56,T34] ( 3, 44.80) int -> r0 "spilling expr" -; V57 rat5 [V57,T36] ( 3, 35.84) int -> r4 "fgMakeTemp is creating a new local variable" -; V58 rat6 [V58,T14] ( 2, 512 ) int -> r0 "Spilling to split statement for tree" -;* V59 rat7 [V59,T19] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V60 rat8 [V60,T12] ( 2, 512 ) int -> r0 "spilling expr" -;* V61 rat9 [V61,T15] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V62 rat10 [V62,T02] ( 3,2416.64) int -> r0 "Spilling to split statement for tree" -; V63 rat11 [V63,T01] ( 3,2867.20) int -> r1 "spilling expr" -; V64 rat12 [V64,T03] ( 3,2293.76) int -> r4 "fgMakeTemp is creating a new local variable" -; V65 rat13 [V65,T23] ( 3, 151.04) int -> r0 "Spilling to split statement for tree" -; V66 rat14 [V66,T25] ( 3, 128 ) int -> r1 "runtime lookup" -; V67 rat15 [V67,T21] ( 3, 179.20) int -> r1 "spilling expr" -; V68 rat16 [V68,T24] ( 3, 143.36) int -> r1 "fgMakeTemp is creating a new local variable"
+; V47 tmp39 [V47,T27] ( 3, 48 ) byref -> r9 "BlockOp address local" +; V48 cse0 [V48,T43] ( 2, 9 ) int -> r8 hoist "CSE - moderate" +; V49 cse1 [V49,T07] ( 3,1152 ) int -> r0 "CSE - aggressive" +; V50 cse2 [V50,T34] ( 4, 32 ) int -> r0 "CSE - moderate" +; V51 cse3 [V51,T42] ( 4, 12.88) int -> r7 "CSE - moderate" +; V52 rat0 [V52,T45] ( 3, 4.72) int -> r0 "Spilling to split statement for tree" +; V53 rat1 [V53,T47] ( 3, 4 ) int -> r8 "runtime lookup" +; V54 rat2 [V54,T44] ( 3, 5.60) int -> r1 "spilling expr" +; V55 rat3 [V55,T46] ( 3, 4.48) int -> r8 "fgMakeTemp is creating a new local variable" +; V56 rat4 [V56,T30] ( 3, 44.80) int -> r0 "spilling expr" +; V57 rat5 [V57,T32] ( 3, 35.84) int -> r4 "fgMakeTemp is creating a new local variable" +; V58 rat6 [V58,T02] ( 3,2416.64) int -> r0 "Spilling to split statement for tree" +; V59 rat7 [V59,T01] ( 3,2867.20) int -> r1 "spilling expr" +; V60 rat8 [V60,T03] ( 3,2293.76) int -> r4 "fgMakeTemp is creating a new local variable" +; V61 rat9 [V61,T19] ( 3, 151.04) int -> r0 "Spilling to split statement for tree" +; V62 rat10 [V62,T21] ( 3, 128 ) int -> r1 "runtime lookup" +; V63 rat11 [V63,T17] ( 3, 179.20) int -> r1 "spilling expr" +; V64 rat12 [V64,T20] ( 3, 143.36) int -> r1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 36 @@ -91,13 +87,13 @@ G_M1799_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stm r4!, {r2,r3} stm r4!, {r2,r3} str r0, [r11-0x24]
- mov r5, r0 - ; gcrRegs +[r5] - mov r6, r1
+ mov r6, r0
; gcrRegs +[r6]
+ mov r5, r1 + ; gcrRegs +[r5]
;; size=32 bbWeight=1 PerfScore 12.00 G_M1799_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
- ldr r7, [r5]
+ ldr r7, [r6]
mov r0, r7 ldr r1, [r0+0x24] ldr r1, [r1] @@ -123,12 +119,12 @@ G_M1799_IG05: ; bbWeight=0.36, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, mov r8, r0 ;; size=20 bbWeight=0.36 PerfScore 2.16 G_M1799_IG06: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
- ldr r0, [r5+0x14] - str r0, [r6+0x0C] - str r0, [r6+0x10]
+ ldr r0, [r6+0x14] + str r0, [r5+0x0C] + str r0, [r5+0x10]
adds r0, r0, 1
- str r0, [r5+0x14] - ldr r4, [r5+0x04]
+ str r0, [r6+0x14] + ldr r4, [r6+0x04]
; gcrRegs +[r4] ldr r9, [r4+0x08] ldr r0, [r4+0x04] @@ -139,7 +135,7 @@ G_M1799_IG06: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, by ;; size=24 bbWeight=8 PerfScore 88.00 G_M1799_IG07: ; bbWeight=2, gcrefRegs=0071 {r0 r4 r5 r6}, byrefRegs=0000 {}, byref, isz mov r1, r9
- mov r2, r6
+ mov r2, r5
; gcrRegs +[r2] movw r3, 0xd1ff movt r3, 0xd1ff @@ -156,7 +152,7 @@ G_M1799_IG07: ; bbWeight=2, gcrefRegs=0071 {r0 r4 r5 r6}, byrefRegs=0000 G_M1799_IG08: ; bbWeight=2, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref mov r0, r4 ; gcrRegs +[r0]
- mov r1, r6
+ mov r1, r5
; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff @@ -167,9 +163,9 @@ G_M1799_IG08: ; bbWeight=2, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, ;; size=16 bbWeight=2 PerfScore 12.00 G_M1799_IG09: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz movs r0, 1
- strb r0, [r6+0x16]
+ strb r0, [r5+0x16]
mov r4, r8
- ldr r0, [r6+0x08]
+ ldr r0, [r5+0x08]
; gcrRegs +[r0] ldr r3, [r4] blx r3 @@ -179,9 +175,9 @@ G_M1799_IG09: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, by cmp r9, 0 bne SHORT G_M1799_IG17 ;; size=20 bbWeight=8 PerfScore 72.00
-G_M1799_IG10: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r6 r9] - ldr r0, [r5+0x10]
+G_M1799_IG10: ; bbWeight=8, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5 r9] + ldr r0, [r6+0x10]
; gcrRegs +[r0] add r1, sp, 20 movw r3, 0xd1ff @@ -191,8 +187,8 @@ G_M1799_IG10: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref blx r3 // System.Collections.Generic.Stack`1[ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]]:Pop():ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass+StrongConnectStackElement[System.__Canon]:this ; gcrRegs -[r0] ; gcr arg pop 0
- ldr r6, [sp+0x14] - ; gcrRegs +[r6]
+ ldr r5, [sp+0x14] + ; gcrRegs +[r5]
ldr r9, [sp+0x18] ; gcrRegs +[r9] ldr r0, [r7+0x24] @@ -207,7 +203,7 @@ G_M1799_IG11: ; bbWeight=6.40, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 beq SHORT G_M1799_IG14 ;; size=6 bbWeight=6.40 PerfScore 19.20 G_M1799_IG12: ; bbWeight=8, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz
- ldr r10, [r6+0x10]
+ ldr r10, [r5+0x10]
add r1, sp, 4 mov r0, r9 ; gcrRegs +[r0] @@ -240,7 +236,7 @@ G_M1799_IG15: ; bbWeight=0.09, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 mov r0, r10 ;; size=2 bbWeight=0.09 PerfScore 0.09 G_M1799_IG16: ; bbWeight=8, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref
- str r0, [r6+0x10]
+ str r0, [r5+0x10]
;; size=2 bbWeight=8 PerfScore 8.00 G_M1799_IG17: ; bbWeight=512, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz mov r0, r9 @@ -252,33 +248,25 @@ G_M1799_IG17: ; bbWeight=512, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 { ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M1799_IG30
+ beq SHORT G_M1799_IG29
;; size=18 bbWeight=512 PerfScore 3584.00
-G_M1799_IG18: ; bbWeight=128, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz - ldr r0, [r5] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x04] - cmp r0, 24 - ble SHORT G_M1799_IG19 - ;; size=12 bbWeight=128 PerfScore 768.00 -G_M1799_IG19: ; bbWeight=512, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz - ldr r0, [r5]
+G_M1799_IG18: ; bbWeight=512, gcrefRegs=0260 {r5 r6 r9}, byrefRegs=0000 {}, byref, isz + ldr r0, [r6]
ldr r1, [r0+0x24] ldr r1, [r1] ldr r3, [r1+0x04] cmp r3, 24 ...

+0 (0.00%) : 140255.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

+0 (0.00%) : 378247.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

libraries.crossgen2.linux.arm.checked.mch

-10 (-3.14%) : 59508.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (FullOpts)

@@ -17,7 +17,7 @@ ; V06 tmp1 [V06,T00] ( 6, 20 ) byref -> r3 "impAppendStmt" ; V07 tmp2 [V07,T05] ( 6, 8 ) byref -> [sp+0x04] ; V08 tmp3 [V08,T02] ( 6, 12 ) int -> r4 "VirtualCall with runtime lookup"
-; V09 tmp4 [V09,T11] ( 4, 4 ) int -> registers
+; V09 tmp4 [V09,T11] ( 2, 3.96) int -> r0
; V10 tmp5 [V10,T06] ( 4, 8 ) ref -> r0 "argument with side effect" ; V11 cse0 [V11,T08] ( 5, 7 ) int -> r9 "CSE - aggressive" ; V12 cse1 [V12,T10] ( 4, 5.04) byref -> r10 hoist multi-def "CSE - aggressive" @@ -42,7 +42,7 @@ G_M22994_IG02: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b mov r8, 0 ldr r9, [r7+0x04] cmp r9, 0
- ble SHORT G_M22994_IG18
+ ble SHORT G_M22994_IG16
cmp r5, 0 beq SHORT G_M22994_IG11 ldr r0, [r5+0x04] @@ -94,7 +94,7 @@ G_M22994_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs -[r0 r5] ; byrRegs -[r3-r4 r10] ; GC ptr vars -{V07}
- b SHORT G_M22994_IG20
+ b SHORT G_M22994_IG18
;; size=2 bbWeight=0.50 PerfScore 0.50 G_M22994_IG06: ; bbWeight=1.98, gcVars=00000020 {V07}, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, gcvars, byref, isz ; gcrRegs +[r5] @@ -125,15 +125,15 @@ G_M22994_IG06: ; bbWeight=1.98, gcVars=00000020 {V07}, gcrefRegs=0020 {r5 ; gcr arg pop 0 cmp r0, 0 beq SHORT G_M22994_IG07
- movs r7, 0
+ movs r0, 0
b SHORT G_M22994_IG08 ;; size=40 bbWeight=1.98 PerfScore 33.66 G_M22994_IG07: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref
- movs r7, 1
+ movs r0, 1
;; size=2 bbWeight=1.98 PerfScore 1.98 G_M22994_IG08: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref, isz
- cmp r7, 0 - bne SHORT G_M22994_IG20
+ cmp r0, 0 + bne SHORT G_M22994_IG18
;; size=4 bbWeight=1.98 PerfScore 3.96 G_M22994_IG09: ; bbWeight=3.96, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref, isz add r8, r8, 1 @@ -143,7 +143,7 @@ G_M22994_IG09: ; bbWeight=3.96, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10} G_M22994_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r5] ; byrRegs -[r10]
- b SHORT G_M22994_IG18
+ b SHORT G_M22994_IG16
;; size=2 bbWeight=1 PerfScore 1.00 G_M22994_IG11: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[r5 r7] @@ -180,7 +180,7 @@ G_M22994_IG12: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0008 {r ldr r0, [r5+0x04] ; gcrRegs -[r0] cmp r8, r0
- bhs SHORT G_M22994_IG22
+ bhs SHORT G_M22994_IG20
add r0, r5, 8 ; byrRegs +[r0] lsl r3, r8, 2 @@ -189,13 +189,13 @@ G_M22994_IG12: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0008 {r ; gcrRegs +[r0] ; byrRegs -[r0] cmp r0, 0
- beq SHORT G_M22994_IG17
+ beq SHORT G_M22994_IG15
;; size=34 bbWeight=0.02 PerfScore 0.30 G_M22994_IG13: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0 r5 r7] ; byrRegs -[r4] ; GC ptr vars -{V07}
- b SHORT G_M22994_IG20
+ b SHORT G_M22994_IG18
;; size=2 bbWeight=0.01 PerfScore 0.01 G_M22994_IG14: ; bbWeight=0.02, gcVars=00000020 {V07}, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[r5 r7] @@ -214,7 +214,7 @@ G_M22994_IG14: ; bbWeight=0.02, gcVars=00000020 {V07}, gcrefRegs=00A0 {r5 ; gcrRegs +[r0] ldr r1, [r5+0x04] cmp r8, r1
- bhs SHORT G_M22994_IG22
+ bhs SHORT G_M22994_IG20
add r1, r5, 8 ; byrRegs +[r1] lsl r3, r8, 2 @@ -228,38 +228,29 @@ G_M22994_IG14: ; bbWeight=0.02, gcVars=00000020 {V07}, gcrefRegs=00A0 {r5 ; byrRegs -[r10] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M22994_IG15 - movs r0, 0 - b SHORT G_M22994_IG16 - ;; size=54 bbWeight=0.02 PerfScore 0.42 -G_M22994_IG15: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref - movs r0, 1 - ;; size=2 bbWeight=0.02 PerfScore 0.02 -G_M22994_IG16: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz - cmp r0, 0 - bne SHORT G_M22994_IG20 - ;; size=4 bbWeight=0.02 PerfScore 0.04 -G_M22994_IG17: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M22994_IG18 + ;; size=50 bbWeight=0.02 PerfScore 0.38 +G_M22994_IG15: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
add r8, r8, 1 cmp r9, r8 bgt SHORT G_M22994_IG11 ;; size=8 bbWeight=0.04 PerfScore 0.12
-G_M22994_IG18: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M22994_IG16: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r5 r7] movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50
+G_M22994_IG17: ; bbWeight=0.50, epilog, nogc, extend + add sp, 20 + pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} + ;; size=6 bbWeight=0.50 PerfScore 1.00 +G_M22994_IG18: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + movs r0, 0 + ;; size=2 bbWeight=0.50 PerfScore 0.50
G_M22994_IG19: ; bbWeight=0.50, epilog, nogc, extend add sp, 20 pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=0.50 PerfScore 1.00
-G_M22994_IG20: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - movs r0, 0 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M22994_IG21: ; bbWeight=0.50, epilog, nogc, extend - add sp, 20 - pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00 -G_M22994_IG22: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M22994_IG20: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r3, LOW RELOC 0xD1FFAB1E movt r3, HIGH RELOC 0xD1FFAB1E add r3, pc @@ -269,7 +260,7 @@ G_M22994_IG22: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 318, prolog size 24, PerfScore 133.71, instruction count 129, allocated bytes for code 318 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
+; Total bytes of code 308, prolog size 24, PerfScore 133.61, instruction count 124, allocated bytes for code 308 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -281,7 +272,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 159 (0x0009f) Actual length = 318 (0x00013e)
+ Function Length : 154 (0x0009a) Actual length = 308 (0x000134)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-10 (-0.71%) : 95402.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)

@@ -12,30 +12,30 @@ ; V00 arg0 [V00,T18] ( 5, 5 ) ref -> r0 class-hnd single-def <Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax> ; V01 arg1 [V01,T09] ( 6, 11 ) ref -> r5 class-hnd single-def <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol]> ; V02 arg2 [V02,T12] ( 4, 6 ) ref -> r6 class-hnd single-def <System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]>
-; V03 loc0 [V03 ] ( 5, 7 ) struct (16) [sp+0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeSyntax]>
+; V03 loc0 [V03 ] ( 5, 7 ) struct (16) [sp+0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeSyntax]>
; V04 loc1 [V04,T10] ( 7, 10.04) ref -> r8 class-hnd exact single-def <<unknown class>> ; V05 loc2 [V05,T19] ( 5, 7 ) int -> r9 single-def ; V06 loc3 [V06,T02] ( 16, 25.04) int -> r10
-; V07 loc4 [V07,T06] ( 12, 18 ) ref -> [sp+0x18] class-hnd <Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeSyntax>
+; V07 loc4 [V07,T06] ( 12, 18 ) ref -> [sp+0x10] class-hnd <Microsoft.CodeAnalysis.VisualBasic.Syntax.TypeSyntax>
; V08 loc5 [V08,T07] ( 10, 16 ) ref -> r2 class-hnd <Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol> ;* V09 loc6 [V09 ] ( 0, 0 ) ushort -> zero-ref
-; V10 loc7 [V10,T11] ( 8, 8 ) ref -> [sp+0x14] class-hnd <Microsoft.CodeAnalysis.VisualBasic.Syntax.IdentifierNameSyntax> -; V11 loc8 [V11 ] ( 4, 4 ) struct (16) [sp+0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SyntaxToken>
+; V10 loc7 [V10,T11] ( 8, 8 ) ref -> [sp+0x0C] class-hnd <Microsoft.CodeAnalysis.VisualBasic.Syntax.IdentifierNameSyntax> +; V11 loc8 [V11 ] ( 4, 4 ) struct (16) [sp+0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SyntaxToken>
; V12 loc9 [V12,T21] ( 3, 6 ) int -> r6 single-def ; V13 loc10 [V13,T03] ( 7, 21 ) int -> r7 ; V14 loc11 [V14,T01] ( 6, 72 ) ref -> r9 class-hnd <Microsoft.CodeAnalysis.VisualBasic.Symbol> ; V15 loc12 [V15,T00] ( 6, 86 ) int -> r0 ; V16 loc13 [V16,T22] ( 2, 4 ) ref -> r9 class-hnd <<unknown class>>
-; V17 loc14 [V17 ] ( 4, 8 ) struct ( 4) [sp+0x1C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol]>
+; V17 loc14 [V17 ] ( 4, 8 ) struct ( 4) [sp+0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol]>
; V18 loc15 [V18,T23] ( 2, 4 ) ref -> r9 class-hnd <<unknown class>> ;# V19 OutArgs [V19 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V20 tmp1 [V20,T04] ( 10, 20 ) ref -> [sp+0x10] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol> -; V21 tmp2 [V21,T05] ( 10, 20 ) ref -> [sp+0x0C] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol>
+; V20 tmp1 [V20,T04] ( 10, 20 ) ref -> [sp+0x08] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol> +; V21 tmp2 [V21,T05] ( 10, 20 ) ref -> [sp+0x04] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol>
;* V22 tmp3 [V22 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.__Canon]> ;* V23 tmp4 [V23 ] ( 0, 0 ) struct ( 4) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.__Canon]> ; V24 tmp5 [V24,T13] ( 4, 8 ) ref -> r1 class-hnd "Inlining Arg" <System.String> ;* V25 tmp6 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.VisualBasic.Symbols.AliasSymbol>
-; V26 tmp7 [V26 ] ( 4, 8 ) ref -> [sp+0x1C] do-not-enreg[X] addr-exposed "field V17.array (fldOffset=0x0)" P-DEP
+; V26 tmp7 [V26 ] ( 4, 8 ) ref -> [sp+0x14] do-not-enreg[X] addr-exposed "field V17.array (fldOffset=0x0)" P-DEP
; V27 tmp8 [V27,T24] ( 2, 4 ) ref -> r1 "field V22.array (fldOffset=0x0)" P-INDEP ; V28 tmp9 [V28,T25] ( 2, 4 ) ref -> r1 "field V23.array (fldOffset=0x0)" P-INDEP ; V29 tmp10 [V29,T26] ( 2, 4 ) ref -> r0 single-def "argument with side effect" @@ -46,28 +46,26 @@ ; V34 tmp15 [V34,T16] ( 2, 8 ) ref -> r2 "argument with side effect" ; V35 tmp16 [V35,T17] ( 2, 8 ) ref -> r2 "argument with side effect" ; V36 cse0 [V36,T20] ( 5, 7 ) int -> r7 "CSE - moderate"
-; TEMP_02 byref -> [r11-0x58] -; TEMP_01 ref -> [r11-0x5C]
+; TEMP_01 ref -> [r11-0x58]
;
-; Lcl frame size = 68
+; Lcl frame size = 60
G_M1087_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
- sub sp, 68 - add r11, sp, 96 - sub r5, r11, 92
+ sub sp, 60 + add r11, sp, 88 + sub r5, r11, 88
movs r6, 7 movs r3, 0 movs r4, 0 stm r5!, {r3,r4} subs r6, 1 bhi SHORT pc-6 (-3 instructions)
- str r3, [r5]
mov r5, r1 ; gcrRegs +[r5] mov r6, r2 ; gcrRegs +[r6]
- ;; size=32 bbWeight=1 PerfScore 13.00
+ ;; size=30 bbWeight=1 PerfScore 12.00
G_M1087_IG02: ; bbWeight=1, gcrefRegs=0061 {r0 r5 r6}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[r0] ldrsb r2, [r0] @@ -88,7 +86,7 @@ G_M1087_IG02: ; bbWeight=1, gcrefRegs=0061 {r0 r5 r6}, byrefRegs=0000 {}, ldr lr, [r4] blx lr // <unknown method> ; byrRegs -[r2]
- add r1, sp, 48
+ add r1, sp, 40
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -101,7 +99,7 @@ G_M1087_IG02: ; bbWeight=1, gcrefRegs=0061 {r0 r5 r6}, byrefRegs=0000 {}, add r1, pc ldr r7, [r1] mov r1, r7
- add r0, sp, 48
+ add r0, sp, 40
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -116,7 +114,7 @@ G_M1087_IG02: ; bbWeight=1, gcrefRegs=0061 {r0 r5 r6}, byrefRegs=0000 {}, mov r8, r0 ; gcrRegs +[r8] mov r1, r7
- add r0, sp, 48
+ add r0, sp, 40
; gcrRegs -[r0] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -133,7 +131,7 @@ G_M1087_IG02: ; bbWeight=1, gcrefRegs=0061 {r0 r5 r6}, byrefRegs=0000 {}, ;; size=156 bbWeight=1 PerfScore 54.00 G_M1087_IG03: ; bbWeight=3.96, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 {}, byref, isz mov r1, r7
- add r0, sp, 48
+ add r0, sp, 40
mov r2, r10 movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -145,7 +143,7 @@ G_M1087_IG03: ; bbWeight=3.96, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 ; gcrRegs +[r4] ldrsb r0, [r4] ; gcrRegs -[r0]
- str r4, [sp+0x18]
+ str r4, [sp+0x10]
; GC ptr vars +{V07} mov r0, r4 ; gcrRegs +[r0] @@ -168,7 +166,7 @@ G_M1087_IG03: ; bbWeight=3.96, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 bne SHORT G_M1087_IG05 ;; size=70 bbWeight=3.96 PerfScore 106.92 G_M1087_IG04: ; bbWeight=1.98, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 {}, byref, isz
- ldr r0, [sp+0x18] // [V07 loc4]
+ ldr r0, [sp+0x10] // [V07 loc4]
; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -178,8 +176,8 @@ G_M1087_IG04: ; bbWeight=1.98, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 blx r3 // CORINFO_HELP_READYTORUN_CHKCAST mov r4, r0 ; gcrRegs +[r4]
- add r1, sp, 32 // [V11 loc8] - str r4, [sp+0x14] // [V10 loc7]
+ add r1, sp, 24 // [V11 loc8] + str r4, [sp+0x0C] // [V10 loc7]
; GC ptr vars +{V10} mov r0, r4 movw r4, LOW RELOC 0xD1FFAB1E @@ -196,9 +194,9 @@ G_M1087_IG04: ; bbWeight=1.98, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_NEW ; gcrRegs +[r0]
- str r0, [sp+0x0C] // [V21 tmp2]
+ str r0, [sp+0x04] // [V21 tmp2]
; GC ptr vars +{V21}
- add r0, sp, 32 // [V11 loc8]
+ add r0, sp, 24 // [V11 loc8]
; gcrRegs -[r0] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -208,10 +206,10 @@ G_M1087_IG04: ; bbWeight=1.98, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 ; gcrRegs +[r0] mov r1, r0 ; gcrRegs +[r1]
- ldr r2, [sp+0x0C]
+ ldr r2, [sp+0x04]
; gcrRegs +[r2] str r10, [r2+0x1C]
- str r2, [sp+0x0C]
+ str r2, [sp+0x04]
add r0, r2, 20 ; gcrRegs -[r0] ; byrRegs +[r0] @@ -222,14 +220,14 @@ G_M1087_IG04: ; bbWeight=1.98, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1-r2] ; byrRegs -[r0]
- ldr r0, [sp+0x14]
+ ldr r0, [sp+0x0C]
; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4] blx r3 // <unknown method>
- ldr r1, [sp+0x14]
+ ldr r1, [sp+0x0C]
; gcrRegs +[r1] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -239,13 +237,13 @@ G_M1087_IG04: ; bbWeight=1.98, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 ; GC ptr vars -{V10} blx r3 // <unknown method> ; gcrRegs -[r1]
- str r0, [sp+0x04] - ldr r2, [sp+0x0C]
+ str r0, [sp] + ldr r2, [sp+0x04]
; gcrRegs +[r2] add r0, r2, 24 ; gcrRegs -[r0] ; byrRegs +[r0]
- ldr r1, [sp+0x04]
+ ldr r1, [sp]
; gcrRegs +[r1] movw r12, LOW RELOC 0xD1FFAB1E movt r12, HIGH RELOC 0xD1FFAB1E @@ -275,7 +273,7 @@ G_M1087_IG05: ; bbWeight=1.98, gcVars=00000040 {V07}, gcrefRegs=0160 {r5 ldr r1, [r1] ldr r1, [r1] ; gcrRegs +[r1]
- str r2, [sp+0x10]
+ str r2, [sp+0x08]
; GC ptr vars +{V20} add r0, r2, 20 ; gcrRegs -[r0] @@ -288,14 +286,14 @@ G_M1087_IG05: ; bbWeight=1.98, gcVars=00000040 {V07}, gcrefRegs=0160 {r5 blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1-r2] ; byrRegs -[r0]
- ldr r0, [sp+0x18]
+ ldr r0, [sp+0x10]
; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc ldr r3, [r4] blx r3 // <unknown method>
- ldr r1, [sp+0x18]
+ ldr r1, [sp+0x10]
; gcrRegs +[r1] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -305,13 +303,13 @@ G_M1087_IG05: ; bbWeight=1.98, gcVars=00000040 {V07}, gcrefRegs=0160 {r5 ; GC ptr vars -{V07} blx r3 // <unknown method> ; gcrRegs -[r1]
- str r0, [sp+0x04] - ldr r2, [sp+0x10]
+ str r0, [sp] + ldr r2, [sp+0x08]
; gcrRegs +[r2] add r0, r2, 24 ; gcrRegs -[r0] ; byrRegs +[r0]
- ldr r1, [sp+0x04]
+ ldr r1, [sp]
; gcrRegs +[r1] movw r12, LOW RELOC 0xD1FFAB1E movt r12, HIGH RELOC 0xD1FFAB1E @@ -360,7 +358,7 @@ G_M1087_IG07: ; bbWeight=1, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, by G_M1087_IG08: ; bbWeight=0.04, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[r6] mov r1, r7
- add r0, sp, 48
+ add r0, sp, 40
mov r2, r10 movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E ...

-10 (-0.58%) : 165961.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)

@@ -36,8 +36,8 @@ ; V24 tmp5 [V24,T47] ( 2, 0 ) ref -> r5 class-hnd single-def "finalizable newobj spill" <<unknown class>> ;* V25 tmp6 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "non-inline candidate call" <System.Type> ; V26 tmp7 [V26,T27] ( 4, 16 ) int -> r8 "impSpillLclRefs"
-; V27 tmp8 [V27,T37] ( 2, 8 ) ref -> r1 class-hnd "Strict ordering of exceptions for Array store" <System.Reflection.MethodBase> -; V28 tmp9 [V28,T42] ( 2, 0.04) ubyte -> r0 "Inline return value spill temp"
+; V27 tmp8 [V27,T36] ( 2, 8 ) ref -> r1 class-hnd "Strict ordering of exceptions for Array store" <System.Reflection.MethodBase> +;* V28 tmp9 [V28,T42] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V29 tmp10 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Type> ; V30 tmp11 [V30,T32] ( 6, 10 ) ref -> r0 class-hnd "Inline stloc first use temp" <System.Reflection.TypeLoading.RoType> ;* V31 tmp12 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.TypeLoading.RoModule> @@ -46,13 +46,13 @@ ; V34 tmp15 [V34,T28] ( 2, 15.84) ubyte -> r0 "Inline return value spill temp" ; V35 tmp16 [V35,T00] ( 4, 95.04) ref -> [sp+0x24] class-hnd spill-single-def "Inlining Arg" <System.Type> ; V36 tmp17 [V36,T05] ( 3, 63.36) ref -> [sp+0x20] class-hnd spill-single-def "Inlining Arg" <System.Reflection.ParameterInfo>
-;* V37 tmp18 [V37,T35] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V37 tmp18 [V37,T37] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V38 tmp19 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Type> ; V39 tmp20 [V39,T20] ( 3, 23.76) ref -> r0 class-hnd "Inline stloc first use temp" <System.Reflection.TypeLoading.RoType> ;* V40 tmp21 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.TypeLoading.RoModule> ;* V41 tmp22 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.TypeLoading.RoAssembly> ;* V42 tmp23 [V42 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Type>
-; V43 tmp24 [V43,T36] ( 4, 8 ) ref -> r0 "argument with side effect"
+; V43 tmp24 [V43,T35] ( 4, 8 ) ref -> r0 "argument with side effect"
; V44 tmp25 [V44,T11] ( 2, 31.68) ref -> r1 "argument with side effect" ; V45 tmp26 [V45,T12] ( 2, 31.68) ref -> r1 "argument with side effect" ; V46 tmp27 [V46,T13] ( 2, 31.68) ref -> r0 "argument with side effect" @@ -98,7 +98,7 @@ G_M46704_IG02: ; bbWeight=1, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {} ldr r0, [r5+0x04] ; gcrRegs -[r0] cmp r0, 0
- ble G_M46704_IG14
+ ble G_M46704_IG12
ldr r0, [r5+0x04] ldr r4, [r8+0x04] cmp r0, r4 @@ -204,7 +204,7 @@ G_M46704_IG05: ; bbWeight=1.98, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq G_M46704_IG61
+ beq G_M46704_IG59
;; size=28 bbWeight=1.98 PerfScore 21.78 G_M46704_IG06: ; bbWeight=3.96, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz add r9, r9, 1 @@ -215,7 +215,7 @@ G_M46704_IG06: ; bbWeight=3.96, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 G_M46704_IG07: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=01C0 {r6 r7 r8}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs -[r5] ; GC ptr vars -{V54}
- b SHORT G_M46704_IG14
+ b SHORT G_M46704_IG12
;; size=2 bbWeight=1 PerfScore 1.00 G_M46704_IG08: ; bbWeight=0.04, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[r5] @@ -236,7 +236,7 @@ G_M46704_IG08: ; bbWeight=0.04, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 ; gcrRegs +[r1] ldr r4, [r8+0x04] cmp r9, r4
- bhs G_M46704_IG59
+ bhs G_M46704_IG57
add r4, r8, 8 ; byrRegs +[r4] lsl r0, r9, 2 @@ -263,7 +263,7 @@ G_M46704_IG08: ; bbWeight=0.04, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 blx r3 // CORINFO_HELP_READYTORUN_ISINSTANCEOF ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M46704_IG12
+ beq SHORT G_M46704_IG10
;; size=90 bbWeight=0.04 PerfScore 1.24 G_M46704_IG09: ; bbWeight=0.02, gcrefRegs=01E1 {r0 r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz movw r4, LOW RELOC 0xD1FFAB1E @@ -296,20 +296,10 @@ G_M46704_IG09: ; bbWeight=0.02, gcrefRegs=01E1 {r0 r5 r6 r7 r8}, byrefReg ldr r3, [r6+r4] ; gcrRegs +[r3] cmp r0, r3
- beq SHORT G_M46704_IG10 - movs r0, 0 - ; gcrRegs -[r0] - b SHORT G_M46704_IG11 - ;; size=68 bbWeight=0.02 PerfScore 0.52 -G_M46704_IG10: ; bbWeight=0.02, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[r3] - movs r0, 1 - ;; size=2 bbWeight=0.02 PerfScore 0.02 -G_M46704_IG11: ; bbWeight=0.02, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz - cmp r0, 0 - bne SHORT G_M46704_IG13 - ;; size=4 bbWeight=0.02 PerfScore 0.04 -G_M46704_IG12: ; bbWeight=0.02, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M46704_IG11 + ;; size=64 bbWeight=0.02 PerfScore 0.48 +G_M46704_IG10: ; bbWeight=0.02, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r3]
lsl r0, r9, 2 ldr r4, [sp+0x18] // [V54 cse3] ; byrRegs +[r4] @@ -326,23 +316,23 @@ G_M46704_IG12: ; bbWeight=0.02, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq G_M46704_IG61
+ beq G_M46704_IG59
;; size=30 bbWeight=0.02 PerfScore 0.22
-G_M46704_IG13: ; bbWeight=0.04, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
+G_M46704_IG11: ; bbWeight=0.04, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
add r9, r9, 1 ldr r0, [r5+0x04] cmp r0, r9 bgt SHORT G_M46704_IG08 ;; size=10 bbWeight=0.04 PerfScore 0.16
-G_M46704_IG14: ; bbWeight=1, gcrefRegs=01C0 {r6 r7 r8}, byrefRegs=0000 {}, byref, isz
+G_M46704_IG12: ; bbWeight=1, gcrefRegs=01C0 {r6 r7 r8}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r5] mov r5, r8 ; gcrRegs +[r5] cmp r7, 0
- beq G_M46704_IG60
+ beq G_M46704_IG58
ldr r0, [r7+0x04] cmp r0, 0
- beq G_M46704_IG60
+ beq G_M46704_IG58
mov r0, r7 ; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E @@ -360,9 +350,9 @@ G_M46704_IG14: ; bbWeight=1, gcrefRegs=01C0 {r6 r7 r8}, byrefRegs=0000 {} ldr r4, [r7+0x04] str r4, [sp+0x3C] // [V56 cse5] cmp r4, 0
- ble SHORT G_M46704_IG20
+ ble SHORT G_M46704_IG18
;; size=54 bbWeight=1 PerfScore 20.00
-G_M46704_IG15: ; bbWeight=4, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+G_M46704_IG13: ; bbWeight=4, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0] add r0, r7, 8 ; byrRegs +[r0] @@ -385,15 +375,15 @@ G_M46704_IG15: ; bbWeight=4, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {} ; gcrRegs -[r0] ldr r3, [r5+0x04] cmp r0, r3
- bne G_M46704_IG31
+ bne G_M46704_IG29
;; size=40 bbWeight=4 PerfScore 60.00
-G_M46704_IG16: ; bbWeight=2, gcVars=0000000000200000 {V14}, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46704_IG14: ; bbWeight=2, gcVars=0000000000200000 {V14}, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, gcvars, byref, isz
movs r2, 0 str r3, [sp+0x40] // [V53 cse2] cmp r3, 0
- ble SHORT G_M46704_IG19
+ ble SHORT G_M46704_IG17
;; size=8 bbWeight=2 PerfScore 8.00
-G_M46704_IG17: ; bbWeight=15.84, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+G_M46704_IG15: ; bbWeight=15.84, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
add r1, r4, 8 ; byrRegs +[r1] str r1, [sp+0x14] // [V55 cse4] @@ -444,9 +434,9 @@ G_M46704_IG17: ; bbWeight=15.84, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs= ; gcrRegs -[r0-r2] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M46704_IG21
+ beq SHORT G_M46704_IG19
;; size=86 bbWeight=15.84 PerfScore 475.20
-G_M46704_IG18: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
+G_M46704_IG16: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
ldr r0, [sp+0x20] // [V36 tmp17] ; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E @@ -468,20 +458,20 @@ G_M46704_IG18: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 blx r3 // <unknown method> ; gcrRegs -[r0-r1] ; gcr arg pop 0
- b SHORT G_M46704_IG22
+ b SHORT G_M46704_IG20
;; size=38 bbWeight=7.92 PerfScore 118.80
-G_M46704_IG19: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46704_IG17: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r8] ; GC ptr vars -{V14 V54} str r2, [sp+0x54] // [V06 loc1]
- b SHORT G_M46704_IG30
+ b SHORT G_M46704_IG28
;; size=4 bbWeight=1 PerfScore 2.00
-G_M46704_IG20: ; bbWeight=0.50, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+G_M46704_IG18: ; bbWeight=0.50, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r6] ldr r2, [sp+0x3C] // [V56 cse5]
- b SHORT G_M46704_IG32
+ b SHORT G_M46704_IG30
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M46704_IG21: ; bbWeight=7.92, gcVars=0000000000200061 {V14 V35 V36 V54}, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46704_IG19: ; bbWeight=7.92, gcVars=0000000000200061 {V14 V35 V36 V54}, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r6 r8] ; GC ptr vars +{V00 V05 V06 V14 V21 V35 V36 V54} ldr r0, [sp+0x20] // [V36 tmp17] @@ -497,16 +487,16 @@ G_M46704_IG21: ; bbWeight=7.92, gcVars=0000000000200061 {V14 V35 V36 V54} ldr r1, [sp+0x24] // [V35 tmp16] ; gcrRegs +[r1] cmp r0, r1
- beq G_M46704_IG27 - b SHORT G_M46704_IG23
+ beq G_M46704_IG25 + b SHORT G_M46704_IG21
;; size=28 bbWeight=7.92 PerfScore 87.12
-G_M46704_IG22: ; bbWeight=7.92, gcVars=0000000000200040 {V14 V54}, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46704_IG20: ; bbWeight=7.92, gcVars=0000000000200040 {V14 V54}, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0-r1] ; GC ptr vars -{V35} cmp r0, 0
- bne G_M46704_IG27
+ bne G_M46704_IG25
;; size=6 bbWeight=7.92 PerfScore 15.84
-G_M46704_IG23: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
+G_M46704_IG21: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
movw r1, LOW RELOC 0xD1FFAB1E movt r1, HIGH RELOC 0xD1FFAB1E add r1, pc @@ -527,7 +517,7 @@ G_M46704_IG23: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 ; gcrRegs -[r0-r1] ; gcr arg pop 0 cmp r0, 0
- bne G_M46704_IG27
+ bne G_M46704_IG25
ldr r4, [sp+0x18] // [V54 cse3] ; byrRegs +[r4] ldr r0, [sp+0x44] // [V52 cse1] @@ -549,7 +539,7 @@ G_M46704_IG23: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M46704_IG24
+ beq SHORT G_M46704_IG22
add r0, r7, 8 ; byrRegs +[r0] ldr r4, [sp+0x38] // [V57 cse6] @@ -563,7 +553,7 @@ G_M46704_IG23: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 blx r3 // CORINFO_HELP_READYTORUN_ISINSTANCEOF ; gcr arg pop 0 cmp r0, 0
- beq G_M46704_IG30
+ beq G_M46704_IG28
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -586,9 +576,9 @@ G_M46704_IG23: ; bbWeight=7.92, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 str r4, [sp+0x28] ; GC ptr vars +{V16} cmp r4, 0 ...

-22 (-0.39%) : 59013.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)

@@ -17,9 +17,9 @@ ;* V05 loc2 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <<unknown class>> ; V06 loc3 [V06,T119] ( 2, 2 ) ref -> r9 class-hnd single-def <System.String> ; V07 loc4 [V07,T74] ( 10, 13 ) int -> r10
-; V08 loc5 [V08,T80] ( 11, 10.56) ref -> [sp+0x80] class-hnd exact spill-single-def <<unknown class>> -; V09 loc6 [V09,T03] ( 39, 75 ) ref -> [sp+0x7C] class-hnd spill-single-def <<unknown class>> -; V10 loc7 [V10,T02] ( 48, 89.02) int -> [sp+0xA4]
+; V08 loc5 [V08,T80] ( 11, 10.56) ref -> [sp+0x78] class-hnd exact spill-single-def <<unknown class>> +; V09 loc6 [V09,T03] ( 39, 75 ) ref -> [sp+0x74] class-hnd spill-single-def <<unknown class>> +; V10 loc7 [V10,T02] ( 48, 89.02) int -> [sp+0x9C]
;* V11 loc8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <System.Data.DataColumn> ;* V12 loc9 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.String> ; V13 loc10 [V13,T28] ( 14, 20.54) int -> r7 @@ -27,9 +27,9 @@ ; V15 tmp1 [V15,T88] ( 4, 6.50) ref -> r4 single-def "inline UNBOX clone1" ; V16 tmp2 [V16,T90] ( 3, 6 ) ref -> r10 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> ; V17 tmp3 [V17,T91] ( 3, 6 ) ref -> r10 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
-; V18 tmp4 [V18,T00] ( 44,172 ) ref -> [sp+0x78] class-hnd exact "NewObj constructor temp" <System.Data.DataColumn>
+; V18 tmp4 [V18,T00] ( 44,172 ) ref -> [sp+0x70] class-hnd exact "NewObj constructor temp" <System.Data.DataColumn>
; V19 tmp5 [V19,T07] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>>
-; V20 tmp6 [V20,T08] ( 6, 24 ) ref -> [sp+0x74] class-hnd exact "Single-def Box Helper" <<unknown class>>
+; V20 tmp6 [V20,T08] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>>
; V21 tmp7 [V21,T09] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>> ; V22 tmp8 [V22,T10] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>> ; V23 tmp9 [V23,T11] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>> @@ -47,7 +47,7 @@ ; V35 tmp21 [V35,T21] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>> ; V36 tmp22 [V36,T22] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>> ; V37 tmp23 [V37,T23] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>>
-; V38 tmp24 [V38,T24] ( 6, 24 ) ref -> [sp+0x70] class-hnd exact "Single-def Box Helper" <<unknown class>>
+; V38 tmp24 [V38,T24] ( 6, 24 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>>
; V39 tmp25 [V39,T75] ( 6, 12 ) ref -> r0 class-hnd exact "Single-def Box Helper" <<unknown class>> ; V40 tmp26 [V40,T83] ( 4, 8 ) ref -> r1 class-hnd "Strict ordering of exceptions for Array store" <System.String> ; V41 tmp27 [V41,T30] ( 4, 16 ) ref -> r1 class-hnd "Inlining Arg" <System.String> @@ -84,9 +84,9 @@ ; V72 tmp58 [V72,T53] ( 4, 16 ) ref -> r0 "argument with side effect" ; V73 tmp59 [V73,T70] ( 4, 16 ) int -> r0 "argument with side effect" ; V74 tmp60 [V74,T54] ( 4, 16 ) ref -> r0 "argument with side effect"
-; V75 tmp61 [V75 ] ( 2, 8 ) long -> [sp+0x98] multireg-ret "argument with side effect"
+; V75 tmp61 [V75 ] ( 2, 8 ) long -> [sp+0x90] multireg-ret "argument with side effect"
; V76 tmp62 [V76,T55] ( 4, 16 ) ref -> r0 "argument with side effect"
-; V77 tmp63 [V77 ] ( 2, 8 ) long -> [sp+0x90] multireg-ret "argument with side effect"
+; V77 tmp63 [V77 ] ( 2, 8 ) long -> [sp+0x88] multireg-ret "argument with side effect"
; V78 tmp64 [V78,T56] ( 4, 16 ) ref -> r0 "argument with side effect" ; V79 tmp65 [V79,T57] ( 4, 16 ) ref -> r0 "argument with side effect" ; V80 tmp66 [V80,T58] ( 4, 16 ) ref -> registers "argument with side effect" @@ -129,32 +129,30 @@ ; V117 cse22 [V117,T111] ( 4, 5.04) ref -> [sp+0x14] hoist multi-def "CSE - conservative" ; V118 cse23 [V118,T112] ( 4, 5.04) ref -> [sp+0x10] hoist multi-def "CSE - conservative" ; V119 cse24 [V119,T29] ( 14, 16 ) int -> r8 "CSE - conservative"
-; V120 cse25 [V120,T27] ( 12, 22 ) int -> [sp+0x8C] multi-def "CSE - moderate" -; V121 cse26 [V121,T86] ( 8, 7.08) int -> [sp+0x88] hoist multi-def "CSE - conservative" -; V122 cse27 [V122,T87] ( 8, 7.08) int -> [sp+0x84] hoist multi-def "CSE - conservative"
+; V120 cse25 [V120,T27] ( 12, 22 ) int -> [sp+0x84] multi-def "CSE - moderate" +; V121 cse26 [V121,T86] ( 8, 7.08) int -> [sp+0x80] multi-def "CSE - conservative" +; V122 cse27 [V122,T87] ( 8, 7.08) int -> [sp+0x7C] multi-def "CSE - conservative"
; V123 cse28 [V123,T118] ( 4, 3.25) int -> r9 "CSE - conservative" ; V124 rat0 [V124,T76] ( 4, 12 ) int -> r0 "field V75.lo (fldOffset=0x0)" P-INDEP ; V125 rat1 [V125,T77] ( 4, 12 ) int -> r1 "field V75.hi (fldOffset=0x4)" P-INDEP ; V126 rat2 [V126,T78] ( 4, 12 ) int -> r0 "field V77.lo (fldOffset=0x0)" P-INDEP ; V127 rat3 [V127,T79] ( 4, 12 ) int -> r1 "field V77.hi (fldOffset=0x4)" P-INDEP
-; TEMP_02 byref -> [r11-0xBC] -; TEMP_01 ref -> [r11-0xC0]
+; TEMP_01 ref -> [r11-0xB4]
;
-; Lcl frame size = 172
+; Lcl frame size = 164
G_M28852_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
- sub sp, 172 - add r11, sp, 200
+ sub sp, 164 + add r11, sp, 192
movs r3, 0
- str r3, [sp+0x08] // [TEMP_01] - str r3, [sp+0x0C] // [TEMP_02]
+ str r3, [sp+0x0C] // [TEMP_01]
mov r6, r0 ; gcrRegs +[r6] mov r5, r1 ; gcrRegs +[r5] mov r7, r2
- ;; size=22 bbWeight=1 PerfScore 9.00
+ ;; size=20 bbWeight=1 PerfScore 8.00
G_M28852_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz movw r1, LOW RELOC 0xD1FFAB1E movt r1, HIGH RELOC 0xD1FFAB1E @@ -172,7 +170,7 @@ G_M28852_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, b blx r3 // <unknown method> ; gcrRegs -[r1] ; gcr arg pop 0
- str r0, [sp+0x08]
+ str r0, [sp+0x0C]
movw r1, LOW RELOC 0xD1FFAB1E movt r1, HIGH RELOC 0xD1FFAB1E add r1, pc @@ -182,7 +180,7 @@ G_M28852_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, b add r0, r1, 52 ; gcrRegs -[r0] ; byrRegs +[r0]
- ldr r1, [sp+0x08]
+ ldr r1, [sp+0x0C]
; gcrRegs +[r1] ; byrRegs -[r1] movw r12, LOW RELOC 0xD1FFAB1E @@ -207,13 +205,13 @@ G_M28852_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, b blx r3 // <unknown method> ; gcrRegs -[r1] ; gcr arg pop 0
- str r0, [sp+0x08]
+ str r0, [sp+0x0C]
add r1, r6, r8 ; byrRegs +[r1] add r0, r1, 56 ; gcrRegs -[r0] ; byrRegs +[r0]
- ldr r1, [sp+0x08]
+ ldr r1, [sp+0x0C]
; gcrRegs +[r1] ; byrRegs -[r1] movw r12, LOW RELOC 0xD1FFAB1E @@ -238,13 +236,13 @@ G_M28852_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, b blx r3 // <unknown method> ; gcrRegs -[r1] ; gcr arg pop 0
- str r0, [sp+0x08]
+ str r0, [sp+0x0C]
add r1, r6, r8 ; byrRegs +[r1] add r0, r1, 60 ; gcrRegs -[r0] ; byrRegs +[r0]
- ldr r1, [sp+0x08]
+ ldr r1, [sp+0x0C]
; gcrRegs +[r1] ; byrRegs -[r1] movw r12, LOW RELOC 0xD1FFAB1E @@ -542,13 +540,13 @@ G_M28852_IG06: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {} ldr r3, [r4] blx r3 // CORINFO_HELP_READYTORUN_CHKCAST ; gcr arg pop 0
- str r0, [sp+0x08]
+ str r0, [sp+0x0C]
add r1, r6, r8 ; byrRegs +[r1] add r0, r1, 48 ; gcrRegs -[r0] ; byrRegs +[r0]
- ldr r1, [sp+0x08]
+ ldr r1, [sp+0x0C]
; gcrRegs +[r1] ; byrRegs -[r1] movw r12, LOW RELOC 0xD1FFAB1E @@ -582,7 +580,7 @@ G_M28852_IG06: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {} blx r3 // CORINFO_HELP_READYTORUN_NEWARR_1 ; gcrRegs +[r0] ; gcr arg pop 0
- str r0, [sp+0x80] // [V08 loc5]
+ str r0, [sp+0x78] // [V08 loc5]
; GC ptr vars +{V08} movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -590,13 +588,13 @@ G_M28852_IG06: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {} ldr r3, [r4] blx r3 // <unknown method> ; gcr arg pop 0
- str r0, [sp+0x7C] // [V09 loc6]
+ str r0, [sp+0x74] // [V09 loc6]
; GC ptr vars +{V09} movs r3, 0
- str r3, [sp+0xA4] // [V10 loc7]
+ str r3, [sp+0x9C] // [V10 loc7]
cmp r10, 0 ble G_M28852_IG33
- ldr r2, [sp+0x80] // [V08 loc5]
+ ldr r2, [sp+0x78] // [V08 loc5]
; gcrRegs +[r2] ldr r0, [r2+0x04] ; gcrRegs -[r0] @@ -695,7 +693,7 @@ G_M28852_IG07: ; bbWeight=1, extend movt r0, HIGH RELOC 0xD1FFAB1E add r0, pc ldr r1, [r0]
- str r1, [sp+0x88] // [V121 cse26]
+ str r1, [sp+0x80] // [V121 cse26]
mov r0, r1 movw lr, LOW RELOC 0xD1FFAB1E movt lr, HIGH RELOC 0xD1FFAB1E @@ -719,7 +717,7 @@ G_M28852_IG07: ; bbWeight=1, extend movt r0, HIGH RELOC 0xD1FFAB1E add r0, pc ldr r1, [r0]
- str r1, [sp+0x84] // [V122 cse27]
+ str r1, [sp+0x7C] // [V122 cse27]
mov r0, r1 movw lr, LOW RELOC 0xD1FFAB1E movt lr, HIGH RELOC 0xD1FFAB1E @@ -848,7 +846,7 @@ G_M28852_IG08: ; bbWeight=3.96, gcVars=0001FFFFF00302000000000000000008 { ; gcrRegs -[r0] str r0, [sp] // [V14 OutArgs] mov r2, lr
- str r4, [sp+0x78] // [V18 tmp4]
+ str r4, [sp+0x70] // [V18 tmp4]
; GC ptr vars +{V18} mov r0, r4 ; gcrRegs +[r0] @@ -872,13 +870,13 @@ G_M28852_IG08: ; bbWeight=3.96, gcVars=0001FFFFF00302000000000000000008 { blx r3 // CORINFO_HELP_READYTORUN_NEW ; gcrRegs +[r0] ; gcr arg pop 0
- ldr r4, [sp+0xA4] // [V10 loc7]
+ ldr r4, [sp+0x9C] // [V10 loc7]
str r4, [r0+0x04] mov r2, r0 ; gcrRegs +[r2] ldr r1, [sp+0x54] // [V101 cse6] ; gcrRegs +[r1]
- ldr r0, [sp+0x7C] // [V09 loc6]
+ ldr r0, [sp+0x74] // [V09 loc6]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -898,7 +896,7 @@ G_M28852_IG08: ; bbWeight=3.96, gcVars=0001FFFFF00302000000000000000008 { ; gcr arg pop 0 mov r1, r0 ; gcrRegs +[r1]
- ldr r0, [sp+0x78] // [V18 tmp4]
+ ldr r0, [sp+0x70] // [V18 tmp4]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -913,13 +911,13 @@ G_M28852_IG08: ; bbWeight=3.96, gcVars=0001FFFFF00302000000000000000008 { blx r3 // CORINFO_HELP_READYTORUN_NEW ; gcrRegs +[r0] ; gcr arg pop 0
- ldr r4, [sp+0xA4] // [V10 loc7]
+ ldr r4, [sp+0x9C] // [V10 loc7]
str r4, [r0+0x04] mov r2, r0 ; gcrRegs +[r2] ldr r1, [sp+0x50] // [V102 cse7] ; gcrRegs +[r1]
- ldr r0, [sp+0x7C] // [V09 loc6]
+ ldr r0, [sp+0x74] // [V09 loc6]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -937,20 +935,20 @@ G_M28852_IG08: ; bbWeight=3.96, gcVars=0001FFFFF00302000000000000000008 { blx r3 // <unknown method> ...

-8 (-0.36%) : 114850.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport

@@ -14,48 +14,48 @@ ; V02 loc0 [V02,T34] ( 3, 2 ) ref -> r0 class-hnd <Microsoft.CodeAnalysis.VisualBasic.GlobalImport[]> ; V03 loc1 [V03,T26] ( 7, 5.02) ref -> r8 class-hnd single-def <<unknown class>> ; V04 loc2 [V04,T31] ( 4, 3 ) ref -> r10 class-hnd single-def <Microsoft.CodeAnalysis.SyntaxTree>
-; V05 loc3 [V05,T32] ( 4, 3 ) ref -> [sp+0x50] class-hnd exact spill-single-def <<unknown class>> -; V06 loc4 [V06 ] ( 4, 5 ) struct ( 4) [sp+0x84] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsStatementSyntax]>
+; V05 loc3 [V05,T32] ( 4, 3 ) ref -> [sp+0x48] class-hnd exact spill-single-def <<unknown class>> +; V06 loc4 [V06 ] ( 4, 5 ) struct ( 4) [sp+0x7C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsStatementSyntax]>
;* V07 loc5 [V07 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op <System.Threading.CancellationToken>
-; V08 loc6 [V08,T25] ( 5, 5.50) int -> [sp+0x80] spill-single-def -; V09 loc7 [V09,T01] ( 12, 18.52) int -> [sp+0x7C] -; V10 loc8 [V10 ] ( 8, 10 ) struct (16) [sp+0x6C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsClauseSyntax]>
+; V08 loc6 [V08,T25] ( 5, 5.50) int -> [sp+0x78] spill-single-def +; V09 loc7 [V09,T01] ( 12, 18.52) int -> [sp+0x74] +; V10 loc8 [V10 ] ( 8, 10 ) struct (16) [sp+0x64] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SeparatedSyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsClauseSyntax]>
; V11 loc9 [V11,T06] ( 12, 12 ) ref -> r7 must-init class-hnd exact <Microsoft.CodeAnalysis.VisualBasic.OptionsValidator+_Closure$__0-0>
-; V12 loc10 [V12,T11] ( 10, 10 ) ref -> [sp+0x4C] class-hnd <Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsClauseSyntax> -; V13 loc11 [V13,T13] ( 8, 8 ) ref -> [sp+0x48] class-hnd <<unknown class>> -; V14 loc12 [V14,T21] ( 6, 6 ) ref -> [sp+0x44] class-hnd <<unknown class>>
+; V12 loc10 [V12,T11] ( 10, 10 ) ref -> [sp+0x44] class-hnd <Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsClauseSyntax> +; V13 loc11 [V13,T13] ( 8, 8 ) ref -> [sp+0x40] class-hnd <<unknown class>> +; V14 loc12 [V14,T21] ( 6, 6 ) ref -> [sp+0x3C] class-hnd <<unknown class>>
; V15 OutArgs [V15 ] ( 1, 1 ) struct ( 8) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V16 tmp1 [V16,T24] ( 3, 6 ) ref -> r8 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> ;* V17 tmp2 [V17 ] ( 0, 0 ) ref -> zero-ref single-def
-; V18 tmp3 [V18,T28] ( 4, 4 ) ref -> [sp+0x40] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>>
+; V18 tmp3 [V18,T28] ( 4, 4 ) ref -> [sp+0x38] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>>
; V19 tmp4 [V19,T35] ( 2, 2 ) ref -> r10 class-hnd exact single-def "finalizable newobj spill" <<unknown class>> ;* V20 tmp5 [V20 ] ( 0, 0 ) ref -> zero-ref ; V21 tmp6 [V21,T41] ( 3, 1.50) ref -> r2 ;* V22 tmp7 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <<unknown class>> ; V23 tmp8 [V23,T43] ( 2, 1 ) ref -> r10 single-def
-; V24 tmp9 [V24,T29] ( 4, 4 ) ref -> [sp+0x3C] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>> -; V25 tmp10 [V25,T36] ( 2, 2 ) ref -> [sp+0x38] class-hnd exact spill-single-def "finalizable newobj spill" <<unknown class>>
+; V24 tmp9 [V24,T29] ( 4, 4 ) ref -> [sp+0x34] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>> +; V25 tmp10 [V25,T36] ( 2, 2 ) ref -> [sp+0x30] class-hnd exact spill-single-def "finalizable newobj spill" <<unknown class>>
;* V26 tmp11 [V26 ] ( 0, 0 ) ref -> zero-ref ; V27 tmp12 [V27,T42] ( 3, 1.50) ref -> r2 ; V28 tmp13 [V28,T37] ( 2, 2 ) ref -> r10 class-hnd single-def "impAppendStmt" <Microsoft.CodeAnalysis.Text.SourceText> ; V29 tmp14 [V29,T38] ( 2, 2 ) ref -> r2 class-hnd exact single-def "impAppendStmt" <Microsoft.CodeAnalysis.VisualBasic.VisualBasicParseOptions>
-; V30 tmp15 [V30,T33] ( 3, 3 ) ref -> [sp+0x34] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>>
+; V30 tmp15 [V30,T33] ( 3, 3 ) ref -> [sp+0x2C] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>>
; V31 tmp16 [V31,T07] ( 6, 12 ) ref -> r2 class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.OptionsValidator+_Closure$__0-0>
-; V32 tmp17 [V32,T02] ( 8, 16 ) ref -> [sp+0x30] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.GlobalImport> -; V33 tmp18 [V33,T08] ( 6, 12 ) ref -> [sp+0x2C] class-hnd exact "NewObj constructor temp" <<unknown class>>
+; V32 tmp17 [V32,T02] ( 8, 16 ) ref -> [sp+0x28] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.GlobalImport> +; V33 tmp18 [V33,T08] ( 6, 12 ) ref -> [sp+0x24] class-hnd exact "NewObj constructor temp" <<unknown class>>
;* V34 tmp19 [V34 ] ( 0, 0 ) ref -> zero-ref
-; V35 tmp20 [V35,T03] ( 8, 16 ) ref -> [sp+0x28] class-hnd exact "NewObj constructor temp" <<unknown class>> -; V36 tmp21 [V36,T15] ( 4, 8 ) ref -> [sp+0x24] class-hnd exact "finalizable newobj spill" <<unknown class>>
+; V35 tmp20 [V35,T03] ( 8, 16 ) ref -> [sp+0x20] class-hnd exact "NewObj constructor temp" <<unknown class>> +; V36 tmp21 [V36,T15] ( 4, 8 ) ref -> [sp+0x1C] class-hnd exact "finalizable newobj spill" <<unknown class>>
;* V37 tmp22 [V37 ] ( 0, 0 ) ref -> zero-ref ; V38 tmp23 [V38,T22] ( 6, 6 ) ref -> r2
-; V39 tmp24 [V39,T09] ( 6, 12 ) ref -> [sp+0x20] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.DiagnosticInfo> -; V40 tmp25 [V40,T16] ( 4, 8 ) ref -> [sp+0x1C] class-hnd exact "finalizable newobj spill" <<unknown class>> -; V41 tmp26 [V41,T10] ( 6, 12 ) ref -> [sp+0x18] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic>
+; V39 tmp24 [V39,T09] ( 6, 12 ) ref -> [sp+0x18] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.DiagnosticInfo> +; V40 tmp25 [V40,T16] ( 4, 8 ) ref -> [sp+0x14] class-hnd exact "finalizable newobj spill" <<unknown class>> +; V41 tmp26 [V41,T10] ( 6, 12 ) ref -> [sp+0x10] class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.VisualBasic.VBDiagnostic>
;* V42 tmp27 [V42 ] ( 0, 0 ) struct ( 4) zero-ref "Inlining Arg" <System.Threading.CancellationToken>
-; V43 tmp28 [V43,T00] ( 10, 20 ) struct (16) [sp+0x5C] do-not-enreg[HSA] multireg-arg must-init hidden-struct-arg "spilled call-like call argument" <Microsoft.CodeAnalysis.SyntaxNodeOrToken>
+; V43 tmp28 [V43,T00] ( 10, 20 ) struct (16) [sp+0x54] do-not-enreg[HSA] multireg-arg must-init hidden-struct-arg "spilled call-like call argument" <Microsoft.CodeAnalysis.SyntaxNodeOrToken>
;* V44 tmp29 [V44 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.Location>
-; V45 tmp30 [V45,T17] ( 4, 8 ) ref -> [sp+0x14] class-hnd "Inlining Arg" <System.String> -; V46 tmp31 [V46 ] ( 4, 5 ) ref -> [sp+0x84] do-not-enreg[X] addr-exposed "field V06._node (fldOffset=0x0)" P-DEP
+; V45 tmp30 [V45,T17] ( 4, 8 ) ref -> [sp+0x0C] class-hnd "Inlining Arg" <System.String> +; V46 tmp31 [V46 ] ( 4, 5 ) ref -> [sp+0x7C] do-not-enreg[X] addr-exposed "field V06._node (fldOffset=0x0)" P-DEP
;* V47 tmp32 [V47,T44] ( 0, 0 ) ref -> zero-ref single-def "field V07._source (fldOffset=0x0)" P-INDEP ;* V48 tmp33 [V48 ] ( 0, 0 ) ref -> zero-ref "field V42._source (fldOffset=0x0)" P-INDEP ; V49 tmp34 [V49,T30] ( 2, 4 ) ref -> r1 single-def "argument with side effect" @@ -66,31 +66,29 @@ ; V54 tmp39 [V54,T19] ( 4, 8 ) ref -> r0 "argument with side effect" ; V55 tmp40 [V55,T20] ( 4, 8 ) ref -> r0 "argument with side effect" ; V56 cse0 [V56,T05] ( 17, 12.50) byref -> r9 "CSE - aggressive"
-; V57 cse1 [V57,T27] ( 4, 5 ) int -> [sp+0x58] spill-single-def "CSE - moderate" -; V58 cse2 [V58,T14] ( 8, 8 ) int -> [sp+0x54] multi-def "CSE - moderate" -; TEMP_02 byref -> [r11-0x98] -; TEMP_01 ref -> [r11-0x9C]
+; V57 cse1 [V57,T27] ( 4, 5 ) int -> [sp+0x50] spill-single-def "CSE - moderate" +; V58 cse2 [V58,T14] ( 8, 8 ) int -> [sp+0x4C] multi-def "CSE - moderate" +; TEMP_01 ref -> [r11-0x98]
;
-; Lcl frame size = 140
+; Lcl frame size = 132
G_M28747_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
- sub sp, 140 - add r11, sp, 168 - sub r3, r11, 156
+ sub sp, 132 + add r11, sp, 160 + sub r3, r11, 152
movs r4, 15 movs r7, 0 movs r2, 0 stm r3!, {r2,r7} subs r4, 1 bhi SHORT pc-6 (-3 instructions)
- str r7, [r3]
mov r5, r0 ; gcrRegs +[r5] mov r6, r1 ; gcrRegs +[r6] movs r7, 0
- ;; size=34 bbWeight=1 PerfScore 14.00
+ ;; size=32 bbWeight=1 PerfScore 13.00
G_M28747_IG02: ; bbWeight=1, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[r7] movw r4, LOW RELOC 0xD1FFAB1E @@ -178,7 +176,7 @@ G_M28747_IG04: ; bbWeight=0.50, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 ; gcrRegs +[r0] mov r4, r0 ; gcrRegs +[r4]
- str r4, [sp+0x40]
+ str r4, [sp+0x38]
; GC ptr vars +{V18} mov r1, r10 ; gcrRegs +[r1] @@ -193,7 +191,7 @@ G_M28747_IG04: ; bbWeight=0.50, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0 movw r1, 0xd1ff add r0, r9, r1 ; byrRegs +[r0]
- ldr r1, [sp+0x40] // [V18 tmp3]
+ ldr r1, [sp+0x38] // [V18 tmp3]
; gcrRegs +[r1] movw r12, LOW RELOC 0xD1FFAB1E movt r12, HIGH RELOC 0xD1FFAB1E @@ -237,7 +235,7 @@ G_M28747_IG06: ; bbWeight=0.50, gcrefRegs=05E0 {r5 r6 r7 r8 r10}, byrefRe movw r3, 0xd1ff ldr r4, [r9+r3] ; gcrRegs +[r4]
- str r4, [sp+0x38] // [V25 tmp10]
+ str r4, [sp+0x30] // [V25 tmp10]
; GC ptr vars +{V25} movw r4, LOW RELOC 0xD1FFAB1E ; gcrRegs -[r4] @@ -248,9 +246,9 @@ G_M28747_IG06: ; bbWeight=0.50, gcrefRegs=05E0 {r5 r6 r7 r8 r10}, byrefRe ; gcrRegs +[r0] mov r4, r0 ; gcrRegs +[r4]
- str r4, [sp+0x3C] // [V24 tmp9]
+ str r4, [sp+0x34] // [V24 tmp9]
; GC ptr vars +{V24}
- ldr r1, [sp+0x38] // [V25 tmp10]
+ ldr r1, [sp+0x30] // [V25 tmp10]
; gcrRegs +[r1] mov r0, r4 movw r4, LOW RELOC 0xD1FFAB1E @@ -264,7 +262,7 @@ G_M28747_IG06: ; bbWeight=0.50, gcrefRegs=05E0 {r5 r6 r7 r8 r10}, byrefRe movw r1, 0xd1ff add r0, r9, r1 ; byrRegs +[r0]
- ldr r1, [sp+0x3C] // [V24 tmp9]
+ ldr r1, [sp+0x34] // [V24 tmp9]
; gcrRegs +[r1] movw r12, LOW RELOC 0xD1FFAB1E movt r12, HIGH RELOC 0xD1FFAB1E @@ -342,7 +340,7 @@ G_M28747_IG08: ; bbWeight=0.50, gcrefRegs=05E4 {r2 r5 r6 r7 r8 r10}, byre blx r3 // CORINFO_HELP_READYTORUN_NEW mov r4, r0 ; gcrRegs +[r4]
- str r4, [sp+0x34] // [V30 tmp15]
+ str r4, [sp+0x2C] // [V30 tmp15]
; GC ptr vars +{V30} mov r0, r4 movw r4, LOW RELOC 0xD1FFAB1E @@ -352,9 +350,9 @@ G_M28747_IG08: ; bbWeight=0.50, gcrefRegs=05E4 {r2 r5 r6 r7 r8 r10}, byre ldr r3, [r4] blx r3 // <unknown method> ; gcrRegs -[r0]
- ldr r4, [sp+0x34] // [V30 tmp15]
+ ldr r4, [sp+0x2C] // [V30 tmp15]
; gcrRegs +[r4]
- str r4, [sp+0x50] // [V05 loc3]
+ str r4, [sp+0x48] // [V05 loc3]
; GC ptr vars +{V05} mov r0, r10 ; gcrRegs +[r0] @@ -371,14 +369,14 @@ G_M28747_IG08: ; bbWeight=0.50, gcrefRegs=05E4 {r2 r5 r6 r7 r8 r10}, byre ldr r2, [r0] ldr r3, [r4] blx r3 // Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax:get_Imports():Microsoft.CodeAnalysis.SyntaxList`1[Microsoft.CodeAnalysis.VisualBasic.Syntax.ImportsStatementSyntax]:this
- str r0, [sp+0x84] // [V06 loc4]
+ str r0, [sp+0x7C] // [V06 loc4]
movw r1, LOW RELOC 0xD1FFAB1E movt r1, HIGH RELOC 0xD1FFAB1E add r1, pc ldr r4, [r1]
- str r4, [sp+0x58] // [V57 cse1]
+ str r4, [sp+0x50] // [V57 cse1]
mov r1, r4
- add r0, sp, 132 // [V06 loc4]
+ add r0, sp, 124 // [V06 loc4]
; gcrRegs -[r0] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -386,7 +384,7 @@ G_M28747_IG08: ; bbWeight=0.50, gcrefRegs=05E4 {r2 r5 r6 r7 r8 r10}, byre ldr r3, [r4] blx r3 // <unknown method> subs r4, r0, 1
- str r4, [sp+0x80] // [V08 loc6]
+ str r4, [sp+0x78] // [V08 loc6]
movs r3, 0 cmp r4, 0 blt G_M28747_IG25 @@ -395,9 +393,9 @@ G_M28747_IG08: ; bbWeight=0.50, gcrefRegs=05E4 {r2 r5 r6 r7 r8 r10}, byre ble G_M28747_IG18 ;; size=164 bbWeight=0.50 PerfScore 31.00 G_M28747_IG09: ; bbWeight=3.96, gcrefRegs=05E0 {r5 r6 r7 r8 r10}, byrefRegs=0200 {r9}, byref, isz
- ldr r1, [sp+0x58] // [V57 cse1] - add r0, sp, 132 // [V06 loc4] - str r3, [sp+0x7C] // [V09 loc7]
+ ldr r1, [sp+0x50] // [V57 cse1] + add r0, sp, 124 // [V06 loc4] + str r3, [sp+0x74] // [V09 loc7]
mov r2, r3 movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -405,7 +403,7 @@ G_M28747_IG09: ; bbWeight=3.96, gcrefRegs=05E0 {r5 r6 r7 r8 r10}, byrefRe ldr lr, [r4] blx lr // <unknown method> ; gcrRegs +[r0]
- add r1, sp, 108 // [V10 loc8]
+ add r1, sp, 100 // [V10 loc8]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -459,9 +457,9 @@ G_M28747_IG11: ; bbWeight=1.98, gcrefRegs=0564 {r2 r5 r6 r8 r10}, byrefRe movt r1, HIGH RELOC 0xD1FFAB1E add r1, pc ldr r4, [r1]
- str r4, [sp+0x54] // [V58 cse2]
+ str r4, [sp+0x4C] // [V58 cse2]
mov r1, r4
- add r0, sp, 108 // [V10 loc8]
+ add r0, sp, 100 // [V10 loc8]
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -474,8 +472,8 @@ G_M28747_IG11: ; bbWeight=1.98, gcrefRegs=0564 {r2 r5 r6 r8 r10}, byrefRe ; gcrRegs +[r4] ldrsb r0, [r4] ; gcrRegs -[r0]
- add r0, sp, 92 // [V43 tmp28] - str r4, [sp+0x4C] // [V12 loc10]
+ add r0, sp, 84 // [V43 tmp28] + str r4, [sp+0x44] // [V12 loc10]
; GC ptr vars +{V12} ...

-10 (-0.32%) : 115121.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)

@@ -54,7 +54,7 @@ ; V42 tmp8 [V42,T07] ( 6, 48 ) ref -> [sp+0x7C] class-hnd "non-inline candidate call" <Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol> ;* V43 tmp9 [V43 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V44 tmp10 [V44 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.VisualBasic.BoundExpression>
-; V45 tmp11 [V45,T36] ( 2, 0.16) ubyte -> r1 "Inline return value spill temp"
+;* V45 tmp11 [V45,T36] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V46 tmp12 [V46,T11] ( 4, 32 ) ref -> [sp+0x78] class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol> ;* V47 tmp13 [V47 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.VisualBasic.BoundExpression> ; V48 tmp14 [V48,T25] ( 4, 16 ) ubyte -> r3 "Inline return value spill temp" @@ -147,7 +147,7 @@ G_M30062_IG02: ; bbWeight=1, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r blx r3 // <unknown method> ; gcrRegs -[r0] cmp r0, 0
- beq G_M30062_IG50
+ beq G_M30062_IG48
;; size=66 bbWeight=1 PerfScore 25.00 G_M30062_IG03: ; bbWeight=0.50, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz mov r0, r5 @@ -263,7 +263,7 @@ G_M30062_IG07: ; bbWeight=0.50, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 subs r0, r0, 1 ldr r4, [sp+0x280] // [V10 loc3] cmp r0, r4
- ble G_M30062_IG50
+ ble G_M30062_IG48
str r6, [sp] // [V34 OutArgs] mov r0, r5 ; gcrRegs +[r0] @@ -293,7 +293,7 @@ G_M30062_IG07: ; bbWeight=0.50, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 str r4, [sp+0x204] // [V14 loc7] ldr r3, [sp+0x280] // [V10 loc3] cmp r3, r4
- bgt G_M30062_IG50
+ bgt G_M30062_IG48
;; size=84 bbWeight=0.50 PerfScore 16.50 G_M30062_IG08: ; bbWeight=4, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz add r1, sp, 456 // [V15 loc8] @@ -309,7 +309,7 @@ G_M30062_IG08: ; bbWeight=4, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r ; gcrRegs -[r0] ldrb r0, [sp+0x1CC] // [V15 loc8+0x04] cmp r0, 0
- bne G_M30062_IG49
+ bne G_M30062_IG47
;; size=34 bbWeight=4 PerfScore 48.00 G_M30062_IG09: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz ldr r0, [sp+0x1C8] // [V15 loc8] @@ -322,11 +322,11 @@ G_M30062_IG09: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r blx r3 // <unknown method> ; gcrRegs -[r0] cmp r0, 0
- bne G_M30062_IG49
+ bne G_M30062_IG47
ldr r2, [sp+0x1CC] // [V15 loc8+0x04] ands r2, r2, 0x4000 cmp r2, 0
- beq G_M30062_IG49
+ beq G_M30062_IG47
ldr r4, [sp+0x280] // [V10 loc3] adds r2, r4, 1 add r1, sp, 400 // [V16 loc9] @@ -340,7 +340,7 @@ G_M30062_IG09: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r ; gcrRegs -[r0] ldrb r0, [sp+0x194] // [V16 loc9+0x04] cmp r0, 0
- bne G_M30062_IG49
+ bne G_M30062_IG47
ldr r0, [sp+0x190] // [V16 loc9] ; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E @@ -351,7 +351,7 @@ G_M30062_IG09: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r blx r3 // <unknown method> ; gcrRegs -[r0] cmp r0, 0
- beq G_M30062_IG49
+ beq G_M30062_IG47
ldr r0, [sp+0x1C8] // [V15 loc8] ; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E @@ -371,7 +371,7 @@ G_M30062_IG09: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r ldr r1, [sp+0x6C] // [TEMP_01] ; gcrRegs +[r1] cmp r1, r0
- bne G_M30062_IG49
+ bne G_M30062_IG47
ldr r1, [sp+0x2AC] // [V61 tmp27] ldr r1, [r1+0x04] ; gcrRegs -[r1] @@ -379,7 +379,7 @@ G_M30062_IG09: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r str r4, [sp+0x18C] // [V17 loc10] movs r3, 0 cmp r4, 0
- blt G_M30062_IG45
+ blt G_M30062_IG43
cmp r1, r4 ble G_M30062_IG28 ;; size=160 bbWeight=2 PerfScore 122.00 @@ -389,7 +389,7 @@ G_M30062_IG10: ; bbWeight=15.84, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=004 ; gcrRegs +[r2] ldr r1, [r2+0x04] cmp r3, r1
- bhs G_M30062_IG71
+ bhs G_M30062_IG69
str r3, [sp+0x188] // [V18 loc11] lsls r1, r3, 3 adds r1, 8 @@ -517,7 +517,7 @@ G_M30062_IG13: ; bbWeight=7.92, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 ; gcrRegs -[r0] cmp r0, 32 beq G_M30062_IG26
- b SHORT G_M30062_IG47
+ b SHORT G_M30062_IG45
;; size=204 bbWeight=7.92 PerfScore 617.76 G_M30062_IG14: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz ldr r4, [sp+0x280] // [V10 loc3] @@ -570,7 +570,7 @@ G_M30062_IG16: ; bbWeight=7.92, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 movs r3, 0 ldr r2, [r0+0x04] cmp r3, r2
- bhs G_M30062_IG71
+ bhs G_M30062_IG69
ldr r0, [r0+0x08] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -652,7 +652,7 @@ G_M30062_IG19: ; bbWeight=7.92, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 ;; size=2 bbWeight=7.92 PerfScore 7.92 G_M30062_IG20: ; bbWeight=7.92, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz cmp r3, 0
- bne G_M30062_IG47
+ bne G_M30062_IG45
;; size=6 bbWeight=7.92 PerfScore 15.84 G_M30062_IG21: ; bbWeight=7.92, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz ldr r1, [sp+0x88] // [V78 cse0] @@ -759,7 +759,7 @@ G_M30062_IG24: ; bbWeight=7.92, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 ;; size=2 bbWeight=7.92 PerfScore 7.92 G_M30062_IG25: ; bbWeight=7.92, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz cmp r3, 0
- bne G_M30062_IG47
+ bne G_M30062_IG45
;; size=6 bbWeight=7.92 PerfScore 15.84 G_M30062_IG26: ; bbWeight=15.84, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz ldr r4, [sp+0x188] // [V18 loc11] @@ -770,14 +770,14 @@ G_M30062_IG26: ; bbWeight=15.84, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=004 ble G_M30062_IG10 ;; size=14 bbWeight=15.84 PerfScore 95.04 G_M30062_IG27: ; bbWeight=2, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz
- b SHORT G_M30062_IG45
+ b SHORT G_M30062_IG43
;; size=2 bbWeight=2 PerfScore 2.00 G_M30062_IG28: ; bbWeight=0.16, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz ldr r2, [sp+0x1DC] // [V15 loc8+0x14] ; gcrRegs +[r2] ldr r1, [r2+0x04] cmp r3, r1
- bhs G_M30062_IG71
+ bhs G_M30062_IG69
str r3, [sp+0x188] // [V18 loc11] lsls r1, r3, 3 adds r1, 8 @@ -808,7 +808,7 @@ G_M30062_IG30: ; bbWeight=0.16, isz, extend blx lr // <unknown method> ands r1, r0, 2 cmp r1, 0
- beq G_M30062_IG44
+ beq G_M30062_IG42
;; size=46 bbWeight=0.16 PerfScore 2.56 G_M30062_IG31: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz ldr r1, [sp+0x88] // [V78 cse0] @@ -820,7 +820,7 @@ G_M30062_IG31: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 blx r3 // <unknown method> ands r1, r0, 0x800000 cmp r1, 0
- bne SHORT G_M30062_IG34
+ bne SHORT G_M30062_IG32
ldr r1, [sp+0x88] // [V78 cse0] add r0, sp, 384 // [V19 loc12] movw r4, LOW RELOC 0xD1FFAB1E @@ -865,11 +865,11 @@ G_M30062_IG31: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 ; gcrRegs -[r0] ands r0, r0, 16 cmp r0, 0
- beq G_M30062_IG44
+ beq G_M30062_IG42
ldr r0, [sp+0x7C] // [V42 tmp8] ; gcrRegs +[r0] cmp r0, 0
- beq G_M30062_IG44
+ beq G_M30062_IG42
movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E add r4, pc @@ -884,7 +884,7 @@ G_M30062_IG31: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 blx r3 // <unknown method> ; gcrRegs -[r0] cmp r0, 32
- bne G_M30062_IG44
+ bne G_M30062_IG42
ldr r0, [sp+0x78] ; gcrRegs +[r0] movw r4, LOW RELOC 0xD1FFAB1E @@ -902,19 +902,10 @@ G_M30062_IG31: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 blx r3 // <unknown method> ; gcrRegs -[r0] cmp r0, 32
- bne SHORT G_M30062_IG32 - movs r1, 0 - b SHORT G_M30062_IG33 - ;; size=202 bbWeight=0.08 PerfScore 6.24 -G_M30062_IG32: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref - movs r1, 1 - ;; size=2 bbWeight=0.08 PerfScore 0.08 -G_M30062_IG33: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz - cmp r1, 0 - beq G_M30062_IG44 - b SHORT G_M30062_IG47 - ;; size=8 bbWeight=0.08 PerfScore 0.24 -G_M30062_IG34: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz
+ beq G_M30062_IG42 + b SHORT G_M30062_IG45 + ;; size=202 bbWeight=0.08 PerfScore 6.16 +G_M30062_IG32: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 {r6}, byref, isz
ldr r1, [sp+0x88] // [V78 cse0] add r0, sp, 384 // [V19 loc12] movw r4, LOW RELOC 0xD1FFAB1E @@ -924,7 +915,7 @@ G_M30062_IG34: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 blx r3 // <unknown method> ands r1, r0, 16 cmp r1, 0
- bne G_M30062_IG44
+ bne G_M30062_IG42
ldr r1, [sp+0x2AC] // [V61 tmp27] ; gcrRegs +[r1] adds r1, 8 @@ -958,7 +949,7 @@ G_M30062_IG34: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 movs r3, 0 ldr r2, [r0+0x04] cmp r3, r2
- bhs G_M30062_IG71
+ bhs G_M30062_IG69
ldr r0, [r0+0x08] movw r4, LOW RELOC 0xD1FFAB1E movt r4, HIGH RELOC 0xD1FFAB1E @@ -971,7 +962,7 @@ G_M30062_IG34: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 ldr r3, [sp+0x84] ; gcrRegs +[r3] cmp r3, 0
- beq SHORT G_M30062_IG39
+ beq SHORT G_M30062_IG37
mov r2, r6 ; byrRegs +[r2] str r3, [sp+0x84] @@ -990,7 +981,7 @@ G_M30062_IG34: ; bbWeight=0.08, gcrefRegs=02A0 {r5 r7 r9}, byrefRegs=0040 ...

libraries.pmi.linux.arm.checked.mch

-12 (-4.05%) : 129751.dasm - Microsoft.CodeAnalysis.SmallDictionary2[System.__Canon,System.Nullable1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary2[System.__Canon,System.Nullable1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 7 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 8, 17 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]>
+; V00 this [V00,T04] ( 7, 16 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]>
; V01 arg1 [V01,T13] ( 4, 4 ) ref -> r4 class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]>
-; V02 arg2 [V02,T16] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
+; V02 arg2 [V02,T15] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
; V03 loc0 [V03 ] ( 3, 11 ) struct (12) [sp+0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SmallDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]> ; V04 loc1 [V04 ] ( 4, 8 ) struct (12) [sp+0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]> ; V05 OutArgs [V05 ] ( 1, 1 ) struct ( 8) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" @@ -27,30 +27,27 @@ ; V16 tmp11 [V16 ] ( 3, 11 ) ref -> [sp+0x20] do-not-enreg[X] addr-exposed "field V03._stack (fldOffset=0x0)" P-DEP ; V17 tmp12 [V17 ] ( 3, 11 ) ref -> [sp+0x24] do-not-enreg[X] addr-exposed "field V03._next (fldOffset=0x4)" P-DEP ; V18 tmp13 [V18 ] ( 3, 11 ) ref -> [sp+0x28] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x8)" P-DEP
-; V19 tmp14 [V19,T21] ( 2, 4 ) ubyte -> r9 "field V11.hasValue (fldOffset=0x0)" P-INDEP -; V20 tmp15 [V20,T22] ( 2, 4 ) int -> r10 "field V11.value (fldOffset=0x4)" P-INDEP
+; V19 tmp14 [V19,T19] ( 2, 4 ) ubyte -> r9 "field V11.hasValue (fldOffset=0x0)" P-INDEP +; V20 tmp15 [V20,T20] ( 2, 4 ) int -> r10 "field V11.value (fldOffset=0x4)" P-INDEP
; V21 tmp16 [V21 ] ( 2, 4 ) ref -> [sp+0x08] do-not-enreg[X] addr-exposed "field V12._stack (fldOffset=0x0)" P-DEP ; V22 tmp17 [V22 ] ( 2, 4 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V12._next (fldOffset=0x4)" P-DEP ; V23 tmp18 [V23 ] ( 2, 4 ) ref -> [sp+0x10] do-not-enreg[X] addr-exposed "field V12._current (fldOffset=0x8)" P-DEP
-; V24 tmp19 [V24,T23] ( 2, 4 ) int -> r1 "argument with side effect"
+; V24 tmp19 [V24,T21] ( 2, 4 ) int -> r1 "argument with side effect"
; V25 tmp20 [V25,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V26 tmp21 [V26,T10] ( 2, 8 ) int -> r2 "argument with side effect" ; V27 tmp22 [V27,T11] ( 2, 8 ) int -> r1 "argument with side effect"
-; V28 cse0 [V28,T19] ( 3, 4 ) int -> r7 "CSE - moderate" -;* V29 cse1 [V29,T25] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
+; V28 cse0 [V28,T17] ( 3, 4 ) int -> r7 "CSE - moderate" +;* V29 cse1 [V29,T22] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
; V30 cse2 [V30,T12] ( 4, 4.40) int -> r6 "CSE - aggressive"
-; V31 rat0 [V31,T17] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V32 rat1 [V32,T20] ( 3, 4 ) int -> r7 "runtime lookup"
+; V31 rat0 [V31,T16] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V32 rat1 [V32,T18] ( 3, 4 ) int -> r7 "runtime lookup"
; V33 rat2 [V33,T14] ( 3, 5.60) int -> r7 "fgMakeTemp is creating a new local variable"
-; V34 rat3 [V34,T18] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V35 rat4 [V35,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V36 rat5 [V36,T15] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -;* V37 rat6 [V37,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V38 rat7 [V38,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V39 rat8 [V39,T08] ( 3, 11.20) int -> r4 "fgMakeTemp is creating a new local variable" -; V40 rat9 [V40,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V41 rat10 [V41,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V42 rat11 [V42,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
+;* V34 rat3 [V34,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V35 rat4 [V35,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V36 rat5 [V36,T08] ( 3, 11.20) int -> r4 "fgMakeTemp is creating a new local variable" +; V37 rat6 [V37,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V38 rat7 [V38,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V39 rat8 [V39,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 52 @@ -123,14 +120,8 @@ G_M14191_IG06: ; bbWeight=1, nogc, extend str r0, [sp+0x28] ;; size=12 bbWeight=1 PerfScore 6.00 G_M14191_IG07: ; bbWeight=1, isz, extend
- ldr r0, [r5] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x2C] - cmp r0, 0 - bne SHORT G_M14191_IG12
b SHORT G_M14191_IG12
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M14191_IG08: ; bbWeight=2, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz mov r2, r7 add r1, sp, 20 @@ -217,7 +208,7 @@ G_M14191_IG16: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 296, prolog size 32, PerfScore 235.40, instruction count 114, allocated bytes for code 296 (MethodHash=ea3fc890) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 284, prolog size 32, PerfScore 229.40, instruction count 108, allocated bytes for code 284 (MethodHash=ea3fc890) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
; ============================================================ Unwind Info: @@ -229,7 +220,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 148 (0x00094) Actual length = 296 (0x000128)
+ Function Length : 142 (0x0008e) Actual length = 284 (0x00011c)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

-14 (-2.36%) : 199634.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)

@@ -8,18 +8,18 @@ ; 2 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 9, 15 ) ref -> [sp+0x08] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]>
+; V00 this [V00,T04] ( 8, 14 ) ref -> [sp+0x08] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]>
; V01 arg1 [V01,T05] ( 8, 12 ) ref -> r4 class-hnd single-def <System.Array> ; V02 arg2 [V02,T08] ( 6, 8 ) int -> registers ; V03 loc0 [V03 ] ( 5, 12 ) struct (28) [sp+0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableSortedSet`1+Enumerator[System.__Canon]>
-; V04 loc1 [V04,T23] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
+; V04 loc1 [V04,T21] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
; V05 OutArgs [V05 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V09 tmp4 [V09,T07] ( 3, 12 ) int -> r5 "impSpillLclRefs" ;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V11 tmp6 [V11,T20] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
+; V11 tmp6 [V11,T18] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V14 tmp9 [V14 ] ( 2, 4 ) struct (28) [sp+0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableSortedSet`1+Enumerator[System.__Canon]> @@ -29,27 +29,24 @@ ; V18 tmp13 [V18,T13] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ; V19 tmp14 [V19,T06] ( 3, 12 ) byref -> r9 "Inlining Arg" ;* V20 tmp15 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V21 tmp16 [V21,T29] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V22 tmp17 [V22,T24] ( 2, 4 ) int -> r1 "argument with side effect"
+; V21 tmp16 [V21,T26] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V22 tmp17 [V22,T22] ( 2, 4 ) int -> r1 "argument with side effect"
; V23 tmp18 [V23,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V24 tmp19 [V24,T09] ( 2, 8 ) int -> r1 "argument with side effect" ; V25 tmp20 [V25,T10] ( 2, 8 ) int -> r2 "argument with side effect"
-; V26 PSPSym [V26,T26] ( 1, 1 ) int -> [sp+0x48] do-not-enreg[V] "PSPSym" -; V27 cse0 [V27,T21] ( 3, 4 ) int -> r6 "CSE - moderate"
+; V26 PSPSym [V26,T23] ( 1, 1 ) int -> [sp+0x48] do-not-enreg[V] "PSPSym" +; V27 cse0 [V27,T19] ( 3, 4 ) int -> r6 "CSE - moderate"
; V28 cse1 [V28,T11] ( 3, 6 ) ref -> r1 "CSE - aggressive"
-; V29 rat0 [V29,T17] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" -; V30 rat1 [V30,T22] ( 3, 4 ) int -> r6 "runtime lookup"
+; V29 rat0 [V29,T16] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" +; V30 rat1 [V30,T20] ( 3, 4 ) int -> r6 "runtime lookup"
; V31 rat2 [V31,T14] ( 3, 5.60) int -> r6 "fgMakeTemp is creating a new local variable"
-; V32 rat3 [V32,T18] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V33 rat4 [V33,T25] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V34 rat5 [V34,T15] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V35 rat6 [V35,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V36 rat7 [V36,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V37 rat8 [V37,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V38 rat9 [V38,T19] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V39 rat10 [V39,T16] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V40 rat11 [V40,T27] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" -; V41 rat12 [V41,T28] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
+; V32 rat3 [V32,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V33 rat4 [V33,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V34 rat5 [V34,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V35 rat6 [V35,T17] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V36 rat7 [V36,T15] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V37 rat8 [V37,T24] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" +; V38 rat9 [V38,T25] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 76 @@ -144,20 +141,11 @@ G_M52227_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ;; size=86 bbWeight=1 PerfScore 26.00 G_M52227_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; byrRegs -[r0-r1]
- ldr r2, [sp+0x08] // [V00 this] - ; gcrRegs +[r2] - ldr r0, [r2] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x08] - cmp r0, 0 - bne SHORT G_M52227_IG10
b SHORT G_M52227_IG10
- ;; size=16 bbWeight=1 PerfScore 8.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M52227_IG07: ; bbWeight=2, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r2]
mov r1, r6
- add r0, sp, 40 // [V03 loc0]
+ add r0, sp, 40
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -221,17 +209,17 @@ G_M52227_IG09: ; bbWeight=2, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, b ; gcrRegs -[r0-r1 r7] ; gcr arg pop 0 mov r5, r8
+ ;; size=34 bbWeight=2 PerfScore 26.00 +G_M52227_IG10: ; bbWeight=8, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r2, [sp+0x08] // [V00 this] ; gcrRegs +[r2]
- ;; size=36 bbWeight=2 PerfScore 28.00 -G_M52227_IG10: ; bbWeight=8, gcrefRegs=0014 {r2 r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r2] ldr r1, [r0+0x24] ldr r1, [r1] ldr r1, [r1+0x08] cmp r1, 0 beq SHORT G_M52227_IG12
- ;; size=12 bbWeight=8 PerfScore 48.00
+ ;; size=14 bbWeight=8 PerfScore 56.00
G_M52227_IG11: ; bbWeight=6.40, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r2] b SHORT G_M52227_IG13 @@ -379,7 +367,7 @@ G_M52227_IG28: ; bbWeight=0, funclet epilog, nogc, extend pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 594, prolog size 40, PerfScore 293.20, instruction count 214, allocated bytes for code 594 (MethodHash=24b133fc) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
+; Total bytes of code 580, prolog size 40, PerfScore 292.20, instruction count 207, allocated bytes for code 580 (MethodHash=24b133fc) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
; ============================================================ Unwind Info: @@ -391,7 +379,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 265 (0x00109) Actual length = 530 (0x000212)
+ Function Length : 258 (0x00102) Actual length = 516 (0x000204)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-14 (-2.24%) : 198488.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)

@@ -8,18 +8,18 @@ ; 2 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 9, 15 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]>
+; V00 this [V00,T04] ( 8, 14 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]>
; V01 arg1 [V01,T05] ( 8, 12 ) ref -> r4 class-hnd single-def <System.Array> ; V02 arg2 [V02,T08] ( 6, 8 ) int -> registers ; V03 loc0 [V03 ] ( 5, 12 ) struct (40) [sp+0x3C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableList`1+Enumerator[System.__Canon]>
-; V04 loc1 [V04,T23] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
+; V04 loc1 [V04,T21] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
; V05 OutArgs [V05 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V09 tmp4 [V09,T07] ( 3, 12 ) int -> r5 "impSpillLclRefs" ;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V11 tmp6 [V11,T20] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
+; V11 tmp6 [V11,T18] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V14 tmp9 [V14 ] ( 2, 4 ) struct (40) [sp+0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableList`1+Enumerator[System.__Canon]> @@ -29,27 +29,24 @@ ; V18 tmp13 [V18,T13] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ; V19 tmp14 [V19,T06] ( 3, 12 ) byref -> r9 "Inlining Arg" ;* V20 tmp15 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V21 tmp16 [V21,T29] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V22 tmp17 [V22,T24] ( 2, 4 ) int -> r1 "argument with side effect"
+; V21 tmp16 [V21,T26] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V22 tmp17 [V22,T22] ( 2, 4 ) int -> r1 "argument with side effect"
; V23 tmp18 [V23,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V24 tmp19 [V24,T09] ( 2, 8 ) int -> r1 "argument with side effect" ; V25 tmp20 [V25,T10] ( 2, 8 ) int -> r2 "argument with side effect"
-; V26 PSPSym [V26,T26] ( 1, 1 ) int -> [sp+0x68] do-not-enreg[V] "PSPSym" -; V27 cse0 [V27,T21] ( 3, 4 ) int -> r6 "CSE - moderate"
+; V26 PSPSym [V26,T23] ( 1, 1 ) int -> [sp+0x68] do-not-enreg[V] "PSPSym" +; V27 cse0 [V27,T19] ( 3, 4 ) int -> r6 "CSE - moderate"
; V28 cse1 [V28,T11] ( 3, 6 ) ref -> r1 "CSE - aggressive"
-; V29 rat0 [V29,T17] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" -; V30 rat1 [V30,T22] ( 3, 4 ) int -> r6 "runtime lookup"
+; V29 rat0 [V29,T16] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" +; V30 rat1 [V30,T20] ( 3, 4 ) int -> r6 "runtime lookup"
; V31 rat2 [V31,T14] ( 3, 5.60) int -> r6 "fgMakeTemp is creating a new local variable"
-; V32 rat3 [V32,T18] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V33 rat4 [V33,T25] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V34 rat5 [V34,T15] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V35 rat6 [V35,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V36 rat7 [V36,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V37 rat8 [V37,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V38 rat9 [V38,T19] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V39 rat10 [V39,T16] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V40 rat11 [V40,T27] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" -; V41 rat12 [V41,T28] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
+; V32 rat3 [V32,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V33 rat4 [V33,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V34 rat5 [V34,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V35 rat6 [V35,T17] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V36 rat7 [V36,T15] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V37 rat8 [V37,T24] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" +; V38 rat9 [V38,T25] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 108 @@ -153,20 +150,11 @@ G_M34872_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ;; size=118 bbWeight=1 PerfScore 35.00 G_M34872_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; byrRegs -[r0-r1]
- ldr r2, [sp+0x10] // [V00 this] - ; gcrRegs +[r2] - ldr r0, [r2] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x08] - cmp r0, 0 - bne SHORT G_M34872_IG10
b SHORT G_M34872_IG10
- ;; size=16 bbWeight=1 PerfScore 8.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M34872_IG07: ; bbWeight=2, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r2]
mov r1, r6
- add r0, sp, 60 // [V03 loc0]
+ add r0, sp, 60
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -230,17 +218,17 @@ G_M34872_IG09: ; bbWeight=2, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, b ; gcrRegs -[r0-r1 r7] ; gcr arg pop 0 mov r5, r8
+ ;; size=34 bbWeight=2 PerfScore 26.00 +G_M34872_IG10: ; bbWeight=8, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r2, [sp+0x10] // [V00 this] ; gcrRegs +[r2]
- ;; size=36 bbWeight=2 PerfScore 28.00 -G_M34872_IG10: ; bbWeight=8, gcrefRegs=0014 {r2 r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r2] ldr r1, [r0+0x24] ldr r1, [r1] ldr r1, [r1+0x08] cmp r1, 0 beq SHORT G_M34872_IG12
- ;; size=12 bbWeight=8 PerfScore 48.00
+ ;; size=14 bbWeight=8 PerfScore 56.00
G_M34872_IG11: ; bbWeight=6.40, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r2] b SHORT G_M34872_IG13 @@ -388,7 +376,7 @@ G_M34872_IG28: ; bbWeight=0, funclet epilog, nogc, extend pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 626, prolog size 40, PerfScore 302.20, instruction count 223, allocated bytes for code 626 (MethodHash=a0be77c7) for method System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
+; Total bytes of code 612, prolog size 40, PerfScore 301.20, instruction count 216, allocated bytes for code 612 (MethodHash=a0be77c7) for method System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
; ============================================================ Unwind Info: @@ -400,7 +388,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 281 (0x00119) Actual length = 562 (0x000232)
+ Function Length : 274 (0x00112) Actual length = 548 (0x000224)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 140222.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

+0 (0.00%) : 140219.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:TrimExcess():this (FullOpts)

@@ -9,10 +9,10 @@ ; Final local variable assignments ; ; V00 this [V00,T02] ( 17, 19.50) ref -> r4 this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
-; V01 loc0 [V01,T34] ( 3, 2.50) int -> r5 single-def -; V02 loc1 [V02,T35] ( 3, 2.50) int -> r6 single-def
+; V01 loc0 [V01,T33] ( 3, 2.50) int -> r5 single-def +; V02 loc1 [V02,T34] ( 3, 2.50) int -> r6 single-def
; V03 loc2 [V03 ] ( 5, 12 ) struct ( 8) [sp+0x2C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]>
-; V04 loc3 [V04,T37] ( 2, 2 ) int -> r0 single-def
+; V04 loc3 [V04,T35] ( 2, 2 ) int -> r0 single-def
; V05 loc4 [V05,T24] ( 3, 5 ) int -> r8 single-def ; V06 loc5 [V06 ] ( 2, 2.50) struct ( 8) [sp+0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]> ; V07 loc6 [V07,T17] ( 4, 6.50) int -> r6 @@ -33,9 +33,9 @@ ; V22 tmp11 [V22,T08] ( 3, 12 ) ref -> r10 class-hnd "impAppendStmt" <<unknown class>> ; V23 tmp12 [V23,T09] ( 3, 12 ) ref -> r3 class-hnd "impAppendStmt" <<unknown class>> ;* V24 tmp13 [V24 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V25 tmp14 [V25,T38] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V25 tmp14 [V25,T36] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V26 tmp15 [V26 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V27 tmp16 [V27,T39] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V27 tmp16 [V27,T37] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V28 tmp17 [V28 ] ( 4, 11 ) ref -> [sp+0x2C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V29 tmp18 [V29 ] ( 5, 12 ) int -> [sp+0x30] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP ; V30 tmp19 [V30 ] ( 2, 2.50) ref -> [sp+0x24] do-not-enreg[X] addr-exposed "field V06._items (fldOffset=0x0)" P-DEP @@ -54,21 +54,18 @@ ; V43 rat0 [V43,T25] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" ; V44 rat1 [V44,T26] ( 3, 4 ) int -> r7 "runtime lookup" ; V45 rat2 [V45,T23] ( 3, 5.60) int -> r7 "fgMakeTemp is creating a new local variable"
-;* V46 rat3 [V46,T36] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V47 rat4 [V47,T40] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V48 rat5 [V48,T33] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V49 rat6 [V49,T03] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V50 rat7 [V50,T04] ( 3, 16 ) int -> r1 "runtime lookup" -; V51 rat8 [V51,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V52 rat9 [V52,T29] ( 2, 4 ) int -> r0 "field V38.lo (fldOffset=0x0)" P-INDEP -; V53 rat10 [V53,T30] ( 2, 4 ) int -> r1 "field V38.hi (fldOffset=0x4)" P-INDEP -; V54 rat11 [V54,T10] ( 3, 12 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V55 rat12 [V55 ] ( 1, 4 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V56 rat13 [V56,T31] ( 1, 4 ) int -> r0 "field V55.lo (fldOffset=0x0)" P-INDEP -; V57 rat14 [V57,T21] ( 2, 6 ) int -> r1 "field V55.hi (fldOffset=0x4)" P-INDEP -; V58 rat15 [V58 ] ( 1, 4 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V59 rat16 [V59,T32] ( 1, 4 ) int -> r0 "field V58.lo (fldOffset=0x0)" P-INDEP -; V60 rat17 [V60,T22] ( 2, 6 ) int -> r1 "field V58.hi (fldOffset=0x4)" P-INDEP
+; V46 rat3 [V46,T03] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V47 rat4 [V47,T04] ( 3, 16 ) int -> r1 "runtime lookup" +; V48 rat5 [V48,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V49 rat6 [V49,T29] ( 2, 4 ) int -> r0 "field V38.lo (fldOffset=0x0)" P-INDEP +; V50 rat7 [V50,T30] ( 2, 4 ) int -> r1 "field V38.hi (fldOffset=0x4)" P-INDEP +; V51 rat8 [V51,T10] ( 3, 12 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V52 rat9 [V52 ] ( 1, 4 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V53 rat10 [V53,T31] ( 1, 4 ) int -> r0 "field V52.lo (fldOffset=0x0)" P-INDEP +; V54 rat11 [V54,T21] ( 2, 6 ) int -> r1 "field V52.hi (fldOffset=0x4)" P-INDEP +; V55 rat12 [V55 ] ( 1, 4 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V56 rat13 [V56,T32] ( 1, 4 ) int -> r0 "field V55.lo (fldOffset=0x0)" P-INDEP +; V57 rat14 [V57,T22] ( 2, 6 ) int -> r1 "field V55.hi (fldOffset=0x4)" P-INDEP
; TEMP_01 byref -> [r11-0x54] ; ; Lcl frame size = 60

+0 (0.00%) : 166283.dasm - System.Collections.Concurrent.ConcurrentDictionary2[System.__Canon,System.Nullable1[int]]:CopyToObjects(System.Object[],int):this (FullOpts)

@@ -11,7 +11,7 @@ ; V00 this [V00,T10] ( 4, 4 ) ref -> r5 this class-hnd single-def <System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.Nullable`1[int]]> ; V01 arg1 [V01,T11] ( 3, 18 ) ref -> r6 class-hnd single-def <System.Object[]> ; V02 arg2 [V02,T05] ( 5, 50 ) int -> r4
-; V03 loc0 [V03,T17] ( 3, 6 ) ref -> r7 class-hnd exact single-def <<unknown class>>
+; V03 loc0 [V03,T15] ( 3, 6 ) ref -> r7 class-hnd exact single-def <<unknown class>>
; V04 loc1 [V04,T12] ( 5, 17 ) int -> r8 ;* V05 loc2 [V05 ] ( 0, 0 ) struct ( 4) zero-ref <System.Collections.Concurrent.ConcurrentDictionary`2+VolatileNode[System.__Canon,System.Nullable`1[int]]> ; V06 loc3 [V06,T01] ( 8,104 ) ref -> [sp+0x08] class-hnd <<unknown class>> @@ -22,23 +22,20 @@ ;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp5 [V12,T04] ( 2, 64 ) ref -> [sp+0x04] class-hnd spill-single-def "Inlining Arg" <System.__Canon> ;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Nullable`1[int]>
-; V14 tmp7 [V14,T16] ( 2, 8 ) ref -> r3 "field V05._node (fldOffset=0x0)" P-INDEP
+; V14 tmp7 [V14,T14] ( 2, 8 ) ref -> r3 "field V05._node (fldOffset=0x0)" P-INDEP
; V15 tmp8 [V15,T06] ( 2, 32 ) ubyte -> r1 "field V13.hasValue (fldOffset=0x0)" P-INDEP ; V16 tmp9 [V16,T07] ( 2, 32 ) int -> [sp+0x10] spill-single-def "field V13.value (fldOffset=0x4)" P-INDEP ;* V17 tmp10 [V17 ] ( 0, 0 ) ref -> zero-ref "V08.[000..004)" ; V18 tmp11 [V18,T08] ( 2, 32 ) ubyte -> [sp+0x0C] spill-single-def "V08.[004..005)" ;* V19 tmp12 [V19 ] ( 0, 0 ) int -> zero-ref "V08.[008..012)" ; V20 cse0 [V20,T13] ( 2, 17 ) int -> r10 hoist "CSE - aggressive"
-; V21 cse1 [V21,T18] ( 3, 6 ) int -> r9 "CSE - moderate" -; V22 rat0 [V22,T20] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V23 rat1 [V23,T21] ( 3, 4 ) int -> r10 "runtime lookup" -; V24 rat2 [V24,T19] ( 3, 5.60) int -> r10 "fgMakeTemp is creating a new local variable" -;* V25 rat3 [V25,T15] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V26 rat4 [V26,T22] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V27 rat5 [V27,T14] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V28 rat6 [V28,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V29 rat7 [V29,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V30 rat8 [V30,T02] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V21 cse1 [V21,T16] ( 3, 6 ) int -> r9 "CSE - moderate" +; V22 rat0 [V22,T18] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V23 rat1 [V23,T19] ( 3, 4 ) int -> r10 "runtime lookup" +; V24 rat2 [V24,T17] ( 3, 5.60) int -> r10 "fgMakeTemp is creating a new local variable" +;* V25 rat3 [V25,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V26 rat4 [V26,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V27 rat5 [V27,T02] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 28

libraries_tests.run.linux.arm.Release.mch

-12 (-3.82%) : 89376.dasm - Microsoft.CodeAnalysis.SmallDictionary2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary2[System.Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.Canon]):this (Tier0-FullOpts)

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 7 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 8, 17 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
+; V00 this [V00,T04] ( 7, 16 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
; V01 arg1 [V01,T13] ( 4, 4 ) ref -> r4 class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
-; V02 arg2 [V02,T16] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
+; V02 arg2 [V02,T15] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
; V03 loc0 [V03 ] ( 3, 11 ) struct (12) [sp+0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SmallDictionary`2+Enumerator[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]> ; V04 loc1 [V04 ] ( 5, 10 ) struct (16) [sp+0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]> ; V05 OutArgs [V05 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" @@ -27,31 +27,28 @@ ; V16 tmp11 [V16 ] ( 3, 11 ) ref -> [sp+0x30] do-not-enreg[X] addr-exposed "field V03._stack (fldOffset=0x0)" P-DEP ; V17 tmp12 [V17 ] ( 3, 11 ) ref -> [sp+0x34] do-not-enreg[X] addr-exposed "field V03._next (fldOffset=0x4)" P-DEP ; V18 tmp13 [V18 ] ( 3, 11 ) ref -> [sp+0x38] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x8)" P-DEP
-; V19 tmp14 [V19,T21] ( 2, 4 ) ref -> r9 "field V11.DefaultType (fldOffset=0x0)" P-INDEP -; V20 tmp15 [V20,T22] ( 2, 4 ) ref -> r10 "field V11._extensions (fldOffset=0x4)" P-INDEP -; V21 tmp16 [V21,T23] ( 2, 4 ) ubyte -> [sp+0x10] spill-single-def "field V11.DefaultNullableAnnotation (fldOffset=0x8)" P-INDEP
+; V19 tmp14 [V19,T19] ( 2, 4 ) ref -> r9 "field V11.DefaultType (fldOffset=0x0)" P-INDEP +; V20 tmp15 [V20,T20] ( 2, 4 ) ref -> r10 "field V11._extensions (fldOffset=0x4)" P-INDEP +; V21 tmp16 [V21,T21] ( 2, 4 ) ubyte -> [sp+0x10] spill-single-def "field V11.DefaultNullableAnnotation (fldOffset=0x8)" P-INDEP
; V22 tmp17 [V22 ] ( 2, 4 ) ref -> [sp+0x14] do-not-enreg[X] addr-exposed "field V12._stack (fldOffset=0x0)" P-DEP ; V23 tmp18 [V23 ] ( 2, 4 ) ref -> [sp+0x18] do-not-enreg[X] addr-exposed "field V12._next (fldOffset=0x4)" P-DEP ; V24 tmp19 [V24 ] ( 2, 4 ) ref -> [sp+0x1C] do-not-enreg[X] addr-exposed "field V12._current (fldOffset=0x8)" P-DEP
-; V25 tmp20 [V25,T24] ( 2, 4 ) int -> r1 "argument with side effect"
+; V25 tmp20 [V25,T22] ( 2, 4 ) int -> r1 "argument with side effect"
; V26 tmp21 [V26,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V27 tmp22 [V27,T10] ( 2, 8 ) int -> r2 "argument with side effect" ; V28 tmp23 [V28,T11] ( 2, 8 ) int -> r1 "argument with side effect"
-; V29 cse0 [V29,T19] ( 3, 4 ) int -> r7 "CSE - moderate" -;* V30 cse1 [V30,T26] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
+; V29 cse0 [V29,T17] ( 3, 4 ) int -> r7 "CSE - moderate" +;* V30 cse1 [V30,T23] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
; V31 cse2 [V31,T12] ( 4, 4.40) int -> r6 "CSE - aggressive"
-; V32 rat0 [V32,T17] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V33 rat1 [V33,T20] ( 3, 4 ) int -> r7 "runtime lookup"
+; V32 rat0 [V32,T16] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V33 rat1 [V33,T18] ( 3, 4 ) int -> r7 "runtime lookup"
; V34 rat2 [V34,T14] ( 3, 5.60) int -> r7 "fgMakeTemp is creating a new local variable"
-; V35 rat3 [V35,T18] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V36 rat4 [V36,T25] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V37 rat5 [V37,T15] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -;* V38 rat6 [V38,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V39 rat7 [V39,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V40 rat8 [V40,T08] ( 3, 11.20) int -> r0 "fgMakeTemp is creating a new local variable" -; V41 rat9 [V41,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V42 rat10 [V42,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V43 rat11 [V43,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
+;* V35 rat3 [V35,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V36 rat4 [V36,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V37 rat5 [V37,T08] ( 3, 11.20) int -> r0 "fgMakeTemp is creating a new local variable" +; V38 rat6 [V38,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V39 rat7 [V39,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V40 rat8 [V40,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 68 @@ -123,14 +120,8 @@ G_M40847_IG06: ; bbWeight=1, nogc, extend str r0, [sp+0x38] ;; size=12 bbWeight=1 PerfScore 6.00 G_M40847_IG07: ; bbWeight=1, isz, extend
- ldr r0, [r5] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x18] - cmp r0, 0 - bne SHORT G_M40847_IG12
b SHORT G_M40847_IG12
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M40847_IG08: ; bbWeight=2, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz mov r2, r7 add r1, sp, 32 @@ -226,7 +217,7 @@ G_M40847_IG16: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 314, prolog size 30, PerfScore 246.00, instruction count 119, allocated bytes for code 314 (MethodHash=69926070) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (Tier0-FullOpts)
+; Total bytes of code 302, prolog size 30, PerfScore 240.00, instruction count 113, allocated bytes for code 302 (MethodHash=69926070) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -238,7 +229,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 157 (0x0009d) Actual length = 314 (0x00013a)
+ Function Length : 151 (0x00097) Actual length = 302 (0x00012e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

-10 (-2.99%) : 268701.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (Tier0-FullOpts)

@@ -17,7 +17,7 @@ ; V07 tmp2 [V07,T06] ( 6, 8 ) byref -> registers ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V09 tmp4 [V09,T02] ( 8, 12 ) int -> r2 "VirtualCall with runtime lookup"
-; V10 tmp5 [V10,T12] ( 4, 4 ) int -> r3
+; V10 tmp5 [V10,T12] ( 2, 3.96) int -> r0
; V11 tmp6 [V11,T07] ( 4, 8 ) ref -> r0 "argument with side effect" ; V12 cse0 [V12,T09] ( 5, 7 ) int -> r9 "CSE - aggressive" ; V13 cse1 [V13,T11] ( 4, 5.04) byref -> r10 hoist multi-def "CSE - aggressive" @@ -44,7 +44,7 @@ G_M22994_IG02: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b mov r8, 0 ldr r9, [r7+0x04] cmp r9, 0
- ble G_M22994_IG24
+ ble G_M22994_IG22
cmp r5, 0 beq SHORT G_M22994_IG14 ldr r0, [r5+0x04] @@ -90,7 +90,7 @@ G_M22994_IG04: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0408 {r3 r G_M22994_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0 r5] ; byrRegs -[r3 r7 r10]
- b SHORT G_M22994_IG26
+ b SHORT G_M22994_IG24
;; size=2 bbWeight=0.50 PerfScore 0.50 G_M22994_IG06: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0480 {r7 r10}, byref, isz ; gcrRegs +[r5] @@ -130,15 +130,15 @@ G_M22994_IG09: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0480 {r7 r ; gcr arg pop 0 cmp r0, 0 beq SHORT G_M22994_IG10
- movs r3, 0
+ movs r0, 0
b SHORT G_M22994_IG11 ;; size=22 bbWeight=1.98 PerfScore 19.80 G_M22994_IG10: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref
- movs r3, 1
+ movs r0, 1
;; size=2 bbWeight=1.98 PerfScore 1.98 G_M22994_IG11: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref, isz
- cmp r3, 0 - bne SHORT G_M22994_IG26
+ cmp r0, 0 + bne SHORT G_M22994_IG24
;; size=4 bbWeight=1.98 PerfScore 3.96 G_M22994_IG12: ; bbWeight=3.96, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref, isz add r8, r8, 1 @@ -148,7 +148,7 @@ G_M22994_IG12: ; bbWeight=3.96, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10} G_M22994_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r5] ; byrRegs -[r10]
- b SHORT G_M22994_IG24
+ b SHORT G_M22994_IG22
;; size=2 bbWeight=1 PerfScore 1.00 G_M22994_IG14: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[r5 r7] @@ -180,7 +180,7 @@ G_M22994_IG15: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0008 {r ldr r0, [r5+0x04] ; gcrRegs -[r0] cmp r8, r0
- bhs SHORT G_M22994_IG28
+ bhs SHORT G_M22994_IG26
add r0, r5, 8 ; byrRegs +[r0] lsl r1, r8, 2 @@ -188,12 +188,12 @@ G_M22994_IG15: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0008 {r ; gcrRegs +[r0] ; byrRegs -[r0] cmp r0, 0
- beq SHORT G_M22994_IG23
+ beq SHORT G_M22994_IG21
;; size=32 bbWeight=0.02 PerfScore 0.28 G_M22994_IG16: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0 r5 r7] ; byrRegs -[r3-r4]
- b SHORT G_M22994_IG26
+ b SHORT G_M22994_IG24
;; size=2 bbWeight=0.01 PerfScore 0.01 G_M22994_IG17: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0010 {r4}, byref, isz ; gcrRegs +[r5 r7] @@ -221,7 +221,7 @@ G_M22994_IG20: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0010 {r ; gcrRegs +[r0] ldr r1, [r5+0x04] cmp r8, r1
- bhs SHORT G_M22994_IG28
+ bhs SHORT G_M22994_IG26
add r1, r5, 8 ; byrRegs +[r1] lsl r3, r8, 2 @@ -235,38 +235,29 @@ G_M22994_IG20: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0010 {r ; gcrRegs -[r0-r1] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M22994_IG21 - movs r3, 0 - b SHORT G_M22994_IG22 - ;; size=32 bbWeight=0.02 PerfScore 0.28 -G_M22994_IG21: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref - movs r3, 1 - ;; size=2 bbWeight=0.02 PerfScore 0.02 -G_M22994_IG22: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz - cmp r3, 0 - bne SHORT G_M22994_IG26 - ;; size=4 bbWeight=0.02 PerfScore 0.04 -G_M22994_IG23: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M22994_IG24 + ;; size=28 bbWeight=0.02 PerfScore 0.24 +G_M22994_IG21: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
add r8, r8, 1 cmp r9, r8 bgt SHORT G_M22994_IG14 ;; size=8 bbWeight=0.04 PerfScore 0.12
-G_M22994_IG24: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M22994_IG22: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r5 r7] movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50
+G_M22994_IG23: ; bbWeight=0.50, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} + ;; size=6 bbWeight=0.50 PerfScore 1.00 +G_M22994_IG24: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + movs r0, 0 + ;; size=2 bbWeight=0.50 PerfScore 0.50
G_M22994_IG25: ; bbWeight=0.50, epilog, nogc, extend add sp, 12 pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=0.50 PerfScore 1.00
-G_M22994_IG26: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - movs r0, 0 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M22994_IG27: ; bbWeight=0.50, epilog, nogc, extend - add sp, 12 - pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00 -G_M22994_IG28: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M22994_IG26: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_RNGCHKFAIL @@ -274,7 +265,7 @@ G_M22994_IG28: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref bkpt ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 334, prolog size 24, PerfScore 127.69, instruction count 134, allocated bytes for code 334 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
+; Total bytes of code 324, prolog size 24, PerfScore 127.59, instruction count 129, allocated bytes for code 324 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -286,7 +277,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 167 (0x000a7) Actual length = 334 (0x00014e)
+ Function Length : 162 (0x000a2) Actual length = 324 (0x000144)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-14 (-2.36%) : 213941.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (Tier0-FullOpts)

@@ -8,18 +8,18 @@ ; 5 inlinees with PGO data; 7 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 9, 15 ) ref -> [sp+0x08] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]>
+; V00 this [V00,T04] ( 8, 14 ) ref -> [sp+0x08] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]>
; V01 arg1 [V01,T05] ( 8, 12 ) ref -> r4 class-hnd single-def <System.Array> ; V02 arg2 [V02,T08] ( 6, 8 ) int -> registers ; V03 loc0 [V03 ] ( 5, 12 ) struct (28) [sp+0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableSortedSet`1+Enumerator[System.__Canon]>
-; V04 loc1 [V04,T22] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
+; V04 loc1 [V04,T20] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
; V05 OutArgs [V05 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V09 tmp4 [V09,T07] ( 3, 12 ) int -> r5 "impSpillLclRefs" ;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V11 tmp6 [V11,T19] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
+; V11 tmp6 [V11,T17] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V14 tmp9 [V14 ] ( 2, 4 ) struct (28) [sp+0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableSortedSet`1+Enumerator[System.__Canon]> @@ -28,26 +28,23 @@ ;* V17 tmp12 [V17 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ; V18 tmp13 [V18,T12] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ; V19 tmp14 [V19,T06] ( 3, 12 ) byref -> r9 "Inlining Arg"
-; V20 tmp15 [V20,T28] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V21 tmp16 [V21,T23] ( 2, 4 ) int -> r1 "argument with side effect"
+; V20 tmp15 [V20,T25] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V21 tmp16 [V21,T21] ( 2, 4 ) int -> r1 "argument with side effect"
; V22 tmp17 [V22,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V23 tmp18 [V23,T09] ( 2, 8 ) int -> r1 "argument with side effect" ; V24 tmp19 [V24,T10] ( 2, 8 ) int -> r2 "argument with side effect"
-; V25 PSPSym [V25,T25] ( 1, 1 ) int -> [sp+0x48] do-not-enreg[V] "PSPSym" -; V26 cse0 [V26,T20] ( 3, 4 ) int -> r6 "CSE - moderate" -; V27 rat0 [V27,T16] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" -; V28 rat1 [V28,T21] ( 3, 4 ) int -> r6 "runtime lookup"
+; V25 PSPSym [V25,T22] ( 1, 1 ) int -> [sp+0x48] do-not-enreg[V] "PSPSym" +; V26 cse0 [V26,T18] ( 3, 4 ) int -> r6 "CSE - moderate" +; V27 rat0 [V27,T15] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" +; V28 rat1 [V28,T19] ( 3, 4 ) int -> r6 "runtime lookup"
; V29 rat2 [V29,T13] ( 3, 5.60) int -> r6 "fgMakeTemp is creating a new local variable"
-; V30 rat3 [V30,T17] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V31 rat4 [V31,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V32 rat5 [V32,T14] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V33 rat6 [V33,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V34 rat7 [V34,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V35 rat8 [V35,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V36 rat9 [V36,T18] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V37 rat10 [V37,T15] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V38 rat11 [V38,T26] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" -; V39 rat12 [V39,T27] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
+; V30 rat3 [V30,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V31 rat4 [V31,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V32 rat5 [V32,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V33 rat6 [V33,T16] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V34 rat7 [V34,T14] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V35 rat8 [V35,T23] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" +; V36 rat9 [V36,T24] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 76 @@ -129,20 +126,11 @@ G_M52227_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ;; size=86 bbWeight=1 PerfScore 26.00 G_M52227_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; byrRegs -[r0-r1]
- ldr r2, [sp+0x08] // [V00 this] - ; gcrRegs +[r2] - ldr r0, [r2] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x18] - cmp r0, 0 - bne SHORT G_M52227_IG09
b SHORT G_M52227_IG09
- ;; size=16 bbWeight=1 PerfScore 8.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M52227_IG05: ; bbWeight=2, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r2]
mov r1, r6
- add r0, sp, 40 // [V03 loc0]
+ add r0, sp, 40
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -206,17 +194,17 @@ G_M52227_IG08: ; bbWeight=2, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, b ; gcrRegs -[r0-r1 r7] ; gcr arg pop 0 mov r5, r8
+ ;; size=34 bbWeight=2 PerfScore 26.00 +G_M52227_IG09: ; bbWeight=8, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r2, [sp+0x08] // [V00 this] ; gcrRegs +[r2]
- ;; size=36 bbWeight=2 PerfScore 28.00 -G_M52227_IG09: ; bbWeight=8, gcrefRegs=0014 {r2 r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r2] ldr r1, [r0+0x24] ldr r1, [r1] ldr r1, [r1+0x18] cmp r1, 0 beq SHORT G_M52227_IG11
- ;; size=12 bbWeight=8 PerfScore 48.00
+ ;; size=14 bbWeight=8 PerfScore 56.00
G_M52227_IG10: ; bbWeight=6.40, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r2] b SHORT G_M52227_IG12 @@ -377,7 +365,7 @@ G_M52227_IG28: ; bbWeight=0, funclet epilog, nogc, extend pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 592, prolog size 40, PerfScore 292.60, instruction count 214, allocated bytes for code 592 (MethodHash=24b133fc) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (Tier0-FullOpts)
+; Total bytes of code 578, prolog size 40, PerfScore 291.60, instruction count 207, allocated bytes for code 578 (MethodHash=24b133fc) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (Tier0-FullOpts)
; ============================================================ Unwind Info: @@ -389,7 +377,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 264 (0x00108) Actual length = 528 (0x000210)
+ Function Length : 257 (0x00101) Actual length = 514 (0x000202)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 232822.dasm - System.Collections.Generic.HashSet1[System.ValueTuple2[System.Canon,int]]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.ValueTuple2[System.Canon,int]],ubyte):System.ValueTuple`2[int,int]:this (Tier0-FullOpts)

@@ -12,21 +12,21 @@ ; V01 RetBuf [V01,T06] ( 6, 4 ) byref -> r5 single-def ; V02 arg1 [V02,T12] ( 4, 3 ) ref -> r7 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]> ; V03 arg2 [V03,T07] ( 3, 4 ) ubyte -> r6 single-def
-; V04 loc0 [V04,T36] ( 3, 1.50) int -> r0
+; V04 loc0 [V04,T34] ( 3, 1.50) int -> r0
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op <System.Collections.Generic.BitHelper> ; V08 loc4 [V08,T13] ( 4, 5 ) int -> [r11-0x28] ; V09 loc5 [V09,T14] ( 4, 5 ) int -> [r11-0x2C]
-; V10 loc6 [V10,T37] ( 3, 1.50) int -> r6 -; V11 loc7 [V11,T33] ( 6, 1.50) ref -> [r11-0x50] class-hnd EH-live single-def <<unknown class>>
+; V10 loc6 [V10,T35] ( 3, 1.50) int -> r6 +; V11 loc7 [V11,T31] ( 6, 1.50) ref -> [r11-0x50] class-hnd EH-live single-def <<unknown class>>
; V12 loc8 [V12 ] ( 1, 0.50) struct ( 8) [r11-0x34] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]> ;* V13 loc9 [V13 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[int]> ; V14 loc10 [V14,T05] ( 7, 9 ) ref -> [r11-0x54] class-hnd EH-live single-def <<unknown class>> ; V15 loc11 [V15 ] ( 3, 12 ) struct ( 8) [r11-0x3C] do-not-enreg[XSA] multireg-arg must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]> ; V16 loc12 [V16,T04] ( 6, 14.92) int -> r4 ;# V17 OutArgs [V17 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V18 tmp1 [V18,T38] ( 2, 1 ) int -> r0
+; V18 tmp1 [V18,T36] ( 2, 1 ) int -> r0
;* V19 tmp2 [V19 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V20 tmp3 [V20 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper> ;* V21 tmp4 [V21 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> @@ -46,14 +46,14 @@ ;* V35 tmp18 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V36 tmp19 [V36 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V37 tmp20 [V37,T17] ( 8, 4 ) int -> r8 "Inline return value spill temp"
-; V38 tmp21 [V38,T31] ( 2, 2 ) int -> r3 "Inlining Arg"
+; V38 tmp21 [V38,T29] ( 2, 2 ) int -> r3 "Inlining Arg"
; V39 tmp22 [V39,T22] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <int[]> ;* V40 tmp23 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V41 tmp24 [V41 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> ;* V42 tmp25 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V43 tmp26 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V44 tmp27 [V44 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V45 tmp28 [V45,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V45 tmp28 [V45,T30] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V46 tmp29 [V46,T08] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ;* V47 tmp30 [V47 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]> ; V48 tmp31 [V48,T15] ( 3, 4.92) int -> r0 "Inline stloc first use temp" @@ -67,18 +67,18 @@ ;* V56 tmp39 [V56 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP ; V57 tmp40 [V57 ] ( 2, 8 ) ref -> [r11-0x3C] do-not-enreg[X] addr-exposed "field V15.Item1 (fldOffset=0x0)" P-DEP ; V58 tmp41 [V58 ] ( 2, 8 ) int -> [r11-0x38] do-not-enreg[X] addr-exposed "field V15.Item2 (fldOffset=0x4)" P-DEP
-; V59 tmp42 [V59,T34] ( 3, 1.50) byref -> [r11-0x5C] spill-single-def "field V19._reference (fldOffset=0x0)" P-INDEP
+; V59 tmp42 [V59,T32] ( 3, 1.50) byref -> [r11-0x5C] spill-single-def "field V19._reference (fldOffset=0x0)" P-INDEP
;* V60 tmp43 [V60 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x4)" P-INDEP ;* V61 tmp44 [V61 ] ( 0, 0 ) byref -> zero-ref "field V21._reference (fldOffset=0x0)" P-INDEP ;* V62 tmp45 [V62 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x4)" P-INDEP
-; V63 tmp46 [V63,T41] ( 2, 1 ) int -> r7 "field V27.Item1 (fldOffset=0x0)" P-INDEP -; V64 tmp47 [V64,T42] ( 2, 1 ) int -> r2 "field V27.Item2 (fldOffset=0x4)" P-INDEP
+; V63 tmp46 [V63,T39] ( 2, 1 ) int -> r7 "field V27.Item1 (fldOffset=0x0)" P-INDEP +; V64 tmp47 [V64,T40] ( 2, 1 ) int -> r2 "field V27.Item2 (fldOffset=0x4)" P-INDEP
;* V65 tmp48 [V65 ] ( 0, 0 ) byref -> zero-ref "field V29._reference (fldOffset=0x0)" P-INDEP ;* V66 tmp49 [V66 ] ( 0, 0 ) int -> zero-ref "field V29._length (fldOffset=0x4)" P-INDEP
-;* V67 tmp50 [V67,T47] ( 0, 0 ) int -> zero-ref "field V34.Item1 (fldOffset=0x0)" P-INDEP -; V68 tmp51 [V68,T43] ( 2, 1 ) int -> r6 "field V34.Item2 (fldOffset=0x4)" P-INDEP -; V69 tmp52 [V69,T40] ( 2, 1 ) byref -> r8 "field V40._reference (fldOffset=0x0)" P-INDEP -; V70 tmp53 [V70,T44] ( 2, 1 ) int -> r3 "field V40._length (fldOffset=0x4)" P-INDEP
+;* V67 tmp50 [V67,T44] ( 0, 0 ) int -> zero-ref "field V34.Item1 (fldOffset=0x0)" P-INDEP +; V68 tmp51 [V68,T41] ( 2, 1 ) int -> r6 "field V34.Item2 (fldOffset=0x4)" P-INDEP +; V69 tmp52 [V69,T38] ( 2, 1 ) byref -> r8 "field V40._reference (fldOffset=0x0)" P-INDEP +; V70 tmp53 [V70,T42] ( 2, 1 ) int -> r3 "field V40._length (fldOffset=0x4)" P-INDEP
;* V71 tmp54 [V71 ] ( 0, 0 ) byref -> zero-ref "field V41._reference (fldOffset=0x0)" P-INDEP ;* V72 tmp55 [V72 ] ( 0, 0 ) int -> zero-ref "field V41._length (fldOffset=0x4)" P-INDEP ;* V73 tmp56 [V73 ] ( 0, 0 ) byref -> zero-ref single-def "field V42._reference (fldOffset=0x0)" P-INDEP @@ -91,23 +91,20 @@ ;* V80 tmp63 [V80 ] ( 0, 0 ) int -> zero-ref "field V49._length (fldOffset=0x4)" P-INDEP ; V81 tmp64 [V81,T18] ( 3, 3.42) byref -> r8 single-def "V07.[000..004)" ; V82 tmp65 [V82,T16] ( 3, 4.50) int -> [r11-0x40] spill-single-def "V07.[004..008)"
-; V83 tmp66 [V83,T35] ( 3, 1.50) byref -> registers "V22.[000..004)" -; V84 tmp67 [V84,T39] ( 3, 1.50) int -> registers "V22.[004..008)"
+; V83 tmp66 [V83,T33] ( 3, 1.50) byref -> registers "V22.[000..004)" +; V84 tmp67 [V84,T37] ( 3, 1.50) int -> registers "V22.[004..008)"
; V85 GsCookie [V85 ] ( 1, 1 ) int -> [r11-0x60] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V86 PSPSym [V86,T46] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
+; V86 PSPSym [V86,T43] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
; V87 cse0 [V87,T09] ( 3, 6 ) int -> [r11-0x44] spill-single-def "CSE - moderate" ; V88 cse1 [V88,T10] ( 3, 6 ) int -> [r11-0x48] spill-single-def "CSE - moderate"
-; V89 rat0 [V89,T27] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat0 [V89,T26] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V90 rat1 [V90,T23] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V91 rat2 [V91,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V91 rat2 [V91,T27] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V92 rat3 [V92,T24] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V93 rat4 [V93,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V93 rat4 [V93,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V94 rat5 [V94,T25] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V95 rat6 [V95,T30] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat7 [V96,T45] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat8 [V97,T26] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat9 [V98,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V99 rat10 [V99,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
+; V95 rat6 [V95,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V96 rat7 [V96,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [r11-0x64] ; ; Lcl frame size = 76 @@ -176,7 +173,7 @@ G_M10461_IG06: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, str r8, [r9+0x18] ; GC ptr vars +{V11} ;; size=14 bbWeight=0.50 PerfScore 3.00
-G_M10461_IG07: ; bbWeight=0.50, gcVars=0000000200000008 {V00 V11}, gcrefRegs=0100 {r8}, byrefRegs=0020 {r5}, gcvars, byref, isz
+G_M10461_IG07: ; bbWeight=0.50, gcVars=0000000080000008 {V00 V11}, gcrefRegs=0100 {r8}, byrefRegs=0020 {r5}, gcvars, byref, isz
; gcrRegs -[r0] mov r0, r8 ; gcrRegs +[r0] @@ -322,7 +319,7 @@ G_M10461_IG19: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ldr r3, [r0+0x04] b SHORT G_M10461_IG23 ;; size=44 bbWeight=0.50 PerfScore 7.50
-G_M10461_IG20: ; bbWeight=0.50, gcVars=0000000400000008 {V00 V59}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
+G_M10461_IG20: ; bbWeight=0.50, gcVars=0000000100000008 {V00 V59}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
; gcrRegs -[r0] ; byrRegs -[r8] ; GC ptr vars +{V59} @@ -614,14 +611,14 @@ G_M10461_IG43: ; bbWeight=0, gcVars=0000000000000008 {V00}, gcrefRegs=001 ; gcr arg pop 0 bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M10461_IG44: ; bbWeight=0, gcVars=0000000200000008 {V00 V11}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
+G_M10461_IG44: ; bbWeight=0, gcVars=0000000080000008 {V00 V11}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
; gcrRegs -[r4]
- ; GC ptr vars +{V11 V33}
+ ; GC ptr vars +{V11 V31}
push {r3,r4,r5,r6,r7,r8,r9,r10,r11,lr} add r3, r11, 8 str r3, [sp] ;; size=10 bbWeight=0 PerfScore 0.00
-G_M10461_IG45: ; bbWeight=0, gcVars=0000000200000008 {V00 V11}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M10461_IG45: ; bbWeight=0, gcVars=0000000080000008 {V00 V11}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr r0, [r11-0x50] // [V11 loc7] ; gcrRegs +[r0] cmp r0, 0 @@ -629,7 +626,7 @@ G_M10461_IG45: ; bbWeight=0, gcVars=0000000200000008 {V00 V11}, gcrefRegs movw r4, 0xd1ff movt r4, 0xd1ff ldr r3, [r4]
- ; GC ptr vars -{V11 V33}
+ ; GC ptr vars -{V11 V31}
blx r3 // <unknown method> ; gcrRegs -[r0] ; gcr arg pop 0

+0 (0.00%) : 203623.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.Canon,System.Canon]:CopyToObjects(System.Object[],int):this (Tier0-FullOpts)

@@ -11,7 +11,7 @@ ; V00 this [V00,T10] ( 4, 4 ) ref -> r5 this class-hnd single-def <System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]> ; V01 arg1 [V01,T11] ( 3, 18 ) ref -> r6 class-hnd single-def <System.Object[]> ; V02 arg2 [V02,T06] ( 5, 50 ) int -> r4
-; V03 loc0 [V03,T17] ( 3, 6 ) ref -> r7 class-hnd exact single-def <<unknown class>>
+; V03 loc0 [V03,T15] ( 3, 6 ) ref -> r7 class-hnd exact single-def <<unknown class>>
; V04 loc1 [V04,T12] ( 5, 17 ) int -> r8 ;* V05 loc2 [V05 ] ( 0, 0 ) struct ( 4) zero-ref <System.Collections.Concurrent.ConcurrentDictionary`2+VolatileNode[System.__Canon,System.__Canon]> ; V06 loc3 [V06,T02] ( 7, 88 ) ref -> [sp+0x08] class-hnd <<unknown class>> @@ -22,20 +22,17 @@ ;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp5 [V12,T04] ( 2, 64 ) ref -> r2 class-hnd "Inlining Arg" <System.__Canon> ; V13 tmp6 [V13,T05] ( 2, 64 ) ref -> r1 class-hnd "Inlining Arg" <System.__Canon>
-; V14 tmp7 [V14,T16] ( 2, 8 ) ref -> r3 "field V05._node (fldOffset=0x0)" P-INDEP
+; V14 tmp7 [V14,T14] ( 2, 8 ) ref -> r3 "field V05._node (fldOffset=0x0)" P-INDEP
; V15 tmp8 [V15,T07] ( 2, 32 ) ref -> [sp+0x04] spill-single-def "field V08.key (fldOffset=0x0)" P-INDEP ; V16 tmp9 [V16,T08] ( 2, 32 ) ref -> [sp+0x00] spill-single-def "field V08.value (fldOffset=0x4)" P-INDEP ; V17 cse0 [V17,T13] ( 2, 17 ) int -> r10 hoist "CSE - aggressive"
-; V18 cse1 [V18,T18] ( 3, 6 ) int -> r9 "CSE - moderate" -; V19 rat0 [V19,T20] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,T21] ( 3, 4 ) int -> r10 "runtime lookup" -; V21 rat2 [V21,T19] ( 3, 5.60) int -> r10 "fgMakeTemp is creating a new local variable" -;* V22 rat3 [V22,T15] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V23 rat4 [V23,T22] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V24 rat5 [V24,T14] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V25 rat6 [V25,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V26 rat7 [V26,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V27 rat8 [V27,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V18 cse1 [V18,T16] ( 3, 6 ) int -> r9 "CSE - moderate" +; V19 rat0 [V19,T18] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V20 rat1 [V20,T19] ( 3, 4 ) int -> r10 "runtime lookup" +; V21 rat2 [V21,T17] ( 3, 5.60) int -> r10 "fgMakeTemp is creating a new local variable" +;* V22 rat3 [V22,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V23 rat4 [V23,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V24 rat5 [V24,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 20

+0 (0.00%) : 19260.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (Tier0-FullOpts)

@@ -17,7 +17,7 @@ ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ; V07 loc3 [V07,T14] ( 4, 5 ) int -> [r11-0x28] ; V08 loc4 [V08,T15] ( 4, 5 ) int -> [r11-0x2C]
-; V09 loc5 [V09,T36] ( 3, 1.50) int -> r6
+; V09 loc5 [V09,T34] ( 3, 1.50) int -> r6
; V10 loc6 [V10,T07] ( 13, 11.50) ref -> [r11-0x38] do-not-enreg[M] class-hnd EH-live <<unknown class>> ;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V12 loc8 [V12,T05] ( 5, 14 ) int -> r4 @@ -40,31 +40,31 @@ ;* V29 tmp16 [V29 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ; V30 tmp17 [V30,T18] ( 8, 4 ) int -> r8 "Inline return value spill temp" ; V31 tmp18 [V31,T23] ( 3, 3 ) int -> r0 "Inlining Arg"
-; V32 tmp19 [V32,T32] ( 2, 2 ) int -> r3 "Inlining Arg"
+; V32 tmp19 [V32,T30] ( 2, 2 ) int -> r3 "Inlining Arg"
; V33 tmp20 [V33,T22] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <int[]> ;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> ;* V36 tmp23 [V36 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V37 tmp24 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V38 tmp25 [V38 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V39 tmp26 [V39,T33] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V39 tmp26 [V39,T31] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V40 tmp27 [V40,T10] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ; V41 tmp28 [V41,T11] ( 3, 6 ) int -> r7 "Inline stloc first use temp" ; V42 tmp29 [V42,T06] ( 3, 12 ) byref -> r7 "dup spill" ;* V43 tmp30 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V44 tmp31 [V44 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V45 tmp32 [V45,T34] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+; V45 tmp32 [V45,T32] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
;* V46 tmp33 [V46 ] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x4)" P-INDEP ;* V47 tmp34 [V47 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP ;* V48 tmp35 [V48 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x4)" P-INDEP
-; V49 tmp36 [V49,T39] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP -; V50 tmp37 [V50,T40] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
+; V49 tmp36 [V49,T37] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP +; V50 tmp37 [V50,T38] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
;* V51 tmp38 [V51 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP ;* V52 tmp39 [V52 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x4)" P-INDEP
-;* V53 tmp40 [V53,T45] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP -; V54 tmp41 [V54,T41] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP -; V55 tmp42 [V55,T38] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP -; V56 tmp43 [V56,T42] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
+;* V53 tmp40 [V53,T42] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP +; V54 tmp41 [V54,T39] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP +; V55 tmp42 [V55,T36] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP +; V56 tmp43 [V56,T40] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
;* V57 tmp44 [V57 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP ;* V58 tmp45 [V58 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x4)" P-INDEP ;* V59 tmp46 [V59 ] ( 0, 0 ) byref -> zero-ref single-def "field V36._reference (fldOffset=0x0)" P-INDEP @@ -73,23 +73,20 @@ ;* V62 tmp49 [V62 ] ( 0, 0 ) int -> zero-ref single-def "field V38._length (fldOffset=0x4)" P-INDEP ; V63 tmp50 [V63,T16] ( 3, 4.50) byref -> r8 single-def "V06.[000..004)" ; V64 tmp51 [V64,T17] ( 3, 4.50) int -> [r11-0x30] spill-single-def "V06.[004..008)"
-; V65 tmp52 [V65,T35] ( 3, 1.50) byref -> registers "V17.[000..004)" -; V66 tmp53 [V66,T37] ( 3, 1.50) int -> registers "V17.[004..008)"
+; V65 tmp52 [V65,T33] ( 3, 1.50) byref -> registers "V17.[000..004)" +; V66 tmp53 [V66,T35] ( 3, 1.50) int -> registers "V17.[004..008)"
; V67 tmp54 [V67,T03] ( 2, 16 ) ref -> r1 "argument with side effect" ; V68 GsCookie [V68 ] ( 1, 1 ) int -> [r11-0x40] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V69 PSPSym [V69,T44] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
+; V69 PSPSym [V69,T41] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
; V70 cse0 [V70,T12] ( 3, 6 ) int -> r7 "CSE - aggressive"
-; V71 rat0 [V71,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V71 rat0 [V71,T27] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V72 rat1 [V72,T24] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V73 rat2 [V73,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V73 rat2 [V73,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V74 rat3 [V74,T25] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V75 rat4 [V75,T30] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V75 rat4 [V75,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V76 rat5 [V76,T26] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V77 rat6 [V77,T31] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V78 rat7 [V78,T43] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V79 rat8 [V79,T27] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V80 rat9 [V80,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V81 rat10 [V81,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
+; V77 rat6 [V77,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V78 rat7 [V78,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [r11-0x44] ; ; Lcl frame size = 44 @@ -272,10 +269,10 @@ G_M62176_IG16: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ldr r3, [r0+0x04] b SHORT G_M62176_IG20 ;; size=48 bbWeight=0.50 PerfScore 8.50
-G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000400000010 {V00 V45}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
+G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000100000010 {V00 V45}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
; gcrRegs -[r0] ; byrRegs -[r8]
- ; GC ptr vars +{V45}
+ ; GC ptr vars +{V32 V45}
cmp r8, 100 bhi G_M62176_IG37 cmp r8, 0 @@ -309,7 +306,7 @@ G_M62176_IG19: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ;; size=40 bbWeight=0.50 PerfScore 6.50 G_M62176_IG20: ; bbWeight=0.50, gcVars=0000000000000010 {V00}, gcrefRegs=0090 {r4 r7}, byrefRegs=0120 {r5 r8}, gcvars, byref, isz ; byrRegs -[r0]
- ; GC ptr vars -{V45}
+ ; GC ptr vars -{V32 V45}
str r3, [r9+0x18] // [V64 tmp51] movs r2, 0 str r2, [r9+0x20] // [V07 loc3]

librariestestsnotieredcompilation.run.linux.arm.Release.mch

-12 (-3.82%) : 23908.dasm - Microsoft.CodeAnalysis.SmallDictionary2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary2[System.Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.Canon]):this (FullOpts)

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 7 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 8, 17 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
+; V00 this [V00,T04] ( 7, 16 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
; V01 arg1 [V01,T13] ( 4, 4 ) ref -> r4 class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
-; V02 arg2 [V02,T16] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
+; V02 arg2 [V02,T15] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
; V03 loc0 [V03 ] ( 3, 11 ) struct (12) [sp+0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SmallDictionary`2+Enumerator[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]> ; V04 loc1 [V04 ] ( 5, 10 ) struct (16) [sp+0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]> ; V05 OutArgs [V05 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" @@ -27,31 +27,28 @@ ; V16 tmp11 [V16 ] ( 3, 11 ) ref -> [sp+0x30] do-not-enreg[X] addr-exposed "field V03._stack (fldOffset=0x0)" P-DEP ; V17 tmp12 [V17 ] ( 3, 11 ) ref -> [sp+0x34] do-not-enreg[X] addr-exposed "field V03._next (fldOffset=0x4)" P-DEP ; V18 tmp13 [V18 ] ( 3, 11 ) ref -> [sp+0x38] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x8)" P-DEP
-; V19 tmp14 [V19,T21] ( 2, 4 ) ref -> r9 "field V11.DefaultType (fldOffset=0x0)" P-INDEP -; V20 tmp15 [V20,T22] ( 2, 4 ) ref -> r10 "field V11._extensions (fldOffset=0x4)" P-INDEP -; V21 tmp16 [V21,T23] ( 2, 4 ) ubyte -> [sp+0x10] spill-single-def "field V11.DefaultNullableAnnotation (fldOffset=0x8)" P-INDEP
+; V19 tmp14 [V19,T19] ( 2, 4 ) ref -> r9 "field V11.DefaultType (fldOffset=0x0)" P-INDEP +; V20 tmp15 [V20,T20] ( 2, 4 ) ref -> r10 "field V11._extensions (fldOffset=0x4)" P-INDEP +; V21 tmp16 [V21,T21] ( 2, 4 ) ubyte -> [sp+0x10] spill-single-def "field V11.DefaultNullableAnnotation (fldOffset=0x8)" P-INDEP
; V22 tmp17 [V22 ] ( 2, 4 ) ref -> [sp+0x14] do-not-enreg[X] addr-exposed "field V12._stack (fldOffset=0x0)" P-DEP ; V23 tmp18 [V23 ] ( 2, 4 ) ref -> [sp+0x18] do-not-enreg[X] addr-exposed "field V12._next (fldOffset=0x4)" P-DEP ; V24 tmp19 [V24 ] ( 2, 4 ) ref -> [sp+0x1C] do-not-enreg[X] addr-exposed "field V12._current (fldOffset=0x8)" P-DEP
-; V25 tmp20 [V25,T24] ( 2, 4 ) int -> r1 "argument with side effect"
+; V25 tmp20 [V25,T22] ( 2, 4 ) int -> r1 "argument with side effect"
; V26 tmp21 [V26,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V27 tmp22 [V27,T10] ( 2, 8 ) int -> r2 "argument with side effect" ; V28 tmp23 [V28,T11] ( 2, 8 ) int -> r1 "argument with side effect"
-; V29 cse0 [V29,T19] ( 3, 4 ) int -> r7 "CSE - moderate" -;* V30 cse1 [V30,T26] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
+; V29 cse0 [V29,T17] ( 3, 4 ) int -> r7 "CSE - moderate" +;* V30 cse1 [V30,T23] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
; V31 cse2 [V31,T12] ( 4, 4.40) int -> r6 "CSE - aggressive"
-; V32 rat0 [V32,T17] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V33 rat1 [V33,T20] ( 3, 4 ) int -> r7 "runtime lookup"
+; V32 rat0 [V32,T16] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V33 rat1 [V33,T18] ( 3, 4 ) int -> r7 "runtime lookup"
; V34 rat2 [V34,T14] ( 3, 5.60) int -> r7 "fgMakeTemp is creating a new local variable"
-; V35 rat3 [V35,T18] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V36 rat4 [V36,T25] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V37 rat5 [V37,T15] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -;* V38 rat6 [V38,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V39 rat7 [V39,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V40 rat8 [V40,T08] ( 3, 11.20) int -> r0 "fgMakeTemp is creating a new local variable" -; V41 rat9 [V41,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V42 rat10 [V42,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V43 rat11 [V43,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
+;* V35 rat3 [V35,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V36 rat4 [V36,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V37 rat5 [V37,T08] ( 3, 11.20) int -> r0 "fgMakeTemp is creating a new local variable" +; V38 rat6 [V38,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V39 rat7 [V39,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V40 rat8 [V40,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 68 @@ -123,14 +120,8 @@ G_M40847_IG06: ; bbWeight=1, nogc, extend str r0, [sp+0x38] ;; size=12 bbWeight=1 PerfScore 6.00 G_M40847_IG07: ; bbWeight=1, isz, extend
- ldr r0, [r5] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x14] - cmp r0, 0 - bne SHORT G_M40847_IG12
b SHORT G_M40847_IG12
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M40847_IG08: ; bbWeight=2, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz mov r2, r7 add r1, sp, 32 @@ -226,7 +217,7 @@ G_M40847_IG16: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 314, prolog size 30, PerfScore 246.00, instruction count 119, allocated bytes for code 314 (MethodHash=69926070) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 302, prolog size 30, PerfScore 240.00, instruction count 113, allocated bytes for code 302 (MethodHash=69926070) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
; ============================================================ Unwind Info: @@ -238,7 +229,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 157 (0x0009d) Actual length = 314 (0x00013a)
+ Function Length : 151 (0x00097) Actual length = 302 (0x00012e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

-10 (-2.99%) : 96743.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (FullOpts)

@@ -17,7 +17,7 @@ ; V07 tmp2 [V07,T06] ( 6, 8 ) byref -> registers ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V09 tmp4 [V09,T02] ( 8, 12 ) int -> r2 "VirtualCall with runtime lookup"
-; V10 tmp5 [V10,T12] ( 4, 4 ) int -> r3
+; V10 tmp5 [V10,T12] ( 2, 3.96) int -> r0
; V11 tmp6 [V11,T07] ( 4, 8 ) ref -> r0 "argument with side effect" ; V12 cse0 [V12,T09] ( 5, 7 ) int -> r9 "CSE - aggressive" ; V13 cse1 [V13,T11] ( 4, 5.04) byref -> r10 hoist multi-def "CSE - aggressive" @@ -44,7 +44,7 @@ G_M22994_IG02: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, b mov r8, 0 ldr r9, [r7+0x04] cmp r9, 0
- ble G_M22994_IG24
+ ble G_M22994_IG22
cmp r5, 0 beq SHORT G_M22994_IG14 ldr r0, [r5+0x04] @@ -90,7 +90,7 @@ G_M22994_IG04: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0408 {r3 r G_M22994_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0 r5] ; byrRegs -[r3 r7 r10]
- b SHORT G_M22994_IG26
+ b SHORT G_M22994_IG24
;; size=2 bbWeight=0.50 PerfScore 0.50 G_M22994_IG06: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0480 {r7 r10}, byref, isz ; gcrRegs +[r5] @@ -130,15 +130,15 @@ G_M22994_IG09: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0480 {r7 r ; gcr arg pop 0 cmp r0, 0 beq SHORT G_M22994_IG10
- movs r3, 0
+ movs r0, 0
b SHORT G_M22994_IG11 ;; size=22 bbWeight=1.98 PerfScore 19.80 G_M22994_IG10: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref
- movs r3, 1
+ movs r0, 1
;; size=2 bbWeight=1.98 PerfScore 1.98 G_M22994_IG11: ; bbWeight=1.98, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref, isz
- cmp r3, 0 - bne SHORT G_M22994_IG26
+ cmp r0, 0 + bne SHORT G_M22994_IG24
;; size=4 bbWeight=1.98 PerfScore 3.96 G_M22994_IG12: ; bbWeight=3.96, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10}, byref, isz add r8, r8, 1 @@ -148,7 +148,7 @@ G_M22994_IG12: ; bbWeight=3.96, gcrefRegs=0020 {r5}, byrefRegs=0400 {r10} G_M22994_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r5] ; byrRegs -[r10]
- b SHORT G_M22994_IG24
+ b SHORT G_M22994_IG22
;; size=2 bbWeight=1 PerfScore 1.00 G_M22994_IG14: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[r5 r7] @@ -180,7 +180,7 @@ G_M22994_IG15: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0008 {r ldr r0, [r5+0x04] ; gcrRegs -[r0] cmp r8, r0
- bhs SHORT G_M22994_IG28
+ bhs SHORT G_M22994_IG26
add r0, r5, 8 ; byrRegs +[r0] lsl r1, r8, 2 @@ -188,12 +188,12 @@ G_M22994_IG15: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0008 {r ; gcrRegs +[r0] ; byrRegs -[r0] cmp r0, 0
- beq SHORT G_M22994_IG23
+ beq SHORT G_M22994_IG21
;; size=32 bbWeight=0.02 PerfScore 0.28 G_M22994_IG16: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r0 r5 r7] ; byrRegs -[r3-r4]
- b SHORT G_M22994_IG26
+ b SHORT G_M22994_IG24
;; size=2 bbWeight=0.01 PerfScore 0.01 G_M22994_IG17: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0010 {r4}, byref, isz ; gcrRegs +[r5 r7] @@ -221,7 +221,7 @@ G_M22994_IG20: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0010 {r ; gcrRegs +[r0] ldr r1, [r5+0x04] cmp r8, r1
- bhs SHORT G_M22994_IG28
+ bhs SHORT G_M22994_IG26
add r1, r5, 8 ; byrRegs +[r1] lsl r3, r8, 2 @@ -235,38 +235,29 @@ G_M22994_IG20: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0010 {r ; gcrRegs -[r0-r1] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M22994_IG21 - movs r3, 0 - b SHORT G_M22994_IG22 - ;; size=32 bbWeight=0.02 PerfScore 0.28 -G_M22994_IG21: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref - movs r3, 1 - ;; size=2 bbWeight=0.02 PerfScore 0.02 -G_M22994_IG22: ; bbWeight=0.02, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz - cmp r3, 0 - bne SHORT G_M22994_IG26 - ;; size=4 bbWeight=0.02 PerfScore 0.04 -G_M22994_IG23: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M22994_IG24 + ;; size=28 bbWeight=0.02 PerfScore 0.24 +G_M22994_IG21: ; bbWeight=0.04, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
add r8, r8, 1 cmp r9, r8 bgt SHORT G_M22994_IG14 ;; size=8 bbWeight=0.04 PerfScore 0.12
-G_M22994_IG24: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M22994_IG22: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r5 r7] movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50
+G_M22994_IG23: ; bbWeight=0.50, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} + ;; size=6 bbWeight=0.50 PerfScore 1.00 +G_M22994_IG24: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + movs r0, 0 + ;; size=2 bbWeight=0.50 PerfScore 0.50
G_M22994_IG25: ; bbWeight=0.50, epilog, nogc, extend add sp, 12 pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=0.50 PerfScore 1.00
-G_M22994_IG26: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - movs r0, 0 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M22994_IG27: ; bbWeight=0.50, epilog, nogc, extend - add sp, 12 - pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00 -G_M22994_IG28: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M22994_IG26: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // CORINFO_HELP_RNGCHKFAIL @@ -274,7 +265,7 @@ G_M22994_IG28: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref bkpt ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 334, prolog size 24, PerfScore 127.69, instruction count 134, allocated bytes for code 334 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
+; Total bytes of code 324, prolog size 24, PerfScore 127.59, instruction count 129, allocated bytes for code 324 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -286,7 +277,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 167 (0x000a7) Actual length = 334 (0x00014e)
+ Function Length : 162 (0x000a2) Actual length = 324 (0x000144)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-14 (-2.36%) : 67980.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)

@@ -8,18 +8,18 @@ ; 2 inlinees with PGO data; 8 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 9, 15 ) ref -> [sp+0x08] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]>
+; V00 this [V00,T04] ( 8, 14 ) ref -> [sp+0x08] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]>
; V01 arg1 [V01,T05] ( 8, 12 ) ref -> r4 class-hnd single-def <System.Array> ; V02 arg2 [V02,T08] ( 6, 8 ) int -> registers ; V03 loc0 [V03 ] ( 5, 12 ) struct (28) [sp+0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableSortedSet`1+Enumerator[System.__Canon]>
-; V04 loc1 [V04,T23] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
+; V04 loc1 [V04,T21] ( 2, 4 ) ref -> r7 class-hnd <System.__Canon>
; V05 OutArgs [V05 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V09 tmp4 [V09,T07] ( 3, 12 ) int -> r5 "impSpillLclRefs" ;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V11 tmp6 [V11,T20] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
+; V11 tmp6 [V11,T18] ( 6, 4 ) int -> r3 "Indirect call through function pointer"
;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V14 tmp9 [V14 ] ( 2, 4 ) struct (28) [sp+0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableSortedSet`1+Enumerator[System.__Canon]> @@ -29,27 +29,24 @@ ; V18 tmp13 [V18,T13] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ; V19 tmp14 [V19,T06] ( 3, 12 ) byref -> r9 "Inlining Arg" ;* V20 tmp15 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V21 tmp16 [V21,T29] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V22 tmp17 [V22,T24] ( 2, 4 ) int -> r1 "argument with side effect"
+; V21 tmp16 [V21,T26] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V22 tmp17 [V22,T22] ( 2, 4 ) int -> r1 "argument with side effect"
; V23 tmp18 [V23,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V24 tmp19 [V24,T09] ( 2, 8 ) int -> r1 "argument with side effect" ; V25 tmp20 [V25,T10] ( 2, 8 ) int -> r2 "argument with side effect"
-; V26 PSPSym [V26,T26] ( 1, 1 ) int -> [sp+0x48] do-not-enreg[V] "PSPSym" -; V27 cse0 [V27,T21] ( 3, 4 ) int -> r6 "CSE - moderate"
+; V26 PSPSym [V26,T23] ( 1, 1 ) int -> [sp+0x48] do-not-enreg[V] "PSPSym" +; V27 cse0 [V27,T19] ( 3, 4 ) int -> r6 "CSE - moderate"
; V28 cse1 [V28,T11] ( 3, 6 ) ref -> r1 "CSE - aggressive"
-; V29 rat0 [V29,T17] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" -; V30 rat1 [V30,T22] ( 3, 4 ) int -> r6 "runtime lookup"
+; V29 rat0 [V29,T16] ( 3, 4.40) int -> r1 "Spilling to split statement for tree" +; V30 rat1 [V30,T20] ( 3, 4 ) int -> r6 "runtime lookup"
; V31 rat2 [V31,T14] ( 3, 5.60) int -> r6 "fgMakeTemp is creating a new local variable"
-; V32 rat3 [V32,T18] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V33 rat4 [V33,T25] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V34 rat5 [V34,T15] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V35 rat6 [V35,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V36 rat7 [V36,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V37 rat8 [V37,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V38 rat9 [V38,T19] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V39 rat10 [V39,T16] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V40 rat11 [V40,T27] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" -; V41 rat12 [V41,T28] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
+; V32 rat3 [V32,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V33 rat4 [V33,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V34 rat5 [V34,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V35 rat6 [V35,T17] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V36 rat7 [V36,T15] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V37 rat8 [V37,T24] ( 3, 0 ) int -> r1 "Spilling to split statement for tree" +; V38 rat9 [V38,T25] ( 3, 0 ) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 76 @@ -144,20 +141,11 @@ G_M52227_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ;; size=86 bbWeight=1 PerfScore 26.00 G_M52227_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; byrRegs -[r0-r1]
- ldr r2, [sp+0x08] // [V00 this] - ; gcrRegs +[r2] - ldr r0, [r2] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x18] - cmp r0, 0 - bne SHORT G_M52227_IG10
b SHORT G_M52227_IG10
- ;; size=16 bbWeight=1 PerfScore 8.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M52227_IG07: ; bbWeight=2, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r2]
mov r1, r6
- add r0, sp, 40 // [V03 loc0]
+ add r0, sp, 40
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -221,17 +209,17 @@ G_M52227_IG09: ; bbWeight=2, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, b ; gcrRegs -[r0-r1 r7] ; gcr arg pop 0 mov r5, r8
+ ;; size=34 bbWeight=2 PerfScore 26.00 +G_M52227_IG10: ; bbWeight=8, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r2, [sp+0x08] // [V00 this] ; gcrRegs +[r2]
- ;; size=36 bbWeight=2 PerfScore 28.00 -G_M52227_IG10: ; bbWeight=8, gcrefRegs=0014 {r2 r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r2] ldr r1, [r0+0x24] ldr r1, [r1] ldr r1, [r1+0x18] cmp r1, 0 beq SHORT G_M52227_IG12
- ;; size=12 bbWeight=8 PerfScore 48.00
+ ;; size=14 bbWeight=8 PerfScore 56.00
G_M52227_IG11: ; bbWeight=6.40, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r2] b SHORT G_M52227_IG13 @@ -379,7 +367,7 @@ G_M52227_IG28: ; bbWeight=0, funclet epilog, nogc, extend pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 594, prolog size 40, PerfScore 293.20, instruction count 214, allocated bytes for code 594 (MethodHash=24b133fc) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
+; Total bytes of code 580, prolog size 40, PerfScore 292.20, instruction count 207, allocated bytes for code 580 (MethodHash=24b133fc) for method System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
; ============================================================ Unwind Info: @@ -391,7 +379,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 265 (0x00109) Actual length = 530 (0x000212)
+ Function Length : 258 (0x00102) Actual length = 516 (0x000204)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 4735.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

+0 (0.00%) : 9715.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)

@@ -17,7 +17,7 @@ ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ; V07 loc3 [V07,T14] ( 4, 5 ) int -> [r11-0x28] ; V08 loc4 [V08,T15] ( 4, 5 ) int -> [r11-0x2C]
-; V09 loc5 [V09,T36] ( 3, 1.50) int -> r6
+; V09 loc5 [V09,T34] ( 3, 1.50) int -> r6
; V10 loc6 [V10,T07] ( 13, 11.50) ref -> [r11-0x38] do-not-enreg[M] class-hnd EH-live <<unknown class>> ;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V12 loc8 [V12,T05] ( 5, 14 ) int -> r4 @@ -40,7 +40,7 @@ ;* V29 tmp16 [V29 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ; V30 tmp17 [V30,T18] ( 8, 4 ) int -> r8 "Inline return value spill temp" ; V31 tmp18 [V31,T23] ( 3, 3 ) int -> r0 "Inlining Arg"
-; V32 tmp19 [V32,T32] ( 2, 2 ) int -> r3 "Inlining Arg"
+; V32 tmp19 [V32,T30] ( 2, 2 ) int -> r3 "Inlining Arg"
; V33 tmp20 [V33,T22] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <int[]> ;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> @@ -49,24 +49,24 @@ ;* V38 tmp25 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V39 tmp26 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V40 tmp27 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V41 tmp28 [V41,T33] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V41 tmp28 [V41,T31] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V42 tmp29 [V42,T10] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ; V43 tmp30 [V43,T11] ( 3, 6 ) int -> r7 "Inline stloc first use temp" ; V44 tmp31 [V44,T06] ( 3, 12 ) byref -> r7 "dup spill" ;* V45 tmp32 [V45 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V46 tmp33 [V46 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V47 tmp34 [V47,T34] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+; V47 tmp34 [V47,T32] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
;* V48 tmp35 [V48 ] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x4)" P-INDEP ;* V49 tmp36 [V49 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP ;* V50 tmp37 [V50 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x4)" P-INDEP
-; V51 tmp38 [V51,T39] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP -; V52 tmp39 [V52,T40] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
+; V51 tmp38 [V51,T37] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP +; V52 tmp39 [V52,T38] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
;* V53 tmp40 [V53 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP ;* V54 tmp41 [V54 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x4)" P-INDEP
-;* V55 tmp42 [V55,T45] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP -; V56 tmp43 [V56,T41] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP -; V57 tmp44 [V57,T38] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP -; V58 tmp45 [V58,T42] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
+;* V55 tmp42 [V55,T42] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP +; V56 tmp43 [V56,T39] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP +; V57 tmp44 [V57,T36] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP +; V58 tmp45 [V58,T40] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
;* V59 tmp46 [V59 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP ;* V60 tmp47 [V60 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x4)" P-INDEP ;* V61 tmp48 [V61 ] ( 0, 0 ) byref -> zero-ref single-def "field V36._reference (fldOffset=0x0)" P-INDEP @@ -75,23 +75,20 @@ ;* V64 tmp51 [V64 ] ( 0, 0 ) int -> zero-ref single-def "field V40._length (fldOffset=0x4)" P-INDEP ; V65 tmp52 [V65,T16] ( 3, 4.50) byref -> r8 single-def "V06.[000..004)" ; V66 tmp53 [V66,T17] ( 3, 4.50) int -> [r11-0x30] spill-single-def "V06.[004..008)"
-; V67 tmp54 [V67,T35] ( 3, 1.50) byref -> registers "V17.[000..004)" -; V68 tmp55 [V68,T37] ( 3, 1.50) int -> registers "V17.[004..008)"
+; V67 tmp54 [V67,T33] ( 3, 1.50) byref -> registers "V17.[000..004)" +; V68 tmp55 [V68,T35] ( 3, 1.50) int -> registers "V17.[004..008)"
; V69 tmp56 [V69,T03] ( 2, 16 ) ref -> r1 "argument with side effect" ; V70 GsCookie [V70 ] ( 1, 1 ) int -> [r11-0x40] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V71 PSPSym [V71,T44] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
+; V71 PSPSym [V71,T41] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
; V72 cse0 [V72,T12] ( 3, 6 ) int -> r7 "CSE - aggressive"
-; V73 rat0 [V73,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V73 rat0 [V73,T27] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V74 rat1 [V74,T24] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V75 rat2 [V75,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V75 rat2 [V75,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V76 rat3 [V76,T25] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V77 rat4 [V77,T30] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V77 rat4 [V77,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V78 rat5 [V78,T26] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V79 rat6 [V79,T31] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V80 rat7 [V80,T43] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V81 rat8 [V81,T27] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V82 rat9 [V82,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V83 rat10 [V83,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
+; V79 rat6 [V79,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V80 rat7 [V80,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [r11-0x44] ; ; Lcl frame size = 44 @@ -274,10 +271,10 @@ G_M62176_IG16: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ldr r3, [r0+0x04] b SHORT G_M62176_IG19 ;; size=48 bbWeight=0.50 PerfScore 8.50
-G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000400000010 {V00 V47}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
+G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000100000010 {V00 V47}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
; gcrRegs -[r0] ; byrRegs -[r8]
- ; GC ptr vars +{V47}
+ ; GC ptr vars +{V32 V47}
ldr r3, [r9+0x0C] // [V47 tmp34] ; byrRegs +[r3] cmp r8, 100 @@ -315,7 +312,7 @@ G_M62176_IG18: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0028 {r ;; size=26 bbWeight=0.50 PerfScore 4.50 G_M62176_IG19: ; bbWeight=0.50, gcVars=0000000000000010 {V00}, gcrefRegs=0090 {r4 r7}, byrefRegs=0120 {r5 r8}, gcvars, byref, isz ; byrRegs -[r0]
- ; GC ptr vars -{V47}
+ ; GC ptr vars -{V32 V47}
str r3, [r9+0x18] // [V66 tmp53] movs r2, 0 str r2, [r9+0x20] // [V07 loc3]

+0 (0.00%) : 65048.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.Canon,System.Canon]:CopyToObjects(System.Object[],int):this (FullOpts)

@@ -11,7 +11,7 @@ ; V00 this [V00,T10] ( 4, 4 ) ref -> r5 this class-hnd single-def <System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]> ; V01 arg1 [V01,T11] ( 3, 18 ) ref -> r6 class-hnd single-def <System.Object[]> ; V02 arg2 [V02,T06] ( 5, 50 ) int -> r4
-; V03 loc0 [V03,T17] ( 3, 6 ) ref -> r7 class-hnd exact single-def <<unknown class>>
+; V03 loc0 [V03,T15] ( 3, 6 ) ref -> r7 class-hnd exact single-def <<unknown class>>
; V04 loc1 [V04,T12] ( 5, 17 ) int -> r8 ;* V05 loc2 [V05 ] ( 0, 0 ) struct ( 4) zero-ref <System.Collections.Concurrent.ConcurrentDictionary`2+VolatileNode[System.__Canon,System.__Canon]> ; V06 loc3 [V06,T02] ( 7, 88 ) ref -> [sp+0x08] class-hnd <<unknown class>> @@ -22,20 +22,17 @@ ;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp5 [V12,T04] ( 2, 64 ) ref -> r2 class-hnd "Inlining Arg" <System.__Canon> ; V13 tmp6 [V13,T05] ( 2, 64 ) ref -> r1 class-hnd "Inlining Arg" <System.__Canon>
-; V14 tmp7 [V14,T16] ( 2, 8 ) ref -> r3 "field V05._node (fldOffset=0x0)" P-INDEP
+; V14 tmp7 [V14,T14] ( 2, 8 ) ref -> r3 "field V05._node (fldOffset=0x0)" P-INDEP
; V15 tmp8 [V15,T07] ( 2, 32 ) ref -> [sp+0x04] spill-single-def "field V08.key (fldOffset=0x0)" P-INDEP ; V16 tmp9 [V16,T08] ( 2, 32 ) ref -> [sp+0x00] spill-single-def "field V08.value (fldOffset=0x4)" P-INDEP ; V17 cse0 [V17,T13] ( 2, 17 ) int -> r10 hoist "CSE - aggressive"
-; V18 cse1 [V18,T18] ( 3, 6 ) int -> r9 "CSE - moderate" -; V19 rat0 [V19,T20] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,T21] ( 3, 4 ) int -> r10 "runtime lookup" -; V21 rat2 [V21,T19] ( 3, 5.60) int -> r10 "fgMakeTemp is creating a new local variable" -;* V22 rat3 [V22,T15] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V23 rat4 [V23,T22] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V24 rat5 [V24,T14] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V25 rat6 [V25,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V26 rat7 [V26,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V27 rat8 [V27,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V18 cse1 [V18,T16] ( 3, 6 ) int -> r9 "CSE - moderate" +; V19 rat0 [V19,T18] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V20 rat1 [V20,T19] ( 3, 4 ) int -> r10 "runtime lookup" +; V21 rat2 [V21,T17] ( 3, 5.60) int -> r10 "fgMakeTemp is creating a new local variable" +;* V22 rat3 [V22,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V23 rat4 [V23,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V24 rat5 [V24,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 20

realworld.run.linux.arm.checked.mch

-12 (-3.82%) : 29208.dasm - Microsoft.CodeAnalysis.SmallDictionary2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary2[System.Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.Canon]):this (FullOpts)

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 7 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 8, 17 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
+; V00 this [V00,T04] ( 7, 16 ) ref -> r5 this class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
; V01 arg1 [V01,T13] ( 4, 4 ) ref -> r4 class-hnd single-def <Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]>
-; V02 arg2 [V02,T16] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
+; V02 arg2 [V02,T15] ( 3, 3 ) ref -> r2 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]>
; V03 loc0 [V03 ] ( 3, 11 ) struct (12) [sp+0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.SmallDictionary`2+Enumerator[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]> ; V04 loc1 [V04 ] ( 5, 10 ) struct (16) [sp+0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]> ; V05 OutArgs [V05 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" @@ -27,31 +27,28 @@ ; V16 tmp11 [V16 ] ( 3, 11 ) ref -> [sp+0x30] do-not-enreg[X] addr-exposed "field V03._stack (fldOffset=0x0)" P-DEP ; V17 tmp12 [V17 ] ( 3, 11 ) ref -> [sp+0x34] do-not-enreg[X] addr-exposed "field V03._next (fldOffset=0x4)" P-DEP ; V18 tmp13 [V18 ] ( 3, 11 ) ref -> [sp+0x38] do-not-enreg[X] addr-exposed "field V03._current (fldOffset=0x8)" P-DEP
-; V19 tmp14 [V19,T21] ( 2, 4 ) ref -> r9 "field V11.DefaultType (fldOffset=0x0)" P-INDEP -; V20 tmp15 [V20,T22] ( 2, 4 ) ref -> r10 "field V11._extensions (fldOffset=0x4)" P-INDEP -; V21 tmp16 [V21,T23] ( 2, 4 ) ubyte -> [sp+0x10] spill-single-def "field V11.NullableAnnotation (fldOffset=0x8)" P-INDEP
+; V19 tmp14 [V19,T19] ( 2, 4 ) ref -> r9 "field V11.DefaultType (fldOffset=0x0)" P-INDEP +; V20 tmp15 [V20,T20] ( 2, 4 ) ref -> r10 "field V11._extensions (fldOffset=0x4)" P-INDEP +; V21 tmp16 [V21,T21] ( 2, 4 ) ubyte -> [sp+0x10] spill-single-def "field V11.NullableAnnotation (fldOffset=0x8)" P-INDEP
; V22 tmp17 [V22 ] ( 2, 4 ) ref -> [sp+0x14] do-not-enreg[X] addr-exposed "field V12._stack (fldOffset=0x0)" P-DEP ; V23 tmp18 [V23 ] ( 2, 4 ) ref -> [sp+0x18] do-not-enreg[X] addr-exposed "field V12._next (fldOffset=0x4)" P-DEP ; V24 tmp19 [V24 ] ( 2, 4 ) ref -> [sp+0x1C] do-not-enreg[X] addr-exposed "field V12._current (fldOffset=0x8)" P-DEP
-; V25 tmp20 [V25,T24] ( 2, 4 ) int -> r1 "argument with side effect"
+; V25 tmp20 [V25,T22] ( 2, 4 ) int -> r1 "argument with side effect"
; V26 tmp21 [V26,T03] ( 2, 32 ) int -> r1 "argument with side effect" ; V27 tmp22 [V27,T10] ( 2, 8 ) int -> r2 "argument with side effect" ; V28 tmp23 [V28,T11] ( 2, 8 ) int -> r1 "argument with side effect"
-; V29 cse0 [V29,T19] ( 3, 4 ) int -> r7 "CSE - moderate" -;* V30 cse1 [V30,T26] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
+; V29 cse0 [V29,T17] ( 3, 4 ) int -> r7 "CSE - moderate" +;* V30 cse1 [V30,T23] ( 0, 0 ) int -> zero-ref "CSE - aggressive"
; V31 cse2 [V31,T12] ( 4, 4.40) int -> r6 "CSE - aggressive"
-; V32 rat0 [V32,T17] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V33 rat1 [V33,T20] ( 3, 4 ) int -> r7 "runtime lookup"
+; V32 rat0 [V32,T16] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V33 rat1 [V33,T18] ( 3, 4 ) int -> r7 "runtime lookup"
; V34 rat2 [V34,T14] ( 3, 5.60) int -> r7 "fgMakeTemp is creating a new local variable"
-; V35 rat3 [V35,T18] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V36 rat4 [V36,T25] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V37 rat5 [V37,T15] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -;* V38 rat6 [V38,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V39 rat7 [V39,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V40 rat8 [V40,T08] ( 3, 11.20) int -> r0 "fgMakeTemp is creating a new local variable" -; V41 rat9 [V41,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V42 rat10 [V42,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V43 rat11 [V43,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
+;* V35 rat3 [V35,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V36 rat4 [V36,T07] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V37 rat5 [V37,T08] ( 3, 11.20) int -> r0 "fgMakeTemp is creating a new local variable" +; V38 rat6 [V38,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V39 rat7 [V39,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V40 rat8 [V40,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 68 @@ -123,14 +120,8 @@ G_M40847_IG06: ; bbWeight=1, nogc, extend str r0, [sp+0x38] ;; size=12 bbWeight=1 PerfScore 6.00 G_M40847_IG07: ; bbWeight=1, isz, extend
- ldr r0, [r5] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x14] - cmp r0, 0 - bne SHORT G_M40847_IG12
b SHORT G_M40847_IG12
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M40847_IG08: ; bbWeight=2, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz mov r2, r7 add r1, sp, 32 @@ -226,7 +217,7 @@ G_M40847_IG16: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 314, prolog size 30, PerfScore 246.00, instruction count 119, allocated bytes for code 314 (MethodHash=69926070) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 302, prolog size 30, PerfScore 240.00, instruction count 113, allocated bytes for code 302 (MethodHash=69926070) for method Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
; ============================================================ Unwind Info: @@ -238,7 +229,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 157 (0x0009d) Actual length = 314 (0x00013a)
+ Function Length : 151 (0x00097) Actual length = 302 (0x00012e)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

-12 (-2.06%) : 29879.dasm - System.Collections.Immutable.ImmutableList1+Node[System.Collections.Generic.KeyValuePair2[System.Canon,System.Canon]]:IndexOf(System.Collections.Generic.KeyValuePair2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer1[System.Collections.Generic.KeyValuePair`2[System.Canon,System.Canon]]):int:this (FullOpts)

@@ -8,13 +8,13 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 9, 16 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
+; V00 this [V00,T06] ( 8, 15 ) ref -> [sp+0x10] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
; V01 arg1 [V01,T10] ( 4, 10 ) struct ( 8) [sp+0x78] do-not-enreg[SA] multireg-arg single-def <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]> ; V02 arg2 [V02,T07] ( 8, 14 ) int -> r5
-; V03 arg3 [V03,T25] ( 4, 4 ) int -> r7 single-def
+; V03 arg3 [V03,T23] ( 4, 4 ) int -> r7 single-def
; V04 arg4 [V04,T14] ( 3, 6 ) ref -> r6 class-hnd <System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]> ; V05 loc0 [V05 ] ( 5, 15 ) struct (40) [sp+0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableList`1+Enumerator[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]>
-; V06 loc1 [V06,T30] ( 2, 2 ) int -> [sp+0x20] do-not-enreg[Z] EH-live
+; V06 loc1 [V06,T28] ( 2, 2 ) int -> [sp+0x20] do-not-enreg[Z] EH-live
; V07 OutArgs [V07 ] ( 1, 1 ) struct (12) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -31,30 +31,27 @@ ;* V20 tmp13 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V21 tmp14 [V21,T11] ( 2, 12 ) ref -> [sp+0x14] do-not-enreg[H] hidden-struct-arg "field V13.key (fldOffset=0x0)" P-DEP ; V22 tmp15 [V22,T12] ( 2, 12 ) ref -> [sp+0x18] do-not-enreg[H] hidden-struct-arg "field V13.value (fldOffset=0x4)" P-DEP
-; V23 tmp16 [V23,T33] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V24 tmp17 [V24,T34] ( 2, 0 ) ref -> r0 single-def "argument with side effect" -; V25 tmp18 [V25,T28] ( 2, 4 ) int -> r1 "argument with side effect"
+; V23 tmp16 [V23,T30] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V24 tmp17 [V24,T31] ( 2, 0 ) ref -> r0 single-def "argument with side effect" +; V25 tmp18 [V25,T26] ( 2, 4 ) int -> r1 "argument with side effect"
; V26 tmp19 [V26,T03] ( 2, 32 ) int -> r1 "argument with side effect"
-; V27 PSPSym [V27,T32] ( 1, 1 ) int -> [sp+0x50] do-not-enreg[V] "PSPSym"
+; V27 PSPSym [V27,T29] ( 1, 1 ) int -> [sp+0x50] do-not-enreg[V] "PSPSym"
; V28 cse0 [V28,T15] ( 3, 6 ) int -> r9 "CSE - aggressive"
-; V29 cse1 [V29,T29] ( 3, 3 ) int -> r0 "CSE - aggressive"
+; V29 cse1 [V29,T27] ( 3, 3 ) int -> r0 "CSE - aggressive"
; V30 cse2 [V30,T09] ( 10, 12 ) int -> r8 multi-def "CSE - aggressive"
-; V31 rat0 [V31,T21] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V32 rat1 [V32,T26] ( 3, 4 ) int -> r1 "runtime lookup"
+; V31 rat0 [V31,T20] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V32 rat1 [V32,T24] ( 3, 4 ) int -> r1 "runtime lookup"
; V33 rat2 [V33,T16] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
-; V34 rat3 [V34,T22] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V35 rat4 [V35,T27] ( 3, 4 ) int -> r9 "runtime lookup"
+; V34 rat3 [V34,T21] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V35 rat4 [V35,T25] ( 3, 4 ) int -> r9 "runtime lookup"
; V36 rat5 [V36,T17] ( 3, 5.60) int -> r9 "fgMakeTemp is creating a new local variable"
-; V37 rat6 [V37,T23] ( 2, 4 ) int -> r0 "Spilling to split statement for tree" -;* V38 rat7 [V38,T31] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V39 rat8 [V39,T18] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" -; V40 rat9 [V40,T05] ( 3, 22.40) int -> r0 "fgMakeTemp is creating a new local variable" -; V41 rat10 [V41,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" -; V42 rat11 [V42,T02] ( 3, 32 ) int -> r1 "runtime lookup" -; V43 rat12 [V43,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V44 rat13 [V44,T19] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" -; V45 rat14 [V45,T24] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V46 rat15 [V46,T20] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V37 rat6 [V37,T05] ( 3, 22.40) int -> r0 "fgMakeTemp is creating a new local variable" +; V38 rat7 [V38,T01] ( 3, 35.20) int -> r0 "Spilling to split statement for tree" +; V39 rat8 [V39,T02] ( 3, 32 ) int -> r1 "runtime lookup" +; V40 rat9 [V40,T00] ( 3, 44.80) int -> r1 "fgMakeTemp is creating a new local variable" +; V41 rat10 [V41,T18] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable" +; V42 rat11 [V42,T22] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V43 rat12 [V43,T19] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 84 @@ -82,7 +79,7 @@ G_M34258_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr r6, [sp+0x84] // [V04 arg4] ; gcrRegs +[r6] ;; size=46 bbWeight=1 PerfScore 19.00
-G_M34258_IG02: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M34258_IG02: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
cmp r5, 0 blt G_M34258_IG31 cmp r7, 0 @@ -167,14 +164,8 @@ G_M34258_IG09: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b ; gcr arg pop 0 ;; size=30 bbWeight=1 PerfScore 12.00 G_M34258_IG10: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
- ldr r0, [r4] - ldr r0, [r0+0x24] - ldr r0, [r0] - ldr r0, [r0+0x08] - cmp r0, 0 - bne SHORT G_M34258_IG15
b SHORT G_M34258_IG15
- ;; size=14 bbWeight=1 PerfScore 7.00
+ ;; size=2 bbWeight=1 PerfScore 1.00
G_M34258_IG11: ; bbWeight=4, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r4] mov r7, r9 @@ -310,7 +301,7 @@ G_M34258_IG28: ; bbWeight=1, epilog, nogc, extend add sp, 8 bx lr ;; size=10 bbWeight=1 PerfScore 4.00
-G_M34258_IG29: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M34258_IG29: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov r0, -1 ;; size=4 bbWeight=1 PerfScore 1.00 G_M34258_IG30: ; bbWeight=1, epilog, nogc, extend @@ -319,7 +310,7 @@ G_M34258_IG30: ; bbWeight=1, epilog, nogc, extend add sp, 8 bx lr ;; size=10 bbWeight=1 PerfScore 4.00
-G_M34258_IG31: ; bbWeight=0, gcVars=0000000000000040 {V00}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
+G_M34258_IG31: ; bbWeight=0, gcVars=00000040 {V00}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[r4] movw r0, 0xd1ff movw r1, 0xd1ff @@ -363,7 +354,7 @@ G_M34258_IG33: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, add r3, r11, 16 str r3, [sp+0x10] ;; size=12 bbWeight=1 PerfScore 4.00
-G_M34258_IG34: ; bbWeight=1, gcVars=0000000000000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M34258_IG34: ; bbWeight=1, gcVars=00000040 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr r4, [r11-0x60] // [V00 this] ; gcrRegs +[r4] ldr r8, [r4] @@ -396,7 +387,7 @@ G_M34258_IG38: ; bbWeight=1, funclet epilog, nogc, extend pop {r4,r5,r6,r7,r8,r9,r10,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 582, prolog size 46, PerfScore 356.40, instruction count 218, allocated bytes for code 582 (MethodHash=62fd7a2d) for method System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
+; Total bytes of code 570, prolog size 46, PerfScore 350.40, instruction count 212, allocated bytes for code 570 (MethodHash=62fd7a2d) for method System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
; ============================================================ Unwind Info: @@ -408,7 +399,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 258 (0x00102) Actual length = 516 (0x000204)
+ Function Length : 252 (0x000fc) Actual length = 504 (0x0001f8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 22743.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -23,11 +23,11 @@ ; V12 loc9 [V12,T14] ( 4, 14 ) byref -> [sp+0x04] spill-single-def ; V13 loc10 [V13,T17] ( 6, 13.50) int -> [sp+0x48] ; V14 loc11 [V14,T15] ( 4, 14 ) byref -> [sp+0x00] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> r9 single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> r9 single-def
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V17 tmp1 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V18 tmp2 [V18,T31] ( 4, 3 ) int -> r4 "VirtualCall with runtime lookup"
-; V19 tmp3 [V19,T70] ( 3, 1.50) int -> r10
+; V19 tmp3 [V19,T66] ( 3, 1.50) int -> r10
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V22 tmp6 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -35,8 +35,8 @@ ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V25 tmp9 [V25 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V26 tmp10 [V26,T28] ( 4, 4 ) byref -> r0 single-def "dup spill"
-; V27 tmp11 [V27,T64] ( 3, 2 ) int -> r1 "spilling helperCall" -; V28 tmp12 [V28,T71] ( 3, 1.50) int -> r10
+; V27 tmp11 [V27,T60] ( 3, 2 ) int -> r1 "spilling helperCall" +; V28 tmp12 [V28,T67] ( 3, 1.50) int -> r10
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V31 tmp15 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -48,9 +48,9 @@ ; V37 tmp21 [V37,T32] ( 3, 3 ) ref -> r8 class-hnd single-def "impAppendStmt" <<unknown class>> ; V38 tmp22 [V38,T33] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V39 tmp23 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V40 tmp24 [V40,T101] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V40 tmp24 [V40,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V41 tmp25 [V41 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V42 tmp26 [V42,T102] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V42 tmp26 [V42,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V43 tmp27 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V44 tmp28 [V44 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V45 tmp29 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -58,9 +58,9 @@ ; V47 tmp31 [V47,T34] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V48 tmp32 [V48,T35] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V49 tmp33 [V49 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V50 tmp34 [V50,T103] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V50 tmp34 [V50,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V51 tmp35 [V51 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V52 tmp36 [V52,T104] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V52 tmp36 [V52,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V53 tmp37 [V53 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V54 tmp38 [V54 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V55 tmp39 [V55 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -68,17 +68,17 @@ ; V57 tmp41 [V57,T36] ( 3, 3 ) ref -> r4 class-hnd single-def "impAppendStmt" <<unknown class>> ; V58 tmp42 [V58,T37] ( 3, 3 ) ref -> r0 class-hnd single-def "impAppendStmt" <<unknown class>> ;* V59 tmp43 [V59 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V60 tmp44 [V60,T105] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V60 tmp44 [V60,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V61 tmp45 [V61 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V62 tmp46 [V62,T106] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V62 tmp46 [V62,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V63 tmp47 [V63 ] ( 6, 10.50) ref -> [sp+0x4C] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V64 tmp48 [V64 ] ( 9, 19 ) int -> [sp+0x50] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V65 tmp49 [V65,T80] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP -; V66 tmp50 [V66,T83] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP -; V67 tmp51 [V67,T81] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP -; V68 tmp52 [V68,T84] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP -; V69 tmp53 [V69,T82] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP -; V70 tmp54 [V70,T85] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
+; V65 tmp49 [V65,T76] ( 2, 1 ) ref -> r8 single-def "field V33._items (fldOffset=0x0)" P-INDEP +; V66 tmp50 [V66,T79] ( 2, 1 ) int -> r4 single-def "field V33._length (fldOffset=0x4)" P-INDEP +; V67 tmp51 [V67,T77] ( 2, 1 ) ref -> r4 single-def "field V43._items (fldOffset=0x0)" P-INDEP +; V68 tmp52 [V68,T80] ( 2, 1 ) int -> [sp+0x40] spill-single-def "field V43._length (fldOffset=0x4)" P-INDEP +; V69 tmp53 [V69,T78] ( 2, 1 ) ref -> r4 single-def "field V53._items (fldOffset=0x0)" P-INDEP +; V70 tmp54 [V70,T81] ( 2, 1 ) int -> r8 single-def "field V53._length (fldOffset=0x4)" P-INDEP
;* V71 tmp55 [V71 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> r0 "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> r1 "index expr" @@ -87,73 +87,67 @@ ; V76 tmp60 [V76,T47] ( 3, 3 ) int -> r1 "index expr" ; V77 tmp61 [V77,T12] ( 2, 16 ) int -> r1 "argument with side effect" ; V78 tmp62 [V78,T13] ( 2, 16 ) int -> r1 "argument with side effect"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> r1 "argument with side effect"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> r1 "argument with side effect"
;* V80 tmp64 [V80 ] ( 0, 0 ) long -> zero-ref "argument with side effect" ; V81 tmp65 [V81,T48] ( 3, 3 ) int -> r0 "index expr" ; V82 tmp66 [V82,T49] ( 3, 3 ) int -> r1 "index expr"
-; V83 tmp67 [V83,T68] ( 2, 2 ) int -> r1 "argument with side effect" -; V84 cse0 [V84,T72] ( 3, 1.50) int -> r0 "CSE - conservative" -; V85 cse1 [V85,T73] ( 3, 1.50) int -> r8 "CSE - conservative" -; V86 rat0 [V86,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V87 rat1 [V87,T65] ( 3, 2 ) int -> r1 "runtime lookup"
+; V83 tmp67 [V83,T64] ( 2, 2 ) int -> r1 "argument with side effect" +; V84 cse0 [V84,T68] ( 3, 1.50) int -> r0 "CSE - conservative" +; V85 cse1 [V85,T69] ( 3, 1.50) int -> r8 "CSE - conservative" +; V86 rat0 [V86,T55] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V87 rat1 [V87,T61] ( 3, 2 ) int -> r1 "runtime lookup"
; V88 rat2 [V88,T50] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V89 rat3 [V89,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V90 rat4 [V90,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V91 rat5 [V91,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V92 rat6 [V92,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V93 rat7 [V93,T10] ( 3, 16 ) int -> r1 "runtime lookup" -; V94 rat8 [V94,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -;* V95 rat9 [V95,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V96 rat10 [V96,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V97 rat11 [V97,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V98 rat12 [V98,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V99 rat13 [V99,T52] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" -;* V100 rat14 [V100,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V101 rat15 [V101,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V102 rat16 [V102,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V103 rat17 [V103,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V104 rat18 [V104,T11] ( 3, 16 ) int -> r1 "runtime lookup" -; V105 rat19 [V105,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" -; V106 rat20 [V106,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" -; V107 rat21 [V107,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" -;* V108 rat22 [V108,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V109 rat23 [V109,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V110 rat24 [V110,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V111 rat25 [V111,T61] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V89 rat3 [V89,T06] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V90 rat4 [V90,T10] ( 3, 16 ) int -> r1 "runtime lookup" +; V91 rat5 [V91,T02] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +;* V92 rat6 [V92,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V93 rat7 [V93,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V94 rat8 [V94,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V95 rat9 [V95,T56] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V96 rat10 [V96,T51] ( 3, 2.80) int -> r4 "fgMakeTemp is creating a new local variable" +; V97 rat11 [V97,T08] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V98 rat12 [V98,T11] ( 3, 16 ) int -> r1 "runtime lookup" +; V99 rat13 [V99,T04] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable" +; V100 rat14 [V100,T22] ( 3, 8.80) int -> r0 "Spilling to split statement for tree" +; V101 rat15 [V101,T19] ( 3, 11.20) int -> r1 "fgMakeTemp is creating a new local variable" +;* V102 rat16 [V102,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V103 rat17 [V103,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V104 rat18 [V104,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V105 rat19 [V105,T57] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V106 rat20 [V106,T52] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" +;* V107 rat21 [V107,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V108 rat22 [V108,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V109 rat23 [V109,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V110 rat24 [V110,T59] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" +; V111 rat25 [V111,T62] ( 3, 2 ) int -> r1 "runtime lookup"
; V112 rat26 [V112,T54] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V113 rat27 [V113,T62] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V114 rat28 [V114,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V115 rat29 [V115,T55] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V116 rat30 [V116,T63] ( 3, 2.20) int -> r0 "Spilling to split statement for tree" -; V117 rat31 [V117,T66] ( 3, 2 ) int -> r1 "runtime lookup" -; V118 rat32 [V118,T56] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable" -; V119 rat33 [V119,T89] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP -; V120 rat34 [V120,T90] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP -; V121 rat35 [V121,T91] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP -; V122 rat36 [V122,T92] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP -; V123 rat37 [V123,T93] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP -; V124 rat38 [V124,T94] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP -; V125 rat39 [V125,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V126 rat40 [V126 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat41 [V127,T95] ( 1, 1 ) int -> r0 "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat42 [V128,T74] ( 2, 1.50) int -> r1 "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat43 [V129 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V130 rat44 [V130,T96] ( 1, 1 ) int -> r0 "field V129.lo (fldOffset=0x0)" P-INDEP -; V131 rat45 [V131,T75] ( 2, 1.50) int -> r1 "field V129.hi (fldOffset=0x4)" P-INDEP -; V132 rat46 [V132,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V133 rat47 [V133 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat48 [V134,T97] ( 1, 1 ) int -> r0 "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat49 [V135,T76] ( 2, 1.50) int -> r1 "field V133.hi (fldOffset=0x4)" P-INDEP -; V136 rat50 [V136 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V137 rat51 [V137,T98] ( 1, 1 ) int -> r0 "field V136.lo (fldOffset=0x0)" P-INDEP -; V138 rat52 [V138,T77] ( 2, 1.50) int -> r1 "field V136.hi (fldOffset=0x4)" P-INDEP -; V139 rat53 [V139,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" -; V140 rat54 [V140 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V141 rat55 [V141,T99] ( 1, 1 ) int -> r0 "field V140.lo (fldOffset=0x0)" P-INDEP -; V142 rat56 [V142,T78] ( 2, 1.50) int -> r1 "field V140.hi (fldOffset=0x4)" P-INDEP -; V143 rat57 [V143 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V144 rat58 [V144,T100] ( 1, 1 ) int -> r0 "field V143.lo (fldOffset=0x0)" P-INDEP -; V145 rat59 [V145,T79] ( 2, 1.50) int -> r1 "field V143.hi (fldOffset=0x4)" P-INDEP
+; V113 rat27 [V113,T83] ( 2, 1 ) int -> r0 "field V71.lo (fldOffset=0x0)" P-INDEP +; V114 rat28 [V114,T84] ( 2, 1 ) int -> r1 "field V71.hi (fldOffset=0x4)" P-INDEP +; V115 rat29 [V115,T85] ( 2, 1 ) int -> r0 "field V74.lo (fldOffset=0x0)" P-INDEP +; V116 rat30 [V116,T86] ( 2, 1 ) int -> r1 "field V74.hi (fldOffset=0x4)" P-INDEP +; V117 rat31 [V117,T87] ( 2, 1 ) int -> r0 "field V80.lo (fldOffset=0x0)" P-INDEP +; V118 rat32 [V118,T88] ( 2, 1 ) int -> r1 "field V80.hi (fldOffset=0x4)" P-INDEP +; V119 rat33 [V119,T38] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V120 rat34 [V120 ] ( 1, 1 ) long -> [sp+0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat35 [V121,T89] ( 1, 1 ) int -> r0 "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat36 [V122,T70] ( 2, 1.50) int -> r1 "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat37 [V123 ] ( 1, 1 ) long -> [sp+0x30] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V124 rat38 [V124,T90] ( 1, 1 ) int -> r0 "field V123.lo (fldOffset=0x0)" P-INDEP +; V125 rat39 [V125,T71] ( 2, 1.50) int -> r1 "field V123.hi (fldOffset=0x4)" P-INDEP +; V126 rat40 [V126,T39] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V127 rat41 [V127 ] ( 1, 1 ) long -> [sp+0x28] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat42 [V128,T91] ( 1, 1 ) int -> r0 "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat43 [V129,T72] ( 2, 1.50) int -> r1 "field V127.hi (fldOffset=0x4)" P-INDEP +; V130 rat44 [V130 ] ( 1, 1 ) long -> [sp+0x20] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V131 rat45 [V131,T92] ( 1, 1 ) int -> r0 "field V130.lo (fldOffset=0x0)" P-INDEP +; V132 rat46 [V132,T73] ( 2, 1.50) int -> r1 "field V130.hi (fldOffset=0x4)" P-INDEP +; V133 rat47 [V133,T40] ( 3, 3 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable" +; V134 rat48 [V134 ] ( 1, 1 ) long -> [sp+0x18] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V135 rat49 [V135,T93] ( 1, 1 ) int -> r0 "field V134.lo (fldOffset=0x0)" P-INDEP +; V136 rat50 [V136,T74] ( 2, 1.50) int -> r1 "field V134.hi (fldOffset=0x4)" P-INDEP +; V137 rat51 [V137 ] ( 1, 1 ) long -> [sp+0x10] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V138 rat52 [V138,T94] ( 1, 1 ) int -> r0 "field V137.lo (fldOffset=0x0)" P-INDEP +; V139 rat53 [V139,T75] ( 2, 1.50) int -> r1 "field V137.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 92 @@ -483,8 +477,8 @@ G_M18379_IG29: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0 subs r3, r0, 1 str r3, [sp+0x48] // [V13 loc10] cmp r3, 0
- blt SHORT G_M18379_IG39
ldr r3, [sp+0x48] // [V13 loc10]
+ blt SHORT G_M18379_IG39
;; size=64 bbWeight=0.50 PerfScore 13.00 G_M18379_IG30: ; bbWeight=4, gcVars=00000000000000000000000020000000 {V07}, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0080 {r7}, gcvars, byref, isz ; byrRegs -[r4]

+0 (0.00%) : 22903.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)

@@ -17,7 +17,7 @@ ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ; V07 loc3 [V07,T14] ( 4, 5 ) int -> [r11-0x28] ; V08 loc4 [V08,T15] ( 4, 5 ) int -> [r11-0x2C]
-; V09 loc5 [V09,T36] ( 3, 1.50) int -> r6
+; V09 loc5 [V09,T34] ( 3, 1.50) int -> r6
; V10 loc6 [V10,T07] ( 13, 11.50) ref -> [r11-0x38] do-not-enreg[M] class-hnd EH-live <<unknown class>> ;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V12 loc8 [V12,T05] ( 5, 14 ) int -> r4 @@ -40,31 +40,31 @@ ;* V29 tmp16 [V29 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ; V30 tmp17 [V30,T18] ( 8, 4 ) int -> r8 "Inline return value spill temp" ; V31 tmp18 [V31,T23] ( 3, 3 ) int -> r0 "Inlining Arg"
-; V32 tmp19 [V32,T32] ( 2, 2 ) int -> r3 "Inlining Arg"
+; V32 tmp19 [V32,T30] ( 2, 2 ) int -> r3 "Inlining Arg"
; V33 tmp20 [V33,T22] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <int[]> ;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> ;* V36 tmp23 [V36 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V37 tmp24 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V38 tmp25 [V38 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V39 tmp26 [V39,T33] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V39 tmp26 [V39,T31] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V40 tmp27 [V40,T10] ( 3, 6 ) int -> r0 "Inline stloc first use temp" ; V41 tmp28 [V41,T11] ( 3, 6 ) int -> r7 "Inline stloc first use temp" ; V42 tmp29 [V42,T06] ( 3, 12 ) byref -> r7 "dup spill" ;* V43 tmp30 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V44 tmp31 [V44 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V45 tmp32 [V45,T34] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+; V45 tmp32 [V45,T32] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
;* V46 tmp33 [V46 ] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x4)" P-INDEP ;* V47 tmp34 [V47 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP ;* V48 tmp35 [V48 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x4)" P-INDEP
-; V49 tmp36 [V49,T39] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP -; V50 tmp37 [V50,T40] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
+; V49 tmp36 [V49,T37] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP +; V50 tmp37 [V50,T38] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
;* V51 tmp38 [V51 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP ;* V52 tmp39 [V52 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x4)" P-INDEP
-;* V53 tmp40 [V53,T45] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP -; V54 tmp41 [V54,T41] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP -; V55 tmp42 [V55,T38] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP -; V56 tmp43 [V56,T42] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
+;* V53 tmp40 [V53,T42] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP +; V54 tmp41 [V54,T39] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP +; V55 tmp42 [V55,T36] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP +; V56 tmp43 [V56,T40] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
;* V57 tmp44 [V57 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP ;* V58 tmp45 [V58 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x4)" P-INDEP ;* V59 tmp46 [V59 ] ( 0, 0 ) byref -> zero-ref single-def "field V36._reference (fldOffset=0x0)" P-INDEP @@ -73,23 +73,20 @@ ;* V62 tmp49 [V62 ] ( 0, 0 ) int -> zero-ref single-def "field V38._length (fldOffset=0x4)" P-INDEP ; V63 tmp50 [V63,T16] ( 3, 4.50) byref -> r8 single-def "V06.[000..004)" ; V64 tmp51 [V64,T17] ( 3, 4.50) int -> [r11-0x30] spill-single-def "V06.[004..008)"
-; V65 tmp52 [V65,T35] ( 3, 1.50) byref -> registers "V17.[000..004)" -; V66 tmp53 [V66,T37] ( 3, 1.50) int -> registers "V17.[004..008)"
+; V65 tmp52 [V65,T33] ( 3, 1.50) byref -> registers "V17.[000..004)" +; V66 tmp53 [V66,T35] ( 3, 1.50) int -> registers "V17.[004..008)"
; V67 tmp54 [V67,T03] ( 2, 16 ) ref -> r1 "argument with side effect" ; V68 GsCookie [V68 ] ( 1, 1 ) int -> [r11-0x40] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V69 PSPSym [V69,T44] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
+; V69 PSPSym [V69,T41] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
; V70 cse0 [V70,T12] ( 3, 6 ) int -> r7 "CSE - aggressive"
-; V71 rat0 [V71,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V71 rat0 [V71,T27] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V72 rat1 [V72,T24] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V73 rat2 [V73,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V73 rat2 [V73,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V74 rat3 [V74,T25] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V75 rat4 [V75,T30] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V75 rat4 [V75,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V76 rat5 [V76,T26] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V77 rat6 [V77,T31] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V78 rat7 [V78,T43] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V79 rat8 [V79,T27] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V80 rat9 [V80,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" -; V81 rat10 [V81,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
+; V77 rat6 [V77,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree" +; V78 rat7 [V78,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [r11-0x44] ; ; Lcl frame size = 44 @@ -272,10 +269,10 @@ G_M62176_IG16: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ldr r3, [r0+0x04] b SHORT G_M62176_IG20 ;; size=48 bbWeight=0.50 PerfScore 8.50
-G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000400000010 {V00 V45}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
+G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000100000010 {V00 V45}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
; gcrRegs -[r0] ; byrRegs -[r8]
- ; GC ptr vars +{V45}
+ ; GC ptr vars +{V32 V45}
cmp r8, 100 bhi G_M62176_IG37 cmp r8, 0 @@ -309,7 +306,7 @@ G_M62176_IG19: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ;; size=40 bbWeight=0.50 PerfScore 6.50 G_M62176_IG20: ; bbWeight=0.50, gcVars=0000000000000010 {V00}, gcrefRegs=0090 {r4 r7}, byrefRegs=0120 {r5 r8}, gcvars, byref, isz ; byrRegs -[r0]
- ; GC ptr vars -{V45}
+ ; GC ptr vars -{V32 V45}
str r3, [r9+0x18] // [V64 tmp51] movs r2, 0 str r2, [r9+0x20] // [V07 loc3]

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm.checked.mch 3 2 0 1 -16 +0
benchmarks.run_pgo.linux.arm.checked.mch 2 1 0 1 -4 +0
benchmarks.run_tiered.linux.arm.checked.mch 3 2 0 1 -16 +0
coreclr_tests.run.linux.arm.checked.mch 6 4 0 2 -56 +0
libraries.crossgen2.linux.arm.checked.mch 9 9 0 0 -104 +0
libraries.pmi.linux.arm.checked.mch 26 19 0 7 -214 +0
libraries_tests.run.linux.arm.Release.mch 17 12 0 5 -140 +0
librariestestsnotieredcompilation.run.linux.arm.Release.mch 17 13 0 4 -150 +0
realworld.run.linux.arm.checked.mch 4 2 0 2 -24 +0
87 64 0 23 -724 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 46,284 5,344 40,940 1,208 (2.54%) 1,208 (2.54%)
benchmarks.run_pgo.linux.arm.checked.mch 155,310 54,949 100,361 3,309 (2.09%) 3,309 (2.09%)
benchmarks.run_tiered.linux.arm.checked.mch 81,826 45,099 36,727 1,122 (1.35%) 1,122 (1.35%)
coreclr_tests.run.linux.arm.checked.mch 471,777 258,996 212,781 7,543 (1.57%) 7,543 (1.57%)
libraries.crossgen2.linux.arm.checked.mch 193,690 14 193,676 0 (0.00%) 0 (0.00%)
libraries.pmi.linux.arm.checked.mch 270,798 6 270,792 7,827 (2.81%) 7,827 (2.81%)
libraries_tests.run.linux.arm.Release.mch 707,758 441,682 266,076 18,888 (2.60%) 18,888 (2.60%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 273,849 21,565 252,284 33,279 (10.84%) 33,279 (10.84%)
realworld.run.linux.arm.checked.mch 36,398 157 36,241 1,412 (3.73%) 1,412 (3.73%)
2,237,690 827,812 1,409,878 74,588 (3.23%) 74,588 (3.23%)

jit-analyze output

benchmarks.run.linux.arm.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 15303134 (overridden on cmd)
Total bytes of diff: 15303118 (overridden on cmd)
Total bytes of delta: -16 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -12 : 20211.dasm (-2.06 % of base)
          -4 : 14561.dasm (-0.18 % of base)

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

Top method improvements (bytes):
         -12 (-2.06 % of base) : 20211.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
          -4 (-0.18 % of base) : 14561.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (FullOpts)

Top method improvements (percentages):
         -12 (-2.06 % of base) : 20211.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
          -4 (-0.18 % of base) : 14561.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (FullOpts)

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


benchmarks.run_pgo.linux.arm.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 61262128 (overridden on cmd)
Total bytes of diff: 61262124 (overridden on cmd)
Total bytes of delta: -4 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
          -4 : 48266.dasm (-0.18 % of base)

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

Top method improvements (bytes):
          -4 (-0.18 % of base) : 48266.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)

Top method improvements (percentages):
          -4 (-0.18 % of base) : 48266.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)

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


benchmarks.run_tiered.linux.arm.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 22643448 (overridden on cmd)
Total bytes of diff: 22643432 (overridden on cmd)
Total bytes of delta: -16 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -12 : 40178.dasm (-2.06 % of base)
          -4 : 32299.dasm (-0.18 % of base)

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

Top method improvements (bytes):
         -12 (-2.06 % of base) : 40178.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
          -4 (-0.18 % of base) : 32299.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)

Top method improvements (percentages):
         -12 (-2.06 % of base) : 40178.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
          -4 (-0.18 % of base) : 32299.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)

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


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

Detail diffs



Top file improvements (bytes):
         -20 : 463304.dasm (-2.83 % of base)
         -12 : 272471.dasm (-1.72 % of base)
         -12 : 305606.dasm (-3.92 % of base)
         -12 : 477079.dasm (-3.92 % of base)

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

Top method improvements (bytes):
         -20 (-2.83 % of base) : 463304.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
         -12 (-1.72 % of base) : 272471.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (Tier0-FullOpts)
         -12 (-3.92 % of base) : 477079.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (FullOpts)
         -12 (-3.92 % of base) : 305606.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (Tier0-FullOpts)

Top method improvements (percentages):
         -12 (-3.92 % of base) : 477079.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (FullOpts)
         -12 (-3.92 % of base) : 305606.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (Tier0-FullOpts)
         -20 (-2.83 % of base) : 463304.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
         -12 (-1.72 % of base) : 272471.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (Tier0-FullOpts)

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


libraries.crossgen2.linux.arm.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 35175262 (overridden on cmd)
Total bytes of diff: 35175158 (overridden on cmd)
Total bytes of delta: -104 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -22 : 59013.dasm (-0.39 % of base)
         -12 : 165962.dasm (-0.54 % of base)
         -12 : 173422.dasm (-0.53 % of base)
         -10 : 115121.dasm (-0.32 % of base)
         -10 : 59508.dasm (-3.14 % of base)
         -10 : 95402.dasm (-0.71 % of base)
         -10 : 165961.dasm (-0.58 % of base)
         -10 : 173421.dasm (-0.57 % of base)
          -8 : 114850.dasm (-0.36 % of base)

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

Top method improvements (bytes):
         -22 (-0.39 % of base) : 59013.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
         -12 (-0.54 % of base) : 165962.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -12 (-0.53 % of base) : 173422.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -10 (-0.71 % of base) : 95402.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
         -10 (-0.32 % of base) : 115121.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
         -10 (-3.14 % of base) : 59508.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
         -10 (-0.58 % of base) : 165961.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-0.57 % of base) : 173421.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
          -8 (-0.36 % of base) : 114850.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)

Top method improvements (percentages):
         -10 (-3.14 % of base) : 59508.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
         -10 (-0.71 % of base) : 95402.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
         -10 (-0.58 % of base) : 165961.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-0.57 % of base) : 173421.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -12 (-0.54 % of base) : 165962.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -12 (-0.53 % of base) : 173422.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -22 (-0.39 % of base) : 59013.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
          -8 (-0.36 % of base) : 114850.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
         -10 (-0.32 % of base) : 115121.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)

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


libraries.pmi.linux.arm.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 49615946 (overridden on cmd)
Total bytes of diff: 49615732 (overridden on cmd)
Total bytes of delta: -214 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -14 : 14560.dasm (-2.07 % of base)
         -14 : 195917.dasm (-2.01 % of base)
         -14 : 199634.dasm (-2.36 % of base)
         -14 : 198488.dasm (-2.24 % of base)
         -12 : 129751.dasm (-4.05 % of base)
         -12 : 198483.dasm (-2.09 % of base)
         -12 : 197294.dasm (-1.51 % of base)
         -12 : 142318.dasm (-1.82 % of base)
         -12 : 197108.dasm (-1.51 % of base)
         -10 : 228808.dasm (-0.55 % of base)
         -10 : 235457.dasm (-0.65 % of base)
         -10 : 104278.dasm (-0.29 % of base)
         -10 : 187304.dasm (-1.19 % of base)
         -10 : 228807.dasm (-0.66 % of base)
         -10 : 120281.dasm (-0.24 % of base)
         -10 : 159012.dasm (-0.62 % of base)
         -10 : 235458.dasm (-0.54 % of base)
         -10 : 104281.dasm (-0.23 % of base)
          -8 : 120002.dasm (-0.23 % of base)

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

Top method improvements (bytes):
         -14 (-2.07 % of base) : 14560.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
         -14 (-2.01 % of base) : 195917.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -14 (-2.24 % of base) : 198488.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
         -14 (-2.36 % of base) : 199634.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.82 % of base) : 142318.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -12 (-4.05 % of base) : 129751.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
         -12 (-1.51 % of base) : 197108.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.51 % of base) : 197294.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-2.09 % of base) : 198483.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
         -10 (-0.23 % of base) : 104281.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)
         -10 (-0.29 % of base) : 104278.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
         -10 (-0.24 % of base) : 120281.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
         -10 (-0.65 % of base) : 235457.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-0.66 % of base) : 228807.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-0.55 % of base) : 228808.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -10 (-0.54 % of base) : 235458.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -10 (-1.19 % of base) : 187304.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -10 (-0.62 % of base) : 159012.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
          -8 (-0.23 % of base) : 120002.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)

Top method improvements (percentages):
         -12 (-4.05 % of base) : 129751.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
         -14 (-2.36 % of base) : 199634.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
         -14 (-2.24 % of base) : 198488.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
         -12 (-2.09 % of base) : 198483.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
         -14 (-2.07 % of base) : 14560.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
         -14 (-2.01 % of base) : 195917.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.82 % of base) : 142318.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -12 (-1.51 % of base) : 197108.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.51 % of base) : 197294.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -10 (-1.19 % of base) : 187304.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -10 (-0.66 % of base) : 228807.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-0.65 % of base) : 235457.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-0.62 % of base) : 159012.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
         -10 (-0.55 % of base) : 228808.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -10 (-0.54 % of base) : 235458.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
         -10 (-0.29 % of base) : 104278.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
         -10 (-0.24 % of base) : 120281.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
         -10 (-0.23 % of base) : 104281.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)
          -8 (-0.23 % of base) : 120002.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)

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


libraries_tests.run.linux.arm.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 242762120 (overridden on cmd)
Total bytes of diff: 242761980 (overridden on cmd)
Total bytes of delta: -140 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -14 : 213941.dasm (-2.36 % of base)
         -14 : 207856.dasm (-2.01 % of base)
         -12 : 89376.dasm (-3.82 % of base)
         -12 : 216066.dasm (-1.56 % of base)
         -12 : 18799.dasm (-1.81 % of base)
         -12 : 206686.dasm (-2.09 % of base)
         -12 : 75890.dasm (-2.06 % of base)
         -12 : 216395.dasm (-1.56 % of base)
         -10 : 268701.dasm (-2.99 % of base)
         -10 : 388457.dasm (-1.25 % of base)
         -10 : 464372.dasm (-0.66 % of base)
         -10 : 428642.dasm (-0.62 % of base)

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

Top method improvements (bytes):
         -14 (-2.01 % of base) : 207856.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
         -14 (-2.36 % of base) : 213941.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (Tier0-FullOpts)
         -12 (-1.81 % of base) : 18799.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
         -12 (-3.82 % of base) : 89376.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (Tier0-FullOpts)
         -12 (-1.56 % of base) : 216395.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
         -12 (-1.56 % of base) : 216066.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
         -12 (-2.09 % of base) : 206686.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (Tier0-FullOpts)
         -12 (-2.06 % of base) : 75890.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
         -10 (-2.99 % of base) : 268701.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
         -10 (-0.66 % of base) : 464372.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier0-FullOpts)
         -10 (-1.25 % of base) : 388457.dasm - System.Net.Cookie:set_Port(System.String):this (Tier0-FullOpts)
         -10 (-0.62 % of base) : 428642.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (Tier0-FullOpts)

Top method improvements (percentages):
         -12 (-3.82 % of base) : 89376.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (Tier0-FullOpts)
         -10 (-2.99 % of base) : 268701.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
         -14 (-2.36 % of base) : 213941.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (Tier0-FullOpts)
         -12 (-2.09 % of base) : 206686.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (Tier0-FullOpts)
         -12 (-2.06 % of base) : 75890.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
         -14 (-2.01 % of base) : 207856.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
         -12 (-1.81 % of base) : 18799.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
         -12 (-1.56 % of base) : 216395.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
         -12 (-1.56 % of base) : 216066.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
         -10 (-1.25 % of base) : 388457.dasm - System.Net.Cookie:set_Port(System.String):this (Tier0-FullOpts)
         -10 (-0.66 % of base) : 464372.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier0-FullOpts)
         -10 (-0.62 % of base) : 428642.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (Tier0-FullOpts)

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


librariestestsnotieredcompilation.run.linux.arm.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 93201612 (overridden on cmd)
Total bytes of diff: 93201462 (overridden on cmd)
Total bytes of delta: -150 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -14 : 67980.dasm (-2.36 % of base)
         -14 : 71158.dasm (-2.01 % of base)
         -12 : 19644.dasm (-2.06 % of base)
         -12 : 23908.dasm (-3.82 % of base)
         -12 : 69298.dasm (-1.54 % of base)
         -12 : 5702.dasm (-1.82 % of base)
         -12 : 67643.dasm (-2.09 % of base)
         -12 : 70913.dasm (-1.54 % of base)
         -10 : 180560.dasm (-0.66 % of base)
         -10 : 149411.dasm (-1.26 % of base)
         -10 : 152547.dasm (-1.25 % of base)
         -10 : 164647.dasm (-0.62 % of base)
         -10 : 96743.dasm (-2.99 % of base)

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

Top method improvements (bytes):
         -14 (-2.01 % of base) : 71158.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -14 (-2.36 % of base) : 67980.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.82 % of base) : 5702.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -12 (-3.82 % of base) : 23908.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
         -12 (-1.54 % of base) : 69298.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.54 % of base) : 70913.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-2.09 % of base) : 67643.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
         -12 (-2.06 % of base) : 19644.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
         -10 (-2.99 % of base) : 96743.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
         -10 (-0.66 % of base) : 180560.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-1.26 % of base) : 149411.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -10 (-1.25 % of base) : 152547.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -10 (-0.62 % of base) : 164647.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)

Top method improvements (percentages):
         -12 (-3.82 % of base) : 23908.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
         -10 (-2.99 % of base) : 96743.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
         -14 (-2.36 % of base) : 67980.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
         -12 (-2.09 % of base) : 67643.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
         -12 (-2.06 % of base) : 19644.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
         -14 (-2.01 % of base) : 71158.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.82 % of base) : 5702.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -12 (-1.54 % of base) : 69298.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -12 (-1.54 % of base) : 70913.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -10 (-1.26 % of base) : 149411.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -10 (-1.25 % of base) : 152547.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -10 (-0.66 % of base) : 180560.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -10 (-0.62 % of base) : 164647.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)

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


realworld.run.linux.arm.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 13613446 (overridden on cmd)
Total bytes of diff: 13613422 (overridden on cmd)
Total bytes of delta: -24 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -12 : 29208.dasm (-3.82 % of base)
         -12 : 29879.dasm (-2.06 % of base)

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

Top method improvements (bytes):
         -12 (-3.82 % of base) : 29208.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
         -12 (-2.06 % of base) : 29879.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)

Top method improvements (percentages):
         -12 (-3.82 % of base) : 29208.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
         -12 (-2.06 % of base) : 29879.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)

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



windows x86

Diffs are based on 2,296,274 contexts (841,817 MinOpts, 1,454,457 FullOpts).

MISSED contexts: base: 5,093 (0.22%), diff: 5,096 (0.22%)

Overall (-1,264 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 7,107,453 -4
benchmarks.run_pgo.windows.x86.checked.mch 45,222,512 -17
benchmarks.run_tiered.windows.x86.checked.mch 9,511,426 -4
coreclr_tests.run.windows.x86.checked.mch 309,179,129 -8
libraries.crossgen2.windows.x86.checked.mch 31,628,298 -97
libraries.pmi.windows.x86.checked.mch 48,827,232 -192
libraries_tests.run.windows.x86.Release.mch 185,843,933 -765
librariestestsnotieredcompilation.run.windows.x86.Release.mch 102,198,175 -124
realworld.run.windows.x86.checked.mch 11,363,356 -53

FullOpts (-1,264 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 7,107,174 -4
benchmarks.run_pgo.windows.x86.checked.mch 38,593,022 -17
benchmarks.run_tiered.windows.x86.checked.mch 5,241,617 -4
coreclr_tests.run.windows.x86.checked.mch 107,507,360 -8
libraries.crossgen2.windows.x86.checked.mch 31,627,241 -97
libraries.pmi.windows.x86.checked.mch 48,731,918 -192
libraries_tests.run.windows.x86.Release.mch 87,512,426 -765
librariestestsnotieredcompilation.run.windows.x86.Release.mch 93,528,383 -124
realworld.run.windows.x86.checked.mch 11,067,656 -53

Example diffs

benchmarks.run.windows.x86.checked.mch

-4 (-0.37%) : 18028.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -10,7 +10,7 @@ ; ; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]> ; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>> ; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18] @@ -23,10 +23,10 @@ ; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi ; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24] ; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" -; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" +; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -34,8 +34,8 @@ ;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall" -; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall" +; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -47,9 +47,9 @@ ; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -57,9 +57,9 @@ ; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -67,83 +67,77 @@ ; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP -; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP -; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP -; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP -; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP -; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP +; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP +; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP +; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP +; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP +; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr" ; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr" ; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect" ; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr" ; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect" -; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative" -; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative" -; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" -; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect" +; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative" +; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative" +; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" +; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup" -; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" -;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" -;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup" -; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" -; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" -;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup" -; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" -; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP -; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP -; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP -; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP -; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" -; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP -; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP -; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP -; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP -; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup" +; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" +;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" +; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup" +; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" +; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" +;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup" +; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" +; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" +; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP +; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP +; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP +; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP +; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90] ; TEMP_01 int -> [ebp-0x94] ; @@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, ecx ; gcrRegs +[ebx] ;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0 jne SHORT G_M18379_IG04 ;; size=6 bbWeight=1 PerfScore 4.00 @@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 xor edi, edi ; byrRegs -[edi] test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50 G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[esi] @@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000 xor eax, eax jmp SHORT G_M18379_IG07 ;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01} mov ecx, esi ; gcrRegs +[ecx] @@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov esi, gword ptr [ebp-0x6C] ; gcrRegs +[esi] ;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01} mov edx, gword ptr [ebx+0x20] ; gcrRegs +[edx] @@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov eax, edx sar eax, 14 cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08] and edx, 0x3FFF cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08] ; byrRegs +[eax] ...

benchmarks.run_pgo.windows.x86.checked.mch

-13 (-2.08%) : 12020.dasm - Microsoft.Extensions.Options.OptionsFactory`1[System.Canon]:Create(System.String):System.Canon:this (Tier0-FullOpts)

@@ -8,7 +8,7 @@ ; 5 inlinees with PGO data; 11 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 15, 18 ) ref -> edi this class-hnd single-def <Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]>
+; V00 this [V00,T02] ( 14, 17 ) ref -> edi this class-hnd single-def <Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]>
; V01 arg1 [V01,T01] ( 12, 20 ) ref -> esi class-hnd single-def <System.String> ; V02 loc0 [V02,T12] ( 6, 14 ) ref -> ebx class-hnd single-def <System.__Canon> ; V03 loc1 [V03,T16] ( 4, 10 ) ref -> [ebp-0x34] class-hnd spill-single-def <<unknown class>> @@ -18,7 +18,7 @@ ; V07 loc5 [V07,T17] ( 4, 10 ) ref -> [ebp-0x40] class-hnd spill-single-def <<unknown class>> ; V08 loc6 [V08,T06] ( 5, 17 ) int -> [ebp-0x14] ; V09 loc7 [V09,T27] ( 2, 8 ) ref -> eax class-hnd <<unknown class>>
-; V10 loc8 [V10,T41] ( 4, 3 ) ref -> [ebp-0x44] class-hnd exact single-def <<unknown class>>
+; V10 loc8 [V10,T38] ( 4, 3 ) ref -> [ebp-0x44] class-hnd exact single-def <<unknown class>>
; V11 loc9 [V11,T22] ( 4, 9 ) ref -> [ebp-0x48] class-hnd spill-single-def <<unknown class>> ; V12 loc10 [V12,T07] ( 5, 16.50) int -> [ebp-0x18] ; V13 loc11 [V13,T28] ( 2, 8 ) ref -> edx class-hnd <<unknown class>> @@ -30,43 +30,39 @@ ; V19 tmp4 [V19,T26] ( 3, 8 ) int -> [ebp-0x1C] "VirtualCall with runtime lookup" ;* V20 tmp5 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V21 tmp6 [V21,T09] ( 2, 16 ) int -> [ebp-0x20] spill-single-def "VirtualCall with runtime lookup"
-; V22 tmp7 [V22,T42] ( 3, 3 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V22 tmp7 [V22,T39] ( 3, 3 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
;* V23 tmp8 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V24 tmp9 [V24,T10] ( 2, 16 ) int -> eax "VirtualCall with runtime lookup"
-; V25 tmp10 [V25,T50] ( 3, 0 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V26 tmp11 [V26,T31] ( 2, 4 ) ubyte -> eax "Inline return value spill temp" -; V27 tmp12 [V27,T44] ( 3, 2.67) byref -> ecx "impAppendStmt" -; V28 tmp13 [V28,T45] ( 3, 2.67) byref -> edx "spilling arg" -; V29 tmp14 [V29,T40] ( 3, 3.33) int -> eax "spilling arg" -; V30 tmp15 [V30,T32] ( 3, 5.33) int -> eax "Grabbing temp for Qmark"
+; V25 tmp10 [V25,T46] ( 3, 0 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V26 tmp11 [V26,T30] ( 2, 4 ) ubyte -> eax "Inline return value spill temp" +; V27 tmp12 [V27,T41] ( 3, 2.67) byref -> ecx "impAppendStmt" +; V28 tmp13 [V28,T42] ( 3, 2.67) byref -> edx "spilling arg" +; V29 tmp14 [V29,T37] ( 3, 3.33) int -> eax "spilling arg" +; V30 tmp15 [V30,T31] ( 3, 5.33) int -> eax "Grabbing temp for Qmark"
;* V31 tmp16 [V31 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V32 tmp17 [V32 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V33 tmp18 [V33 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V34 tmp19 [V34,T11] ( 2, 16 ) int -> ecx "argument with side effect"
-; V35 cse0 [V35,T36] ( 2, 4.50) int -> [ebp-0x24] spill-single-def hoist "CSE - conservative" -; V36 cse1 [V36,T33] ( 2, 5 ) int -> [ebp-0x28] spill-single-def hoist "CSE - conservative" -; V37 rat0 [V37,T34] ( 2, 4 ) int -> ecx "Spilling to split statement for tree" -;* V38 rat1 [V38,T49] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V39 rat2 [V39,T29] ( 2, 4 ) int -> ecx "spilling expr" -;* V40 rat3 [V40,T37] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V41 rat4 [V41,T03] ( 3, 18.88) int -> eax "Spilling to split statement for tree" -; V42 rat5 [V42,T08] ( 3, 16 ) int -> ecx "runtime lookup" -; V43 rat6 [V43,T00] ( 3, 22.40) int -> ecx "spilling expr" -; V44 rat7 [V44,T04] ( 3, 17.92) int -> ecx "fgMakeTemp is creating a new local variable" -; V45 rat8 [V45,T20] ( 3, 9.44) int -> ecx "Spilling to split statement for tree" -; V46 rat9 [V46,T14] ( 3, 11.20) int -> edx "spilling expr" -; V47 rat10 [V47,T23] ( 3, 8.96) int -> edx "fgMakeTemp is creating a new local variable" -; V48 rat11 [V48,T21] ( 3, 9.44) int -> ecx "Spilling to split statement for tree" -; V49 rat12 [V49,T15] ( 3, 11.20) int -> edx "spilling expr" -; V50 rat13 [V50,T24] ( 3, 8.96) int -> eax "fgMakeTemp is creating a new local variable" -; V51 rat14 [V51,T35] ( 3, 4.72) int -> [ebp-0x2C] spill-single-def "Spilling to split statement for tree" -; V52 rat15 [V52,T39] ( 3, 4 ) int -> registers "runtime lookup" -; V53 rat16 [V53,T30] ( 3, 5.60) int -> ecx "spilling expr" -; V54 rat17 [V54,T38] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable" -; V55 rat18 [V55,T46] ( 3, 2.36) int -> [ebp-0x30] spill-single-def "Spilling to split statement for tree" -; V56 rat19 [V56,T48] ( 3, 2 ) int -> eax "runtime lookup" -; V57 rat20 [V57,T43] ( 3, 2.80) int -> eax "spilling expr" -; V58 rat21 [V58,T47] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
+; V35 cse0 [V35,T34] ( 2, 4.50) int -> [ebp-0x24] spill-single-def hoist "CSE - conservative" +; V36 cse1 [V36,T32] ( 2, 5 ) int -> [ebp-0x28] spill-single-def hoist "CSE - conservative" +; V37 rat0 [V37,T03] ( 3, 18.88) int -> eax "Spilling to split statement for tree" +; V38 rat1 [V38,T08] ( 3, 16 ) int -> ecx "runtime lookup" +; V39 rat2 [V39,T00] ( 3, 22.40) int -> ecx "spilling expr" +; V40 rat3 [V40,T04] ( 3, 17.92) int -> ecx "fgMakeTemp is creating a new local variable" +; V41 rat4 [V41,T20] ( 3, 9.44) int -> ecx "Spilling to split statement for tree" +; V42 rat5 [V42,T14] ( 3, 11.20) int -> edx "spilling expr" +; V43 rat6 [V43,T23] ( 3, 8.96) int -> edx "fgMakeTemp is creating a new local variable" +; V44 rat7 [V44,T21] ( 3, 9.44) int -> ecx "Spilling to split statement for tree" +; V45 rat8 [V45,T15] ( 3, 11.20) int -> edx "spilling expr" +; V46 rat9 [V46,T24] ( 3, 8.96) int -> eax "fgMakeTemp is creating a new local variable" +; V47 rat10 [V47,T33] ( 3, 4.72) int -> [ebp-0x2C] spill-single-def "Spilling to split statement for tree" +; V48 rat11 [V48,T36] ( 3, 4 ) int -> registers "runtime lookup" +; V49 rat12 [V49,T29] ( 3, 5.60) int -> ecx "spilling expr" +; V50 rat13 [V50,T35] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable" +; V51 rat14 [V51,T43] ( 3, 2.36) int -> [ebp-0x30] spill-single-def "Spilling to split statement for tree" +; V52 rat15 [V52,T45] ( 3, 2 ) int -> eax "runtime lookup" +; V53 rat16 [V53,T40] ( 3, 2.80) int -> eax "spilling expr" +; V54 rat17 [V54,T44] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 60 @@ -81,7 +77,7 @@ G_M22830_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov esi, edx ; gcrRegs +[esi] ;; size=13 bbWeight=1 PerfScore 5.00
-G_M22830_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M22830_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs +[edi] mov ecx, edi ; gcrRegs +[ecx] @@ -99,12 +95,7 @@ G_M22830_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 xor edx, edx cmp dword ptr [eax+0x04], 0 jle G_M22830_IG26
- mov ecx, dword ptr [edi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - cmp dword ptr [ecx+0x04], 32 - jle SHORT G_M22830_IG03 - ;; size=45 bbWeight=1 PerfScore 25.00
+ ;; size=32 bbWeight=1 PerfScore 15.00
G_M22830_IG03: ; bbWeight=4, gcVars=0000000000010000 {V03}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz mov dword ptr [ebp-0x10], edx mov ecx, gword ptr [eax+4*edx+0x08] @@ -359,7 +350,7 @@ G_M22830_IG33: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRe cmp dword ptr [eax+0x04], 48 jle SHORT G_M22830_IG37 ;; size=53 bbWeight=0.50 PerfScore 11.25
-G_M22830_IG34: ; bbWeight=0.40, gcVars=0000020000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M22830_IG34: ; bbWeight=0.40, gcVars=0000004000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[edx] mov eax, dword ptr [eax+0x30] test eax, eax @@ -373,8 +364,8 @@ G_M22830_IG36: ; bbWeight=2, gcVars=0000000000020000 {V07}, gcrefRegs=000 mov ecx, dword ptr [ebp-0x28] jmp SHORT G_M22830_IG31 ;; size=5 bbWeight=2 PerfScore 6.00
-G_M22830_IG37: ; bbWeight=0.18, gcVars=0000020000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref - ; GC ptr vars -{V07 V17} +{V10 V11 V22 V41}
+G_M22830_IG37: ; bbWeight=0.18, gcVars=0000004000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; GC ptr vars -{V07 V17} +{V10 V11 V22 V38}
mov ecx, dword ptr [ebp-0x30] mov edx, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS @@ -418,9 +409,9 @@ G_M22830_IG41: ; bbWeight=4, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs= mov dword ptr [ebp-0x18], ecx jg SHORT G_M22830_IG45 ;; size=15 bbWeight=4 PerfScore 29.00
-G_M22830_IG42: ; bbWeight=0.50, gcVars=0000020000000000 {V10}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M22830_IG42: ; bbWeight=0.50, gcVars=0000004000000000 {V10}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- ; GC ptr vars -{V11 V22 V41}
+ ; GC ptr vars -{V11 V22 V38}
mov edx, gword ptr [ebp-0x44] ; gcrRegs +[edx] cmp dword ptr [edx+0x08], 0 @@ -441,15 +432,15 @@ G_M22830_IG44: ; bbWeight=1, epilog, nogc, extend pop ebp ret ;; size=8 bbWeight=1 PerfScore 3.50
-G_M22830_IG45: ; bbWeight=2, gcVars=0000020000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M22830_IG45: ; bbWeight=2, gcVars=0000004000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[esi]
- ; GC ptr vars +{V10 V11 V22 V41}
+ ; GC ptr vars +{V10 V11 V22 V38}
mov eax, dword ptr [ebp-0x24] jmp SHORT G_M22830_IG39 ;; size=5 bbWeight=2 PerfScore 6.00
-G_M22830_IG46: ; bbWeight=0, gcVars=0000020000000000 {V10}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
+G_M22830_IG46: ; bbWeight=0, gcVars=0000004000000000 {V10}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ebx]
- ; GC ptr vars -{V11 V22 V41}
+ ; GC ptr vars -{V11 V22 V38}
mov ecx, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax] @@ -479,6 +470,6 @@ G_M22830_IG46: ; bbWeight=0, gcVars=0000020000000000 {V10}, gcrefRegs=000 int3 ;; size=48 bbWeight=0 PerfScore 0.00
-; Total bytes of code 625, prolog size 13, PerfScore 486.79, instruction count 224, allocated bytes for code 625 (MethodHash=445da6d1) for method Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
+; Total bytes of code 612, prolog size 13, PerfScore 476.79, instruction count 219, allocated bytes for code 612 (MethodHash=445da6d1) for method Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
; ============================================================

-4 (-0.37%) : 72723.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)

@@ -10,7 +10,7 @@ ; ; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]> ; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>> ; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18] @@ -23,10 +23,10 @@ ; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi ; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24] ; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" -; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" +; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -34,8 +34,8 @@ ;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall" -; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall" +; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -47,9 +47,9 @@ ; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -57,9 +57,9 @@ ; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -67,83 +67,77 @@ ; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP -; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP -; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP -; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP -; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP -; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP +; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP +; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP +; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP +; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP +; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr" ; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr" ; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect" ; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr" ; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect" -; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative" -; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative" -; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" -; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect" +; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative" +; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative" +; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" +; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup" -; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" -;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" -;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup" -; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" -; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" -;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup" -; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" -; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP -; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP -; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP -; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP -; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" -; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP -; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP -; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP -; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP -; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup" +; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" +;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" +; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup" +; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" +; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" +;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup" +; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" +; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" +; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP +; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP +; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP +; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP +; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90] ; TEMP_01 int -> [ebp-0x94] ; @@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, ecx ; gcrRegs +[ebx] ;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0 jne SHORT G_M18379_IG04 ;; size=6 bbWeight=1 PerfScore 4.00 @@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 xor edi, edi ; byrRegs -[edi] test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50 G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[esi] @@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000 xor eax, eax jmp SHORT G_M18379_IG07 ;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01} mov ecx, esi ; gcrRegs +[ecx] @@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov esi, gword ptr [ebp-0x6C] ; gcrRegs +[esi] ;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01} mov edx, gword ptr [ebx+0x20] ; gcrRegs +[edx] @@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov eax, edx sar eax, 14 cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08] and edx, 0x3FFF cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08] ; byrRegs +[eax] ...

benchmarks.run_tiered.windows.x86.checked.mch

-4 (-0.37%) : 34115.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)

@@ -10,7 +10,7 @@ ; ; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]> ; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>> ; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18] @@ -23,10 +23,10 @@ ; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi ; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24] ; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" -; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" +; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -34,8 +34,8 @@ ;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall" -; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall" +; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -47,9 +47,9 @@ ; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -57,9 +57,9 @@ ; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -67,83 +67,77 @@ ; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP -; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP -; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP -; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP -; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP -; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP +; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP +; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP +; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP +; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP +; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr" ; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr" ; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect" ; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr" ; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect" -; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative" -; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative" -; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" -; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect" +; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative" +; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative" +; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" +; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup" -; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" -;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" -;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup" -; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" -; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" -;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup" -; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" -; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP -; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP -; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP -; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP -; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" -; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP -; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP -; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP -; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP -; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup" +; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" +;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" +; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup" +; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" +; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" +;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup" +; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" +; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" +; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP +; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP +; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP +; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP +; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90] ; TEMP_01 int -> [ebp-0x94] ; @@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, ecx ; gcrRegs +[ebx] ;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0 jne SHORT G_M18379_IG04 ;; size=6 bbWeight=1 PerfScore 4.00 @@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 xor edi, edi ; byrRegs -[edi] test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50 G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[esi] @@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000 xor eax, eax jmp SHORT G_M18379_IG07 ;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01} mov ecx, esi ; gcrRegs +[ecx] @@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov esi, gword ptr [ebp-0x6C] ; gcrRegs +[esi] ;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01} mov edx, gword ptr [ebx+0x20] ; gcrRegs +[edx] @@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov eax, edx sar eax, 14 cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08] and edx, 0x3FFF cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08] ; byrRegs +[eax] ...

coreclr_tests.run.windows.x86.checked.mch

-4 (-0.37%) : 223677.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)

@@ -10,7 +10,7 @@ ; ; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]> ; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>> ; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18] @@ -23,10 +23,10 @@ ; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi ; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24] ; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" -; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" +; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -34,8 +34,8 @@ ;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall" -; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall" +; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -47,9 +47,9 @@ ; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -57,9 +57,9 @@ ; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -67,83 +67,77 @@ ; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP -; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP -; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP -; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP -; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP -; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP +; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP +; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP +; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP +; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP +; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr" ; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr" ; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect" ; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr" ; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect" -; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative" -; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative" -; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" -; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect" +; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative" +; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative" +; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" +; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup" -; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" -;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" -;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup" -; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" -; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" -;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup" -; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" -; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP -; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP -; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP -; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP -; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" -; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP -; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP -; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP -; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP -; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup" +; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" +;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" +; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup" +; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" +; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" +;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup" +; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" +; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" +; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP +; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP +; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP +; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP +; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90] ; TEMP_01 int -> [ebp-0x94] ; @@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, ecx ; gcrRegs +[ebx] ;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0 jne SHORT G_M18379_IG04 ;; size=6 bbWeight=1 PerfScore 4.00 @@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 xor edi, edi ; byrRegs -[edi] test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50 G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[esi] @@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000 xor eax, eax jmp SHORT G_M18379_IG07 ;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01} mov ecx, esi ; gcrRegs +[ecx] @@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov esi, gword ptr [ebp-0x6C] ; gcrRegs +[esi] ;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01} mov edx, gword ptr [ebx+0x20] ; gcrRegs +[edx] @@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov eax, edx sar eax, 14 cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08] and edx, 0x3FFF cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08] ; byrRegs +[eax] ...

-4 (-0.37%) : 476978.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -10,7 +10,7 @@ ; ; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]> ; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>> ; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18] @@ -23,10 +23,10 @@ ; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi ; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24] ; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" -; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" +; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -34,8 +34,8 @@ ;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall" -; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall" +; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -47,9 +47,9 @@ ; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -57,9 +57,9 @@ ; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -67,83 +67,77 @@ ; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP -; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP -; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP -; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP -; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP -; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP +; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP +; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP +; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP +; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP +; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr" ; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr" ; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect" ; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr" ; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect" -; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative" -; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative" -; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" -; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect" +; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative" +; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative" +; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" +; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup" -; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" -;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" -;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup" -; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" -; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" -;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup" -; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" -; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP -; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP -; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP -; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP -; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" -; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP -; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP -; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP -; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP -; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup" +; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" +;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" +; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup" +; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" +; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" +;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup" +; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" +; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" +; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP +; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP +; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP +; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP +; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90] ; TEMP_01 int -> [ebp-0x94] ; @@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, ecx ; gcrRegs +[ebx] ;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0 jne SHORT G_M18379_IG04 ;; size=6 bbWeight=1 PerfScore 4.00 @@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 xor edi, edi ; byrRegs -[edi] test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50 G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[esi] @@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000 xor eax, eax jmp SHORT G_M18379_IG07 ;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01} mov ecx, esi ; gcrRegs +[ecx] @@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov esi, gword ptr [ebp-0x6C] ; gcrRegs +[esi] ;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01} mov edx, gword ptr [ebx+0x20] ; gcrRegs +[edx] @@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov eax, edx sar eax, 14 cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08] and edx, 0x3FFF cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08] ; byrRegs +[eax] ...

libraries.crossgen2.windows.x86.checked.mch

-9 (-2.91%) : 32127.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (FullOpts)

@@ -16,7 +16,7 @@ ; V05 loc2 [V05,T01] ( 6, 20 ) byref -> ecx "impAppendStmt" ; V06 tmp1 [V06,T04] ( 6, 8 ) byref -> ebx ; V07 tmp2 [V07,T06] ( 4, 8 ) int -> eax "VirtualCall with runtime lookup"
-; V08 tmp3 [V08,T08] ( 4, 4 ) int -> eax
+; V08 tmp3 [V08,T08] ( 2, 3.96) int -> ecx
; V09 tmp4 [V09,T05] ( 4, 8 ) ref -> ecx "argument with side effect" ; V10 cse0 [V10,T07] ( 5, 7 ) int -> [ebp-0x1C] spill-single-def "CSE - moderate" ; @@ -108,13 +108,13 @@ G_M22994_IG09: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 nop call [eax] ; gcrRegs -[ecx edx]
+ xor ecx, ecx
test eax, eax
- sete al - movzx eax, al - test eax, eax
+ sete cl + test ecx, ecx
mov dword ptr [ebp-0x14], ebx jne G_M22994_IG21
- ;; size=42 bbWeight=1.98 PerfScore 31.68
+ ;; size=41 bbWeight=1.98 PerfScore 31.68
G_M22994_IG10: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz mov eax, dword ptr [ebp-0x14] inc eax @@ -184,13 +184,10 @@ G_M22994_IG17: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 call [eax] ; gcrRegs -[ecx edx] test eax, eax
- sete al - movzx eax, al - test eax, eax
mov dword ptr [ebp-0x14], ebx mov edx, dword ptr [ebp-0x1C]
- jne SHORT G_M22994_IG21 - ;; size=46 bbWeight=0.02 PerfScore 0.42
+ je SHORT G_M22994_IG21 + ;; size=38 bbWeight=0.02 PerfScore 0.39
G_M22994_IG18: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz mov eax, dword ptr [ebp-0x14] inc eax @@ -225,6 +222,6 @@ G_M22994_IG23: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 309, prolog size 24, PerfScore 128.36, instruction count 117, allocated bytes for code 309 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
+; Total bytes of code 300, prolog size 24, PerfScore 128.33, instruction count 114, allocated bytes for code 300 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
; ============================================================

-20 (-2.04%) : 76488.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)

@@ -41,9 +41,8 @@ ; V29 tmp10 [V29,T13] ( 4, 8 ) ref -> eax "argument with side effect" ; V30 tmp11 [V30,T14] ( 4, 8 ) ref -> eax "argument with side effect" ; V31 tmp12 [V31,T08] ( 4, 16 ) ref -> edx "argument with side effect"
-; TEMP_01 byref -> [ebp-0x5C]
;
-; Lcl frame size = 80
+; Lcl frame size = 76
G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -51,16 +50,14 @@ G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, push edi push esi push ebx
- sub esp, 80
+ sub esp, 76
xorps xmm4, xmm4
- movups xmmword ptr [ebp-0x5C], xmm4 - movups xmmword ptr [ebp-0x4C], xmm4
movups xmmword ptr [ebp-0x3C], xmm4 movups xmmword ptr [ebp-0x2C], xmm4 movups xmmword ptr [ebp-0x1C], xmm4 mov esi, edx ; gcrRegs +[esi]
- ;; size=34 bbWeight=1 PerfScore 15.08
+ ;; size=26 bbWeight=1 PerfScore 11.08
G_M1087_IG02: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref ; gcrRegs +[ecx] cmp byte ptr [ecx], cl @@ -296,21 +293,16 @@ G_M1087_IG10: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefReg ; gcrRegs +[ecx] mov edx, dword ptr [ebp-0x24] mov dword ptr [ecx+0x1C], edx
+ mov gword ptr [ebp-0x58], ecx
lea edx, bword ptr [ecx+0x14] ; byrRegs +[edx]
- ; GC ptr vars -{V20}
call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax]
+ ; gcrRegs -[eax ecx]
; byrRegs -[edx]
- mov gword ptr [ebp-0x58], ecx - ; GC ptr vars +{V20} - lea edx, bword ptr [ecx+0x18] - ; byrRegs +[edx] - mov bword ptr [ebp-0x5C], edx
mov ecx, gword ptr [ebp-0x44]
+ ; gcrRegs +[ecx]
call [<unknown method>] ; gcrRegs -[ecx] +[eax]
- ; byrRegs -[edx]
mov ecx, eax ; gcrRegs +[ecx] mov edx, gword ptr [ebp-0x44] @@ -319,18 +311,19 @@ G_M1087_IG10: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefReg ; GC ptr vars -{V10} call [<unknown method>] ; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x5C]
+ mov ecx, gword ptr [ebp-0x58] + ; gcrRegs +[ecx] + lea edx, bword ptr [ecx+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V20}
call [CORINFO_HELP_ASSIGN_REF_EAX] ; gcrRegs -[eax] ; byrRegs -[edx]
- mov ecx, gword ptr [ebp-0x58] - ; gcrRegs +[ecx]
jmp SHORT G_M1087_IG12
- ;; size=106 bbWeight=0.02 PerfScore 0.93
+ ;; size=100 bbWeight=0.02 PerfScore 0.89
G_M1087_IG11: ; bbWeight=0.02, gcVars=00000040 {V07}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref ; gcrRegs -[ecx]
- ; GC ptr vars -{V20} +{V06 V07}
+ ; GC ptr vars +{V06 V07}
mov gword ptr [ebp+0x08], edi call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs -[edi] +[eax] @@ -342,21 +335,18 @@ G_M1087_IG11: ; bbWeight=0.02, gcVars=00000040 {V07}, gcrefRegs=000000C8 mov edx, dword ptr [(reloc)] mov edi, gword ptr [edx] ; gcrRegs +[edi]
- lea edx, bword ptr [ecx+0x14] - ; byrRegs +[edx] - call [CORINFO_HELP_ASSIGN_REF_EDI] - ; gcrRegs -[edi] - ; byrRegs -[edx]
mov gword ptr [ebp-0x54], ecx ; GC ptr vars +{V19}
- lea edx, bword ptr [ecx+0x18]
+ lea edx, bword ptr [ecx+0x14]
; byrRegs +[edx]
- mov bword ptr [ebp-0x5C], edx - mov ecx, gword ptr [ebp-0x40]
; GC ptr vars -{V06}
+ call [CORINFO_HELP_ASSIGN_REF_EDI] + ; gcrRegs -[ecx edi] + ; byrRegs -[edx] + mov ecx, gword ptr [ebp-0x40] + ; gcrRegs +[ecx]
call [<unknown method>] ; gcrRegs -[ecx] +[eax]
- ; byrRegs -[edx]
mov ecx, eax ; gcrRegs +[ecx] mov edx, gword ptr [ebp-0x40] @@ -365,19 +355,19 @@ G_M1087_IG11: ; bbWeight=0.02, gcVars=00000040 {V07}, gcrefRegs=000000C8 ; GC ptr vars -{V07} call [<unknown method>] ; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x5C]
+ mov edi, gword ptr [ebp-0x54] + ; gcrRegs +[edi] + lea edx, bword ptr [edi+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V19}
call [CORINFO_HELP_ASSIGN_REF_EAX] ; gcrRegs -[eax] ; byrRegs -[edx]
- mov edi, gword ptr [ebp-0x54] - ; gcrRegs +[edi]
mov ecx, edi ; gcrRegs +[ecx] mov edi, gword ptr [ebp+0x08]
- ;; size=82 bbWeight=0.02 PerfScore 0.68 -G_M1087_IG12: ; bbWeight=0.04, gcVars=00000000 {}, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref - ; GC ptr vars -{V19}
+ ;; size=76 bbWeight=0.02 PerfScore 0.64 +G_M1087_IG12: ; bbWeight=0.04, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref
mov eax, dword ptr [ebp-0x24] cmp eax, dword ptr [ebx+0x04] jae G_M1087_IG23 @@ -543,6 +533,6 @@ G_M1087_IG23: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, by int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 979, prolog size 32, PerfScore 977.83, instruction count 283, allocated bytes for code 979 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
+; Total bytes of code 959, prolog size 24, PerfScore 973.75, instruction count 277, allocated bytes for code 959 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
; ============================================================

-20 (-1.50%) : 152646.dasm - System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)

@@ -62,9 +62,8 @@ ; V50 tmp33 [V50,T34] ( 2, 16 ) ref -> [ebp-0x7C] spill-single-def "argument with side effect" ; V51 tmp34 [V51,T35] ( 2, 16 ) ref -> [ebp-0x80] spill-single-def "argument with side effect" ; V52 tmp35 [V52,T30] ( 4, 16 ) ref -> edx "argument with side effect"
-; TEMP_01 byref -> [ebp-0x84]
;
-; Lcl frame size = 120
+; Lcl frame size = 116
G_M15781_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -72,14 +71,12 @@ G_M15781_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 120 - xor eax, eax - mov dword ptr [ebp-0x84], eax
+ sub esp, 116
mov esi, ecx ; gcrRegs +[esi] mov ebx, edx ; gcrRegs +[ebx]
- ;; size=21 bbWeight=1 PerfScore 6.25
+ ;; size=13 bbWeight=1 PerfScore 5.00
G_M15781_IG02: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax] @@ -691,21 +688,17 @@ G_M15781_IG32: ; bbWeight=0.04, gcrefRegs=00000048 {ebx esi}, byrefRegs=0 call [CORINFO_HELP_ASSIGN_REF_ECX] ; gcrRegs -[ecx] ; byrRegs -[edx]
+ mov gword ptr [ebp-0x50], eax + ; GC ptr vars +{V21}
lea edx, bword ptr [eax+0x0C] ; byrRegs +[edx] mov ecx, gword ptr [ebp-0x74] ; gcrRegs +[ecx] call [CORINFO_HELP_ASSIGN_REF_ECX]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[eax ecx]
; byrRegs -[edx]
- mov gword ptr [ebp-0x50], eax - ; GC ptr vars +{V21} - lea edx, bword ptr [eax+0x08] - ; byrRegs +[edx] - mov bword ptr [ebp-0x84], edx
call [CORINFO_HELP_READYTORUN_GCSTATIC_BASE]
- ; gcrRegs -[eax] - ; byrRegs -[edx] +[eax]
+ ; byrRegs +[eax]
mov edx, gword ptr [eax] ; gcrRegs +[edx] mov ecx, gword ptr [ebp-0x74] @@ -715,30 +708,31 @@ G_M15781_IG32: ; bbWeight=0.04, gcrefRegs=00000048 {ebx esi}, byrefRegs=0 call [<unknown method>] ; gcrRegs -[ecx edx] +[eax] ; byrRegs -[eax]
- mov edx, bword ptr [ebp-0x84]
+ mov ecx, gword ptr [ebp-0x50] + ; gcrRegs +[ecx] + lea edx, bword ptr [ecx+0x08]
; byrRegs +[edx]
+ ; GC ptr vars -{V21}
call [CORINFO_HELP_ASSIGN_REF_EAX] ; gcrRegs -[eax] ; byrRegs -[edx]
- mov ecx, dword ptr [ebp-0x38]
+ mov eax, dword ptr [ebp-0x38]
mov edx, gword ptr [ebp-0x4C] ; gcrRegs +[edx]
- cmp ecx, dword ptr [edx+0x04]
+ cmp eax, dword ptr [edx+0x04]
jae SHORT G_M15781_IG35
- lea edx, bword ptr [edx+4*ecx+0x08]
+ lea edx, bword ptr [edx+4*eax+0x08]
; gcrRegs -[edx] ; byrRegs +[edx]
- mov eax, gword ptr [ebp-0x50] - ; gcrRegs +[eax] - ; GC ptr vars -{V20 V21} - call [CORINFO_HELP_ASSIGN_REF_EAX] - ; gcrRegs -[eax]
+ ; GC ptr vars -{V20} + call [CORINFO_HELP_ASSIGN_REF_ECX] + ; gcrRegs -[ecx]
; byrRegs -[edx]
- inc ecx - cmp ecx, edi - mov dword ptr [ebp-0x38], ecx
+ inc eax + cmp eax, edi + mov dword ptr [ebp-0x38], eax
jl G_M15781_IG32
- ;; size=160 bbWeight=0.04 PerfScore 2.57
+ ;; size=148 bbWeight=0.04 PerfScore 2.49
G_M15781_IG33: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref ; gcrRegs -[esi] mov ecx, ebx @@ -773,6 +767,6 @@ G_M15781_IG36: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} int3 ;; size=25 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1336, prolog size 17, PerfScore 1559.57, instruction count 394, allocated bytes for code 1336 (MethodHash=127bc25a) for method System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
+; Total bytes of code 1316, prolog size 9, PerfScore 1558.24, instruction count 390, allocated bytes for code 1316 (MethodHash=127bc25a) for method System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
; ============================================================

-15 (-1.29%) : 154738.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)

@@ -54,9 +54,8 @@ ; V42 cse2 [V42,T30] ( 5, 0.16) ref -> [ebp-0x58] spill-single-def "CSE - conservative" ; V43 cse3 [V43,T24] ( 3, 7.92) ref -> edx "CSE - moderate" ; V44 cse4 [V44,T27] ( 4, 3 ) ref -> ecx "CSE - conservative"
-; TEMP_01 byref -> [ebp-0x5C]
;
-; Lcl frame size = 80
+; Lcl frame size = 76
G_M44608_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -64,14 +63,12 @@ G_M44608_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 80 - xor eax, eax - mov dword ptr [ebp-0x5C], eax
+ sub esp, 76
mov esi, ecx ; gcrRegs +[esi] mov edi, edx ; gcrRegs +[edi]
- ;; size=18 bbWeight=1 PerfScore 6.25
+ ;; size=13 bbWeight=1 PerfScore 5.00
G_M44608_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax] @@ -432,7 +429,7 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs= ; gcrRegs +[eax ecx] ; GC ptr vars -{V02} +{V42} cmp byte ptr [eax+0x3E], 0
- jne G_M44608_IG18
+ jne SHORT G_M44608_IG18
mov gword ptr [ebp-0x1C], ecx ; GC ptr vars +{V08} ; GC ptr vars +{V02} @@ -445,14 +442,10 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs= call [CORINFO_HELP_ASSIGN_REF_ECX] ; gcrRegs -[ecx] ; byrRegs -[edx]
- lea edx, bword ptr [eax+0x04] - ; byrRegs +[edx] - mov bword ptr [ebp-0x5C], edx
mov gword ptr [ebp-0x24], eax ; GC ptr vars +{V11} mov edx, gword ptr [eax+0x08] ; gcrRegs +[edx]
- ; byrRegs -[edx]
mov edx, gword ptr [edx+0x08] mov edx, gword ptr [edx+0x08] mov gword ptr [ebp-0x4C], edx @@ -472,19 +465,19 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs= ; GC ptr vars -{V38} call [<unknown method>] ; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x5C]
+ mov ebx, gword ptr [ebp-0x24] + ; gcrRegs +[ebx] + lea edx, bword ptr [ebx+0x04]
; byrRegs +[edx]
+ ; GC ptr vars -{V11}
call [CORINFO_HELP_ASSIGN_REF_EAX] ; gcrRegs -[eax] ; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x24] - ; gcrRegs +[ebx]
mov eax, gword ptr [ebx+0x08] ; gcrRegs +[eax] mov eax, gword ptr [eax+0x04] mov gword ptr [ebp-0x3C], eax ; GC ptr vars +{V26}
- ; GC ptr vars -{V11}
call [CORINFO_HELP_READYTORUN_NEW] mov gword ptr [ebp-0x38], eax ; GC ptr vars +{V25} @@ -504,7 +497,7 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs= ; gcrRegs -[ebx] ; byrRegs -[edx] jmp SHORT G_M44608_IG20
- ;; size=134 bbWeight=0.02 PerfScore 1.21
+ ;; size=124 bbWeight=0.02 PerfScore 1.17
G_M44608_IG18: ; bbWeight=0.02, gcVars=0000C000 {V02 V03}, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs +[ecx] ; GC ptr vars -{V02 V08} @@ -766,6 +759,6 @@ G_M44608_IG30: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 int3 ;; size=23 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1160, prolog size 18, PerfScore 627.64, instruction count 335, allocated bytes for code 1160 (MethodHash=bd8b51bf) for method System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
+; Total bytes of code 1145, prolog size 13, PerfScore 626.35, instruction count 331, allocated bytes for code 1145 (MethodHash=bd8b51bf) for method System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
; ============================================================

-18 (-1.10%) : 96225.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport

@@ -62,9 +62,8 @@ ; V50 tmp35 [V50,T03] ( 4, 16 ) ref -> eax "argument with side effect" ; V51 tmp36 [V51,T16] ( 4, 8 ) ref -> eax "argument with side effect" ; V52 cse0 [V52,T04] ( 17, 12.50) byref -> [ebp-0x98] spill-single-def "CSE - moderate"
-; TEMP_01 byref -> [ebp-0x9C]
;
-; Lcl frame size = 144
+; Lcl frame size = 140
G_M28747_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -72,20 +71,20 @@ G_M28747_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 144
+ sub esp, 140
xorps xmm4, xmm4
- mov ebx, -144 - movups xmmword ptr [ebp+ebx-0x0C], xmm4 - movups xmmword ptr [ebp+ebx+0x04], xmm4 - movups xmmword ptr [ebp+ebx+0x14], xmm4 - add ebx, 48 - jne SHORT -5 instr
+ movups xmmword ptr [ebp-0x38], xmm4 + movups xmmword ptr [ebp-0x28], xmm4 + xor ebx, ebx + mov dword ptr [ebp-0x18], ebx + mov dword ptr [ebp-0x14], ebx + mov dword ptr [ebp-0x10], ebx
mov esi, ecx ; gcrRegs +[esi] mov edi, edx ; gcrRegs +[edi] xor ebx, ebx
- ;; size=46 bbWeight=1 PerfScore 13.08
+ ;; size=40 bbWeight=1 PerfScore 12.83
G_M28747_IG02: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref ; gcrRegs +[ebx] call [CORINFO_HELP_READYTORUN_NEW] @@ -676,6 +675,8 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12 ; GC ptr vars +{V12} call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax]
+ mov gword ptr [ebp-0x78], eax + ; GC ptr vars +{V31}
mov edx, dword ptr [ebp-0x18] mov ecx, gword ptr [ebp-0x3C] ; gcrRegs +[ecx] @@ -685,15 +686,9 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12 mov ecx, gword ptr [ecx+4*edx+0x08] mov gword ptr [ebp-0x94], ecx ; GC ptr vars +{V44}
- mov gword ptr [ebp-0x78], eax - ; GC ptr vars +{V31} - lea edx, bword ptr [eax+0x04] - ; byrRegs +[edx] - mov bword ptr [ebp-0x9C], edx
mov ecx, gword ptr [ebp-0x48] call [<unknown method>] ; gcrRegs -[ecx]
- ; byrRegs -[edx]
mov ecx, eax ; gcrRegs +[ecx] mov edx, gword ptr [ebp-0x48] @@ -702,25 +697,26 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12 ; GC ptr vars -{V12} call [<unknown method>] ; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x9C]
+ mov ecx, gword ptr [ebp-0x78] + ; gcrRegs +[ecx] + lea edx, bword ptr [ecx+0x04]
; byrRegs +[edx]
+ ; GC ptr vars -{V31}
call [CORINFO_HELP_ASSIGN_REF_EAX] ; gcrRegs -[eax] ; byrRegs -[edx]
- mov eax, gword ptr [ebp-0x78] - ; gcrRegs +[eax] - lea edx, bword ptr [eax+0x08]
+ lea edx, bword ptr [ecx+0x08]
; byrRegs +[edx]
- mov ecx, gword ptr [ebp-0x94] - ; gcrRegs +[ecx] - ; GC ptr vars -{V31 V44} - call [CORINFO_HELP_ASSIGN_REF_ECX] - ; gcrRegs -[ecx]
+ mov eax, gword ptr [ebp-0x94] + ; gcrRegs +[eax] + ; GC ptr vars -{V44} + call [CORINFO_HELP_ASSIGN_REF_EAX] + ; gcrRegs -[eax]
; byrRegs -[edx] lea edx, bword ptr [ebx+0x04] ; byrRegs +[edx]
- call [CORINFO_HELP_ASSIGN_REF_EAX] - ; gcrRegs -[eax]
+ call [CORINFO_HELP_ASSIGN_REF_ECX] + ; gcrRegs -[ecx]
; byrRegs -[edx] call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax] @@ -756,7 +752,7 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12 mov edx, gword ptr [eax+0x1018] ; gcrRegs +[edx] jmp SHORT G_M28747_IG23
- ;; size=182 bbWeight=0.02 PerfScore 1.42
+ ;; size=170 bbWeight=0.02 PerfScore 1.38
G_M28747_IG22: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000001 {eax}, byref ; gcrRegs -[edx] mov edx, gword ptr [eax+0x100C] @@ -843,6 +839,6 @@ G_M28747_IG28: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000 int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1641, prolog size 40, PerfScore 565.10, instruction count 407, allocated bytes for code 1641 (MethodHash=f6968fb4) for method Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
+; Total bytes of code 1623, prolog size 34, PerfScore 564.81, instruction count 405, allocated bytes for code 1623 (MethodHash=f6968fb4) for method Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
; ============================================================

-15 (-0.41%) : 31631.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)

@@ -121,9 +121,8 @@ ; V109 rat9 [V109 ] ( 1, 0.08) long -> [ebp-0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable" ; V110 rat10 [V110,T102] ( 2, 0.12) int -> eax "field V109.lo (fldOffset=0x0)" P-INDEP ; V111 rat11 [V111,T103] ( 2, 0.12) int -> edx "field V109.hi (fldOffset=0x4)" P-INDEP
-; TEMP_01 byref -> [ebp-0xD4]
;
-; Lcl frame size = 200
+; Lcl frame size = 196
G_M28852_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -131,14 +130,12 @@ G_M28852_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 200 - xor eax, eax - mov dword ptr [ebp-0xD4], eax
+ sub esp, 196
mov edi, ecx ; gcrRegs +[edi] mov esi, edx ; gcrRegs +[esi]
- ;; size=24 bbWeight=1 PerfScore 6.25
+ ;; size=16 bbWeight=1 PerfScore 5.00
G_M28852_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz mov edx, dword ptr [(reloc)] ; const ptr mov edx, gword ptr [edx] @@ -363,7 +360,7 @@ G_M28852_IG05: ; bbWeight=1, extend mov dword ptr [ebp-0x18], edx mov ecx, dword ptr [ebp-0x14] test ecx, ecx
- jle G_M28852_IG35
+ jle G_M28852_IG36
mov ebx, gword ptr [ebp-0x40] ; gcrRegs +[ebx] cmp dword ptr [ebx+0x04], ecx @@ -1072,11 +1069,9 @@ G_M28852_IG18: ; bbWeight=1.98, gcrefRegs=000000C8 {ebx esi edi}, byrefRe lea edx, bword ptr [ebx+4*ecx+0x08] ; byrRegs +[edx] call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax ebx]
+ ; gcrRegs -[eax]
; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x40] - ; gcrRegs +[ebx] - ;; size=56 bbWeight=1.98 PerfScore 46.53
+ ;; size=53 bbWeight=1.98 PerfScore 44.55
G_M28852_IG19: ; bbWeight=3.96, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax] @@ -1133,10 +1128,9 @@ G_M28852_IG19: ; bbWeight=3.96, gcrefRegs=000000C8 {ebx esi edi}, byrefRe G_M28852_IG20: ; bbWeight=1, gcVars=00000000000000020000000000000000 {V08}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref ; GC ptr vars -{V09 V76 V77 V78 V79 V80 V81 V82 V83 V84 V85 V86 V87 V88 V89 V90 V91 V92 V93 V94 V95 V96 V97 V98 V99} mov ecx, dword ptr [ebp-0x14]
- jmp G_M28852_IG35
+ jmp G_M28852_IG36
;; size=8 bbWeight=1 PerfScore 3.00
-G_M28852_IG21: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[ebx]
+G_M28852_IG21: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars +{V09 V71 V78} call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax] @@ -1189,46 +1183,8 @@ G_M28852_IG21: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 { ; gcrRegs +[eax] mov ecx, dword ptr [ebp-0x18] mov dword ptr [eax+0x04], ecx
- mov edx, dword ptr [(reloc)] - mov ebx, gword ptr [ebp-0x54] - ; gcrRegs +[ebx] - lea edx, bword ptr [ebx+edx+0x2C] - ; byrRegs +[edx] - mov bword ptr [ebp-0xD4], edx
push eax ; gcr arg push 0
- mov eax, dword ptr [(reloc)] - ; gcrRegs -[eax] - mov eax, gword ptr [eax] - ; gcrRegs +[eax] - mov edx, eax - ; gcrRegs +[edx] - ; byrRegs -[edx] - mov ecx, gword ptr [ebp-0x44] - ; gcrRegs +[ecx] - ; GC ptr vars -{V17} - call [<unknown method>] - ; gcrRegs -[ecx edx] - ; gcr arg pop 1 - mov edx, eax - ; gcrRegs +[edx] - mov ecx, esi - ; gcrRegs +[ecx] - call [<unknown method>] - ; gcrRegs -[ecx edx] - mov edx, bword ptr [ebp-0xD4] - ; byrRegs +[edx] - call [CORINFO_HELP_ASSIGN_REF_EAX] - ; gcrRegs -[eax] - ; byrRegs -[edx] - call [CORINFO_HELP_READYTORUN_NEW] - ; gcrRegs +[eax] - mov ecx, dword ptr [ebp-0x18] - mov dword ptr [eax+0x04], ecx - push eax - ; gcr arg push 0 - ;; size=176 bbWeight=0.04 PerfScore 2.87 -G_M28852_IG22: ; bbWeight=0.04, extend
mov edx, dword ptr [(reloc)] mov edx, gword ptr [edx] ; gcrRegs +[edx] @@ -1243,9 +1199,39 @@ G_M28852_IG22: ; bbWeight=0.04, extend ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx edx]
+ mov edx, dword ptr [(reloc)] + mov ecx, gword ptr [ebp-0x54] + ; gcrRegs +[ecx] + lea edx, bword ptr [ecx+edx+0x2C] + ; byrRegs +[edx] + call [CORINFO_HELP_ASSIGN_REF_EAX] + ; gcrRegs -[eax ecx] + ; byrRegs -[edx] + call [CORINFO_HELP_READYTORUN_NEW] + ; gcrRegs +[eax] + mov ecx, dword ptr [ebp-0x18] + mov dword ptr [eax+0x04], ecx + push eax + ; gcr arg push 0 + mov edx, dword ptr [(reloc)] + mov edx, gword ptr [edx] + ; gcrRegs +[edx] + mov ecx, gword ptr [ebp-0x44] + ; gcrRegs +[ecx] + ;; size=174 bbWeight=0.04 PerfScore 2.98 +G_M28852_IG22: ; bbWeight=0.04, extend + call [<unknown method>] + ; gcrRegs -[ecx edx] + ; gcr arg pop 1
mov edx, eax ; gcrRegs +[edx]
- mov ecx, ebx
+ mov ecx, esi + ; gcrRegs +[ecx] + call [<unknown method>] + ; gcrRegs -[ecx edx] + mov edx, eax + ; gcrRegs +[edx] + mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx] call [System.Data.DataColumn:set_Prefix(System.String):this] ; gcrRegs -[eax ecx edx] @@ -1283,7 +1269,7 @@ G_M28852_IG22: ; bbWeight=0.04, extend ; gcrRegs -[ecx] mov edx, eax ; gcrRegs +[edx]
- mov ecx, ebx
+ mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[eax ecx edx] @@ -1316,13 +1302,15 @@ G_M28852_IG22: ; bbWeight=0.04, extend call [CORINFO_HELP_READYTORUN_CHKCAST] ; gcrRegs -[ecx] mov edx, dword ptr [(reloc)]
- lea edx, bword ptr [ebx+edx+0x3C]
+ mov ecx, gword ptr [ebp-0x54] + ; gcrRegs +[ecx] + lea edx, bword ptr [ecx+edx+0x3C]
; byrRegs +[edx]
- ;; size=172 bbWeight=0.04 PerfScore 2.74 -G_M28852_IG23: ; bbWeight=0.04, isz, extend
call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax]
+ ; gcrRegs -[eax ecx]
; byrRegs -[edx]
+ ;; size=172 bbWeight=0.04 PerfScore 2.76 +G_M28852_IG23: ; bbWeight=0.04, isz, extend
call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax] mov ecx, dword ptr [ebp-0x18] @@ -1357,13 +1345,16 @@ G_M28852_IG23: ; bbWeight=0.04, isz, extend call [CORINFO_HELP_READYTORUN_CHKCAST] ; gcrRegs -[ecx] mov edx, dword ptr [(reloc)]
- lea edx, bword ptr [ebx+edx+0x38]
+ mov ecx, gword ptr [ebp-0x54] + ; gcrRegs +[ecx] + lea edx, bword ptr [ecx+edx+0x38]
; byrRegs +[edx] call [CORINFO_HELP_ASSIGN_REF_EAX]
+ ; gcrRegs -[ecx]
; byrRegs -[edx] test eax, eax je SHORT G_M28852_IG25
- ;; size=93 bbWeight=0.04 PerfScore 1.56
+ ;; size=90 bbWeight=0.04 PerfScore 1.48
G_M28852_IG24: ; bbWeight=0.02, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz mov gword ptr [ebp-0x60], eax ; GC ptr vars +{V41} @@ -1378,9 +1369,12 @@ G_M28852_IG24: ; bbWeight=0.02, gcrefRegs=000000C9 {eax ebx esi edi}, byr mov eax, dword ptr [eax+0x38] ; gcrRegs -[eax] mov edx, dword ptr [(reloc)]
- mov dword ptr [ebx+edx+0x4C], eax - ;; size=31 bbWeight=0.02 PerfScore 0.23 -G_M28852_IG25: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ mov ecx, gword ptr [ebp-0x54] + ; gcrRegs +[ecx] + mov dword ptr [ecx+edx+0x4C], eax + ;; size=34 bbWeight=0.02 PerfScore 0.25 +G_M28852_IG25: ; bbWeight=0.04, gcVars=00000000000000820000000000000009 {V08 V09 V17 V78}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz + ; gcrRegs -[ecx]
; GC ptr vars -{V41} call [CORINFO_HELP_READYTORUN_NEW] ; gcrRegs +[eax] @@ -1426,10 +1420,10 @@ G_M28852_IG26: ; bbWeight=0.01, gcrefRegs=000000C9 {eax ebx esi edi}, byr mov eax, gword ptr [ebp-0x58] ; gcrRegs +[eax] ;; size=20 bbWeight=0.01 PerfScore 0.07
-G_M28852_IG27: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M28852_IG27: ; bbWeight=0.04, gcVars=00000000000000820000000000000009 {V08 V09 V17 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V25} mov edx, dword ptr [eax+0x04]
- mov ecx, ebx
+ mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[eax ecx] @@ -1465,7 +1459,7 @@ G_M28852_IG27: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 { mov ecx, dword ptr [eax] cmp ecx, dword ptr [(reloc)] je SHORT G_M28852_IG29
- ;; size=80 bbWeight=0.04 PerfScore 1.47
+ ;; size=81 bbWeight=0.04 PerfScore 1.50
G_M28852_IG28: ; bbWeight=0.01, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref mov ecx, dword ptr [(reloc)] mov gword ptr [ebp-0x5C], eax @@ -1477,10 +1471,10 @@ G_M28852_IG28: ; bbWeight=0.01, gcrefRegs=000000C9 {eax ebx esi edi}, byr mov eax, gword ptr [ebp-0x5C] ; gcrRegs +[eax] ;; size=20 bbWeight=0.01 PerfScore 0.07
-G_M28852_IG29: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
+G_M28852_IG29: ; bbWeight=0.04, gcVars=00000000000000820000000000000009 {V08 V09 V17 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V27} mov edx, dword ptr [eax+0x04]
- mov ecx, ebx
+ mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx] call [<unknown method>] ...

libraries.pmi.windows.x86.checked.mch

-18 (-3.06%) : 123025.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)

@@ -8,22 +8,22 @@ ; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan> ;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]> ; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def ; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]> ; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>> ; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall" ;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon> ;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> -; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> +; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep> ;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]> ;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]> @@ -40,43 +40,40 @@ ; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp" ; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg" ; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP -; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP +; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP ; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP ;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect" ; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr" ; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr" ; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr" ; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr" ; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative" ; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative" -; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" -; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative" +; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" +; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree" -;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup" -; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" -; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup" +; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" +; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 68 @@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; GC ptr vars +{V05} xor edx, edx mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs -[eax] ; GC ptr vars -{V20} @@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000 int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
; ============================================================

-18 (-3.06%) : 170847.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)

@@ -8,22 +8,22 @@ ; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan> ;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]> ; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def ; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]> ; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>> ; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall" ;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon> ;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> -; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> +; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep> ;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]> ;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]> @@ -40,43 +40,40 @@ ; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp" ; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg" ; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP -; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP +; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP ; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP ;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect" ; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr" ; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr" ; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr" ; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr" ; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative" ; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative" -; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" -; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative" +; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" +; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree" -;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup" -; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" -; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup" +; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" +; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 68 @@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; GC ptr vars +{V05} xor edx, edx mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs -[eax] ; GC ptr vars -{V20} @@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000 int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
; ============================================================

-27 (-2.20%) : 79515.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)

@@ -86,11 +86,10 @@ ; V75 tmp56 [V75,T29] ( 2, 8 ) ref -> ecx "argument with side effect" ; V76 tmp57 [V76,T30] ( 2, 8 ) ref -> ecx "argument with side effect" ; V77 cse0 [V77,T01] ( 7, 88 ) int -> [ebp-0x40] spill-single-def "CSE - aggressive"
-; TEMP_03 byref -> [ebp-0x68] -; TEMP_02 int -> [ebp-0x6C] -; TEMP_01 int -> [ebp-0x70]
+; TEMP_02 int -> [ebp-0x68] +; TEMP_01 int -> [ebp-0x6C]
;
-; Lcl frame size = 100
+; Lcl frame size = 96
G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -98,20 +97,17 @@ G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, push edi push esi push ebx
- sub esp, 100
+ sub esp, 96
vxorps xmm4, xmm4, xmm4
- vmovdqu ymmword ptr [ebp-0x68], ymm4 - vmovdqu ymmword ptr [ebp-0x48], ymm4 - vmovdqu xmmword ptr [ebp-0x28], xmm4
+ vmovdqu ymmword ptr [ebp-0x34], ymm4
xor eax, eax
- mov dword ptr [ebp-0x18], eax
mov dword ptr [ebp-0x14], eax mov dword ptr [ebp-0x10], eax mov edi, ecx ; gcrRegs +[edi] mov esi, edx ; gcrRegs +[esi]
- ;; size=43 bbWeight=1 PerfScore 14.58
+ ;; size=30 bbWeight=1 PerfScore 9.58
G_M1087_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz mov eax, edi ; gcrRegs +[eax] @@ -136,12 +132,12 @@ G_M1087_IG03: ; bbWeight=0.50, gcVars=0000010100000000 {V32 V33}, gcrefRe mov ecx, gword ptr [edi+0x0C] ; gcrRegs +[ecx] mov edx, 1
- mov dword ptr [ebp-0x6C], edx
+ mov dword ptr [ebp-0x68], edx
mov edx, dword ptr [ecx] mov edx, dword ptr [edx+0x30]
- mov dword ptr [ebp-0x70], edx - mov edx, dword ptr [ebp-0x6C] - mov edi, dword ptr [ebp-0x70]
+ mov dword ptr [ebp-0x6C], edx + mov edx, dword ptr [ebp-0x68] + mov edi, dword ptr [ebp-0x6C]
; gcrRegs -[edi] call [edi+0x10]<unknown method> ; gcrRegs -[ecx] +[eax] @@ -461,24 +457,20 @@ G_M1087_IG22: ; bbWeight=0.02, gcVars=0000000001000800 {V21 V43}, gcrefRe ; gcrRegs +[eax] mov ecx, dword ptr [ebp-0x24] mov dword ptr [eax+0x1C], ecx
+ mov gword ptr [ebp-0x58], eax + ; GC ptr vars +{V22}
lea edx, bword ptr [eax+0x14] ; byrRegs +[edx] mov ebx, gword ptr [ebp-0x64] ; gcrRegs +[ebx] ; GC ptr vars -{V43} call CORINFO_HELP_ASSIGN_REF_EBX
- ; gcrRegs -[ebx]
+ ; gcrRegs -[eax ebx]
; byrRegs -[edx]
- mov gword ptr [ebp-0x58], eax - ; GC ptr vars +{V22} - lea edx, bword ptr [eax+0x18] - ; byrRegs +[edx] - mov bword ptr [ebp-0x68], edx
mov ecx, gword ptr [ebp-0x54] ; gcrRegs +[ecx] call [Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxNode:get_SyntaxTree():Microsoft.CodeAnalysis.SyntaxTree:this]
- ; gcrRegs -[ecx] - ; byrRegs -[edx]
+ ; gcrRegs -[ecx] +[eax]
mov ecx, eax ; gcrRegs +[ecx] mov edx, gword ptr [ebp-0x54] @@ -489,34 +481,31 @@ G_M1087_IG22: ; bbWeight=0.02, gcVars=0000000001000800 {V21 V43}, gcrefRe ; GC ptr vars -{V21} call [eax+0x1C]<unknown method> ; gcrRegs -[ecx edx] +[eax]
- mov edx, bword ptr [ebp-0x68]
+ mov ebx, gword ptr [ebp-0x58] + ; gcrRegs +[ebx] + lea edx, bword ptr [ebx+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V22}
call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] ; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x58] - ; gcrRegs +[ebx]
jmp SHORT G_M1087_IG24
- ;; size=71 bbWeight=0.02 PerfScore 0.51
+ ;; size=65 bbWeight=0.02 PerfScore 0.47
G_M1087_IG23: ; bbWeight=0.02, gcVars=0000000000000200 {V07}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref ; gcrRegs -[ebx]
- ; GC ptr vars -{V22} +{V07}
+ ; GC ptr vars +{V07}
mov ecx, 0xD1FFAB1E ; Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol call CORINFO_HELP_NEWSFAST ; gcrRegs +[eax] mov edx, dword ptr [ebp-0x24] mov dword ptr [eax+0x1C], edx
- mov gword ptr [eax+0x14], 0xD1FFAB1E
mov gword ptr [ebp-0x50], eax ; GC ptr vars +{V19}
- lea edx, bword ptr [eax+0x18] - ; byrRegs +[edx] - mov bword ptr [ebp-0x68], edx
+ mov gword ptr [eax+0x14], 0xD1FFAB1E
mov ecx, gword ptr [ebp-0x48] ; gcrRegs +[ecx] call [Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxNode:get_SyntaxTree():Microsoft.CodeAnalysis.SyntaxTree:this] ; gcrRegs -[ecx]
- ; byrRegs -[edx]
mov ecx, eax ; gcrRegs +[ecx] mov edx, gword ptr [ebp-0x48] @@ -527,21 +516,19 @@ G_M1087_IG23: ; bbWeight=0.02, gcVars=0000000000000200 {V07}, gcrefRegs=0 ; GC ptr vars -{V07} call [eax+0x1C]<unknown method> ; gcrRegs -[ecx edx] +[eax]
- mov edx, bword ptr [ebp-0x68]
+ mov ecx, gword ptr [ebp-0x50] + ; gcrRegs +[ecx] + lea edx, bword ptr [ecx+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V19}
call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] ; byrRegs -[edx]
- mov edx, gword ptr [ebp-0x50] - ; gcrRegs +[edx] - mov ecx, edx - ; gcrRegs +[ecx]
mov ebx, ecx ; gcrRegs +[ebx]
- ;; size=69 bbWeight=0.02 PerfScore 0.45 -G_M1087_IG24: ; bbWeight=0.04, gcVars=0000000000000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[ecx edx] - ; GC ptr vars -{V19}
+ ;; size=61 bbWeight=0.02 PerfScore 0.41 +G_M1087_IG24: ; bbWeight=0.04, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[ecx]
mov eax, dword ptr [ebp-0x24] cmp eax, dword ptr [edi+0x04] jae G_M1087_IG41 @@ -794,6 +781,6 @@ G_M1087_IG46: ; bbWeight=0, gcVars=0000000000000001 {V14}, gcrefRegs=0000 int3 ;; size=9 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1228, prolog size 39, PerfScore 1019.57, instruction count 384, allocated bytes for code 1228 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
+; Total bytes of code 1201, prolog size 26, PerfScore 1014.49, instruction count 376, allocated bytes for code 1201 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
; ============================================================

+0 (0.00%) : 216967.dasm - Microsoft.CodeAnalysis.Collections.SegmentedDictionary2[System.__Canon,System.Nullable1[int]]:TrimExcess(int):this (FullOpts)

@@ -10,9 +10,9 @@ ; ; V00 this [V00,T02] ( 17, 19.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2[System.__Canon,System.Nullable`1[int]]> ; V01 arg1 [V01,T13] ( 4, 4 ) int -> edx single-def
-; V02 loc0 [V02,T28] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
+; V02 loc0 [V02,T27] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
; V03 loc1 [V03 ] ( 5, 12 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]>
-; V04 loc2 [V04,T30] ( 2, 2 ) int -> ecx single-def
+; V04 loc2 [V04,T28] ( 2, 2 ) int -> ecx single-def
; V05 loc3 [V05,T21] ( 3, 5 ) int -> [ebp-0x1C] spill-single-def ; V06 loc4 [V06 ] ( 2, 2.50) struct ( 8) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]> ; V07 loc5 [V07,T12] ( 5, 7 ) int -> [ebp-0x28] @@ -43,24 +43,21 @@ ; V32 tmp21 [V32,T09] ( 3, 12 ) int -> edi "index expr" ; V33 tmp22 [V33,T10] ( 3, 12 ) int -> eax "index expr" ; V34 cse0 [V34,T11] ( 4, 9 ) int -> [ebp-0x34] spill-single-def "CSE - moderate"
-;* V35 cse1 [V35,T31] ( 0, 0 ) int -> zero-ref "CSE - moderate"
+;* V35 cse1 [V35,T29] ( 0, 0 ) int -> zero-ref "CSE - moderate"
; V36 cse2 [V36,T16] ( 3, 6 ) int -> esi "CSE - moderate" ; V37 rat0 [V37,T22] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" ; V38 rat1 [V38,T23] ( 3, 4 ) int -> eax "runtime lookup" ; V39 rat2 [V39,T20] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-;* V40 rat3 [V40,T29] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V41 rat4 [V41,T32] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V42 rat5 [V42,T27] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V43 rat6 [V43,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V44 rat7 [V44,T04] ( 3, 16 ) int -> edx "runtime lookup" -; V45 rat8 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" -; V46 rat9 [V46,T07] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable" -; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V48 rat11 [V48,T25] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP -; V49 rat12 [V49,T18] ( 2, 6 ) int -> edx "field V47.hi (fldOffset=0x4)" P-INDEP -; V50 rat13 [V50 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V51 rat14 [V51,T26] ( 1, 4 ) int -> eax "field V50.lo (fldOffset=0x0)" P-INDEP -; V52 rat15 [V52,T19] ( 2, 6 ) int -> edi "field V50.hi (fldOffset=0x4)" P-INDEP
+; V40 rat3 [V40,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V41 rat4 [V41,T04] ( 3, 16 ) int -> edx "runtime lookup" +; V42 rat5 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" +; V43 rat6 [V43,T07] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable" +; V44 rat7 [V44 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V45 rat8 [V45,T25] ( 1, 4 ) int -> eax "field V44.lo (fldOffset=0x0)" P-INDEP +; V46 rat9 [V46,T18] ( 2, 6 ) int -> edx "field V44.hi (fldOffset=0x4)" P-INDEP +; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V48 rat11 [V48,T26] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP +; V49 rat12 [V49,T19] ( 2, 6 ) int -> edi "field V47.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 60 @@ -123,7 +120,7 @@ G_M3693_IG06: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=000000 pop ebp ret ;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
mov eax, dword ptr [ebx+0x18] mov dword ptr [ebp-0x1C], eax inc dword ptr [ebx+0x24] @@ -256,7 +253,7 @@ G_M3693_IG14: ; bbWeight=2, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000 mov edi, dword ptr [ebp-0x2C] ; byrRegs -[edi] ;; size=52 bbWeight=2 PerfScore 51.50
-G_M3693_IG15: ; bbWeight=4, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG15: ; bbWeight=4, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[ecx] ; GC ptr vars -{V15} inc edi @@ -277,7 +274,7 @@ G_M3693_IG17: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret ;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG18: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
call CORINFO_HELP_RNGCHKFAIL ;; size=5 bbWeight=0 PerfScore 0.00 G_M3693_IG19: ; bbWeight=0, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref @@ -285,7 +282,7 @@ G_M3693_IG19: ; bbWeight=0, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 call [Microsoft.CodeAnalysis.Collections.Internal.ThrowHelper:ThrowArgumentOutOfRangeException(int)] int3 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M3693_IG20: ; bbWeight=0, gcVars=0000000000000020 {V15}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M3693_IG20: ; bbWeight=0, gcVars=00000020 {V15}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[esi] ; GC ptr vars +{V05 V15} mov ecx, 0xD1FFAB1E

+0 (0.00%) : 120960.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)

@@ -10,14 +10,14 @@ ; ; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x50] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 RetBuf [V01,T16] ( 4, 4 ) byref -> [ebp-0x54] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def ;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live ; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x58] do-not-enreg[M] class-hnd EH-live <<unknown class>> ;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax @@ -26,20 +26,20 @@ ;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup" ; V21 tmp8 [V21 ] ( 3, 6 ) struct ( 8) [ebp-0x38] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
; V28 tmp15 [V28 ] ( 3, 6 ) struct ( 8) [ebp-0x40] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x44] "Inline return value spill temp" ; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]> ;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> @@ -48,13 +48,13 @@ ;* V37 tmp24 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V38 tmp25 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V39 tmp26 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V40 tmp27 [V40,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V40 tmp27 [V40,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V41 tmp28 [V41,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp" ; V42 tmp29 [V42,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp" ; V43 tmp30 [V43,T07] ( 3, 24 ) byref -> edx "dup spill" ;* V44 tmp31 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V46 tmp33 [V46,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V46 tmp33 [V46,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP ;* V48 tmp35 [V48 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP ;* V49 tmp36 [V49 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP @@ -64,8 +64,8 @@ ;* V53 tmp40 [V53 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP ; V54 tmp41 [V54 ] ( 3, 6 ) int -> [ebp-0x40] do-not-enreg[X] addr-exposed "field V28.Item1 (fldOffset=0x0)" P-DEP ; V55 tmp42 [V55 ] ( 3, 6 ) int -> [ebp-0x3C] do-not-enreg[X] addr-exposed "field V28.Item2 (fldOffset=0x4)" P-DEP
-; V56 tmp43 [V56,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP -; V57 tmp44 [V57,T42] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+; V56 tmp43 [V56,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP +; V57 tmp44 [V57,T40] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP ;* V59 tmp46 [V59 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP ;* V60 tmp47 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP @@ -74,27 +74,24 @@ ;* V63 tmp50 [V63 ] ( 0, 0 ) int -> zero-ref single-def "field V39._length (fldOffset=0x4)" P-INDEP ; V64 tmp51 [V64,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)" ; V65 tmp52 [V65,T14] ( 3, 9 ) int -> [ebp-0x48] spill-single-def "V06.[004..008)"
-; V66 tmp53 [V66,T36] ( 3, 3 ) byref -> edi "V16.[000..004)" -; V67 tmp54 [V67,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V66 tmp53 [V66,T34] ( 3, 3 ) byref -> edi "V16.[000..004)" +; V67 tmp54 [V67,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V68 tmp55 [V68,T03] ( 2, 32 ) ref -> edx "argument with side effect" ; V69 GsCookie [V69 ] ( 1, 1 ) int -> [ebp-0x5C] do-not-enreg[X] addr-exposed "GSSecurityCookie" ; V70 EHSlots [V70 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V71 LocAllocSP [V71,T44] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V71 LocAllocSP [V71,T41] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V72 cse0 [V72,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V73 cse1 [V73,T39] ( 3, 3 ) int -> eax "CSE - conservative" -; V74 rat0 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V73 cse1 [V73,T37] ( 3, 3 ) int -> eax "CSE - conservative" +; V74 rat0 [V74,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat1 [V75,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat2 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat2 [V76,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat3 [V77,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V78 rat4 [V78,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V78 rat4 [V78,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V79 rat5 [V79,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V80 rat6 [V80,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V81 rat7 [V81,T43] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V82 rat8 [V82,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V83 rat9 [V83,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V84 rat10 [V84,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" -; V85 rat11 [V85,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" -; V86 rat12 [V86,T20] ( 3, 6 ) int -> [ebp-0x4C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V80 rat6 [V80,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V81 rat7 [V81,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" +; V82 rat8 [V82,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" +; V83 rat9 [V83,T20] ( 3, 6 ) int -> [ebp-0x4C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 84

+0 (0.00%) : 168620.dasm - Microsoft.CodeAnalysis.Collections.SegmentedDictionary2[System.__Canon,System.Nullable1[int]]:TrimExcess(int):this (FullOpts)

@@ -10,9 +10,9 @@ ; ; V00 this [V00,T02] ( 17, 19.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2[System.__Canon,System.Nullable`1[int]]> ; V01 arg1 [V01,T14] ( 4, 4 ) int -> edx single-def
-; V02 loc0 [V02,T29] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
+; V02 loc0 [V02,T28] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
; V03 loc1 [V03 ] ( 5, 12 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]>
-; V04 loc2 [V04,T31] ( 2, 2 ) int -> ecx single-def
+; V04 loc2 [V04,T29] ( 2, 2 ) int -> ecx single-def
; V05 loc3 [V05,T21] ( 3, 5 ) int -> [ebp-0x1C] spill-single-def ; V06 loc4 [V06 ] ( 2, 2.50) struct ( 8) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]> ; V07 loc5 [V07,T13] ( 5, 7 ) int -> [ebp-0x28] @@ -32,9 +32,9 @@ ; V21 tmp10 [V21,T06] ( 3, 12 ) ref -> esi class-hnd "impAppendStmt" <<unknown class>> ; V22 tmp11 [V22,T07] ( 3, 12 ) ref -> ecx class-hnd "impAppendStmt" <<unknown class>> ;* V23 tmp12 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V24 tmp13 [V24,T32] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V24 tmp13 [V24,T30] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V25 tmp14 [V25 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V26 tmp15 [V26,T33] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V26 tmp15 [V26,T31] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V27 tmp16 [V27 ] ( 4, 11 ) ref -> [ebp-0x18] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V28 tmp17 [V28 ] ( 5, 12 ) int -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP ; V29 tmp18 [V29 ] ( 2, 2.50) ref -> [ebp-0x24] do-not-enreg[X] addr-exposed "field V06._items (fldOffset=0x0)" P-DEP @@ -48,19 +48,16 @@ ; V37 rat0 [V37,T22] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" ; V38 rat1 [V38,T23] ( 3, 4 ) int -> eax "runtime lookup" ; V39 rat2 [V39,T20] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-;* V40 rat3 [V40,T30] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V41 rat4 [V41,T34] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V42 rat5 [V42,T28] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V43 rat6 [V43,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V44 rat7 [V44,T04] ( 3, 16 ) int -> edx "runtime lookup" -; V45 rat8 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" -; V46 rat9 [V46,T08] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable" -; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V48 rat11 [V48,T26] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP -; V49 rat12 [V49,T18] ( 2, 6 ) int -> edx "field V47.hi (fldOffset=0x4)" P-INDEP -; V50 rat13 [V50 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V51 rat14 [V51,T27] ( 1, 4 ) int -> eax "field V50.lo (fldOffset=0x0)" P-INDEP -; V52 rat15 [V52,T19] ( 2, 6 ) int -> edx "field V50.hi (fldOffset=0x4)" P-INDEP
+; V40 rat3 [V40,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V41 rat4 [V41,T04] ( 3, 16 ) int -> edx "runtime lookup" +; V42 rat5 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" +; V43 rat6 [V43,T08] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable" +; V44 rat7 [V44 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V45 rat8 [V45,T26] ( 1, 4 ) int -> eax "field V44.lo (fldOffset=0x0)" P-INDEP +; V46 rat9 [V46,T18] ( 2, 6 ) int -> edx "field V44.hi (fldOffset=0x4)" P-INDEP +; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V48 rat11 [V48,T27] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP +; V49 rat12 [V49,T19] ( 2, 6 ) int -> edx "field V47.hi (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 60 @@ -123,7 +120,7 @@ G_M3693_IG06: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=000000 pop ebp ret ;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
mov eax, dword ptr [ebx+0x18] mov dword ptr [ebp-0x1C], eax inc dword ptr [ebx+0x24] @@ -250,7 +247,7 @@ G_M3693_IG13: ; bbWeight=2, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 mov edi, dword ptr [ebp-0x2C] ; byrRegs -[edi] ;; size=144 bbWeight=2 PerfScore 156.00
-G_M3693_IG14: ; bbWeight=4, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG14: ; bbWeight=4, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[ecx] ; GC ptr vars -{V15} inc edi @@ -271,7 +268,7 @@ G_M3693_IG16: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret ;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG17: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
call CORINFO_HELP_RNGCHKFAIL ;; size=5 bbWeight=0 PerfScore 0.00 G_M3693_IG18: ; bbWeight=0, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref

libraries_tests.run.windows.x86.Release.mch

-15 (-4.02%) : 237079.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (Tier0-FullOpts)

@@ -16,7 +16,7 @@ ; V06 tmp1 [V06,T05] ( 6, 8 ) byref -> ebx ;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V08 tmp3 [V08,T06] ( 6, 8 ) int -> [ebp-0x1C] "VirtualCall with runtime lookup"
-; V09 tmp4 [V09,T09] ( 4, 4 ) int -> ebx
+; V09 tmp4 [V09,T09] ( 2, 3.96) int -> ecx
; V10 tmp5 [V10,T07] ( 4, 8 ) ref -> ebx "argument with side effect" ; V11 cse0 [V11,T08] ( 5, 7 ) int -> [ebp-0x20] spill-single-def "CSE - moderate" ; V12 rat0 [V12,T02] ( 3, 11.09) int -> ecx "fgMakeTemp is creating a new local variable" @@ -120,10 +120,10 @@ G_M22994_IG10: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 nop call [eax] ; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
+ xor ecx, ecx
test eax, eax
- sete bl - test ebx, ebx
+ sete cl + test ecx, ecx
jne G_M22994_IG23 ;; size=34 bbWeight=1.98 PerfScore 24.26 G_M22994_IG11: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref @@ -161,11 +161,11 @@ G_M22994_IG14: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 cmp gword ptr [ebp-0x18], 0 jne SHORT G_M22994_IG16 cmp eax, dword ptr [esi+0x04]
- jae G_M22994_IG25
+ jae SHORT G_M22994_IG25
mov dword ptr [ebp-0x14], eax cmp gword ptr [esi+4*eax+0x08], 0 je SHORT G_M22994_IG20
- ;; size=33 bbWeight=0.02 PerfScore 0.31
+ ;; size=29 bbWeight=0.02 PerfScore 0.31
G_M22994_IG15: ; bbWeight=0.01, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[ecx esi edi] ; byrRegs -[ebx] @@ -207,19 +207,16 @@ G_M22994_IG19: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 nop call [eax] ; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
test eax, eax
- sete bl - test ebx, ebx
mov edx, dword ptr [ebp-0x20]
- jne SHORT G_M22994_IG23 - ;; size=38 bbWeight=0.02 PerfScore 0.35 -G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M22994_IG23 + ;; size=31 bbWeight=0.02 PerfScore 0.32 +G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ebp-0x14] inc eax cmp edx, eax
- jg G_M22994_IG13 - ;; size=12 bbWeight=0.04 PerfScore 0.10
+ jg SHORT G_M22994_IG13 + ;; size=8 bbWeight=0.04 PerfScore 0.10
G_M22994_IG21: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref ; gcrRegs -[esi edi] mov eax, 1 @@ -248,6 +245,6 @@ G_M22994_IG25: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 373, prolog size 24, PerfScore 131.30, instruction count 134, allocated bytes for code 373 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
+; Total bytes of code 358, prolog size 24, PerfScore 131.27, instruction count 131, allocated bytes for code 358 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
; ============================================================

-18 (-3.06%) : 12328.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)

@@ -8,22 +8,22 @@ ; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan> ;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]> ; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def ; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]> ; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>> ; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall" ;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon> ;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> -; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> +; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep> ;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]> ;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]> @@ -40,43 +40,40 @@ ; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp" ; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg" ; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP -; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP +; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP ; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP ;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect" ; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr" ; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr" ; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr" ; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr" ; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative" ; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative" -; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" -; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative" +; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" +; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree" -;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup" -; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" -; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup" +; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" +; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 68 @@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; GC ptr vars +{V05} xor edx, edx mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx+0x14] - test ecx, ecx - jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs -[eax] ; GC ptr vars -{V20} @@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000 int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
; ============================================================

-14 (-2.37%) : 103485.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.Canon]:AddStrategy(System.Canon,System.Object):this (Tier0-FullOpts)

@@ -8,64 +8,61 @@ ; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 24, 21.50) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
+; V00 this [V00,T00] ( 23, 21 ) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
; V01 arg1 [V01,T07] ( 10, 7.50) ref -> edi class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T38] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
+; V02 arg2 [V02,T36] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
; V03 loc0 [V03,T06] ( 6, 11 ) int -> ebx ;* V04 loc1 [V04 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V05 tmp0 [V05,T33] ( 2, 2 ) int -> ecx "spilling helperCall" -; V06 tmp1 [V06,T31] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]> -; V07 tmp2 [V07,T32] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
+; V05 tmp0 [V05,T31] ( 2, 2 ) int -> ecx "spilling helperCall" +; V06 tmp1 [V06,T29] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]> +; V07 tmp2 [V07,T30] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref single-def ;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref single-def ;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref single-def ;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref single-def
-; V12 tmp7 [V12,T24] ( 4, 2 ) ref -> edx -;* V13 tmp8 [V13,T41] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V12 tmp7 [V12,T22] ( 4, 2 ) ref -> edx +;* V13 tmp8 [V13,T38] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V14 tmp9 [V14,T10] ( 5, 5 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]> ;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V17 tmp12 [V17,T03] ( 3, 16 ) int -> edx "spilling helperCall" ; V18 tmp13 [V18,T09] ( 3, 8 ) int -> [ebp-0x10] "spilling helperCall" ;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "non-inline candidate call"
-; V20 tmp15 [V20,T26] ( 3, 2 ) int -> eax "spilling helperCall"
+; V20 tmp15 [V20,T24] ( 3, 2 ) int -> eax "spilling helperCall"
;* V21 tmp16 [V21 ] ( 0, 0 ) ref -> zero-ref ;* V22 tmp17 [V22 ] ( 0, 0 ) ref -> zero-ref single-def
-; V23 tmp18 [V23,T35] ( 3, 1.50) int -> eax
+; V23 tmp18 [V23,T33] ( 3, 1.50) int -> eax
;* V24 tmp19 [V24 ] ( 0, 0 ) ref -> zero-ref single-def
-; V25 tmp20 [V25,T27] ( 3, 2 ) int -> eax "spilling helperCall"
+; V25 tmp20 [V25,T25] ( 3, 2 ) int -> eax "spilling helperCall"
;* V26 tmp21 [V26 ] ( 0, 0 ) ref -> zero-ref
-; V27 tmp22 [V27,T34] ( 3, 1.50) ref -> edi -; V28 tmp23 [V28,T28] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp22 [V27,T32] ( 3, 1.50) ref -> edi +; V28 tmp23 [V28,T26] ( 3, 2 ) int -> eax "spilling helperCall"
;* V29 tmp24 [V29 ] ( 0, 0 ) ref -> zero-ref ;* V30 tmp25 [V30 ] ( 0, 0 ) ref -> zero-ref single-def
-; V31 tmp26 [V31,T36] ( 3, 1.50) int -> eax
+; V31 tmp26 [V31,T34] ( 3, 1.50) int -> eax
;* V32 tmp27 [V32 ] ( 0, 0 ) ref -> zero-ref single-def ;* V33 tmp28 [V33 ] ( 0, 0 ) ref -> zero-ref
-; V34 tmp29 [V34,T39] ( 2, 1 ) ref -> edi
+; V34 tmp29 [V34,T37] ( 2, 1 ) ref -> edi
; V35 tmp30 [V35,T11] ( 3, 3 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inlining Arg" <<unknown class>>
-; V36 cse0 [V36,T37] ( 2, 1 ) int -> ecx "CSE - moderate" -; V37 cse1 [V37,T25] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
+; V36 cse0 [V36,T35] ( 2, 1 ) int -> ecx "CSE - moderate" +; V37 cse1 [V37,T23] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
; V38 cse2 [V38,T04] ( 9, 13 ) byref -> [ebp-0x20] multi-def "CSE - aggressive"
-; V39 rat0 [V39,T18] ( 2, 2 ) int -> ecx "Spilling to split statement for tree" -;* V40 rat1 [V40,T40] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V41 rat2 [V41,T12] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V42 rat3 [V42,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V43 rat4 [V43,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable" -; V44 rat5 [V44,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V45 rat6 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" -; V46 rat7 [V46,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V47 rat8 [V47,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V48 rat9 [V48,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V49 rat10 [V49,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V50 rat11 [V50,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V39 rat0 [V39,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V40 rat1 [V40,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable" +; V41 rat2 [V41,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V42 rat3 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" +; V43 rat4 [V43,T17] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V44 rat5 [V44,T12] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +; V45 rat6 [V45,T18] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V46 rat7 [V46,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +; V47 rat8 [V47,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V48 rat9 [V48,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +; V49 rat10 [V49,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V50 rat11 [V50,T27] ( 3, 2 ) int -> eax "runtime lookup"
; V51 rat12 [V51,T15] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V52 rat13 [V52,T22] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V53 rat14 [V53,T29] ( 3, 2 ) int -> eax "runtime lookup" -; V54 rat15 [V54,T16] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V55 rat16 [V55,T23] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V56 rat17 [V56,T30] ( 3, 2 ) int -> edx "runtime lookup" -; V57 rat18 [V57,T17] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V52 rat13 [V52,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V53 rat14 [V53,T28] ( 3, 2 ) int -> edx "runtime lookup" +; V54 rat15 [V54,T16] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [ebp-0x24] ; ; Lcl frame size = 24 @@ -101,14 +98,8 @@ G_M56103_IG03: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 ;; size=22 bbWeight=0.50 PerfScore 4.25 G_M56103_IG04: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz xor ebx, ebx
- mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - jne SHORT G_M56103_IG09
jmp SHORT G_M56103_IG09
- ;; size=18 bbWeight=0.50 PerfScore 5.75
+ ;; size=4 bbWeight=0.50 PerfScore 1.12
G_M56103_IG05: ; bbWeight=2, gcVars=0000000000000010 {V38}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz ; GC ptr vars +{V38} mov ecx, dword ptr [esi] @@ -374,7 +365,7 @@ G_M56103_IG35: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRe test edx, edx je SHORT G_M56103_IG39 ;; size=37 bbWeight=0.50 PerfScore 8.88
-G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; byrRegs -[eax] mov ecx, edx call CORINFO_HELP_NEWSFAST @@ -432,9 +423,9 @@ G_M56103_IG38: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 4 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ebx edi]
- ; GC ptr vars +{V07 V25 V37}
+ ; GC ptr vars +{V07 V23 V37}
mov edx, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS mov edx, eax @@ -442,11 +433,11 @@ G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefR ;; size=14 bbWeight=0.10 PerfScore 0.35 G_M56103_IG40: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref ; gcrRegs -[ebx edi]
- ; GC ptr vars -{V07 V25 V37}
+ ; GC ptr vars -{V07 V23 V37}
call [System.MulticastDelegate:ThrowNullThisInDelegateToInstance()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 591, prolog size 9, PerfScore 219.48, instruction count 207, allocated bytes for code 591 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (Tier0-FullOpts)
+; Total bytes of code 577, prolog size 9, PerfScore 214.85, instruction count 201, allocated bytes for code 577 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (Tier0-FullOpts)
; ============================================================

+0 (0.00%) : 16147.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (Tier0-FullOpts)

@@ -10,14 +10,14 @@ ; ; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x40] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 RetBuf [V01,T16] ( 6, 6 ) byref -> [ebp-0x44] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def ;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live ; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x48] do-not-enreg[M] class-hnd EH-live <<unknown class>> ;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax @@ -26,44 +26,44 @@ ;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup" ;* V21 tmp8 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V28 tmp15 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x34] "Inline return value spill temp" ; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]> ;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> ;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V36 tmp23 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V37 tmp24 [V37 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V38 tmp25 [V38,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V38 tmp25 [V38,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V39 tmp26 [V39,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp" ; V40 tmp27 [V40,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp" ; V41 tmp28 [V41,T07] ( 3, 24 ) byref -> edx "dup spill" ;* V42 tmp29 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V43 tmp30 [V43 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V44 tmp31 [V44,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V44 tmp31 [V44,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP ;* V46 tmp33 [V46 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP ;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP
-; V48 tmp35 [V48,T42] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP -; V49 tmp36 [V49,T43] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
+; V48 tmp35 [V48,T40] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP +; V49 tmp36 [V49,T41] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V50 tmp37 [V50 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP ;* V51 tmp38 [V51 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
-;* V52 tmp39 [V52,T47] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP -; V53 tmp40 [V53,T44] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP -; V54 tmp41 [V54,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP -; V55 tmp42 [V55,T45] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+;* V52 tmp39 [V52,T44] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP +; V53 tmp40 [V53,T42] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP +; V54 tmp41 [V54,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP +; V55 tmp42 [V55,T43] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V56 tmp43 [V56 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP ;* V57 tmp44 [V57 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP ;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP @@ -72,27 +72,24 @@ ;* V61 tmp48 [V61 ] ( 0, 0 ) int -> zero-ref single-def "field V37._length (fldOffset=0x4)" P-INDEP ; V62 tmp49 [V62,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)" ; V63 tmp50 [V63,T14] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V06.[004..008)"
-; V64 tmp51 [V64,T36] ( 3, 3 ) byref -> edi "V16.[000..004)" -; V65 tmp52 [V65,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V64 tmp51 [V64,T34] ( 3, 3 ) byref -> edi "V16.[000..004)" +; V65 tmp52 [V65,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V66 tmp53 [V66,T03] ( 2, 32 ) ref -> edx "argument with side effect" ; V67 GsCookie [V67 ] ( 1, 1 ) int -> [ebp-0x4C] do-not-enreg[X] addr-exposed "GSSecurityCookie" ; V68 EHSlots [V68 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V69 LocAllocSP [V69,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V69 LocAllocSP [V69,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V70 cse0 [V70,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V71 cse1 [V71,T39] ( 3, 3 ) int -> eax "CSE - conservative" -; V72 rat0 [V72,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V71 cse1 [V71,T37] ( 3, 3 ) int -> eax "CSE - conservative" +; V72 rat0 [V72,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V73 rat1 [V73,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V74 rat2 [V74,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V74 rat2 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat3 [V75,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat4 [V76,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat4 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat5 [V77,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V78 rat6 [V78,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V79 rat7 [V79,T46] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V80 rat8 [V80,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V81 rat9 [V81,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V82 rat10 [V82,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" -; V83 rat11 [V83,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" -; V84 rat12 [V84,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V78 rat6 [V78,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V79 rat7 [V79,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" +; V80 rat8 [V80,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" +; V81 rat9 [V81,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 68

+0 (0.00%) : 201876.dasm - System.Collections.Generic.HashSet1[System.ValueTuple2[System.Canon,int]]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.ValueTuple2[System.Canon,int]],ubyte):System.ValueTuple`2[int,int]:this (Tier0-FullOpts)

@@ -10,49 +10,49 @@ ; ; V00 this [V00,T04] ( 10, 24 ) ref -> [ebp-0x50] do-not-enreg[H] this class-hnd EH-live single-def <System.Collections.Generic.HashSet`1[System.ValueTuple`2[System.__Canon,int]]> ; V01 RetBuf [V01,T15] ( 6, 6 ) byref -> [ebp-0x54] EH-live single-def
-; V02 arg1 [V02,T41] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]> -; V03 arg2 [V03,T32] ( 1, 4 ) ubyte -> [ebp+0x08] single-def -; V04 loc0 [V04,T36] ( 3, 3 ) int -> edi
+; V02 arg1 [V02,T39] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]> +; V03 arg2 [V03,T30] ( 1, 4 ) ubyte -> [ebp+0x08] single-def +; V04 loc0 [V04,T34] ( 3, 3 ) int -> edi
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op <System.Collections.Generic.BitHelper> ; V08 loc4 [V08,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live ; V09 loc5 [V09,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V10 loc6 [V10,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live -; V11 loc7 [V11,T23] ( 6, 5 ) ref -> [ebp-0x58] class-hnd EH-live spill-single-def <<unknown class>>
+; V10 loc6 [V10,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live +; V11 loc7 [V11,T22] ( 6, 5 ) ref -> [ebp-0x58] class-hnd EH-live spill-single-def <<unknown class>>
; V12 loc8 [V12 ] ( 1, 1 ) struct ( 8) [ebp-0x38] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]> ;* V13 loc9 [V13 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[int]> ; V14 loc10 [V14,T06] ( 7, 20 ) ref -> [ebp-0x5C] class-hnd EH-live spill-single-def <<unknown class>> ; V15 loc11 [V15 ] ( 2, 16 ) struct ( 8) [ebp-0x40] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]> ; V16 loc12 [V16,T02] ( 6, 32 ) int -> esi
-; V17 loc13 [V17,T38] ( 2, 2 ) int -> ecx
+; V17 loc13 [V17,T36] ( 2, 2 ) int -> ecx
;* V18 tmp1 [V18 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V19 tmp2 [V19 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper> ;* V20 tmp3 [V20 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V21 tmp4 [V21 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <System.Collections.Generic.BitHelper> ;* V22 tmp5 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V23 tmp6 [V23,T28] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V23 tmp6 [V23,T26] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V24 tmp7 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp8 [V25,T03] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup" ;* V26 tmp9 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V27 tmp10 [V27 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper> ;* V28 tmp11 [V28 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V29 tmp12 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V30 tmp13 [V30,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V30 tmp13 [V30,T27] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V31 tmp14 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V32 tmp15 [V32,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V32 tmp15 [V32,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V33 tmp16 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V34 tmp17 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V35 tmp18 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V36 tmp19 [V36,T16] ( 8, 7 ) int -> edi "Inline return value spill temp"
-; V37 tmp20 [V37,T31] ( 2, 4 ) int -> eax "Inlining Arg"
+; V37 tmp20 [V37,T29] ( 2, 4 ) int -> eax "Inlining Arg"
; V38 tmp21 [V38,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]> ;* V39 tmp22 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V40 tmp23 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> ;* V41 tmp24 [V41 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V42 tmp25 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V43 tmp26 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V44 tmp27 [V44,T33] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V44 tmp27 [V44,T31] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V45 tmp28 [V45,T07] ( 3, 12 ) int -> ecx "Inline stloc first use temp" ;* V46 tmp29 [V46 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]> ; V47 tmp30 [V47,T08] ( 3, 12 ) int -> ecx "Inline stloc first use temp" @@ -66,18 +66,18 @@ ;* V55 tmp38 [V55 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP ; V56 tmp39 [V56 ] ( 2, 16 ) ref -> [ebp-0x40] do-not-enreg[X] addr-exposed "field V15.Item1 (fldOffset=0x0)" P-DEP ; V57 tmp40 [V57 ] ( 2, 16 ) int -> [ebp-0x3C] do-not-enreg[X] addr-exposed "field V15.Item2 (fldOffset=0x4)" P-DEP
-; V58 tmp41 [V58,T34] ( 3, 3 ) byref -> [ebp-0x60] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+; V58 tmp41 [V58,T32] ( 3, 3 ) byref -> [ebp-0x60] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
;* V59 tmp42 [V59 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x4)" P-INDEP ;* V60 tmp43 [V60 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP ;* V61 tmp44 [V61 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x4)" P-INDEP
-; V62 tmp45 [V62,T43] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP -; V63 tmp46 [V63,T44] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
+; V62 tmp45 [V62,T41] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP +; V63 tmp46 [V63,T42] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
;* V64 tmp47 [V64 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP ;* V65 tmp48 [V65 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x4)" P-INDEP
-;* V66 tmp49 [V66,T48] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP -; V67 tmp50 [V67,T45] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP -; V68 tmp51 [V68,T42] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP -; V69 tmp52 [V69,T46] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
+;* V66 tmp49 [V66,T45] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP +; V67 tmp50 [V67,T43] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP +; V68 tmp51 [V68,T40] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP +; V69 tmp52 [V69,T44] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
;* V70 tmp53 [V70 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP ;* V71 tmp54 [V71 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x4)" P-INDEP ;* V72 tmp55 [V72 ] ( 0, 0 ) byref -> zero-ref single-def "field V41._reference (fldOffset=0x0)" P-INDEP @@ -90,26 +90,23 @@ ;* V79 tmp62 [V79 ] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x4)" P-INDEP ; V80 tmp63 [V80,T13] ( 3, 9 ) byref -> edi single-def "V07.[000..004)" ; V81 tmp64 [V81,T14] ( 3, 9 ) int -> [ebp-0x44] spill-single-def "V07.[004..008)"
-; V82 tmp65 [V82,T35] ( 3, 3 ) byref -> registers "V21.[000..004)" -; V83 tmp66 [V83,T39] ( 3, 3 ) int -> registers "V21.[004..008)"
+; V82 tmp65 [V82,T33] ( 3, 3 ) byref -> registers "V21.[000..004)" +; V83 tmp66 [V83,T37] ( 3, 3 ) int -> registers "V21.[004..008)"
; V84 GsCookie [V84 ] ( 1, 1 ) int -> [ebp-0x64] do-not-enreg[X] addr-exposed "GSSecurityCookie" ; V85 EHSlots [V85 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V86 LocAllocSP [V86,T49] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V86 LocAllocSP [V86,T46] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V87 cse0 [V87,T09] ( 3, 12 ) int -> [ebp-0x48] spill-single-def "CSE - moderate" ; V88 cse1 [V88,T10] ( 3, 12 ) int -> [ebp-0x4C] spill-single-def "CSE - moderate"
-; V89 cse2 [V89,T40] ( 3, 3 ) int -> edi "CSE - conservative" -; V90 rat0 [V90,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V89 cse2 [V89,T38] ( 3, 3 ) int -> edi "CSE - conservative" +; V90 rat0 [V90,T23] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V91 rat1 [V91,T19] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V92 rat2 [V92,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V92 rat2 [V92,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V93 rat3 [V93,T20] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V94 rat4 [V94,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V94 rat4 [V94,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V95 rat5 [V95,T21] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat6 [V96,T27] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V97 rat7 [V97,T47] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V98 rat8 [V98,T22] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V99 rat9 [V99,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V100 rat10 [V100,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" -; V101 rat11 [V101,T18] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
+; V96 rat6 [V96,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V97 rat7 [V97,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" +; V98 rat8 [V98,T18] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 92 @@ -168,7 +165,7 @@ G_M10461_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 mov gword ptr [ebp-0x58], eax ; GC ptr vars +{V11} ;; size=10 bbWeight=1 PerfScore 4.50
-G_M10461_IG06: ; bbWeight=1, gcVars=0000000000808010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG06: ; bbWeight=1, gcVars=0000000000408010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
mov ecx, eax ; gcrRegs +[ecx] call [<unknown method>] @@ -217,13 +214,13 @@ G_M10461_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x1C], 0 jmp SHORT G_M10461_IG14 ;; size=9 bbWeight=1 PerfScore 3.00
-G_M10461_IG12: ; bbWeight=1, gcVars=0000000000808010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars +{V11 V23}
+G_M10461_IG12: ; bbWeight=1, gcVars=0000000000408010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz + ; GC ptr vars +{V11}
mov ecx, gword ptr [ebp-0x58] ; gcrRegs +[ecx] test ecx, ecx je SHORT G_M10461_IG13
- ; GC ptr vars -{V11 V23}
+ ; GC ptr vars -{V11}
call [<unknown method>] ; gcrRegs -[ecx] ;; size=13 bbWeight=1 PerfScore 5.25 @@ -318,9 +315,9 @@ G_M10461_IG20: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[eax] jmp SHORT G_M10461_IG22 ;; size=49 bbWeight=1 PerfScore 14.50
-G_M10461_IG21: ; bbWeight=1, gcVars=0000000400008010 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M10461_IG21: ; bbWeight=1, gcVars=0000000100008010 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[edi]
- ; GC ptr vars +{V58}
+ ; GC ptr vars +{V32 V58}
cmp edi, 100 ja G_M10461_IG46 mov ecx, edi @@ -340,7 +337,7 @@ G_M10461_IG21: ; bbWeight=1, gcVars=0000000400008010 {V00 V01 V58}, gcref ;; size=45 bbWeight=1 PerfScore 11.25 G_M10461_IG22: ; bbWeight=1, gcVars=0000000000008010 {V00 V01}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref ; byrRegs -[ecx]
- ; GC ptr vars -{V58}
+ ; GC ptr vars -{V32 V58}
mov dword ptr [ebp-0x44], eax xor ecx, ecx mov dword ptr [ebp-0x28], ecx

+0 (0.00%) : 202620.dasm - System.Collections.Generic.HashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (Instrumented Tier1)

@@ -10,37 +10,37 @@ ; ; V00 this [V00,T05] ( 10, 24 ) ref -> [ebp-0x44] do-not-enreg[H] this class-hnd EH-live single-def <System.Collections.Generic.HashSet`1[System.__Canon]> ; V01 RetBuf [V01,T17] ( 6, 6 ) byref -> [ebp-0x48] EH-live single-def
-; V02 arg1 [V02,T46] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V03 arg2 [V03,T37] ( 1, 4 ) ubyte -> [ebp+0x08] single-def -; V04 loc0 [V04,T41] ( 3, 3 ) int -> edi
+; V02 arg1 [V02,T44] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V03 arg2 [V03,T35] ( 1, 4 ) ubyte -> [ebp+0x08] single-def +; V04 loc0 [V04,T39] ( 3, 3 ) int -> edi
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op <System.Collections.Generic.BitHelper> ; V08 loc4 [V08,T13] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live ; V09 loc5 [V09,T14] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V10 loc6 [V10,T42] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V10 loc6 [V10,T40] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V11 loc7 [V11,T18] ( 8, 7 ) ref -> [ebp-0x4C] class-hnd EH-live spill-single-def <<unknown class>> ;* V12 loc8 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ;* V13 loc9 [V13 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[int]> ; V14 loc10 [V14,T07] ( 9, 22 ) ref -> [ebp-0x50] class-hnd EH-live spill-single-def <<unknown class>> ;* V15 loc11 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V16 loc12 [V16,T02] ( 6, 32 ) int -> [ebp-0x34] spill-single-def
-; V17 loc13 [V17,T43] ( 2, 2 ) int -> ecx
+; V17 loc13 [V17,T41] ( 2, 2 ) int -> ecx
;* V18 tmp1 [V18 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V19 tmp2 [V19 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper> ;* V20 tmp3 [V20 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V21 tmp4 [V21 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <System.Collections.Generic.BitHelper> ;* V22 tmp5 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V23 tmp6 [V23,T33] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V23 tmp6 [V23,T31] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V24 tmp7 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp8 [V25,T03] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup" ;* V26 tmp9 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V27 tmp10 [V27 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper> ;* V28 tmp11 [V28 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V29 tmp12 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V30 tmp13 [V30,T34] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V30 tmp13 [V30,T32] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V31 tmp14 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V32 tmp15 [V32,T35] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V32 tmp15 [V32,T33] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V33 tmp16 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V34 tmp17 [V34 ] ( 0, 0 ) ref -> zero-ref single-def "handle histogram profile tmp" ;* V35 tmp18 [V35 ] ( 0, 0 ) ref -> zero-ref "handle histogram profile tmp" @@ -49,14 +49,14 @@ ;* V38 tmp21 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V39 tmp22 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V40 tmp23 [V40,T19] ( 8, 7 ) int -> edi "Inline return value spill temp"
-; V41 tmp24 [V41,T36] ( 2, 4 ) int -> eax "Inlining Arg"
+; V41 tmp24 [V41,T34] ( 2, 4 ) int -> eax "Inlining Arg"
; V42 tmp25 [V42,T20] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]> ;* V43 tmp26 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V44 tmp27 [V44 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> ;* V45 tmp28 [V45 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V46 tmp29 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V47 tmp30 [V47 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V48 tmp31 [V48,T38] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V48 tmp31 [V48,T36] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V49 tmp32 [V49,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp" ;* V50 tmp33 [V50 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]> ; V51 tmp34 [V51,T10] ( 3, 12 ) int -> ecx "Inline stloc first use temp" @@ -66,18 +66,18 @@ ;* V55 tmp38 [V55 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x4)" P-INDEP ;* V56 tmp39 [V56 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-INDEP ;* V57 tmp40 [V57 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP
-; V58 tmp41 [V58,T39] ( 3, 3 ) byref -> [ebp-0x54] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+; V58 tmp41 [V58,T37] ( 3, 3 ) byref -> [ebp-0x54] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
;* V59 tmp42 [V59 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x4)" P-INDEP ;* V60 tmp43 [V60 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP ;* V61 tmp44 [V61 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x4)" P-INDEP
-; V62 tmp45 [V62,T48] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP -; V63 tmp46 [V63,T49] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
+; V62 tmp45 [V62,T46] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP +; V63 tmp46 [V63,T47] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
;* V64 tmp47 [V64 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP ;* V65 tmp48 [V65 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x4)" P-INDEP
-;* V66 tmp49 [V66,T53] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP -; V67 tmp50 [V67,T50] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP -; V68 tmp51 [V68,T47] ( 2, 2 ) byref -> edi "field V43._reference (fldOffset=0x0)" P-INDEP -; V69 tmp52 [V69,T51] ( 2, 2 ) int -> eax "field V43._length (fldOffset=0x4)" P-INDEP
+;* V66 tmp49 [V66,T50] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP +; V67 tmp50 [V67,T48] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP +; V68 tmp51 [V68,T45] ( 2, 2 ) byref -> edi "field V43._reference (fldOffset=0x0)" P-INDEP +; V69 tmp52 [V69,T49] ( 2, 2 ) int -> eax "field V43._length (fldOffset=0x4)" P-INDEP
;* V70 tmp53 [V70 ] ( 0, 0 ) byref -> zero-ref "field V44._reference (fldOffset=0x0)" P-INDEP ;* V71 tmp54 [V71 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x4)" P-INDEP ;* V72 tmp55 [V72 ] ( 0, 0 ) byref -> zero-ref single-def "field V45._reference (fldOffset=0x0)" P-INDEP @@ -90,31 +90,28 @@ ;* V79 tmp62 [V79 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x4)" P-INDEP ; V80 tmp63 [V80,T15] ( 3, 9 ) byref -> edi single-def "V07.[000..004)" ; V81 tmp64 [V81,T16] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V07.[004..008)"
-; V82 tmp65 [V82,T40] ( 3, 3 ) byref -> registers "V21.[000..004)" -; V83 tmp66 [V83,T44] ( 3, 3 ) int -> registers "V21.[004..008)"
+; V82 tmp65 [V82,T38] ( 3, 3 ) byref -> registers "V21.[000..004)" +; V83 tmp66 [V83,T42] ( 3, 3 ) int -> registers "V21.[004..008)"
; V84 tmp67 [V84,T04] ( 2, 32 ) ref -> edx "argument with side effect" ; V85 GsCookie [V85 ] ( 1, 1 ) int -> [ebp-0x58] do-not-enreg[X] addr-exposed "GSSecurityCookie" ; V86 EHSlots [V86 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V87 LocAllocSP [V87,T54] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V87 LocAllocSP [V87,T51] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V88 cse0 [V88,T11] ( 3, 12 ) int -> [ebp-0x3C] spill-single-def "CSE - moderate"
-; V89 cse1 [V89,T31] ( 4, 4 ) ref -> esi multi-def "CSE - moderate"
+; V89 cse1 [V89,T29] ( 4, 4 ) ref -> esi multi-def "CSE - moderate"
; V90 cse2 [V90,T08] ( 6, 13 ) ref -> esi multi-def "CSE - moderate"
-; V91 cse3 [V91,T32] ( 4, 4 ) ref -> edi multi-def "CSE - conservative" -; V92 cse4 [V92,T26] ( 5, 5 ) ref -> edi multi-def "CSE - conservative"
+; V91 cse3 [V91,T30] ( 4, 4 ) ref -> edi multi-def "CSE - conservative" +; V92 cse4 [V92,T25] ( 5, 5 ) ref -> edi multi-def "CSE - conservative"
; V93 cse5 [V93,T12] ( 3, 12 ) int -> [ebp-0x40] spill-single-def "CSE - moderate"
-; V94 cse6 [V94,T45] ( 3, 3 ) int -> edi "CSE - conservative" -; V95 rat0 [V95,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V94 cse6 [V94,T43] ( 3, 3 ) int -> edi "CSE - conservative" +; V95 rat0 [V95,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V96 rat1 [V96,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V97 rat2 [V97,T28] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V97 rat2 [V97,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V98 rat3 [V98,T23] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V99 rat4 [V99,T29] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V99 rat4 [V99,T28] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V100 rat5 [V100,T24] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V101 rat6 [V101,T30] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V102 rat7 [V102,T52] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V103 rat8 [V103,T25] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V104 rat9 [V104,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V105 rat10 [V105,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" -; V106 rat11 [V106,T21] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
+; V101 rat6 [V101,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V102 rat7 [V102,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" +; V103 rat8 [V103,T21] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 80 @@ -360,7 +357,7 @@ G_M33533_IG21: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[eax] jmp SHORT G_M33533_IG23 ;; size=49 bbWeight=1 PerfScore 14.50
-G_M33533_IG22: ; bbWeight=1, gcVars=0000008000020020 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M33533_IG22: ; bbWeight=1, gcVars=0000002000020020 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[edi] ; GC ptr vars +{V58} mov ecx, 0xD1FFAB1E

librariestestsnotieredcompilation.run.windows.x86.Release.mch

-15 (-4.02%) : 99311.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (FullOpts)

@@ -16,7 +16,7 @@ ; V06 tmp1 [V06,T05] ( 6, 8 ) byref -> ebx ;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V08 tmp3 [V08,T06] ( 6, 8 ) int -> [ebp-0x1C] "VirtualCall with runtime lookup"
-; V09 tmp4 [V09,T09] ( 4, 4 ) int -> ebx
+; V09 tmp4 [V09,T09] ( 2, 3.96) int -> ecx
; V10 tmp5 [V10,T07] ( 4, 8 ) ref -> ebx "argument with side effect" ; V11 cse0 [V11,T08] ( 5, 7 ) int -> [ebp-0x20] spill-single-def "CSE - moderate" ; V12 rat0 [V12,T02] ( 3, 11.09) int -> ecx "fgMakeTemp is creating a new local variable" @@ -120,10 +120,10 @@ G_M22994_IG10: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 nop call [eax] ; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
+ xor ecx, ecx
test eax, eax
- sete bl - test ebx, ebx
+ sete cl + test ecx, ecx
jne G_M22994_IG23 ;; size=34 bbWeight=1.98 PerfScore 24.26 G_M22994_IG11: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref @@ -161,11 +161,11 @@ G_M22994_IG14: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 cmp gword ptr [ebp-0x18], 0 jne SHORT G_M22994_IG16 cmp eax, dword ptr [esi+0x04]
- jae G_M22994_IG25
+ jae SHORT G_M22994_IG25
mov dword ptr [ebp-0x14], eax cmp gword ptr [esi+4*eax+0x08], 0 je SHORT G_M22994_IG20
- ;; size=33 bbWeight=0.02 PerfScore 0.31
+ ;; size=29 bbWeight=0.02 PerfScore 0.31
G_M22994_IG15: ; bbWeight=0.01, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[ecx esi edi] ; byrRegs -[ebx] @@ -207,19 +207,16 @@ G_M22994_IG19: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 nop call [eax] ; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
test eax, eax
- sete bl - test ebx, ebx
mov edx, dword ptr [ebp-0x20]
- jne SHORT G_M22994_IG23 - ;; size=38 bbWeight=0.02 PerfScore 0.35 -G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M22994_IG23 + ;; size=31 bbWeight=0.02 PerfScore 0.32 +G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ebp-0x14] inc eax cmp edx, eax
- jg G_M22994_IG13 - ;; size=12 bbWeight=0.04 PerfScore 0.10
+ jg SHORT G_M22994_IG13 + ;; size=8 bbWeight=0.04 PerfScore 0.10
G_M22994_IG21: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref ; gcrRegs -[esi edi] mov eax, 1 @@ -248,6 +245,6 @@ G_M22994_IG25: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 373, prolog size 24, PerfScore 131.30, instruction count 134, allocated bytes for code 373 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
+; Total bytes of code 358, prolog size 24, PerfScore 131.27, instruction count 131, allocated bytes for code 358 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
; ============================================================

-18 (-3.06%) : 6265.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)

@@ -8,22 +8,22 @@ ; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan> ;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]> ; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def ; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]> ; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>> ; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall" ;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon> ;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> -; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>> +; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep> ;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]> ;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]> @@ -40,43 +40,40 @@ ; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp" ; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg" ; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP -; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP +; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP ; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP ;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect" ; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr" ; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr" ; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr" ; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr" ; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative" ; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative" -; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" -; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative" +; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative" +; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree" -;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup" -; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" -; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup" +; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable" +; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 68 @@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; GC ptr vars +{V05} xor edx, edx mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx+0x14] - test ecx, ecx - jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs -[eax] ; GC ptr vars -{V20} @@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000 int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
; ============================================================

-14 (-2.37%) : 34735.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.Canon]:AddStrategy(System.Canon,System.Object):this (FullOpts)

@@ -8,64 +8,61 @@ ; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 24, 21.50) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
+; V00 this [V00,T00] ( 23, 21 ) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
; V01 arg1 [V01,T07] ( 10, 7.50) ref -> edi class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T38] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
+; V02 arg2 [V02,T36] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
; V03 loc0 [V03,T06] ( 6, 11 ) int -> ebx ;* V04 loc1 [V04 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V05 tmp0 [V05,T33] ( 2, 2 ) int -> ecx "spilling helperCall" -; V06 tmp1 [V06,T31] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]> -; V07 tmp2 [V07,T32] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
+; V05 tmp0 [V05,T31] ( 2, 2 ) int -> ecx "spilling helperCall" +; V06 tmp1 [V06,T29] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]> +; V07 tmp2 [V07,T30] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref single-def ;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref single-def ;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref single-def ;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref single-def
-; V12 tmp7 [V12,T24] ( 4, 2 ) ref -> edx -;* V13 tmp8 [V13,T41] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V12 tmp7 [V12,T22] ( 4, 2 ) ref -> edx +;* V13 tmp8 [V13,T38] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V14 tmp9 [V14,T10] ( 5, 5 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]> ;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V17 tmp12 [V17,T03] ( 3, 16 ) int -> edx "spilling helperCall" ; V18 tmp13 [V18,T09] ( 3, 8 ) int -> [ebp-0x10] "spilling helperCall" ;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "non-inline candidate call"
-; V20 tmp15 [V20,T26] ( 3, 2 ) int -> eax "spilling helperCall"
+; V20 tmp15 [V20,T24] ( 3, 2 ) int -> eax "spilling helperCall"
;* V21 tmp16 [V21 ] ( 0, 0 ) ref -> zero-ref ;* V22 tmp17 [V22 ] ( 0, 0 ) ref -> zero-ref single-def
-; V23 tmp18 [V23,T35] ( 3, 1.50) int -> eax
+; V23 tmp18 [V23,T33] ( 3, 1.50) int -> eax
;* V24 tmp19 [V24 ] ( 0, 0 ) ref -> zero-ref single-def
-; V25 tmp20 [V25,T27] ( 3, 2 ) int -> eax "spilling helperCall"
+; V25 tmp20 [V25,T25] ( 3, 2 ) int -> eax "spilling helperCall"
;* V26 tmp21 [V26 ] ( 0, 0 ) ref -> zero-ref
-; V27 tmp22 [V27,T34] ( 3, 1.50) ref -> edi -; V28 tmp23 [V28,T28] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp22 [V27,T32] ( 3, 1.50) ref -> edi +; V28 tmp23 [V28,T26] ( 3, 2 ) int -> eax "spilling helperCall"
;* V29 tmp24 [V29 ] ( 0, 0 ) ref -> zero-ref ;* V30 tmp25 [V30 ] ( 0, 0 ) ref -> zero-ref single-def
-; V31 tmp26 [V31,T36] ( 3, 1.50) int -> eax
+; V31 tmp26 [V31,T34] ( 3, 1.50) int -> eax
;* V32 tmp27 [V32 ] ( 0, 0 ) ref -> zero-ref single-def ;* V33 tmp28 [V33 ] ( 0, 0 ) ref -> zero-ref
-; V34 tmp29 [V34,T39] ( 2, 1 ) ref -> edi
+; V34 tmp29 [V34,T37] ( 2, 1 ) ref -> edi
; V35 tmp30 [V35,T11] ( 3, 3 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inlining Arg" <<unknown class>>
-; V36 cse0 [V36,T37] ( 2, 1 ) int -> ecx "CSE - moderate" -; V37 cse1 [V37,T25] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
+; V36 cse0 [V36,T35] ( 2, 1 ) int -> ecx "CSE - moderate" +; V37 cse1 [V37,T23] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
; V38 cse2 [V38,T04] ( 9, 13 ) byref -> [ebp-0x20] multi-def "CSE - aggressive"
-; V39 rat0 [V39,T18] ( 2, 2 ) int -> ecx "Spilling to split statement for tree" -;* V40 rat1 [V40,T40] ( 0, 0 ) int -> zero-ref "runtime lookup" -; V41 rat2 [V41,T12] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable" -; V42 rat3 [V42,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V43 rat4 [V43,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable" -; V44 rat5 [V44,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V45 rat6 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" -; V46 rat7 [V46,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V47 rat8 [V47,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V48 rat9 [V48,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V49 rat10 [V49,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V50 rat11 [V50,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V39 rat0 [V39,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V40 rat1 [V40,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable" +; V41 rat2 [V41,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V42 rat3 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable" +; V43 rat4 [V43,T17] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V44 rat5 [V44,T12] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +; V45 rat6 [V45,T18] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V46 rat7 [V46,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +; V47 rat8 [V47,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V48 rat9 [V48,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +; V49 rat10 [V49,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V50 rat11 [V50,T27] ( 3, 2 ) int -> eax "runtime lookup"
; V51 rat12 [V51,T15] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V52 rat13 [V52,T22] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V53 rat14 [V53,T29] ( 3, 2 ) int -> eax "runtime lookup" -; V54 rat15 [V54,T16] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V55 rat16 [V55,T23] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V56 rat17 [V56,T30] ( 3, 2 ) int -> edx "runtime lookup" -; V57 rat18 [V57,T17] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V52 rat13 [V52,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V53 rat14 [V53,T28] ( 3, 2 ) int -> edx "runtime lookup" +; V54 rat15 [V54,T16] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [ebp-0x24] ; ; Lcl frame size = 24 @@ -101,14 +98,8 @@ G_M56103_IG03: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 ;; size=22 bbWeight=0.50 PerfScore 4.25 G_M56103_IG04: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz xor ebx, ebx
- mov ecx, dword ptr [esi] - mov ecx, dword ptr [ecx+0x24] - mov ecx, dword ptr [ecx] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - jne SHORT G_M56103_IG09
jmp SHORT G_M56103_IG09
- ;; size=18 bbWeight=0.50 PerfScore 5.75
+ ;; size=4 bbWeight=0.50 PerfScore 1.12
G_M56103_IG05: ; bbWeight=2, gcVars=0000000000000010 {V38}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz ; GC ptr vars +{V38} mov ecx, dword ptr [esi] @@ -374,7 +365,7 @@ G_M56103_IG35: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRe test edx, edx je SHORT G_M56103_IG39 ;; size=37 bbWeight=0.50 PerfScore 8.88
-G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; byrRegs -[eax] mov ecx, edx call CORINFO_HELP_NEWSFAST @@ -432,9 +423,9 @@ G_M56103_IG38: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 4 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ebx edi]
- ; GC ptr vars +{V07 V25 V37}
+ ; GC ptr vars +{V07 V23 V37}
mov edx, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS mov edx, eax @@ -442,11 +433,11 @@ G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefR ;; size=14 bbWeight=0.10 PerfScore 0.35 G_M56103_IG40: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref ; gcrRegs -[ebx edi]
- ; GC ptr vars -{V07 V25 V37}
+ ; GC ptr vars -{V07 V23 V37}
call [System.MulticastDelegate:ThrowNullThisInDelegateToInstance()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 591, prolog size 9, PerfScore 219.48, instruction count 207, allocated bytes for code 591 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
+; Total bytes of code 577, prolog size 9, PerfScore 214.85, instruction count 201, allocated bytes for code 577 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
; ============================================================

+0 (0.00%) : 79241.dasm - System.Collections.Generic.HashSet1[System.ValueTuple2[System.Canon,int]]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.ValueTuple2[System.Canon,int]],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)

@@ -10,42 +10,42 @@ ; ; V00 this [V00,T04] ( 10, 24 ) ref -> [ebp-0x48] do-not-enreg[H] this class-hnd EH-live single-def <System.Collections.Generic.HashSet`1[System.ValueTuple`2[System.__Canon,int]]> ; V01 RetBuf [V01,T14] ( 6, 6 ) byref -> [ebp-0x4C] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]> -; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def -; V04 loc0 [V04,T35] ( 3, 3 ) int -> edi
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]> +; V03 arg2 [V03,T29] ( 1, 4 ) ubyte -> [ebp+0x08] single-def +; V04 loc0 [V04,T33] ( 3, 3 ) int -> edi
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op <System.Collections.Generic.BitHelper> ; V08 loc4 [V08,T10] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live ; V09 loc5 [V09,T11] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V10 loc6 [V10,T36] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live -; V11 loc7 [V11,T22] ( 6, 5 ) ref -> [ebp-0x50] class-hnd EH-live spill-single-def <<unknown class>>
+; V10 loc6 [V10,T34] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live +; V11 loc7 [V11,T21] ( 6, 5 ) ref -> [ebp-0x50] class-hnd EH-live spill-single-def <<unknown class>>
; V12 loc8 [V12 ] ( 1, 1 ) struct ( 8) [ebp-0x38] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]> ;* V13 loc9 [V13 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[int]> ; V14 loc10 [V14,T06] ( 7, 20 ) ref -> [ebp-0x54] class-hnd EH-live spill-single-def <<unknown class>> ; V15 loc11 [V15 ] ( 2, 16 ) struct ( 8) [ebp-0x40] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]> ; V16 loc12 [V16,T03] ( 5, 28 ) int -> eax
-; V17 loc13 [V17,T37] ( 2, 2 ) int -> ecx
+; V17 loc13 [V17,T35] ( 2, 2 ) int -> ecx
;* V18 tmp1 [V18 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V19 tmp2 [V19 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper> ;* V20 tmp3 [V20 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V21 tmp4 [V21 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <System.Collections.Generic.BitHelper> ;* V22 tmp5 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V23 tmp6 [V23,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V23 tmp6 [V23,T25] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V24 tmp7 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp8 [V25,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup" ;* V26 tmp9 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V27 tmp10 [V27 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper> ;* V28 tmp11 [V28 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V29 tmp12 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V30 tmp13 [V30,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V30 tmp13 [V30,T26] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V31 tmp14 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V32 tmp15 [V32,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V32 tmp15 [V32,T27] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V33 tmp16 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V34 tmp17 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V35 tmp18 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ; V36 tmp19 [V36,T15] ( 8, 7 ) int -> edi "Inline return value spill temp"
-; V37 tmp20 [V37,T30] ( 2, 4 ) int -> eax "Inlining Arg"
+; V37 tmp20 [V37,T28] ( 2, 4 ) int -> eax "Inlining Arg"
; V38 tmp21 [V38,T16] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]> ;* V39 tmp22 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V40 tmp23 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> @@ -54,7 +54,7 @@ ;* V43 tmp26 [V43 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V44 tmp27 [V44 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V45 tmp28 [V45 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V46 tmp29 [V46,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V46 tmp29 [V46,T30] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V47 tmp30 [V47,T07] ( 3, 12 ) int -> edx "Inline stloc first use temp" ;* V48 tmp31 [V48 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]> ;* V49 tmp32 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" @@ -72,18 +72,18 @@ ;* V61 tmp44 [V61 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP ; V62 tmp45 [V62 ] ( 2, 16 ) ref -> [ebp-0x40] do-not-enreg[X] addr-exposed "field V15.Item1 (fldOffset=0x0)" P-DEP ; V63 tmp46 [V63 ] ( 2, 16 ) int -> [ebp-0x3C] do-not-enreg[X] addr-exposed "field V15.Item2 (fldOffset=0x4)" P-DEP
-; V64 tmp47 [V64,T33] ( 3, 3 ) byref -> [ebp-0x58] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+; V64 tmp47 [V64,T31] ( 3, 3 ) byref -> [ebp-0x58] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp48 [V65 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x4)" P-INDEP ;* V66 tmp49 [V66 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP ;* V67 tmp50 [V67 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x4)" P-INDEP
-; V68 tmp51 [V68,T42] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP -; V69 tmp52 [V69,T43] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
+; V68 tmp51 [V68,T40] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP +; V69 tmp52 [V69,T41] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
;* V70 tmp53 [V70 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP ;* V71 tmp54 [V71 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x4)" P-INDEP
-;* V72 tmp55 [V72,T47] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP -; V73 tmp56 [V73,T44] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP -; V74 tmp57 [V74,T41] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP -; V75 tmp58 [V75,T45] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
+;* V72 tmp55 [V72,T44] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP +; V73 tmp56 [V73,T42] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP +; V74 tmp57 [V74,T39] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP +; V75 tmp58 [V75,T43] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
;* V76 tmp59 [V76 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP ;* V77 tmp60 [V77 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x4)" P-INDEP ;* V78 tmp61 [V78 ] ( 0, 0 ) byref -> zero-ref single-def "field V41._reference (fldOffset=0x0)" P-INDEP @@ -96,25 +96,22 @@ ;* V85 tmp68 [V85 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x4)" P-INDEP ; V86 tmp69 [V86,T12] ( 3, 9 ) byref -> edi single-def "V07.[000..004)" ; V87 tmp70 [V87,T13] ( 3, 9 ) int -> [ebp-0x44] spill-single-def "V07.[004..008)"
-; V88 tmp71 [V88,T34] ( 3, 3 ) byref -> registers "V21.[000..004)" -; V89 tmp72 [V89,T38] ( 3, 3 ) int -> registers "V21.[004..008)"
+; V88 tmp71 [V88,T32] ( 3, 3 ) byref -> registers "V21.[000..004)" +; V89 tmp72 [V89,T36] ( 3, 3 ) int -> registers "V21.[004..008)"
; V90 GsCookie [V90 ] ( 1, 1 ) int -> [ebp-0x5C] do-not-enreg[X] addr-exposed "GSSecurityCookie" ; V91 EHSlots [V91 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V92 LocAllocSP [V92,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V92 LocAllocSP [V92,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V93 cse0 [V93,T09] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V94 cse1 [V94,T39] ( 3, 3 ) int -> edi "CSE - conservative" -; V95 rat0 [V95,T23] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V94 cse1 [V94,T37] ( 3, 3 ) int -> edi "CSE - conservative" +; V95 rat0 [V95,T22] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V96 rat1 [V96,T18] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V97 rat2 [V97,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V97 rat2 [V97,T23] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V98 rat3 [V98,T19] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V99 rat4 [V99,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V99 rat4 [V99,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V100 rat5 [V100,T20] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V101 rat6 [V101,T26] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V102 rat7 [V102,T46] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V103 rat8 [V103,T21] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V104 rat9 [V104,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V105 rat10 [V105,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" -; V106 rat11 [V106,T17] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
+; V101 rat6 [V101,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V102 rat7 [V102,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" +; V103 rat8 [V103,T17] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 84 @@ -174,7 +171,7 @@ G_M10461_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 mov gword ptr [ebp-0x50], eax ; GC ptr vars +{V11} ;; size=10 bbWeight=1 PerfScore 4.50
-G_M10461_IG06: ; bbWeight=1, gcVars=0000000000404010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG06: ; bbWeight=1, gcVars=0000000000204010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
mov ecx, eax ; gcrRegs +[ecx] call [<unknown method>] @@ -223,7 +220,7 @@ G_M10461_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x1C], 0 jmp SHORT G_M10461_IG14 ;; size=9 bbWeight=1 PerfScore 3.00
-G_M10461_IG12: ; bbWeight=1, gcVars=0000000000404010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG12: ; bbWeight=1, gcVars=0000000000204010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars +{V11} mov ecx, gword ptr [ebp-0x50] ; gcrRegs +[ecx] @@ -324,7 +321,7 @@ G_M10461_IG20: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[eax] jmp SHORT G_M10461_IG23 ;; size=49 bbWeight=1 PerfScore 14.50
-G_M10461_IG21: ; bbWeight=1, gcVars=0000000200004010 {V00 V01 V64}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG21: ; bbWeight=1, gcVars=0000000080004010 {V00 V01 V64}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; byrRegs -[edi] ; GC ptr vars +{V64} mov eax, bword ptr [ebp-0x58]

+0 (0.00%) : 9251.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)

@@ -10,14 +10,14 @@ ; ; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x40] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 RetBuf [V01,T16] ( 6, 6 ) byref -> [ebp-0x44] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def ;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live ; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x48] do-not-enreg[M] class-hnd EH-live <<unknown class>> ;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax @@ -26,20 +26,20 @@ ;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup" ;* V21 tmp8 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V28 tmp15 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x34] "Inline return value spill temp" ; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]> ;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> @@ -48,24 +48,24 @@ ;* V37 tmp24 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V38 tmp25 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V39 tmp26 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V40 tmp27 [V40,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V40 tmp27 [V40,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V41 tmp28 [V41,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp" ; V42 tmp29 [V42,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp" ; V43 tmp30 [V43,T07] ( 3, 24 ) byref -> edx "dup spill" ;* V44 tmp31 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V46 tmp33 [V46,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V46 tmp33 [V46,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP ;* V48 tmp35 [V48 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP ;* V49 tmp36 [V49 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP
-; V50 tmp37 [V50,T42] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP -; V51 tmp38 [V51,T43] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
+; V50 tmp37 [V50,T40] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP +; V51 tmp38 [V51,T41] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V52 tmp39 [V52 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP ;* V53 tmp40 [V53 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
-;* V54 tmp41 [V54,T47] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP -; V55 tmp42 [V55,T44] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP -; V56 tmp43 [V56,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP -; V57 tmp44 [V57,T45] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+;* V54 tmp41 [V54,T44] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP +; V55 tmp42 [V55,T42] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP +; V56 tmp43 [V56,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP +; V57 tmp44 [V57,T43] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP ;* V59 tmp46 [V59 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP ;* V60 tmp47 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP @@ -74,27 +74,24 @@ ;* V63 tmp50 [V63 ] ( 0, 0 ) int -> zero-ref single-def "field V39._length (fldOffset=0x4)" P-INDEP ; V64 tmp51 [V64,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)" ; V65 tmp52 [V65,T14] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V06.[004..008)"
-; V66 tmp53 [V66,T36] ( 3, 3 ) byref -> edi "V16.[000..004)" -; V67 tmp54 [V67,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V66 tmp53 [V66,T34] ( 3, 3 ) byref -> edi "V16.[000..004)" +; V67 tmp54 [V67,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V68 tmp55 [V68,T03] ( 2, 32 ) ref -> edx "argument with side effect" ; V69 GsCookie [V69 ] ( 1, 1 ) int -> [ebp-0x4C] do-not-enreg[X] addr-exposed "GSSecurityCookie" ; V70 EHSlots [V70 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V71 LocAllocSP [V71,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V71 LocAllocSP [V71,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V72 cse0 [V72,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V73 cse1 [V73,T39] ( 3, 3 ) int -> eax "CSE - conservative" -; V74 rat0 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V73 cse1 [V73,T37] ( 3, 3 ) int -> eax "CSE - conservative" +; V74 rat0 [V74,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat1 [V75,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat2 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat2 [V76,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat3 [V77,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V78 rat4 [V78,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V78 rat4 [V78,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V79 rat5 [V79,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V80 rat6 [V80,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V81 rat7 [V81,T46] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V82 rat8 [V82,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V83 rat9 [V83,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V84 rat10 [V84,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" -; V85 rat11 [V85,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" -; V86 rat12 [V86,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V80 rat6 [V80,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V81 rat7 [V81,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" +; V82 rat8 [V82,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" +; V83 rat9 [V83,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 68

+0 (0.00%) : 68139.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.Canon,System.Canon]:CopyToObjects(System.Object[],int):this (FullOpts)

@@ -11,7 +11,7 @@ ; V00 this [V00,T10] ( 4, 4 ) ref -> [ebp-0x1C] this class-hnd single-def <System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]> ; V01 arg1 [V01,T11] ( 3, 18 ) ref -> ebx class-hnd single-def <System.Object[]> ; V02 arg2 [V02,T06] ( 3, 48 ) int -> esi
-; V03 loc0 [V03,T17] ( 3, 6 ) ref -> [ebp-0x20] class-hnd exact spill-single-def <<unknown class>>
+; V03 loc0 [V03,T15] ( 3, 6 ) ref -> [ebp-0x20] class-hnd exact spill-single-def <<unknown class>>
; V04 loc1 [V04,T12] ( 5, 17 ) int -> [ebp-0x10] ;* V05 loc2 [V05 ] ( 0, 0 ) struct ( 4) zero-ref <System.Collections.Concurrent.ConcurrentDictionary`2+VolatileNode[System.__Canon,System.__Canon]> ; V06 loc3 [V06,T02] ( 7, 88 ) ref -> [ebp-0x24] class-hnd <<unknown class>> @@ -21,20 +21,17 @@ ;* V10 tmp3 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V11 tmp4 [V11,T04] ( 2, 64 ) ref -> ecx class-hnd "Inlining Arg" <System.__Canon> ; V12 tmp5 [V12,T05] ( 2, 64 ) ref -> edx class-hnd "Inlining Arg" <System.__Canon>
-; V13 tmp6 [V13,T16] ( 2, 8 ) ref -> eax "field V05._node (fldOffset=0x0)" P-INDEP
+; V13 tmp6 [V13,T14] ( 2, 8 ) ref -> eax "field V05._node (fldOffset=0x0)" P-INDEP
; V14 tmp7 [V14,T07] ( 2, 32 ) ref -> [ebp-0x28] spill-single-def "field V07.key (fldOffset=0x0)" P-INDEP ; V15 tmp8 [V15,T08] ( 2, 32 ) ref -> [ebp-0x2C] spill-single-def "field V07.value (fldOffset=0x4)" P-INDEP ; V16 cse0 [V16,T13] ( 2, 17 ) int -> edi hoist "CSE - moderate"
-; V17 cse1 [V17,T18] ( 3, 6 ) int -> [ebp-0x14] spill-single-def "CSE - moderate" -; V18 rat0 [V18,T20] ( 3, 4.40) int -> [ebp-0x18] spill-single-def "Spilling to split statement for tree" -; V19 rat1 [V19,T21] ( 3, 4 ) int -> edi "runtime lookup" -; V20 rat2 [V20,T19] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable" -;* V21 rat3 [V21,T15] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V22 rat4 [V22,T22] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V23 rat5 [V23,T14] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -;* V24 rat6 [V24,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V25 rat7 [V25,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V26 rat8 [V26,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V17 cse1 [V17,T16] ( 3, 6 ) int -> [ebp-0x14] spill-single-def "CSE - moderate" +; V18 rat0 [V18,T18] ( 3, 4.40) int -> [ebp-0x18] spill-single-def "Spilling to split statement for tree" +; V19 rat1 [V19,T19] ( 3, 4 ) int -> edi "runtime lookup" +; V20 rat2 [V20,T17] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable" +;* V21 rat3 [V21,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V22 rat4 [V22,T09] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V23 rat5 [V23,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 32 @@ -77,7 +74,7 @@ G_M20844_IG02: ; bbWeight=1, gcVars=00000400 {V00}, gcrefRegs=00000008 {e test edi, edi je SHORT G_M20844_IG04 ;; size=51 bbWeight=1 PerfScore 22.75
-G_M20844_IG03: ; bbWeight=0.80, gcVars=00020400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M20844_IG03: ; bbWeight=0.80, gcVars=00008400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] jmp SHORT G_M20844_IG05 ;; size=2 bbWeight=0.80 PerfScore 1.60 @@ -141,7 +138,7 @@ G_M20844_IG06: ; bbWeight=16, gcrefRegs=00000009 {eax ebx}, byrefRegs=000 test eax, eax jne SHORT G_M20844_IG06 ;; size=65 bbWeight=16 PerfScore 324.00
-G_M20844_IG07: ; bbWeight=4, gcVars=00020400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M20844_IG07: ; bbWeight=4, gcVars=00008400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] ; GC ptr vars -{V06} mov edx, dword ptr [ebp-0x10]

realworld.run.windows.x86.checked.mch

-32 (-0.43%) : 15279.dasm - Microsoft.ML.Transforms.Text.TextFeaturizingEstimator:Fit(Microsoft.ML.IDataView):Microsoft.ML.ITransformer:this (FullOpts)

@@ -139,34 +139,34 @@ ; V128 tmp94 [V128,T17] ( 6, 16 ) ref -> [ebp-0x168] class-hnd exact "Inlining Arg" <System.String> ; V129 tmp95 [V129,T132] ( 3, 3 ) ref -> [ebp-0x16C] class-hnd spill-single-def "Inlining Arg" <System.__Canon> ; V130 tmp96 [V130,T28] ( 4, 16 ) ref -> esi class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
-; V131 tmp97 [V131,T29] ( 4, 16 ) ref -> [ebp-0x170] class-hnd exact "Inlining Arg" <System.String> -; V132 tmp98 [V132,T53] ( 6, 10 ) ref -> [ebp-0x174] class-hnd "Inline stloc first use temp" <System.String[]>
+; V131 tmp97 [V131,T29] ( 4, 16 ) ref -> edx class-hnd exact "Inlining Arg" <System.String> +; V132 tmp98 [V132,T53] ( 6, 10 ) ref -> [ebp-0x170] class-hnd "Inline stloc first use temp" <System.String[]>
; V133 tmp99 [V133,T46] ( 8, 12 ) int -> registers "Inline stloc first use temp" ; V134 tmp100 [V134,T18] ( 6, 16 ) ref -> eax class-hnd exact "Inlining Arg" <System.String> ;* V135 tmp101 [V135 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V136 tmp102 [V136,T133] ( 3, 3 ) ref -> [ebp-0x178] class-hnd spill-single-def "Inlining Arg" <System.__Canon>
+; V136 tmp102 [V136,T133] ( 3, 3 ) ref -> [ebp-0x174] class-hnd spill-single-def "Inlining Arg" <System.__Canon>
;* V137 tmp103 [V137 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema> ;* V138 tmp104 [V138 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String>
-; V139 tmp105 [V139,T188] ( 3, 1.50) ref -> [ebp-0x17C] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V139 tmp105 [V139,T188] ( 3, 1.50) ref -> [ebp-0x178] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V140 tmp106 [V140,T153] ( 4, 2 ) int -> [ebp-0x24] spill-single-def "Inline stloc first use temp" ; V141 tmp107 [V141,T134] ( 3, 3 ) ref -> ebx class-hnd single-def "Inlining Arg" <Microsoft.ML.ITransformer> ;* V142 tmp108 [V142,T243] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V143 tmp109 [V143,T86] ( 3, 5 ) ref -> ebx class-hnd exact single-def "Inlining Arg" <System.String> ;* V144 tmp110 [V144 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView> ;* V145 tmp111 [V145 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V146 tmp112 [V146,T135] ( 3, 3 ) ref -> [ebp-0x180] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]> -; V147 tmp113 [V147,T93] ( 4, 4 ) ref -> [ebp-0x184] class-hnd spill-single-def "Inlining Arg" <<unknown class>> -; V148 tmp114 [V148,T110] ( 7, 3.50) ref -> [ebp-0x188] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V146 tmp112 [V146,T135] ( 3, 3 ) ref -> [ebp-0x17C] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]> +; V147 tmp113 [V147,T93] ( 4, 4 ) ref -> [ebp-0x180] class-hnd spill-single-def "Inlining Arg" <<unknown class>> +; V148 tmp114 [V148,T110] ( 7, 3.50) ref -> [ebp-0x184] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V149 tmp115 [V149,T206] ( 3, 1.50) int -> edx "Inline return value spill temp" ;* V150 tmp116 [V150 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
-; V151 tmp117 [V151,T94] ( 4, 4 ) ref -> [ebp-0x18C] class-hnd spill-single-def "Inlining Arg" <int[]> -; V152 tmp118 [V152,T111] ( 7, 3.50) ref -> [ebp-0x190] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V151 tmp117 [V151,T94] ( 4, 4 ) ref -> [ebp-0x188] class-hnd spill-single-def "Inlining Arg" <int[]> +; V152 tmp118 [V152,T111] ( 7, 3.50) ref -> [ebp-0x18C] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V153 tmp119 [V153,T207] ( 3, 1.50) int -> edx "Inline return value spill temp" ;* V154 tmp120 [V154 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema> ;* V155 tmp121 [V155 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> ; V156 tmp122 [V156,T30] ( 4, 16 ) ref -> eax class-hnd exact "Inlining Arg" <System.String> ; V157 tmp123 [V157,T31] ( 4, 16 ) ref -> edx class-hnd exact "Inlining Arg" <System.String>
-; V158 tmp124 [V158,T54] ( 6, 10 ) ref -> [ebp-0x194] class-hnd "Inline stloc first use temp" <System.String[]>
+; V158 tmp124 [V158,T54] ( 6, 10 ) ref -> [ebp-0x190] class-hnd "Inline stloc first use temp" <System.String[]>
; V159 tmp125 [V159,T47] ( 8, 12 ) int -> registers "Inline stloc first use temp" ; V160 tmp126 [V160,T19] ( 6, 16 ) ref -> edx class-hnd "Inlining Arg" <System.__Canon> ;* V161 tmp127 [V161 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[int]> @@ -175,21 +175,21 @@ ;* V164 tmp130 [V164 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Nullable`1[int]> ;* V165 tmp131 [V165 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView> ;* V166 tmp132 [V166 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V167 tmp133 [V167,T136] ( 3, 3 ) ref -> [ebp-0x198] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]> -; V168 tmp134 [V168,T95] ( 4, 4 ) ref -> [ebp-0x19C] class-hnd spill-single-def "Inlining Arg" <<unknown class>> -; V169 tmp135 [V169,T112] ( 7, 3.50) ref -> [ebp-0x1A0] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V167 tmp133 [V167,T136] ( 3, 3 ) ref -> [ebp-0x194] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]> +; V168 tmp134 [V168,T95] ( 4, 4 ) ref -> [ebp-0x198] class-hnd spill-single-def "Inlining Arg" <<unknown class>> +; V169 tmp135 [V169,T112] ( 7, 3.50) ref -> [ebp-0x19C] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V170 tmp136 [V170,T208] ( 3, 1.50) int -> edx "Inline return value spill temp" ;* V171 tmp137 [V171 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
-; V172 tmp138 [V172,T96] ( 4, 4 ) ref -> [ebp-0x1A4] class-hnd spill-single-def "Inlining Arg" <int[]> -; V173 tmp139 [V173,T113] ( 7, 3.50) ref -> [ebp-0x1A8] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V172 tmp138 [V172,T96] ( 4, 4 ) ref -> [ebp-0x1A0] class-hnd spill-single-def "Inlining Arg" <int[]> +; V173 tmp139 [V173,T113] ( 7, 3.50) ref -> [ebp-0x1A4] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V174 tmp140 [V174,T209] ( 3, 1.50) int -> edx "Inline return value spill temp" ;* V175 tmp141 [V175 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema> ;* V176 tmp142 [V176 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String>
-; V177 tmp143 [V177,T189] ( 3, 1.50) ref -> [ebp-0x1AC] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V177 tmp143 [V177,T189] ( 3, 1.50) ref -> [ebp-0x1A8] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V178 tmp144 [V178,T154] ( 4, 2 ) int -> ecx single-def "Inline stloc first use temp"
-; V179 tmp145 [V179,T137] ( 3, 3 ) ref -> [ebp-0x1B0] class-hnd spill-single-def "Inlining Arg" <Microsoft.ML.ITransformer>
+; V179 tmp145 [V179,T137] ( 3, 3 ) ref -> [ebp-0x1AC] class-hnd spill-single-def "Inlining Arg" <Microsoft.ML.ITransformer>
;* V180 tmp146 [V180 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
-; V181 tmp147 [V181,T190] ( 3, 1.50) ref -> [ebp-0x1B4] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V181 tmp147 [V181,T190] ( 3, 1.50) ref -> [ebp-0x1B0] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V182 tmp148 [V182,T155] ( 4, 2 ) int -> [ebp-0x28] spill-single-def "Inline stloc first use temp" ;* V183 tmp149 [V183,T237] ( 0, 0 ) ref -> zero-ref single-def ;* V184 tmp150 [V184,T238] ( 0, 0 ) ref -> zero-ref single-def @@ -197,72 +197,72 @@ ; V186 tmp152 [V186,T185] ( 2, 2 ) ubyte -> [ebp-0x2C] spill-single-def "Inlining Arg" ;* V187 tmp153 [V187 ] ( 0, 0 ) int -> zero-ref ;* V188 tmp154 [V188 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V189 tmp155 [V189,T192] ( 3, 1.50) ref -> [ebp-0x1B8] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V189 tmp155 [V189,T192] ( 3, 1.50) ref -> [ebp-0x1B4] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V190 tmp156 [V190,T156] ( 4, 2 ) int -> ecx single-def "Inline stloc first use temp" ;* V191 tmp157 [V191 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
-; V192 tmp158 [V192,T193] ( 3, 1.50) ref -> [ebp-0x1BC] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V192 tmp158 [V192,T193] ( 3, 1.50) ref -> [ebp-0x1B8] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V193 tmp159 [V193,T157] ( 4, 2 ) int -> [ebp-0x30] spill-single-def "Inline stloc first use temp" ;* V194 tmp160 [V194,T239] ( 0, 0 ) ref -> zero-ref single-def ;* V195 tmp161 [V195,T240] ( 0, 0 ) ref -> zero-ref single-def
-; V196 tmp162 [V196,T194] ( 3, 1.50) ref -> [ebp-0x1C0] spill-single-def
+; V196 tmp162 [V196,T194] ( 3, 1.50) ref -> [ebp-0x1BC] spill-single-def
; V197 tmp163 [V197,T186] ( 2, 2 ) ubyte -> [ebp-0x34] spill-single-def "Inlining Arg" ;* V198 tmp164 [V198 ] ( 0, 0 ) int -> zero-ref ;* V199 tmp165 [V199 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V200 tmp166 [V200,T195] ( 3, 1.50) ref -> [ebp-0x1C4] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V200 tmp166 [V200,T195] ( 3, 1.50) ref -> [ebp-0x1C0] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V201 tmp167 [V201,T158] ( 4, 2 ) int -> [ebp-0x38] spill-single-def "Inline stloc first use temp" ;* V202 tmp168 [V202 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView> ;* V203 tmp169 [V203 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V204 tmp170 [V204,T138] ( 3, 3 ) ref -> [ebp-0x1C8] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]> -; V205 tmp171 [V205,T97] ( 4, 4 ) ref -> [ebp-0x1CC] class-hnd spill-single-def "Inlining Arg" <<unknown class>> -; V206 tmp172 [V206,T114] ( 7, 3.50) ref -> [ebp-0x1D0] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V204 tmp170 [V204,T138] ( 3, 3 ) ref -> [ebp-0x1C4] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]> +; V205 tmp171 [V205,T97] ( 4, 4 ) ref -> [ebp-0x1C8] class-hnd spill-single-def "Inlining Arg" <<unknown class>> +; V206 tmp172 [V206,T114] ( 7, 3.50) ref -> [ebp-0x1CC] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V207 tmp173 [V207,T210] ( 3, 1.50) int -> edx "Inline return value spill temp" ;* V208 tmp174 [V208 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
-; V209 tmp175 [V209,T98] ( 4, 4 ) ref -> [ebp-0x1D4] class-hnd spill-single-def "Inlining Arg" <int[]> -; V210 tmp176 [V210,T115] ( 7, 3.50) ref -> [ebp-0x1D8] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V209 tmp175 [V209,T98] ( 4, 4 ) ref -> [ebp-0x1D0] class-hnd spill-single-def "Inlining Arg" <int[]> +; V210 tmp176 [V210,T115] ( 7, 3.50) ref -> [ebp-0x1D4] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V211 tmp177 [V211,T211] ( 3, 1.50) int -> edx "Inline return value spill temp"
-; V212 tmp178 [V212,T196] ( 3, 1.50) ref -> [ebp-0x1DC] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V212 tmp178 [V212,T196] ( 3, 1.50) ref -> [ebp-0x1D8] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V213 tmp179 [V213,T159] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp" ;* V214 tmp180 [V214 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]> ; V215 tmp181 [V215,T197] ( 3, 1.50) ref -> edx class-hnd single-def "Inline stloc first use temp" <<unknown class>> ; V216 tmp182 [V216,T160] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp" ;* V217 tmp183 [V217 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]>
-; V218 tmp184 [V218,T198] ( 3, 1.50) ref -> [ebp-0x1E0] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V218 tmp184 [V218,T198] ( 3, 1.50) ref -> [ebp-0x1DC] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V219 tmp185 [V219,T161] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp" ;* V220 tmp186 [V220 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]>
-; V221 tmp187 [V221,T199] ( 3, 1.50) ref -> [ebp-0x1E4] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V221 tmp187 [V221,T199] ( 3, 1.50) ref -> [ebp-0x1E0] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V222 tmp188 [V222,T162] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp" ;* V223 tmp189 [V223 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]> ; V224 tmp190 [V224,T139] ( 3, 3 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <<unknown class>> ;* V225 tmp191 [V225 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView> ;* V226 tmp192 [V226 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>> ; V227 tmp193 [V227,T140] ( 3, 3 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
-; V228 tmp194 [V228,T99] ( 4, 4 ) ref -> [ebp-0x1E8] class-hnd spill-single-def "Inlining Arg" <<unknown class>> -; V229 tmp195 [V229,T116] ( 7, 3.50) ref -> [ebp-0x1EC] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V228 tmp194 [V228,T99] ( 4, 4 ) ref -> [ebp-0x1E4] class-hnd spill-single-def "Inlining Arg" <<unknown class>> +; V229 tmp195 [V229,T116] ( 7, 3.50) ref -> [ebp-0x1E8] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V230 tmp196 [V230,T212] ( 3, 1.50) int -> edx "Inline return value spill temp" ;* V231 tmp197 [V231 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]> ; V232 tmp198 [V232,T100] ( 4, 4 ) ref -> edi class-hnd single-def "Inlining Arg" <int[]>
-; V233 tmp199 [V233,T117] ( 7, 3.50) ref -> [ebp-0x1F0] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V233 tmp199 [V233,T117] ( 7, 3.50) ref -> [ebp-0x1EC] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V234 tmp200 [V234,T213] ( 3, 1.50) int -> edx "Inline return value spill temp" ; V235 tmp201 [V235,T101] ( 2, 4 ) ref -> ebx class-hnd single-def "impAppendStmt" <<unknown class>> ; V236 tmp202 [V236,T75] ( 3, 6 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]> ;* V237 tmp203 [V237 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]> ; V238 tmp204 [V238,T70] ( 4, 7 ) ref -> edi class-hnd single-def "Inlining Arg" <int[]>
-; V239 tmp205 [V239,T68] ( 7, 7 ) ref -> [ebp-0x1F4] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V239 tmp205 [V239,T68] ( 7, 7 ) ref -> [ebp-0x1F0] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V240 tmp206 [V240,T163] ( 3, 2 ) int -> edx "Inline return value spill temp" ; V241 tmp207 [V241,T227] ( 2, 1 ) ref -> eax single-def "field V54.key (fldOffset=0x0)" P-INDEP ; V242 tmp208 [V242,T148] ( 5, 2.50) ref -> eax single-def "field V54.value (fldOffset=0x4)" P-INDEP ; V243 tmp209 [V243,T228] ( 2, 1 ) ref -> eax single-def "field V55.key (fldOffset=0x0)" P-INDEP ; V244 tmp210 [V244,T149] ( 5, 2.50) ref -> eax single-def "field V55.value (fldOffset=0x4)" P-INDEP ;* V245 tmp211 [V245,T241] ( 0, 0 ) ref -> zero-ref single-def "field V56.key (fldOffset=0x0)" P-INDEP
-; V246 tmp212 [V246,T200] ( 3, 1.50) ref -> [ebp-0x1F8] spill-single-def "field V56.value (fldOffset=0x4)" P-INDEP
+; V246 tmp212 [V246,T200] ( 3, 1.50) ref -> [ebp-0x1F4] spill-single-def "field V56.value (fldOffset=0x4)" P-INDEP
;* V247 tmp213 [V247,T242] ( 0, 0 ) ref -> zero-ref single-def "field V57.key (fldOffset=0x0)" P-INDEP
-; V248 tmp214 [V248,T201] ( 3, 1.50) ref -> [ebp-0x1FC] spill-single-def "field V57.value (fldOffset=0x4)" P-INDEP
+; V248 tmp214 [V248,T201] ( 3, 1.50) ref -> [ebp-0x1F8] spill-single-def "field V57.value (fldOffset=0x4)" P-INDEP
; V249 tmp215 [V249,T60] ( 4, 8 ) ref -> eax "field V63.Item1 (fldOffset=0x0)" P-INDEP
-; V250 tmp216 [V250,T61] ( 4, 8 ) ref -> [ebp-0x200] "field V63.Item2 (fldOffset=0x4)" P-INDEP
+; V250 tmp216 [V250,T61] ( 4, 8 ) ref -> [ebp-0x1FC] "field V63.Item2 (fldOffset=0x4)" P-INDEP
;* V251 tmp217 [V251,T105] ( 0, 0 ) ubyte -> zero-ref "field V77.hasValue (fldOffset=0x0)" P-INDEP ; V252 tmp218 [V252,T64] ( 4, 8 ) int -> eax "field V77.value (fldOffset=0x4)" P-INDEP ; V253 tmp219 [V253,T62] ( 4, 8 ) ref -> eax "field V82.Item1 (fldOffset=0x0)" P-INDEP
-; V254 tmp220 [V254,T63] ( 4, 8 ) ref -> [ebp-0x204] "field V82.Item2 (fldOffset=0x4)" P-INDEP
+; V254 tmp220 [V254,T63] ( 4, 8 ) ref -> [ebp-0x200] "field V82.Item2 (fldOffset=0x4)" P-INDEP
;* V255 tmp221 [V255 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V161.hasValue (fldOffset=0x0)" P-INDEP ;* V256 tmp222 [V256 ] ( 0, 0 ) int -> zero-ref single-def "field V161.value (fldOffset=0x4)" P-INDEP ;* V257 tmp223 [V257,T244] ( 0, 0 ) ubyte -> zero-ref single-def "field V163.hasValue (fldOffset=0x0)" P-INDEP @@ -279,29 +279,29 @@ ;* V268 tmp234 [V268 ] ( 0, 0 ) ref -> zero-ref single-def "field V223.value (fldOffset=0x4)" P-INDEP ; V269 tmp235 [V269,T102] ( 2, 4 ) ref -> edx single-def "argument with side effect" ; V270 tmp236 [V270,T170] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V271 tmp237 [V271,T171] ( 2, 2 ) ref -> [ebp-0x208] spill-single-def "argument with side effect"
+; V271 tmp237 [V271,T171] ( 2, 2 ) ref -> [ebp-0x204] spill-single-def "argument with side effect"
; V272 tmp238 [V272,T172] ( 2, 2 ) ref -> edx single-def "argument with side effect" ; V273 tmp239 [V273,T32] ( 4, 16 ) ref -> edx "argument with side effect" ; V274 tmp240 [V274,T33] ( 4, 16 ) ref -> edi "argument with side effect" ; V275 tmp241 [V275,T34] ( 4, 16 ) ref -> eax "argument with side effect"
-; V276 tmp242 [V276,T11] ( 6, 24 ) byref -> [ebp-0x20C] "BlockOp address local"
+; V276 tmp242 [V276,T11] ( 6, 24 ) byref -> [ebp-0x208] "BlockOp address local"
; V277 tmp243 [V277,T35] ( 4, 16 ) ref -> eax "argument with side effect" ; V278 tmp244 [V278,T36] ( 4, 16 ) ref -> eax "argument with side effect"
-; V279 tmp245 [V279,T173] ( 2, 2 ) ref -> [ebp-0x210] spill-single-def "argument with side effect"
+; V279 tmp245 [V279,T173] ( 2, 2 ) ref -> [ebp-0x20C] spill-single-def "argument with side effect"
; V280 tmp246 [V280,T174] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V281 tmp247 [V281,T175] ( 2, 2 ) ref -> [ebp-0x214] spill-single-def "argument with side effect"
+; V281 tmp247 [V281,T175] ( 2, 2 ) ref -> [ebp-0x210] spill-single-def "argument with side effect"
; V282 tmp248 [V282,T176] ( 2, 2 ) ref -> edx single-def "argument with side effect" ; V283 tmp249 [V283,T37] ( 4, 16 ) ref -> edx "argument with side effect"
-; V284 tmp250 [V284,T38] ( 4, 16 ) ref -> [ebp-0x218] "argument with side effect"
+; V284 tmp250 [V284,T38] ( 4, 16 ) ref -> [ebp-0x214] "argument with side effect"
; V285 tmp251 [V285,T39] ( 4, 16 ) ref -> eax "argument with side effect" ; V286 tmp252 [V286,T12] ( 6, 24 ) byref -> registers "BlockOp address local" ; V287 tmp253 [V287,T177] ( 2, 2 ) ref -> edx single-def "argument with side effect" ; V288 tmp254 [V288,T178] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V289 tmp255 [V289,T179] ( 2, 2 ) ref -> [ebp-0x21C] spill-single-def "argument with side effect"
+; V289 tmp255 [V289,T179] ( 2, 2 ) ref -> [ebp-0x218] spill-single-def "argument with side effect"
; V290 tmp256 [V290,T180] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V291 tmp257 [V291,T181] ( 2, 2 ) ref -> [ebp-0x220] spill-single-def "argument with side effect"
+; V291 tmp257 [V291,T181] ( 2, 2 ) ref -> [ebp-0x21C] spill-single-def "argument with side effect"
; V292 tmp258 [V292,T182] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V293 tmp259 [V293,T183] ( 2, 2 ) ref -> [ebp-0x224] spill-single-def "argument with side effect"
+; V293 tmp259 [V293,T183] ( 2, 2 ) ref -> [ebp-0x220] spill-single-def "argument with side effect"
; V294 tmp260 [V294,T184] ( 2, 2 ) ref -> edx single-def "argument with side effect" ; V295 tmp261 [V295,T141] ( 3, 3 ) byref -> edi single-def "BlockOp address local" ; V296 tmp262 [V296,T142] ( 3, 3 ) byref -> edi single-def "BlockOp address local" @@ -338,11 +338,10 @@ ; V327 cse21 [V327,T48] ( 3, 11.88) ref -> esi "CSE - conservative" ; V328 cse22 [V328,T49] ( 3, 11.88) ref -> eax "CSE - conservative" ; V329 cse23 [V329,T202] ( 3, 1.50) ref -> eax "CSE - conservative"
-; V330 cse24 [V330,T248] ( 3, 0.12) ref -> [ebp-0x228] spill-single-def "CSE - conservative"
+; V330 cse24 [V330,T248] ( 3, 0.12) ref -> [ebp-0x224] spill-single-def "CSE - conservative"
; V331 cse25 [V331,T249] ( 3, 0.12) ref -> eax "CSE - conservative"
-; TEMP_01 byref -> [ebp-0x22C]
;
-; Lcl frame size = 544
+; Lcl frame size = 536
G_M30044_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -350,14 +349,12 @@ G_M30044_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 544 - xor eax, eax - mov dword ptr [ebp-0x22C], eax
+ sub esp, 536
mov esi, ecx ; gcrRegs +[esi] mov edi, edx ; gcrRegs +[edi]
- ;; size=24 bbWeight=1 PerfScore 6.25
+ ;; size=16 bbWeight=1 PerfScore 5.00
G_M30044_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz mov ebx, gword ptr [esi+0x20] ; gcrRegs +[ebx] @@ -474,7 +471,7 @@ G_M30044_IG06: ; bbWeight=0.50, gcrefRegs=00000048 {ebx esi}, byrefRegs=0 ; GC ptr vars +{V05} call [<unknown method>] ; gcrRegs -[ecx]
- mov gword ptr [ebp-0x208], eax
+ mov gword ptr [ebp-0x204], eax
; GC ptr vars +{V271} mov gword ptr [ebp-0x6C], esi ; GC ptr vars +{V00} @@ -487,7 +484,7 @@ G_M30044_IG06: ; bbWeight=0.50, gcrefRegs=00000048 {ebx esi}, byrefRegs=0 ; gcrRegs -[ecx edx esi] mov edx, eax ; gcrRegs +[edx] ...

-17 (-0.39%) : 34093.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)

@@ -1360,41 +1360,34 @@ G_M4474_IG54: ; bbWeight=0.04, gcVars=00000000000000000000000000000000000 ; gcrRegs -[ecx] +[eax] mov edi, eax ; gcrRegs +[edi]
- mov eax, gword ptr [ebp-0x48] - lea edx, bword ptr [eax+0x04] - ; byrRegs +[edx] - mov bword ptr [ebp-0xA8], edx - mov ecx, dword ptr [ebp-0x14]
+ mov eax, dword ptr [ebp-0x14] + ; gcrRegs -[eax]
mov edx, gword ptr [ebp-0x3C] ; gcrRegs +[edx]
- ; byrRegs -[edx] - cmp ecx, dword ptr [edx+0x04]
+ cmp eax, dword ptr [edx+0x04]
jae G_M4474_IG108
- mov dword ptr [ebp-0x14], ecx - mov ebx, gword ptr [edx+4*ecx+0x08] - ; gcrRegs +[ebx] - mov ecx, ebx
+ mov dword ptr [ebp-0x14], eax + mov ecx, gword ptr [edx+4*eax+0x08]
; gcrRegs +[ecx]
- mov ebx, dword ptr [ebx] - ; gcrRegs -[ebx]
+ mov ebx, dword ptr [ecx]
mov ebx, dword ptr [ebx+0x2C] call [ebx+0x18]<unknown method>
- ; gcrRegs -[ecx edx] - mov edx, bword ptr [ebp-0xA8]
+ ; gcrRegs -[ecx edx] +[eax] + mov ebx, gword ptr [ebp-0x48] + ; gcrRegs +[ebx] + lea edx, bword ptr [ebx+0x04]
; byrRegs +[edx]
+ ; GC ptr vars -{V01 V17}
call CORINFO_HELP_ASSIGN_REF_EAX ; gcrRegs -[eax] ; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x48] - ; gcrRegs +[ebx]
mov ecx, gword ptr [ebx+0x04] ; gcrRegs +[ecx]
- ; GC ptr vars -{V01 V17}
call [System.String:IsNullOrWhiteSpace(System.String):ubyte] ; gcrRegs -[ecx] test eax, eax je SHORT G_M4474_IG56
- ;; size=126 bbWeight=0.04 PerfScore 1.93
+ ;; size=109 bbWeight=0.04 PerfScore 1.80
G_M4474_IG55: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz call [<unknown method>] ; gcrRegs +[eax] @@ -2558,6 +2551,6 @@ G_M4474_IG109: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 4410, prolog size 26, PerfScore 1390.03, instruction count 1274, allocated bytes for code 4410 (MethodHash=ac86ee85) for method System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
+; Total bytes of code 4393, prolog size 26, PerfScore 1389.90, instruction count 1270, allocated bytes for code 4393 (MethodHash=ac86ee85) for method System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
; ============================================================

-4 (-0.37%) : 20024.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)

@@ -10,7 +10,7 @@ ; ; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]> ; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>> ; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18] @@ -23,10 +23,10 @@ ; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi ; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24] ; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" -; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup" +; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -34,8 +34,8 @@ ;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall" -; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall" +; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -47,9 +47,9 @@ ; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -57,9 +57,9 @@ ; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]> ;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" @@ -67,83 +67,77 @@ ; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>> ;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP ; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP -; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP -; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP -; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP -; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP -; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP +; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP +; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP +; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP +; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP +; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr" ; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr" ; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr" ; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr" ; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect" ; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr" ; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect" -; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative" -; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative" -; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" -; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect" +; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative" +; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative" +; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree" +; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup" -; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" -;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" -;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" -; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup" -; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" -; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" -; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" -;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" -; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup" -; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" -; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP -; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP -; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP -; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP -; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" -; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP -; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP -; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP -; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP -; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" -; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP -; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP -; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" -; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP -; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup" +; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable" +;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable" +; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree" +; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup" +; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" +; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree" +; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable" +;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" +;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" +;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup" +;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" +; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree" +; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup" +; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable" +; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP +; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP +; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP +; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP +; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable" +; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP +; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP +; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP +; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP +; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" +; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP +; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP +; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable" +; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP +; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90] ; TEMP_01 int -> [ebp-0x94] ; @@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, ecx ; gcrRegs +[ebx] ;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0 jne SHORT G_M18379_IG04 ;; size=6 bbWeight=1 PerfScore 4.00 @@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 xor edi, edi ; byrRegs -[edi] test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50 G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[esi] @@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000 xor eax, eax jmp SHORT G_M18379_IG07 ;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01} mov ecx, esi ; gcrRegs +[ecx] @@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov esi, gword ptr [ebp-0x6C] ; gcrRegs +[esi] ;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01} mov edx, gword ptr [ebx+0x20] ; gcrRegs +[edx] @@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 { mov eax, edx sar eax, 14 cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08] and edx, 0x3FFF cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08] ; byrRegs +[eax] ...

+0 (0.00%) : 20185.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)

@@ -10,14 +10,14 @@ ; ; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x40] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]> ; V01 RetBuf [V01,T16] ( 6, 6 ) byref -> [ebp-0x44] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def ;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]> ;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live ; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x48] do-not-enreg[M] class-hnd EH-live <<unknown class>> ;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax @@ -26,44 +26,44 @@ ;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup" ;* V21 tmp8 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper> ;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]> ;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V28 tmp15 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]> ; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x34] "Inline return value spill temp" ; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]> ;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]> ;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]> ;* V36 tmp23 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V37 tmp24 [V37 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V38 tmp25 [V38,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V38 tmp25 [V38,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V39 tmp26 [V39,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp" ; V40 tmp27 [V40,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp" ; V41 tmp28 [V41,T07] ( 3, 24 ) byref -> edx "dup spill" ;* V42 tmp29 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V43 tmp30 [V43 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V44 tmp31 [V44,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V44 tmp31 [V44,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP ;* V46 tmp33 [V46 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP ;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP
-; V48 tmp35 [V48,T42] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP -; V49 tmp36 [V49,T43] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
+; V48 tmp35 [V48,T40] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP +; V49 tmp36 [V49,T41] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V50 tmp37 [V50 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP ;* V51 tmp38 [V51 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
-;* V52 tmp39 [V52,T47] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP -; V53 tmp40 [V53,T44] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP -; V54 tmp41 [V54,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP -; V55 tmp42 [V55,T45] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+;* V52 tmp39 [V52,T44] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP +; V53 tmp40 [V53,T42] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP +; V54 tmp41 [V54,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP +; V55 tmp42 [V55,T43] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V56 tmp43 [V56 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP ;* V57 tmp44 [V57 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP ;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP @@ -72,27 +72,24 @@ ;* V61 tmp48 [V61 ] ( 0, 0 ) int -> zero-ref single-def "field V37._length (fldOffset=0x4)" P-INDEP ; V62 tmp49 [V62,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)" ; V63 tmp50 [V63,T14] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V06.[004..008)"
-; V64 tmp51 [V64,T36] ( 3, 3 ) byref -> edi "V16.[000..004)" -; V65 tmp52 [V65,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V64 tmp51 [V64,T34] ( 3, 3 ) byref -> edi "V16.[000..004)" +; V65 tmp52 [V65,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V66 tmp53 [V66,T03] ( 2, 32 ) ref -> edx "argument with side effect" ; V67 GsCookie [V67 ] ( 1, 1 ) int -> [ebp-0x4C] do-not-enreg[X] addr-exposed "GSSecurityCookie" ; V68 EHSlots [V68 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V69 LocAllocSP [V69,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V69 LocAllocSP [V69,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V70 cse0 [V70,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V71 cse1 [V71,T39] ( 3, 3 ) int -> eax "CSE - conservative" -; V72 rat0 [V72,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V71 cse1 [V71,T37] ( 3, 3 ) int -> eax "CSE - conservative" +; V72 rat0 [V72,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V73 rat1 [V73,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V74 rat2 [V74,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V74 rat2 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat3 [V75,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat4 [V76,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat4 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat5 [V77,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V78 rat6 [V78,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree" -;* V79 rat7 [V79,T46] ( 0, 0 ) int -> zero-ref "runtime lookup" -;* V80 rat8 [V80,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V81 rat9 [V81,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" -; V82 rat10 [V82,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" -; V83 rat11 [V83,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" -; V84 rat12 [V84,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V78 rat6 [V78,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree" +; V79 rat7 [V79,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable" +; V80 rat8 [V80,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable" +; V81 rat9 [V81,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 68

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.x86.checked.mch 1 1 0 0 -4 +0
benchmarks.run_pgo.windows.x86.checked.mch 2 2 0 0 -17 +0
benchmarks.run_tiered.windows.x86.checked.mch 1 1 0 0 -4 +0
coreclr_tests.run.windows.x86.checked.mch 2 2 0 0 -8 +0
libraries.crossgen2.windows.x86.checked.mch 6 6 0 0 -97 +0
libraries.pmi.windows.x86.checked.mch 26 17 0 9 -192 +0
libraries_tests.run.windows.x86.Release.mch 30 26 0 4 -765 +0
librariestestsnotieredcompilation.run.windows.x86.Release.mch 13 10 0 3 -124 +0
realworld.run.windows.x86.checked.mch 4 3 0 1 -53 +0
85 68 0 17 -1,264 +0

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x86.checked.mch 24,475 4 24,471 13 (0.05%) 13 (0.05%)
benchmarks.run_pgo.windows.x86.checked.mch 119,515 42,004 77,511 348 (0.29%) 348 (0.29%)
benchmarks.run_tiered.windows.x86.checked.mch 47,896 28,726 19,170 11 (0.02%) 11 (0.02%)
coreclr_tests.run.windows.x86.checked.mch 574,836 320,010 254,826 569 (0.10%) 571 (0.10%)
libraries.crossgen2.windows.x86.checked.mch 241,911 15 241,896 16 (0.01%) 16 (0.01%)
libraries.pmi.windows.x86.checked.mch 303,524 6 303,518 707 (0.23%) 708 (0.23%)
libraries_tests.run.windows.x86.Release.mch 632,899 429,177 203,722 2,910 (0.46%) 2,910 (0.46%)
librariestestsnotieredcompilation.run.windows.x86.Release.mch 315,247 21,872 293,375 508 (0.16%) 508 (0.16%)
realworld.run.windows.x86.checked.mch 35,971 3 35,968 11 (0.03%) 11 (0.03%)
2,296,274 841,817 1,454,457 5,093 (0.22%) 5,096 (0.22%)

jit-analyze output

benchmarks.run.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 7107453 (overridden on cmd)
Total bytes of diff: 7107449 (overridden on cmd)
Total bytes of delta: -4 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
          -4 : 18028.dasm (-0.37 % of base)

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

Top method improvements (bytes):
          -4 (-0.37 % of base) : 18028.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)

Top method improvements (percentages):
          -4 (-0.37 % of base) : 18028.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)

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


benchmarks.run_pgo.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 45222512 (overridden on cmd)
Total bytes of diff: 45222495 (overridden on cmd)
Total bytes of delta: -17 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -13 : 12020.dasm (-2.08 % of base)
          -4 : 72723.dasm (-0.37 % of base)

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

Top method improvements (bytes):
         -13 (-2.08 % of base) : 12020.dasm - Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
          -4 (-0.37 % of base) : 72723.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)

Top method improvements (percentages):
         -13 (-2.08 % of base) : 12020.dasm - Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
          -4 (-0.37 % of base) : 72723.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)

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


benchmarks.run_tiered.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 9511426 (overridden on cmd)
Total bytes of diff: 9511422 (overridden on cmd)
Total bytes of delta: -4 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
          -4 : 34115.dasm (-0.37 % of base)

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

Top method improvements (bytes):
          -4 (-0.37 % of base) : 34115.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)

Top method improvements (percentages):
          -4 (-0.37 % of base) : 34115.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)

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


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

Detail diffs



Top file improvements (bytes):
          -4 : 223677.dasm (-0.37 % of base)
          -4 : 476978.dasm (-0.37 % of base)

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

Top method improvements (bytes):
          -4 (-0.37 % of base) : 476978.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
          -4 (-0.37 % of base) : 223677.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)

Top method improvements (percentages):
          -4 (-0.37 % of base) : 476978.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
          -4 (-0.37 % of base) : 223677.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)

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


libraries.crossgen2.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 31628298 (overridden on cmd)
Total bytes of diff: 31628201 (overridden on cmd)
Total bytes of delta: -97 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -20 : 152646.dasm (-1.50 % of base)
         -20 : 76488.dasm (-2.04 % of base)
         -18 : 96225.dasm (-1.10 % of base)
         -15 : 31631.dasm (-0.41 % of base)
         -15 : 154738.dasm (-1.29 % of base)
          -9 : 32127.dasm (-2.91 % of base)

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

Top method improvements (bytes):
         -20 (-2.04 % of base) : 76488.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
         -20 (-1.50 % of base) : 152646.dasm - System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
         -18 (-1.10 % of base) : 96225.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
         -15 (-0.41 % of base) : 31631.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
         -15 (-1.29 % of base) : 154738.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
          -9 (-2.91 % of base) : 32127.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)

Top method improvements (percentages):
          -9 (-2.91 % of base) : 32127.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
         -20 (-2.04 % of base) : 76488.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
         -20 (-1.50 % of base) : 152646.dasm - System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
         -15 (-1.29 % of base) : 154738.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
         -18 (-1.10 % of base) : 96225.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
         -15 (-0.41 % of base) : 31631.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)

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


libraries.pmi.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 48827232 (overridden on cmd)
Total bytes of diff: 48827040 (overridden on cmd)
Total bytes of delta: -192 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -27 : 79515.dasm (-2.20 % of base)
         -23 : 70069.dasm (-0.50 % of base)
         -19 : 101930.dasm (-0.69 % of base)
         -18 : 123025.dasm (-3.06 % of base)
         -18 : 170847.dasm (-3.06 % of base)
         -11 : 192539.dasm (-0.93 % of base)
          -8 : 221414.dasm (-0.57 % of base)
          -8 : 276481.dasm (-0.57 % of base)
          -8 : 276482.dasm (-0.46 % of base)
          -8 : 221415.dasm (-0.45 % of base)
          -8 : 239851.dasm (-0.30 % of base)
          -7 : 269944.dasm (-1.07 % of base)
          -7 : 86094.dasm (-0.25 % of base)
          -7 : 86097.dasm (-0.17 % of base)
          -7 : 102209.dasm (-0.19 % of base)
          -4 : 168768.dasm (-0.37 % of base)
          -4 : 120953.dasm (-0.37 % of base)

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

Top method improvements (bytes):
         -27 (-2.20 % of base) : 79515.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
         -23 (-0.50 % of base) : 70069.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
         -19 (-0.69 % of base) : 101930.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
         -18 (-3.06 % of base) : 123025.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -18 (-3.06 % of base) : 170847.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -11 (-0.93 % of base) : 192539.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
          -8 (-0.30 % of base) : 239851.dasm - System.Data.Odbc.OdbcDataReader:BuildMetaDataInfo():this (FullOpts)
          -8 (-0.57 % of base) : 221414.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
          -8 (-0.57 % of base) : 276481.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
          -8 (-0.46 % of base) : 276482.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
          -8 (-0.45 % of base) : 221415.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
          -7 (-0.17 % of base) : 86097.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)
          -7 (-0.25 % of base) : 86094.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
          -7 (-0.19 % of base) : 102209.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
          -7 (-1.07 % of base) : 269944.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
          -4 (-0.37 % of base) : 168768.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
          -4 (-0.37 % of base) : 120953.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)

Top method improvements (percentages):
         -18 (-3.06 % of base) : 123025.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -18 (-3.06 % of base) : 170847.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -27 (-2.20 % of base) : 79515.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
          -7 (-1.07 % of base) : 269944.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -11 (-0.93 % of base) : 192539.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
         -19 (-0.69 % of base) : 101930.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
          -8 (-0.57 % of base) : 276481.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
          -8 (-0.57 % of base) : 221414.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -23 (-0.50 % of base) : 70069.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
          -8 (-0.46 % of base) : 276482.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
          -8 (-0.45 % of base) : 221415.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
          -4 (-0.37 % of base) : 168768.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
          -4 (-0.37 % of base) : 120953.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
          -8 (-0.30 % of base) : 239851.dasm - System.Data.Odbc.OdbcDataReader:BuildMetaDataInfo():this (FullOpts)
          -7 (-0.25 % of base) : 86094.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
          -7 (-0.19 % of base) : 102209.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
          -7 (-0.17 % of base) : 86097.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)

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


libraries_tests.run.windows.x86.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 185843933 (overridden on cmd)
Total bytes of diff: 185843168 (overridden on cmd)
Total bytes of delta: -765 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -50 : 327043.dasm (-2.25 % of base)
         -50 : 381338.dasm (-2.25 % of base)
         -50 : 628116.dasm (-2.25 % of base)
         -50 : 118265.dasm (-2.24 % of base)
         -44 : 508316.dasm (-1.91 % of base)
         -42 : 217641.dasm (-1.82 % of base)
         -41 : 237144.dasm (-1.72 % of base)
         -41 : 246616.dasm (-1.72 % of base)
         -37 : 275642.dasm (-1.63 % of base)
         -35 : 338778.dasm (-1.54 % of base)
         -35 : 483381.dasm (-1.55 % of base)
         -31 : 448915.dasm (-1.38 % of base)
         -31 : 305295.dasm (-1.38 % of base)
         -31 : 171359.dasm (-1.38 % of base)
         -31 : 317857.dasm (-1.39 % of base)
         -31 : 349418.dasm (-1.38 % of base)
         -28 : 625967.dasm (-1.34 % of base)
         -23 : 236905.dasm (-0.50 % of base)
         -18 : 12328.dasm (-3.06 % of base)
         -15 : 237079.dasm (-4.02 % of base)

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

Top method improvements (bytes):
         -50 (-2.25 % of base) : 327043.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -50 (-2.25 % of base) : 381338.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -50 (-2.25 % of base) : 628116.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -50 (-2.24 % of base) : 118265.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -44 (-1.91 % of base) : 508316.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -42 (-1.82 % of base) : 217641.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -41 (-1.72 % of base) : 237144.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -41 (-1.72 % of base) : 246616.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -37 (-1.63 % of base) : 275642.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -35 (-1.54 % of base) : 338778.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -35 (-1.55 % of base) : 483381.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 448915.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 305295.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 171359.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.39 % of base) : 317857.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 349418.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -28 (-1.34 % of base) : 625967.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (Tier0-FullOpts)
         -23 (-0.50 % of base) : 236905.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (Tier0-FullOpts)
         -18 (-3.06 % of base) : 12328.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
         -15 (-4.02 % of base) : 237079.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)

Top method improvements (percentages):
         -15 (-4.02 % of base) : 237079.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
         -18 (-3.06 % of base) : 12328.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
         -14 (-2.37 % of base) : 103485.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (Tier0-FullOpts)
         -50 (-2.25 % of base) : 628116.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -50 (-2.25 % of base) : 327043.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -50 (-2.25 % of base) : 381338.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -50 (-2.24 % of base) : 118265.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -44 (-1.91 % of base) : 508316.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -42 (-1.82 % of base) : 217641.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -41 (-1.72 % of base) : 237144.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -41 (-1.72 % of base) : 246616.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -37 (-1.63 % of base) : 275642.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -35 (-1.55 % of base) : 483381.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -35 (-1.54 % of base) : 338778.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.39 % of base) : 317857.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 448915.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 171359.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 305295.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -31 (-1.38 % of base) : 349418.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
         -28 (-1.34 % of base) : 625967.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (Tier0-FullOpts)

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


librariestestsnotieredcompilation.run.windows.x86.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 102198175 (overridden on cmd)
Total bytes of diff: 102198051 (overridden on cmd)
Total bytes of delta: -124 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -23 : 99271.dasm (-0.50 % of base)
         -18 : 6265.dasm (-3.06 % of base)
         -17 : 311445.dasm (-0.75 % of base)
         -15 : 99311.dasm (-4.02 % of base)
         -14 : 34735.dasm (-2.37 % of base)
         -11 : 62896.dasm (-0.93 % of base)
          -8 : 185203.dasm (-0.57 % of base)
          -7 : 157676.dasm (-1.12 % of base)
          -7 : 160975.dasm (-1.11 % of base)
          -4 : 4863.dasm (-0.37 % of base)

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

Top method improvements (bytes):
         -23 (-0.50 % of base) : 99271.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
         -18 (-3.06 % of base) : 6265.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -17 (-0.75 % of base) : 311445.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (FullOpts)
         -15 (-4.02 % of base) : 99311.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
         -14 (-2.37 % of base) : 34735.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
         -11 (-0.93 % of base) : 62896.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
          -8 (-0.57 % of base) : 185203.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
          -7 (-1.12 % of base) : 157676.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
          -7 (-1.11 % of base) : 160975.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
          -4 (-0.37 % of base) : 4863.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)

Top method improvements (percentages):
         -15 (-4.02 % of base) : 99311.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
         -18 (-3.06 % of base) : 6265.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
         -14 (-2.37 % of base) : 34735.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
          -7 (-1.12 % of base) : 157676.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
          -7 (-1.11 % of base) : 160975.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
         -11 (-0.93 % of base) : 62896.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
         -17 (-0.75 % of base) : 311445.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (FullOpts)
          -8 (-0.57 % of base) : 185203.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
         -23 (-0.50 % of base) : 99271.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
          -4 (-0.37 % of base) : 4863.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)

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


realworld.run.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 11363356 (overridden on cmd)
Total bytes of diff: 11363303 (overridden on cmd)
Total bytes of delta: -53 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -32 : 15279.dasm (-0.43 % of base)
         -17 : 34093.dasm (-0.39 % of base)
          -4 : 20024.dasm (-0.37 % of base)

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

Top method improvements (bytes):
         -32 (-0.43 % of base) : 15279.dasm - Microsoft.ML.Transforms.Text.TextFeaturizingEstimator:Fit(Microsoft.ML.IDataView):Microsoft.ML.ITransformer:this (FullOpts)
         -17 (-0.39 % of base) : 34093.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
          -4 (-0.37 % of base) : 20024.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)

Top method improvements (percentages):
         -32 (-0.43 % of base) : 15279.dasm - Microsoft.ML.Transforms.Text.TextFeaturizingEstimator:Fit(Microsoft.ML.IDataView):Microsoft.ML.ITransformer:this (FullOpts)
         -17 (-0.39 % of base) : 34093.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
          -4 (-0.37 % of base) : 20024.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)

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