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