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.KeyValuePair
2[System.Canon,System.Canon]]:IndexOf(System.Collections.Generic.KeyValuePair2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer
1[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.KeyValuePair
2[System.Canon,System.Canon]]:IndexOf(System.Collections.Generic.KeyValuePair2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer
1[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.RetrievableEntryHashSet
1[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.RetrievableEntryHashSet
1[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+Graph
1+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+Graph
1+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.Dictionary
2[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.ImmutableArray
1[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.Nullable
1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary2[System.__Canon,System.Nullable
1[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.Nullable
1[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.SmallDictionary
2[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.ValueTuple
2[System.Canon,int]]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.ValueTuple
2[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.IEnumerable
1[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.SmallDictionary
2[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.IEnumerable
1[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.SmallDictionary
2[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.KeyValuePair
2[System.Canon,System.Canon]]:IndexOf(System.Collections.Generic.KeyValuePair2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer
1[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.IEnumerable
1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)
@@ -17,7 +17,7 @@
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
; V07 loc3 [V07,T14] ( 4, 5 ) int -> [r11-0x28]
; V08 loc4 [V08,T15] ( 4, 5 ) int -> [r11-0x2C]
-; V09 loc5 [V09,T36] ( 3, 1.50) int -> r6
+; V09 loc5 [V09,T34] ( 3, 1.50) int -> r6
; V10 loc6 [V10,T07] ( 13, 11.50) ref -> [r11-0x38] do-not-enreg[M] class-hnd EH-live <<unknown class>>
;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
; V12 loc8 [V12,T05] ( 5, 14 ) int -> r4
@@ -40,31 +40,31 @@
;* V29 tmp16 [V29 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
; V30 tmp17 [V30,T18] ( 8, 4 ) int -> r8 "Inline return value spill temp"
; V31 tmp18 [V31,T23] ( 3, 3 ) int -> r0 "Inlining Arg"
-; V32 tmp19 [V32,T32] ( 2, 2 ) int -> r3 "Inlining Arg"
+; V32 tmp19 [V32,T30] ( 2, 2 ) int -> r3 "Inlining Arg"
; V33 tmp20 [V33,T22] ( 3, 3 ) ref -> r0 class-hnd exact single-def "Inlining Arg" <int[]>
;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V36 tmp23 [V36 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V37 tmp24 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V38 tmp25 [V38 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V39 tmp26 [V39,T33] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V39 tmp26 [V39,T31] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V40 tmp27 [V40,T10] ( 3, 6 ) int -> r0 "Inline stloc first use temp"
; V41 tmp28 [V41,T11] ( 3, 6 ) int -> r7 "Inline stloc first use temp"
; V42 tmp29 [V42,T06] ( 3, 12 ) byref -> r7 "dup spill"
;* V43 tmp30 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V44 tmp31 [V44 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V45 tmp32 [V45,T34] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+; V45 tmp32 [V45,T32] ( 3, 1.50) byref -> [r11-0x3C] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP
;* V46 tmp33 [V46 ] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x4)" P-INDEP
;* V47 tmp34 [V47 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP
;* V48 tmp35 [V48 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x4)" P-INDEP
-; V49 tmp36 [V49,T39] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP
-; V50 tmp37 [V50,T40] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
+; V49 tmp36 [V49,T37] ( 2, 1 ) int -> r7 single-def "field V22.Item1 (fldOffset=0x0)" P-INDEP
+; V50 tmp37 [V50,T38] ( 2, 1 ) int -> r6 single-def "field V22.Item2 (fldOffset=0x4)" P-INDEP
;* V51 tmp38 [V51 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP
;* V52 tmp39 [V52 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x4)" P-INDEP
-;* V53 tmp40 [V53,T45] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP
-; V54 tmp41 [V54,T41] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP
-; V55 tmp42 [V55,T38] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP
-; V56 tmp43 [V56,T42] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
+;* V53 tmp40 [V53,T42] ( 0, 0 ) int -> zero-ref single-def "field V29.Item1 (fldOffset=0x0)" P-INDEP
+; V54 tmp41 [V54,T39] ( 2, 1 ) int -> r6 single-def "field V29.Item2 (fldOffset=0x4)" P-INDEP
+; V55 tmp42 [V55,T36] ( 2, 1 ) byref -> r8 "field V34._reference (fldOffset=0x0)" P-INDEP
+; V56 tmp43 [V56,T40] ( 2, 1 ) int -> r3 "field V34._length (fldOffset=0x4)" P-INDEP
;* V57 tmp44 [V57 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
;* V58 tmp45 [V58 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x4)" P-INDEP
;* V59 tmp46 [V59 ] ( 0, 0 ) byref -> zero-ref single-def "field V36._reference (fldOffset=0x0)" P-INDEP
@@ -73,23 +73,20 @@
;* V62 tmp49 [V62 ] ( 0, 0 ) int -> zero-ref single-def "field V38._length (fldOffset=0x4)" P-INDEP
; V63 tmp50 [V63,T16] ( 3, 4.50) byref -> r8 single-def "V06.[000..004)"
; V64 tmp51 [V64,T17] ( 3, 4.50) int -> [r11-0x30] spill-single-def "V06.[004..008)"
-; V65 tmp52 [V65,T35] ( 3, 1.50) byref -> registers "V17.[000..004)"
-; V66 tmp53 [V66,T37] ( 3, 1.50) int -> registers "V17.[004..008)"
+; V65 tmp52 [V65,T33] ( 3, 1.50) byref -> registers "V17.[000..004)"
+; V66 tmp53 [V66,T35] ( 3, 1.50) int -> registers "V17.[004..008)"
; V67 tmp54 [V67,T03] ( 2, 16 ) ref -> r1 "argument with side effect"
; V68 GsCookie [V68 ] ( 1, 1 ) int -> [r11-0x40] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V69 PSPSym [V69,T44] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
+; V69 PSPSym [V69,T41] ( 1, 1 ) int -> [r11-0x20] do-not-enreg[V] "PSPSym"
; V70 cse0 [V70,T12] ( 3, 6 ) int -> r7 "CSE - aggressive"
-; V71 rat0 [V71,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V71 rat0 [V71,T27] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V72 rat1 [V72,T24] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V73 rat2 [V73,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V73 rat2 [V73,T28] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V74 rat3 [V74,T25] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-; V75 rat4 [V75,T30] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
+; V75 rat4 [V75,T29] ( 3, 2.20) int -> r0 "Spilling to split statement for tree"
; V76 rat5 [V76,T26] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
-;* V77 rat6 [V77,T31] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V78 rat7 [V78,T43] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V79 rat8 [V79,T27] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V80 rat9 [V80,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree"
-; V81 rat10 [V81,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
+; V77 rat6 [V77,T02] ( 3, 17.60) int -> r0 "Spilling to split statement for tree"
+; V78 rat7 [V78,T01] ( 3, 22.40) int -> r1 "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [r11-0x44]
;
; Lcl frame size = 44
@@ -272,10 +269,10 @@ G_M62176_IG16: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r
ldr r3, [r0+0x04]
b SHORT G_M62176_IG20
;; size=48 bbWeight=0.50 PerfScore 8.50
-G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000400000010 {V00 V45}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
+G_M62176_IG17: ; bbWeight=0.50, gcVars=0000000100000010 {V00 V45}, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, gcvars, byref, isz
; gcrRegs -[r0]
; byrRegs -[r8]
- ; GC ptr vars +{V45}
+ ; GC ptr vars +{V32 V45}
cmp r8, 100
bhi G_M62176_IG37
cmp r8, 0
@@ -309,7 +306,7 @@ G_M62176_IG19: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r
;; size=40 bbWeight=0.50 PerfScore 6.50
G_M62176_IG20: ; bbWeight=0.50, gcVars=0000000000000010 {V00}, gcrefRegs=0090 {r4 r7}, byrefRegs=0120 {r5 r8}, gcvars, byref, isz
; byrRegs -[r0]
- ; GC ptr vars -{V45}
+ ; GC ptr vars -{V32 V45}
str r3, [r9+0x18] // [V64 tmp51]
movs r2, 0
str r2, [r9+0x20] // [V07 loc3]
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.linux.arm.checked.mch |
3 |
2 |
0 |
1 |
-16 |
+0 |
benchmarks.run_pgo.linux.arm.checked.mch |
2 |
1 |
0 |
1 |
-4 |
+0 |
benchmarks.run_tiered.linux.arm.checked.mch |
3 |
2 |
0 |
1 |
-16 |
+0 |
coreclr_tests.run.linux.arm.checked.mch |
6 |
4 |
0 |
2 |
-56 |
+0 |
libraries.crossgen2.linux.arm.checked.mch |
9 |
9 |
0 |
0 |
-104 |
+0 |
libraries.pmi.linux.arm.checked.mch |
26 |
19 |
0 |
7 |
-214 |
+0 |
libraries_tests.run.linux.arm.Release.mch |
17 |
12 |
0 |
5 |
-140 |
+0 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
17 |
13 |
0 |
4 |
-150 |
+0 |
realworld.run.linux.arm.checked.mch |
4 |
2 |
0 |
2 |
-24 |
+0 |
|
87 |
64 |
0 |
23 |
-724 |
+0 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.linux.arm.checked.mch |
46,284 |
5,344 |
40,940 |
1,208 (2.54%) |
1,208 (2.54%) |
benchmarks.run_pgo.linux.arm.checked.mch |
155,310 |
54,949 |
100,361 |
3,309 (2.09%) |
3,309 (2.09%) |
benchmarks.run_tiered.linux.arm.checked.mch |
81,826 |
45,099 |
36,727 |
1,122 (1.35%) |
1,122 (1.35%) |
coreclr_tests.run.linux.arm.checked.mch |
471,777 |
258,996 |
212,781 |
7,543 (1.57%) |
7,543 (1.57%) |
libraries.crossgen2.linux.arm.checked.mch |
193,690 |
14 |
193,676 |
0 (0.00%) |
0 (0.00%) |
libraries.pmi.linux.arm.checked.mch |
270,798 |
6 |
270,792 |
7,827 (2.81%) |
7,827 (2.81%) |
libraries_tests.run.linux.arm.Release.mch |
707,758 |
441,682 |
266,076 |
18,888 (2.60%) |
18,888 (2.60%) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
273,849 |
21,565 |
252,284 |
33,279 (10.84%) |
33,279 (10.84%) |
realworld.run.linux.arm.checked.mch |
36,398 |
157 |
36,241 |
1,412 (3.73%) |
1,412 (3.73%) |
|
2,237,690 |
827,812 |
1,409,878 |
74,588 (3.23%) |
74,588 (3.23%) |
jit-analyze output
benchmarks.run.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 15303134 (overridden on cmd)
Total bytes of diff: 15303118 (overridden on cmd)
Total bytes of delta: -16 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-12 : 20211.dasm (-2.06 % of base)
-4 : 14561.dasm (-0.18 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 1 unchanged.
Top method improvements (bytes):
-12 (-2.06 % of base) : 20211.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
-4 (-0.18 % of base) : 14561.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (FullOpts)
Top method improvements (percentages):
-12 (-2.06 % of base) : 20211.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
-4 (-0.18 % of base) : 14561.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (FullOpts)
2 total methods with Code Size differences (2 improved, 0 regressed).
benchmarks.run_pgo.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 61262128 (overridden on cmd)
Total bytes of diff: 61262124 (overridden on cmd)
Total bytes of delta: -4 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-4 : 48266.dasm (-0.18 % of base)
1 total files with Code Size differences (1 improved, 0 regressed), 1 unchanged.
Top method improvements (bytes):
-4 (-0.18 % of base) : 48266.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
Top method improvements (percentages):
-4 (-0.18 % of base) : 48266.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
1 total methods with Code Size differences (1 improved, 0 regressed).
benchmarks.run_tiered.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 22643448 (overridden on cmd)
Total bytes of diff: 22643432 (overridden on cmd)
Total bytes of delta: -16 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-12 : 40178.dasm (-2.06 % of base)
-4 : 32299.dasm (-0.18 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 1 unchanged.
Top method improvements (bytes):
-12 (-2.06 % of base) : 40178.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
-4 (-0.18 % of base) : 32299.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
Top method improvements (percentages):
-12 (-2.06 % of base) : 40178.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
-4 (-0.18 % of base) : 32299.dasm - System.Linq.Tests.PersonData:Generate(int):System.Linq.Tests.Person[] (Tier0-FullOpts)
2 total methods with Code Size differences (2 improved, 0 regressed).
coreclr_tests.run.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 321791116 (overridden on cmd)
Total bytes of diff: 321791060 (overridden on cmd)
Total bytes of delta: -56 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-20 : 463304.dasm (-2.83 % of base)
-12 : 272471.dasm (-1.72 % of base)
-12 : 305606.dasm (-3.92 % of base)
-12 : 477079.dasm (-3.92 % of base)
4 total files with Code Size differences (4 improved, 0 regressed), 2 unchanged.
Top method improvements (bytes):
-20 (-2.83 % of base) : 463304.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
-12 (-1.72 % of base) : 272471.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (Tier0-FullOpts)
-12 (-3.92 % of base) : 477079.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (FullOpts)
-12 (-3.92 % of base) : 305606.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (Tier0-FullOpts)
Top method improvements (percentages):
-12 (-3.92 % of base) : 477079.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (FullOpts)
-12 (-3.92 % of base) : 305606.dasm - Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]:EntriesAreReferenceEquals(Microsoft.Build.Collections.RetrievableEntryHashSet`1[System.__Canon]):ubyte:this (Tier0-FullOpts)
-20 (-2.83 % of base) : 463304.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
-12 (-1.72 % of base) : 272471.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (Tier0-FullOpts)
4 total methods with Code Size differences (4 improved, 0 regressed).
libraries.crossgen2.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 35175262 (overridden on cmd)
Total bytes of diff: 35175158 (overridden on cmd)
Total bytes of delta: -104 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-22 : 59013.dasm (-0.39 % of base)
-12 : 165962.dasm (-0.54 % of base)
-12 : 173422.dasm (-0.53 % of base)
-10 : 115121.dasm (-0.32 % of base)
-10 : 59508.dasm (-3.14 % of base)
-10 : 95402.dasm (-0.71 % of base)
-10 : 165961.dasm (-0.58 % of base)
-10 : 173421.dasm (-0.57 % of base)
-8 : 114850.dasm (-0.36 % of base)
9 total files with Code Size differences (9 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-22 (-0.39 % of base) : 59013.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
-12 (-0.54 % of base) : 165962.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-12 (-0.53 % of base) : 173422.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-10 (-0.71 % of base) : 95402.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
-10 (-0.32 % of base) : 115121.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
-10 (-3.14 % of base) : 59508.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
-10 (-0.58 % of base) : 165961.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-0.57 % of base) : 173421.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-8 (-0.36 % of base) : 114850.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
Top method improvements (percentages):
-10 (-3.14 % of base) : 59508.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
-10 (-0.71 % of base) : 95402.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
-10 (-0.58 % of base) : 165961.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-0.57 % of base) : 173421.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-12 (-0.54 % of base) : 165962.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-12 (-0.53 % of base) : 173422.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-22 (-0.39 % of base) : 59013.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
-8 (-0.36 % of base) : 114850.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
-10 (-0.32 % of base) : 115121.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
9 total methods with Code Size differences (9 improved, 0 regressed).
libraries.pmi.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 49615946 (overridden on cmd)
Total bytes of diff: 49615732 (overridden on cmd)
Total bytes of delta: -214 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-14 : 14560.dasm (-2.07 % of base)
-14 : 195917.dasm (-2.01 % of base)
-14 : 199634.dasm (-2.36 % of base)
-14 : 198488.dasm (-2.24 % of base)
-12 : 129751.dasm (-4.05 % of base)
-12 : 198483.dasm (-2.09 % of base)
-12 : 197294.dasm (-1.51 % of base)
-12 : 142318.dasm (-1.82 % of base)
-12 : 197108.dasm (-1.51 % of base)
-10 : 228808.dasm (-0.55 % of base)
-10 : 235457.dasm (-0.65 % of base)
-10 : 104278.dasm (-0.29 % of base)
-10 : 187304.dasm (-1.19 % of base)
-10 : 228807.dasm (-0.66 % of base)
-10 : 120281.dasm (-0.24 % of base)
-10 : 159012.dasm (-0.62 % of base)
-10 : 235458.dasm (-0.54 % of base)
-10 : 104281.dasm (-0.23 % of base)
-8 : 120002.dasm (-0.23 % of base)
19 total files with Code Size differences (19 improved, 0 regressed), 7 unchanged.
Top method improvements (bytes):
-14 (-2.07 % of base) : 14560.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
-14 (-2.01 % of base) : 195917.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-14 (-2.24 % of base) : 198488.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
-14 (-2.36 % of base) : 199634.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
-12 (-1.82 % of base) : 142318.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-12 (-4.05 % of base) : 129751.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
-12 (-1.51 % of base) : 197108.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-1.51 % of base) : 197294.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-2.09 % of base) : 198483.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
-10 (-0.23 % of base) : 104281.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)
-10 (-0.29 % of base) : 104278.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
-10 (-0.24 % of base) : 120281.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
-10 (-0.65 % of base) : 235457.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-0.66 % of base) : 228807.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-0.55 % of base) : 228808.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-10 (-0.54 % of base) : 235458.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-10 (-1.19 % of base) : 187304.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-10 (-0.62 % of base) : 159012.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-8 (-0.23 % of base) : 120002.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
Top method improvements (percentages):
-12 (-4.05 % of base) : 129751.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
-14 (-2.36 % of base) : 199634.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
-14 (-2.24 % of base) : 198488.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
-12 (-2.09 % of base) : 198483.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
-14 (-2.07 % of base) : 14560.dasm - ILCompiler.LazyGenericsSupport+Graph`1+TarjanWorkerClass[System.__Canon]:StrongConnectIterative(ILCompiler.LazyGenericsSupport+Graph`1+Vertex[System.__Canon]):this (FullOpts)
-14 (-2.01 % of base) : 195917.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-1.82 % of base) : 142318.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-12 (-1.51 % of base) : 197108.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-1.51 % of base) : 197294.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-10 (-1.19 % of base) : 187304.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-10 (-0.66 % of base) : 228807.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-0.65 % of base) : 235457.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-0.62 % of base) : 159012.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-10 (-0.55 % of base) : 228808.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-10 (-0.54 % of base) : 235458.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-10 (-0.29 % of base) : 104278.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
-10 (-0.24 % of base) : 120281.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
-10 (-0.23 % of base) : 104281.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)
-8 (-0.23 % of base) : 120002.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
19 total methods with Code Size differences (19 improved, 0 regressed).
libraries_tests.run.linux.arm.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 242762120 (overridden on cmd)
Total bytes of diff: 242761980 (overridden on cmd)
Total bytes of delta: -140 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-14 : 213941.dasm (-2.36 % of base)
-14 : 207856.dasm (-2.01 % of base)
-12 : 89376.dasm (-3.82 % of base)
-12 : 216066.dasm (-1.56 % of base)
-12 : 18799.dasm (-1.81 % of base)
-12 : 206686.dasm (-2.09 % of base)
-12 : 75890.dasm (-2.06 % of base)
-12 : 216395.dasm (-1.56 % of base)
-10 : 268701.dasm (-2.99 % of base)
-10 : 388457.dasm (-1.25 % of base)
-10 : 464372.dasm (-0.66 % of base)
-10 : 428642.dasm (-0.62 % of base)
12 total files with Code Size differences (12 improved, 0 regressed), 5 unchanged.
Top method improvements (bytes):
-14 (-2.01 % of base) : 207856.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
-14 (-2.36 % of base) : 213941.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (Tier0-FullOpts)
-12 (-1.81 % of base) : 18799.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
-12 (-3.82 % of base) : 89376.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (Tier0-FullOpts)
-12 (-1.56 % of base) : 216395.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
-12 (-1.56 % of base) : 216066.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
-12 (-2.09 % of base) : 206686.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (Tier0-FullOpts)
-12 (-2.06 % of base) : 75890.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
-10 (-2.99 % of base) : 268701.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
-10 (-0.66 % of base) : 464372.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier0-FullOpts)
-10 (-1.25 % of base) : 388457.dasm - System.Net.Cookie:set_Port(System.String):this (Tier0-FullOpts)
-10 (-0.62 % of base) : 428642.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (Tier0-FullOpts)
Top method improvements (percentages):
-12 (-3.82 % of base) : 89376.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (Tier0-FullOpts)
-10 (-2.99 % of base) : 268701.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
-14 (-2.36 % of base) : 213941.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (Tier0-FullOpts)
-12 (-2.09 % of base) : 206686.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (Tier0-FullOpts)
-12 (-2.06 % of base) : 75890.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (Tier0-FullOpts)
-14 (-2.01 % of base) : 207856.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
-12 (-1.81 % of base) : 18799.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
-12 (-1.56 % of base) : 216395.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
-12 (-1.56 % of base) : 216066.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (Tier0-FullOpts)
-10 (-1.25 % of base) : 388457.dasm - System.Net.Cookie:set_Port(System.String):this (Tier0-FullOpts)
-10 (-0.66 % of base) : 464372.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier0-FullOpts)
-10 (-0.62 % of base) : 428642.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (Tier0-FullOpts)
12 total methods with Code Size differences (12 improved, 0 regressed).
librariestestsnotieredcompilation.run.linux.arm.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 93201612 (overridden on cmd)
Total bytes of diff: 93201462 (overridden on cmd)
Total bytes of delta: -150 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-14 : 67980.dasm (-2.36 % of base)
-14 : 71158.dasm (-2.01 % of base)
-12 : 19644.dasm (-2.06 % of base)
-12 : 23908.dasm (-3.82 % of base)
-12 : 69298.dasm (-1.54 % of base)
-12 : 5702.dasm (-1.82 % of base)
-12 : 67643.dasm (-2.09 % of base)
-12 : 70913.dasm (-1.54 % of base)
-10 : 180560.dasm (-0.66 % of base)
-10 : 149411.dasm (-1.26 % of base)
-10 : 152547.dasm (-1.25 % of base)
-10 : 164647.dasm (-0.62 % of base)
-10 : 96743.dasm (-2.99 % of base)
13 total files with Code Size differences (13 improved, 0 regressed), 4 unchanged.
Top method improvements (bytes):
-14 (-2.01 % of base) : 71158.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-14 (-2.36 % of base) : 67980.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
-12 (-1.82 % of base) : 5702.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-12 (-3.82 % of base) : 23908.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
-12 (-1.54 % of base) : 69298.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-1.54 % of base) : 70913.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-2.09 % of base) : 67643.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
-12 (-2.06 % of base) : 19644.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
-10 (-2.99 % of base) : 96743.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
-10 (-0.66 % of base) : 180560.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-1.26 % of base) : 149411.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-10 (-1.25 % of base) : 152547.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-10 (-0.62 % of base) : 164647.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
Top method improvements (percentages):
-12 (-3.82 % of base) : 23908.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
-10 (-2.99 % of base) : 96743.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
-14 (-2.36 % of base) : 67980.dasm - System.Collections.Immutable.ImmutableSortedSet`1+Node[System.__Canon]:CopyTo(System.Array,int):this (FullOpts)
-12 (-2.09 % of base) : 67643.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.__Canon]:IndexOf(System.__Canon,int,int,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int:this (FullOpts)
-12 (-2.06 % of base) : 19644.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
-14 (-2.01 % of base) : 71158.dasm - System.Collections.Immutable.ImmutableHashSet`1[System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-1.82 % of base) : 5702.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-12 (-1.54 % of base) : 69298.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-12 (-1.54 % of base) : 70913.dasm - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
-10 (-1.26 % of base) : 149411.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-10 (-1.25 % of base) : 152547.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-10 (-0.66 % of base) : 180560.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-10 (-0.62 % of base) : 164647.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
13 total methods with Code Size differences (13 improved, 0 regressed).
realworld.run.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 13613446 (overridden on cmd)
Total bytes of diff: 13613422 (overridden on cmd)
Total bytes of delta: -24 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-12 : 29208.dasm (-3.82 % of base)
-12 : 29879.dasm (-2.06 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 2 unchanged.
Top method improvements (bytes):
-12 (-3.82 % of base) : 29208.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
-12 (-2.06 % of base) : 29879.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
Top method improvements (percentages):
-12 (-3.82 % of base) : 29208.dasm - Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:.ctor(Microsoft.CodeAnalysis.SmallDictionary`2[System.__Canon,Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):this (FullOpts)
-12 (-2.06 % of base) : 29879.dasm - System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:IndexOf(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int,int,System.Collections.Generic.IEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):int:this (FullOpts)
2 total methods with Code Size differences (2 improved, 0 regressed).
windows x86
Diffs are based on 2,296,274 contexts (841,817 MinOpts, 1,454,457 FullOpts).
MISSED contexts: base: 5,093 (0.22%), diff: 5,096 (0.22%)
Overall (-1,264 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run.windows.x86.checked.mch |
7,107,453 |
-4 |
benchmarks.run_pgo.windows.x86.checked.mch |
45,222,512 |
-17 |
benchmarks.run_tiered.windows.x86.checked.mch |
9,511,426 |
-4 |
coreclr_tests.run.windows.x86.checked.mch |
309,179,129 |
-8 |
libraries.crossgen2.windows.x86.checked.mch |
31,628,298 |
-97 |
libraries.pmi.windows.x86.checked.mch |
48,827,232 |
-192 |
libraries_tests.run.windows.x86.Release.mch |
185,843,933 |
-765 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
102,198,175 |
-124 |
realworld.run.windows.x86.checked.mch |
11,363,356 |
-53 |
FullOpts (-1,264 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run.windows.x86.checked.mch |
7,107,174 |
-4 |
benchmarks.run_pgo.windows.x86.checked.mch |
38,593,022 |
-17 |
benchmarks.run_tiered.windows.x86.checked.mch |
5,241,617 |
-4 |
coreclr_tests.run.windows.x86.checked.mch |
107,507,360 |
-8 |
libraries.crossgen2.windows.x86.checked.mch |
31,627,241 |
-97 |
libraries.pmi.windows.x86.checked.mch |
48,731,918 |
-192 |
libraries_tests.run.windows.x86.Release.mch |
87,512,426 |
-765 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
93,528,383 |
-124 |
realworld.run.windows.x86.checked.mch |
11,067,656 |
-53 |
Example diffs
benchmarks.run.windows.x86.checked.mch
-4 (-0.37%) : 18028.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)
@@ -10,7 +10,7 @@
;
; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]>
; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>>
; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18]
@@ -23,10 +23,10 @@
; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi
; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24]
; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
-; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
+; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -34,8 +34,8 @@
;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall"
-; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -47,9 +47,9 @@
; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -57,9 +57,9 @@
; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -67,83 +67,77 @@
; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP
; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
-; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
-; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
-; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
-; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
-; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
+; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
+; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
+; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
+; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
+; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr"
; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr"
; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr"
; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr"
; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect"
; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr"
; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect"
-; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative"
-; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative"
-; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
-; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect"
+; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative"
+; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative"
+; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
+; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup"
-; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
-;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup"
-; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
-; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
-;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup"
-; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
-; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP
-; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP
-; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP
-; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP
-; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
-; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP
-; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP
-; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP
-; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP
-; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP
-; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP
-; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP
-; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup"
+; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
+;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup"
+; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
+; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
+;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup"
+; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
+; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP
+; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP
+; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP
+; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP
+; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP
+; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP
+; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP
+; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP
+; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP
+; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP
+; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP
+; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90]
; TEMP_01 int -> [ebp-0x94]
;
@@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebx, ecx
; gcrRegs +[ebx]
;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0
jne SHORT G_M18379_IG04
;; size=6 bbWeight=1 PerfScore 4.00
@@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
xor edi, edi
; byrRegs -[edi]
test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50
G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
@@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000
xor eax, eax
jmp SHORT G_M18379_IG07
;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01}
mov ecx, esi
; gcrRegs +[ecx]
@@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov esi, gword ptr [ebp-0x6C]
; gcrRegs +[esi]
;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01}
mov edx, gword ptr [ebx+0x20]
; gcrRegs +[edx]
@@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov eax, edx
sar eax, 14
cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08]
and edx, 0x3FFF
cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08]
; byrRegs +[eax]
...
benchmarks.run_pgo.windows.x86.checked.mch
-13 (-2.08%) : 12020.dasm - Microsoft.Extensions.Options.OptionsFactory`1[System.Canon]:Create(System.String):System.Canon:this (Tier0-FullOpts)
@@ -8,7 +8,7 @@
; 5 inlinees with PGO data; 11 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 15, 18 ) ref -> edi this class-hnd single-def <Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]>
+; V00 this [V00,T02] ( 14, 17 ) ref -> edi this class-hnd single-def <Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]>
; V01 arg1 [V01,T01] ( 12, 20 ) ref -> esi class-hnd single-def <System.String>
; V02 loc0 [V02,T12] ( 6, 14 ) ref -> ebx class-hnd single-def <System.__Canon>
; V03 loc1 [V03,T16] ( 4, 10 ) ref -> [ebp-0x34] class-hnd spill-single-def <<unknown class>>
@@ -18,7 +18,7 @@
; V07 loc5 [V07,T17] ( 4, 10 ) ref -> [ebp-0x40] class-hnd spill-single-def <<unknown class>>
; V08 loc6 [V08,T06] ( 5, 17 ) int -> [ebp-0x14]
; V09 loc7 [V09,T27] ( 2, 8 ) ref -> eax class-hnd <<unknown class>>
-; V10 loc8 [V10,T41] ( 4, 3 ) ref -> [ebp-0x44] class-hnd exact single-def <<unknown class>>
+; V10 loc8 [V10,T38] ( 4, 3 ) ref -> [ebp-0x44] class-hnd exact single-def <<unknown class>>
; V11 loc9 [V11,T22] ( 4, 9 ) ref -> [ebp-0x48] class-hnd spill-single-def <<unknown class>>
; V12 loc10 [V12,T07] ( 5, 16.50) int -> [ebp-0x18]
; V13 loc11 [V13,T28] ( 2, 8 ) ref -> edx class-hnd <<unknown class>>
@@ -30,43 +30,39 @@
; V19 tmp4 [V19,T26] ( 3, 8 ) int -> [ebp-0x1C] "VirtualCall with runtime lookup"
;* V20 tmp5 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V21 tmp6 [V21,T09] ( 2, 16 ) int -> [ebp-0x20] spill-single-def "VirtualCall with runtime lookup"
-; V22 tmp7 [V22,T42] ( 3, 3 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V22 tmp7 [V22,T39] ( 3, 3 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
;* V23 tmp8 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V24 tmp9 [V24,T10] ( 2, 16 ) int -> eax "VirtualCall with runtime lookup"
-; V25 tmp10 [V25,T50] ( 3, 0 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
-; V26 tmp11 [V26,T31] ( 2, 4 ) ubyte -> eax "Inline return value spill temp"
-; V27 tmp12 [V27,T44] ( 3, 2.67) byref -> ecx "impAppendStmt"
-; V28 tmp13 [V28,T45] ( 3, 2.67) byref -> edx "spilling arg"
-; V29 tmp14 [V29,T40] ( 3, 3.33) int -> eax "spilling arg"
-; V30 tmp15 [V30,T32] ( 3, 5.33) int -> eax "Grabbing temp for Qmark"
+; V25 tmp10 [V25,T46] ( 3, 0 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V26 tmp11 [V26,T30] ( 2, 4 ) ubyte -> eax "Inline return value spill temp"
+; V27 tmp12 [V27,T41] ( 3, 2.67) byref -> ecx "impAppendStmt"
+; V28 tmp13 [V28,T42] ( 3, 2.67) byref -> edx "spilling arg"
+; V29 tmp14 [V29,T37] ( 3, 3.33) int -> eax "spilling arg"
+; V30 tmp15 [V30,T31] ( 3, 5.33) int -> eax "Grabbing temp for Qmark"
;* V31 tmp16 [V31 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V32 tmp17 [V32 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V33 tmp18 [V33 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V34 tmp19 [V34,T11] ( 2, 16 ) int -> ecx "argument with side effect"
-; V35 cse0 [V35,T36] ( 2, 4.50) int -> [ebp-0x24] spill-single-def hoist "CSE - conservative"
-; V36 cse1 [V36,T33] ( 2, 5 ) int -> [ebp-0x28] spill-single-def hoist "CSE - conservative"
-; V37 rat0 [V37,T34] ( 2, 4 ) int -> ecx "Spilling to split statement for tree"
-;* V38 rat1 [V38,T49] ( 0, 0 ) int -> zero-ref "runtime lookup"
-; V39 rat2 [V39,T29] ( 2, 4 ) int -> ecx "spilling expr"
-;* V40 rat3 [V40,T37] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V41 rat4 [V41,T03] ( 3, 18.88) int -> eax "Spilling to split statement for tree"
-; V42 rat5 [V42,T08] ( 3, 16 ) int -> ecx "runtime lookup"
-; V43 rat6 [V43,T00] ( 3, 22.40) int -> ecx "spilling expr"
-; V44 rat7 [V44,T04] ( 3, 17.92) int -> ecx "fgMakeTemp is creating a new local variable"
-; V45 rat8 [V45,T20] ( 3, 9.44) int -> ecx "Spilling to split statement for tree"
-; V46 rat9 [V46,T14] ( 3, 11.20) int -> edx "spilling expr"
-; V47 rat10 [V47,T23] ( 3, 8.96) int -> edx "fgMakeTemp is creating a new local variable"
-; V48 rat11 [V48,T21] ( 3, 9.44) int -> ecx "Spilling to split statement for tree"
-; V49 rat12 [V49,T15] ( 3, 11.20) int -> edx "spilling expr"
-; V50 rat13 [V50,T24] ( 3, 8.96) int -> eax "fgMakeTemp is creating a new local variable"
-; V51 rat14 [V51,T35] ( 3, 4.72) int -> [ebp-0x2C] spill-single-def "Spilling to split statement for tree"
-; V52 rat15 [V52,T39] ( 3, 4 ) int -> registers "runtime lookup"
-; V53 rat16 [V53,T30] ( 3, 5.60) int -> ecx "spilling expr"
-; V54 rat17 [V54,T38] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable"
-; V55 rat18 [V55,T46] ( 3, 2.36) int -> [ebp-0x30] spill-single-def "Spilling to split statement for tree"
-; V56 rat19 [V56,T48] ( 3, 2 ) int -> eax "runtime lookup"
-; V57 rat20 [V57,T43] ( 3, 2.80) int -> eax "spilling expr"
-; V58 rat21 [V58,T47] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
+; V35 cse0 [V35,T34] ( 2, 4.50) int -> [ebp-0x24] spill-single-def hoist "CSE - conservative"
+; V36 cse1 [V36,T32] ( 2, 5 ) int -> [ebp-0x28] spill-single-def hoist "CSE - conservative"
+; V37 rat0 [V37,T03] ( 3, 18.88) int -> eax "Spilling to split statement for tree"
+; V38 rat1 [V38,T08] ( 3, 16 ) int -> ecx "runtime lookup"
+; V39 rat2 [V39,T00] ( 3, 22.40) int -> ecx "spilling expr"
+; V40 rat3 [V40,T04] ( 3, 17.92) int -> ecx "fgMakeTemp is creating a new local variable"
+; V41 rat4 [V41,T20] ( 3, 9.44) int -> ecx "Spilling to split statement for tree"
+; V42 rat5 [V42,T14] ( 3, 11.20) int -> edx "spilling expr"
+; V43 rat6 [V43,T23] ( 3, 8.96) int -> edx "fgMakeTemp is creating a new local variable"
+; V44 rat7 [V44,T21] ( 3, 9.44) int -> ecx "Spilling to split statement for tree"
+; V45 rat8 [V45,T15] ( 3, 11.20) int -> edx "spilling expr"
+; V46 rat9 [V46,T24] ( 3, 8.96) int -> eax "fgMakeTemp is creating a new local variable"
+; V47 rat10 [V47,T33] ( 3, 4.72) int -> [ebp-0x2C] spill-single-def "Spilling to split statement for tree"
+; V48 rat11 [V48,T36] ( 3, 4 ) int -> registers "runtime lookup"
+; V49 rat12 [V49,T29] ( 3, 5.60) int -> ecx "spilling expr"
+; V50 rat13 [V50,T35] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable"
+; V51 rat14 [V51,T43] ( 3, 2.36) int -> [ebp-0x30] spill-single-def "Spilling to split statement for tree"
+; V52 rat15 [V52,T45] ( 3, 2 ) int -> eax "runtime lookup"
+; V53 rat16 [V53,T40] ( 3, 2.80) int -> eax "spilling expr"
+; V54 rat17 [V54,T44] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 60
@@ -81,7 +77,7 @@ G_M22830_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov esi, edx
; gcrRegs +[esi]
;; size=13 bbWeight=1 PerfScore 5.00
-G_M22830_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M22830_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs +[edi]
mov ecx, edi
; gcrRegs +[ecx]
@@ -99,12 +95,7 @@ G_M22830_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000
xor edx, edx
cmp dword ptr [eax+0x04], 0
jle G_M22830_IG26
- mov ecx, dword ptr [edi]
- mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx]
- cmp dword ptr [ecx+0x04], 32
- jle SHORT G_M22830_IG03
- ;; size=45 bbWeight=1 PerfScore 25.00
+ ;; size=32 bbWeight=1 PerfScore 15.00
G_M22830_IG03: ; bbWeight=4, gcVars=0000000000010000 {V03}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
mov dword ptr [ebp-0x10], edx
mov ecx, gword ptr [eax+4*edx+0x08]
@@ -359,7 +350,7 @@ G_M22830_IG33: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRe
cmp dword ptr [eax+0x04], 48
jle SHORT G_M22830_IG37
;; size=53 bbWeight=0.50 PerfScore 11.25
-G_M22830_IG34: ; bbWeight=0.40, gcVars=0000020000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M22830_IG34: ; bbWeight=0.40, gcVars=0000004000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[edx]
mov eax, dword ptr [eax+0x30]
test eax, eax
@@ -373,8 +364,8 @@ G_M22830_IG36: ; bbWeight=2, gcVars=0000000000020000 {V07}, gcrefRegs=000
mov ecx, dword ptr [ebp-0x28]
jmp SHORT G_M22830_IG31
;; size=5 bbWeight=2 PerfScore 6.00
-G_M22830_IG37: ; bbWeight=0.18, gcVars=0000020000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
- ; GC ptr vars -{V07 V17} +{V10 V11 V22 V41}
+G_M22830_IG37: ; bbWeight=0.18, gcVars=0000004000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
+ ; GC ptr vars -{V07 V17} +{V10 V11 V22 V38}
mov ecx, dword ptr [ebp-0x30]
mov edx, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
@@ -418,9 +409,9 @@ G_M22830_IG41: ; bbWeight=4, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=
mov dword ptr [ebp-0x18], ecx
jg SHORT G_M22830_IG45
;; size=15 bbWeight=4 PerfScore 29.00
-G_M22830_IG42: ; bbWeight=0.50, gcVars=0000020000000000 {V10}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M22830_IG42: ; bbWeight=0.50, gcVars=0000004000000000 {V10}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- ; GC ptr vars -{V11 V22 V41}
+ ; GC ptr vars -{V11 V22 V38}
mov edx, gword ptr [ebp-0x44]
; gcrRegs +[edx]
cmp dword ptr [edx+0x08], 0
@@ -441,15 +432,15 @@ G_M22830_IG44: ; bbWeight=1, epilog, nogc, extend
pop ebp
ret
;; size=8 bbWeight=1 PerfScore 3.50
-G_M22830_IG45: ; bbWeight=2, gcVars=0000020000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M22830_IG45: ; bbWeight=2, gcVars=0000004000400000 {V10 V11}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[esi]
- ; GC ptr vars +{V10 V11 V22 V41}
+ ; GC ptr vars +{V10 V11 V22 V38}
mov eax, dword ptr [ebp-0x24]
jmp SHORT G_M22830_IG39
;; size=5 bbWeight=2 PerfScore 6.00
-G_M22830_IG46: ; bbWeight=0, gcVars=0000020000000000 {V10}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
+G_M22830_IG46: ; bbWeight=0, gcVars=0000004000000000 {V10}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ebx]
- ; GC ptr vars -{V11 V22 V41}
+ ; GC ptr vars -{V11 V22 V38}
mov ecx, 0xD1FFAB1E ; <unknown class>
call CORINFO_HELP_NEWSFAST
; gcrRegs +[eax]
@@ -479,6 +470,6 @@ G_M22830_IG46: ; bbWeight=0, gcVars=0000020000000000 {V10}, gcrefRegs=000
int3
;; size=48 bbWeight=0 PerfScore 0.00
-; Total bytes of code 625, prolog size 13, PerfScore 486.79, instruction count 224, allocated bytes for code 625 (MethodHash=445da6d1) for method Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
+; Total bytes of code 612, prolog size 13, PerfScore 476.79, instruction count 219, allocated bytes for code 612 (MethodHash=445da6d1) for method Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
; ============================================================
-4 (-0.37%) : 72723.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)
@@ -10,7 +10,7 @@
;
; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]>
; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>>
; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18]
@@ -23,10 +23,10 @@
; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi
; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24]
; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
-; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
+; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -34,8 +34,8 @@
;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall"
-; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -47,9 +47,9 @@
; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -57,9 +57,9 @@
; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -67,83 +67,77 @@
; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP
; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
-; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
-; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
-; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
-; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
-; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
+; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
+; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
+; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
+; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
+; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr"
; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr"
; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr"
; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr"
; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect"
; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr"
; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect"
-; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative"
-; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative"
-; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
-; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect"
+; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative"
+; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative"
+; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
+; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup"
-; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
-;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup"
-; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
-; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
-;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup"
-; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
-; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP
-; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP
-; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP
-; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP
-; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
-; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP
-; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP
-; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP
-; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP
-; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP
-; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP
-; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP
-; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup"
+; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
+;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup"
+; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
+; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
+;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup"
+; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
+; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP
+; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP
+; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP
+; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP
+; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP
+; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP
+; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP
+; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP
+; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP
+; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP
+; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP
+; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90]
; TEMP_01 int -> [ebp-0x94]
;
@@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebx, ecx
; gcrRegs +[ebx]
;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0
jne SHORT G_M18379_IG04
;; size=6 bbWeight=1 PerfScore 4.00
@@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
xor edi, edi
; byrRegs -[edi]
test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50
G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
@@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000
xor eax, eax
jmp SHORT G_M18379_IG07
;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01}
mov ecx, esi
; gcrRegs +[ecx]
@@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov esi, gword ptr [ebp-0x6C]
; gcrRegs +[esi]
;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01}
mov edx, gword ptr [ebx+0x20]
; gcrRegs +[edx]
@@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov eax, edx
sar eax, 14
cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08]
and edx, 0x3FFF
cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08]
; byrRegs +[eax]
...
benchmarks.run_tiered.windows.x86.checked.mch
-4 (-0.37%) : 34115.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)
@@ -10,7 +10,7 @@
;
; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]>
; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>>
; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18]
@@ -23,10 +23,10 @@
; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi
; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24]
; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
-; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
+; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -34,8 +34,8 @@
;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall"
-; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -47,9 +47,9 @@
; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -57,9 +57,9 @@
; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -67,83 +67,77 @@
; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP
; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
-; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
-; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
-; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
-; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
-; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
+; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
+; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
+; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
+; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
+; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr"
; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr"
; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr"
; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr"
; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect"
; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr"
; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect"
-; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative"
-; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative"
-; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
-; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect"
+; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative"
+; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative"
+; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
+; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup"
-; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
-;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup"
-; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
-; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
-;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup"
-; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
-; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP
-; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP
-; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP
-; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP
-; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
-; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP
-; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP
-; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP
-; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP
-; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP
-; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP
-; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP
-; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup"
+; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
+;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup"
+; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
+; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
+;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup"
+; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
+; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP
+; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP
+; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP
+; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP
+; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP
+; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP
+; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP
+; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP
+; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP
+; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP
+; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP
+; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90]
; TEMP_01 int -> [ebp-0x94]
;
@@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebx, ecx
; gcrRegs +[ebx]
;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0
jne SHORT G_M18379_IG04
;; size=6 bbWeight=1 PerfScore 4.00
@@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
xor edi, edi
; byrRegs -[edi]
test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50
G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
@@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000
xor eax, eax
jmp SHORT G_M18379_IG07
;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01}
mov ecx, esi
; gcrRegs +[ecx]
@@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov esi, gword ptr [ebp-0x6C]
; gcrRegs +[esi]
;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01}
mov edx, gword ptr [ebx+0x20]
; gcrRegs +[edx]
@@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov eax, edx
sar eax, 14
cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08]
and edx, 0x3FFF
cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08]
; byrRegs +[eax]
...
coreclr_tests.run.windows.x86.checked.mch
-4 (-0.37%) : 223677.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (Tier0-FullOpts)
@@ -10,7 +10,7 @@
;
; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]>
; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>>
; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18]
@@ -23,10 +23,10 @@
; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi
; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24]
; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
-; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
+; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -34,8 +34,8 @@
;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall"
-; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -47,9 +47,9 @@
; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -57,9 +57,9 @@
; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -67,83 +67,77 @@
; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP
; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
-; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
-; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
-; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
-; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
-; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
+; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
+; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
+; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
+; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
+; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr"
; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr"
; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr"
; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr"
; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect"
; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr"
; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect"
-; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative"
-; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative"
-; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
-; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect"
+; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative"
+; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative"
+; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
+; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup"
-; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
-;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup"
-; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
-; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
-;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup"
-; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
-; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP
-; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP
-; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP
-; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP
-; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
-; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP
-; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP
-; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP
-; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP
-; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP
-; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP
-; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP
-; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup"
+; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
+;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup"
+; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
+; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
+;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup"
+; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
+; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP
+; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP
+; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP
+; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP
+; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP
+; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP
+; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP
+; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP
+; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP
+; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP
+; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP
+; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90]
; TEMP_01 int -> [ebp-0x94]
;
@@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebx, ecx
; gcrRegs +[ebx]
;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0
jne SHORT G_M18379_IG04
;; size=6 bbWeight=1 PerfScore 4.00
@@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
xor edi, edi
; byrRegs -[edi]
test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50
G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
@@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000
xor eax, eax
jmp SHORT G_M18379_IG07
;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01}
mov ecx, esi
; gcrRegs +[ecx]
@@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov esi, gword ptr [ebp-0x6C]
; gcrRegs +[esi]
;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01}
mov edx, gword ptr [ebx+0x20]
; gcrRegs +[edx]
@@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov eax, edx
sar eax, 14
cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08]
and edx, 0x3FFF
cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08]
; byrRegs +[eax]
...
-4 (-0.37%) : 476978.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)
@@ -10,7 +10,7 @@
;
; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]>
; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>>
; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18]
@@ -23,10 +23,10 @@
; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi
; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24]
; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
-; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
+; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -34,8 +34,8 @@
;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall"
-; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -47,9 +47,9 @@
; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -57,9 +57,9 @@
; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -67,83 +67,77 @@
; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP
; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
-; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
-; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
-; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
-; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
-; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
+; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
+; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
+; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
+; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
+; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr"
; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr"
; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr"
; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr"
; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect"
; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr"
; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect"
-; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative"
-; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative"
-; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
-; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect"
+; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative"
+; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative"
+; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
+; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup"
-; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
-;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup"
-; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
-; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
-;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup"
-; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
-; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP
-; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP
-; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP
-; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP
-; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
-; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP
-; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP
-; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP
-; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP
-; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP
-; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP
-; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP
-; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup"
+; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
+;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup"
+; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
+; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
+;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup"
+; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
+; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP
+; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP
+; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP
+; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP
+; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP
+; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP
+; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP
+; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP
+; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP
+; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP
+; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP
+; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90]
; TEMP_01 int -> [ebp-0x94]
;
@@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebx, ecx
; gcrRegs +[ebx]
;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0
jne SHORT G_M18379_IG04
;; size=6 bbWeight=1 PerfScore 4.00
@@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
xor edi, edi
; byrRegs -[edi]
test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50
G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
@@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000
xor eax, eax
jmp SHORT G_M18379_IG07
;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01}
mov ecx, esi
; gcrRegs +[ecx]
@@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov esi, gword ptr [ebp-0x6C]
; gcrRegs +[esi]
;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01}
mov edx, gword ptr [ebx+0x20]
; gcrRegs +[edx]
@@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov eax, edx
sar eax, 14
cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08]
and edx, 0x3FFF
cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08]
; byrRegs +[eax]
...
libraries.crossgen2.windows.x86.checked.mch
-9 (-2.91%) : 32127.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (FullOpts)
@@ -16,7 +16,7 @@
; V05 loc2 [V05,T01] ( 6, 20 ) byref -> ecx "impAppendStmt"
; V06 tmp1 [V06,T04] ( 6, 8 ) byref -> ebx
; V07 tmp2 [V07,T06] ( 4, 8 ) int -> eax "VirtualCall with runtime lookup"
-; V08 tmp3 [V08,T08] ( 4, 4 ) int -> eax
+; V08 tmp3 [V08,T08] ( 2, 3.96) int -> ecx
; V09 tmp4 [V09,T05] ( 4, 8 ) ref -> ecx "argument with side effect"
; V10 cse0 [V10,T07] ( 5, 7 ) int -> [ebp-0x1C] spill-single-def "CSE - moderate"
;
@@ -108,13 +108,13 @@ G_M22994_IG09: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
nop
call [eax]
; gcrRegs -[ecx edx]
+ xor ecx, ecx
test eax, eax
- sete al
- movzx eax, al
- test eax, eax
+ sete cl
+ test ecx, ecx
mov dword ptr [ebp-0x14], ebx
jne G_M22994_IG21
- ;; size=42 bbWeight=1.98 PerfScore 31.68
+ ;; size=41 bbWeight=1.98 PerfScore 31.68
G_M22994_IG10: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ebp-0x14]
inc eax
@@ -184,13 +184,10 @@ G_M22994_IG17: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
call [eax]
; gcrRegs -[ecx edx]
test eax, eax
- sete al
- movzx eax, al
- test eax, eax
mov dword ptr [ebp-0x14], ebx
mov edx, dword ptr [ebp-0x1C]
- jne SHORT G_M22994_IG21
- ;; size=46 bbWeight=0.02 PerfScore 0.42
+ je SHORT G_M22994_IG21
+ ;; size=38 bbWeight=0.02 PerfScore 0.39
G_M22994_IG18: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ebp-0x14]
inc eax
@@ -225,6 +222,6 @@ G_M22994_IG23: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
int3
;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 309, prolog size 24, PerfScore 128.36, instruction count 117, allocated bytes for code 309 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
+; Total bytes of code 300, prolog size 24, PerfScore 128.33, instruction count 114, allocated bytes for code 300 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
; ============================================================
-20 (-2.04%) : 76488.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary
2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
@@ -41,9 +41,8 @@
; V29 tmp10 [V29,T13] ( 4, 8 ) ref -> eax "argument with side effect"
; V30 tmp11 [V30,T14] ( 4, 8 ) ref -> eax "argument with side effect"
; V31 tmp12 [V31,T08] ( 4, 16 ) ref -> edx "argument with side effect"
-; TEMP_01 byref -> [ebp-0x5C]
;
-; Lcl frame size = 80
+; Lcl frame size = 76
G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -51,16 +50,14 @@ G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {},
push edi
push esi
push ebx
- sub esp, 80
+ sub esp, 76
xorps xmm4, xmm4
- movups xmmword ptr [ebp-0x5C], xmm4
- movups xmmword ptr [ebp-0x4C], xmm4
movups xmmword ptr [ebp-0x3C], xmm4
movups xmmword ptr [ebp-0x2C], xmm4
movups xmmword ptr [ebp-0x1C], xmm4
mov esi, edx
; gcrRegs +[esi]
- ;; size=34 bbWeight=1 PerfScore 15.08
+ ;; size=26 bbWeight=1 PerfScore 11.08
G_M1087_IG02: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[ecx]
cmp byte ptr [ecx], cl
@@ -296,21 +293,16 @@ G_M1087_IG10: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefReg
; gcrRegs +[ecx]
mov edx, dword ptr [ebp-0x24]
mov dword ptr [ecx+0x1C], edx
+ mov gword ptr [ebp-0x58], ecx
lea edx, bword ptr [ecx+0x14]
; byrRegs +[edx]
- ; GC ptr vars -{V20}
call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax]
+ ; gcrRegs -[eax ecx]
; byrRegs -[edx]
- mov gword ptr [ebp-0x58], ecx
- ; GC ptr vars +{V20}
- lea edx, bword ptr [ecx+0x18]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0x5C], edx
mov ecx, gword ptr [ebp-0x44]
+ ; gcrRegs +[ecx]
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- ; byrRegs -[edx]
mov ecx, eax
; gcrRegs +[ecx]
mov edx, gword ptr [ebp-0x44]
@@ -319,18 +311,19 @@ G_M1087_IG10: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefReg
; GC ptr vars -{V10}
call [<unknown method>]
; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x5C]
+ mov ecx, gword ptr [ebp-0x58]
+ ; gcrRegs +[ecx]
+ lea edx, bword ptr [ecx+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V20}
call [CORINFO_HELP_ASSIGN_REF_EAX]
; gcrRegs -[eax]
; byrRegs -[edx]
- mov ecx, gword ptr [ebp-0x58]
- ; gcrRegs +[ecx]
jmp SHORT G_M1087_IG12
- ;; size=106 bbWeight=0.02 PerfScore 0.93
+ ;; size=100 bbWeight=0.02 PerfScore 0.89
G_M1087_IG11: ; bbWeight=0.02, gcVars=00000040 {V07}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ecx]
- ; GC ptr vars -{V20} +{V06 V07}
+ ; GC ptr vars +{V06 V07}
mov gword ptr [ebp+0x08], edi
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs -[edi] +[eax]
@@ -342,21 +335,18 @@ G_M1087_IG11: ; bbWeight=0.02, gcVars=00000040 {V07}, gcrefRegs=000000C8
mov edx, dword ptr [(reloc)]
mov edi, gword ptr [edx]
; gcrRegs +[edi]
- lea edx, bword ptr [ecx+0x14]
- ; byrRegs +[edx]
- call [CORINFO_HELP_ASSIGN_REF_EDI]
- ; gcrRegs -[edi]
- ; byrRegs -[edx]
mov gword ptr [ebp-0x54], ecx
; GC ptr vars +{V19}
- lea edx, bword ptr [ecx+0x18]
+ lea edx, bword ptr [ecx+0x14]
; byrRegs +[edx]
- mov bword ptr [ebp-0x5C], edx
- mov ecx, gword ptr [ebp-0x40]
; GC ptr vars -{V06}
+ call [CORINFO_HELP_ASSIGN_REF_EDI]
+ ; gcrRegs -[ecx edi]
+ ; byrRegs -[edx]
+ mov ecx, gword ptr [ebp-0x40]
+ ; gcrRegs +[ecx]
call [<unknown method>]
; gcrRegs -[ecx] +[eax]
- ; byrRegs -[edx]
mov ecx, eax
; gcrRegs +[ecx]
mov edx, gword ptr [ebp-0x40]
@@ -365,19 +355,19 @@ G_M1087_IG11: ; bbWeight=0.02, gcVars=00000040 {V07}, gcrefRegs=000000C8
; GC ptr vars -{V07}
call [<unknown method>]
; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x5C]
+ mov edi, gword ptr [ebp-0x54]
+ ; gcrRegs +[edi]
+ lea edx, bword ptr [edi+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V19}
call [CORINFO_HELP_ASSIGN_REF_EAX]
; gcrRegs -[eax]
; byrRegs -[edx]
- mov edi, gword ptr [ebp-0x54]
- ; gcrRegs +[edi]
mov ecx, edi
; gcrRegs +[ecx]
mov edi, gword ptr [ebp+0x08]
- ;; size=82 bbWeight=0.02 PerfScore 0.68
-G_M1087_IG12: ; bbWeight=0.04, gcVars=00000000 {}, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
- ; GC ptr vars -{V19}
+ ;; size=76 bbWeight=0.02 PerfScore 0.64
+G_M1087_IG12: ; bbWeight=0.04, gcrefRegs=000000CA {ecx ebx esi edi}, byrefRegs=00000000 {}, byref
mov eax, dword ptr [ebp-0x24]
cmp eax, dword ptr [ebx+0x04]
jae G_M1087_IG23
@@ -543,6 +533,6 @@ G_M1087_IG23: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, by
int3
;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 979, prolog size 32, PerfScore 977.83, instruction count 283, allocated bytes for code 979 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
+; Total bytes of code 959, prolog size 24, PerfScore 973.75, instruction count 277, allocated bytes for code 959 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
; ============================================================
-20 (-1.50%) : 152646.dasm - System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
@@ -62,9 +62,8 @@
; V50 tmp33 [V50,T34] ( 2, 16 ) ref -> [ebp-0x7C] spill-single-def "argument with side effect"
; V51 tmp34 [V51,T35] ( 2, 16 ) ref -> [ebp-0x80] spill-single-def "argument with side effect"
; V52 tmp35 [V52,T30] ( 4, 16 ) ref -> edx "argument with side effect"
-; TEMP_01 byref -> [ebp-0x84]
;
-; Lcl frame size = 120
+; Lcl frame size = 116
G_M15781_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -72,14 +71,12 @@ G_M15781_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 120
- xor eax, eax
- mov dword ptr [ebp-0x84], eax
+ sub esp, 116
mov esi, ecx
; gcrRegs +[esi]
mov ebx, edx
; gcrRegs +[ebx]
- ;; size=21 bbWeight=1 PerfScore 6.25
+ ;; size=13 bbWeight=1 PerfScore 5.00
G_M15781_IG02: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
@@ -691,21 +688,17 @@ G_M15781_IG32: ; bbWeight=0.04, gcrefRegs=00000048 {ebx esi}, byrefRegs=0
call [CORINFO_HELP_ASSIGN_REF_ECX]
; gcrRegs -[ecx]
; byrRegs -[edx]
+ mov gword ptr [ebp-0x50], eax
+ ; GC ptr vars +{V21}
lea edx, bword ptr [eax+0x0C]
; byrRegs +[edx]
mov ecx, gword ptr [ebp-0x74]
; gcrRegs +[ecx]
call [CORINFO_HELP_ASSIGN_REF_ECX]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[eax ecx]
; byrRegs -[edx]
- mov gword ptr [ebp-0x50], eax
- ; GC ptr vars +{V21}
- lea edx, bword ptr [eax+0x08]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0x84], edx
call [CORINFO_HELP_READYTORUN_GCSTATIC_BASE]
- ; gcrRegs -[eax]
- ; byrRegs -[edx] +[eax]
+ ; byrRegs +[eax]
mov edx, gword ptr [eax]
; gcrRegs +[edx]
mov ecx, gword ptr [ebp-0x74]
@@ -715,30 +708,31 @@ G_M15781_IG32: ; bbWeight=0.04, gcrefRegs=00000048 {ebx esi}, byrefRegs=0
call [<unknown method>]
; gcrRegs -[ecx edx] +[eax]
; byrRegs -[eax]
- mov edx, bword ptr [ebp-0x84]
+ mov ecx, gword ptr [ebp-0x50]
+ ; gcrRegs +[ecx]
+ lea edx, bword ptr [ecx+0x08]
; byrRegs +[edx]
+ ; GC ptr vars -{V21}
call [CORINFO_HELP_ASSIGN_REF_EAX]
; gcrRegs -[eax]
; byrRegs -[edx]
- mov ecx, dword ptr [ebp-0x38]
+ mov eax, dword ptr [ebp-0x38]
mov edx, gword ptr [ebp-0x4C]
; gcrRegs +[edx]
- cmp ecx, dword ptr [edx+0x04]
+ cmp eax, dword ptr [edx+0x04]
jae SHORT G_M15781_IG35
- lea edx, bword ptr [edx+4*ecx+0x08]
+ lea edx, bword ptr [edx+4*eax+0x08]
; gcrRegs -[edx]
; byrRegs +[edx]
- mov eax, gword ptr [ebp-0x50]
- ; gcrRegs +[eax]
- ; GC ptr vars -{V20 V21}
- call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax]
+ ; GC ptr vars -{V20}
+ call [CORINFO_HELP_ASSIGN_REF_ECX]
+ ; gcrRegs -[ecx]
; byrRegs -[edx]
- inc ecx
- cmp ecx, edi
- mov dword ptr [ebp-0x38], ecx
+ inc eax
+ cmp eax, edi
+ mov dword ptr [ebp-0x38], eax
jl G_M15781_IG32
- ;; size=160 bbWeight=0.04 PerfScore 2.57
+ ;; size=148 bbWeight=0.04 PerfScore 2.49
G_M15781_IG33: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi]
mov ecx, ebx
@@ -773,6 +767,6 @@ G_M15781_IG36: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
int3
;; size=25 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1336, prolog size 17, PerfScore 1559.57, instruction count 394, allocated bytes for code 1336 (MethodHash=127bc25a) for method System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
+; Total bytes of code 1316, prolog size 9, PerfScore 1558.24, instruction count 390, allocated bytes for code 1316 (MethodHash=127bc25a) for method System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
; ============================================================
-15 (-1.29%) : 154738.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
@@ -54,9 +54,8 @@
; V42 cse2 [V42,T30] ( 5, 0.16) ref -> [ebp-0x58] spill-single-def "CSE - conservative"
; V43 cse3 [V43,T24] ( 3, 7.92) ref -> edx "CSE - moderate"
; V44 cse4 [V44,T27] ( 4, 3 ) ref -> ecx "CSE - conservative"
-; TEMP_01 byref -> [ebp-0x5C]
;
-; Lcl frame size = 80
+; Lcl frame size = 76
G_M44608_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -64,14 +63,12 @@ G_M44608_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 80
- xor eax, eax
- mov dword ptr [ebp-0x5C], eax
+ sub esp, 76
mov esi, ecx
; gcrRegs +[esi]
mov edi, edx
; gcrRegs +[edi]
- ;; size=18 bbWeight=1 PerfScore 6.25
+ ;; size=13 bbWeight=1 PerfScore 5.00
G_M44608_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
@@ -432,7 +429,7 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs=
; gcrRegs +[eax ecx]
; GC ptr vars -{V02} +{V42}
cmp byte ptr [eax+0x3E], 0
- jne G_M44608_IG18
+ jne SHORT G_M44608_IG18
mov gword ptr [ebp-0x1C], ecx
; GC ptr vars +{V08}
; GC ptr vars +{V02}
@@ -445,14 +442,10 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs=
call [CORINFO_HELP_ASSIGN_REF_ECX]
; gcrRegs -[ecx]
; byrRegs -[edx]
- lea edx, bword ptr [eax+0x04]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0x5C], edx
mov gword ptr [ebp-0x24], eax
; GC ptr vars +{V11}
mov edx, gword ptr [eax+0x08]
; gcrRegs +[edx]
- ; byrRegs -[edx]
mov edx, gword ptr [edx+0x08]
mov edx, gword ptr [edx+0x08]
mov gword ptr [ebp-0x4C], edx
@@ -472,19 +465,19 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs=
; GC ptr vars -{V38}
call [<unknown method>]
; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x5C]
+ mov ebx, gword ptr [ebp-0x24]
+ ; gcrRegs +[ebx]
+ lea edx, bword ptr [ebx+0x04]
; byrRegs +[edx]
+ ; GC ptr vars -{V11}
call [CORINFO_HELP_ASSIGN_REF_EAX]
; gcrRegs -[eax]
; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x24]
- ; gcrRegs +[ebx]
mov eax, gword ptr [ebx+0x08]
; gcrRegs +[eax]
mov eax, gword ptr [eax+0x04]
mov gword ptr [ebp-0x3C], eax
; GC ptr vars +{V26}
- ; GC ptr vars -{V11}
call [CORINFO_HELP_READYTORUN_NEW]
mov gword ptr [ebp-0x38], eax
; GC ptr vars +{V25}
@@ -504,7 +497,7 @@ G_M44608_IG17: ; bbWeight=0.02, gcVars=4000C000 {V02 V03 V42}, gcrefRegs=
; gcrRegs -[ebx]
; byrRegs -[edx]
jmp SHORT G_M44608_IG20
- ;; size=134 bbWeight=0.02 PerfScore 1.21
+ ;; size=124 bbWeight=0.02 PerfScore 1.17
G_M44608_IG18: ; bbWeight=0.02, gcVars=0000C000 {V02 V03}, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ecx]
; GC ptr vars -{V02 V08}
@@ -766,6 +759,6 @@ G_M44608_IG30: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000
int3
;; size=23 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1160, prolog size 18, PerfScore 627.64, instruction count 335, allocated bytes for code 1160 (MethodHash=bd8b51bf) for method System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
+; Total bytes of code 1145, prolog size 13, PerfScore 626.35, instruction count 331, allocated bytes for code 1145 (MethodHash=bd8b51bf) for method System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
; ============================================================
-18 (-1.10%) : 96225.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport
@@ -62,9 +62,8 @@
; V50 tmp35 [V50,T03] ( 4, 16 ) ref -> eax "argument with side effect"
; V51 tmp36 [V51,T16] ( 4, 8 ) ref -> eax "argument with side effect"
; V52 cse0 [V52,T04] ( 17, 12.50) byref -> [ebp-0x98] spill-single-def "CSE - moderate"
-; TEMP_01 byref -> [ebp-0x9C]
;
-; Lcl frame size = 144
+; Lcl frame size = 140
G_M28747_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -72,20 +71,20 @@ G_M28747_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 144
+ sub esp, 140
xorps xmm4, xmm4
- mov ebx, -144
- movups xmmword ptr [ebp+ebx-0x0C], xmm4
- movups xmmword ptr [ebp+ebx+0x04], xmm4
- movups xmmword ptr [ebp+ebx+0x14], xmm4
- add ebx, 48
- jne SHORT -5 instr
+ movups xmmword ptr [ebp-0x38], xmm4
+ movups xmmword ptr [ebp-0x28], xmm4
+ xor ebx, ebx
+ mov dword ptr [ebp-0x18], ebx
+ mov dword ptr [ebp-0x14], ebx
+ mov dword ptr [ebp-0x10], ebx
mov esi, ecx
; gcrRegs +[esi]
mov edi, edx
; gcrRegs +[edi]
xor ebx, ebx
- ;; size=46 bbWeight=1 PerfScore 13.08
+ ;; size=40 bbWeight=1 PerfScore 12.83
G_M28747_IG02: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs +[ebx]
call [CORINFO_HELP_READYTORUN_NEW]
@@ -676,6 +675,8 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12
; GC ptr vars +{V12}
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
+ mov gword ptr [ebp-0x78], eax
+ ; GC ptr vars +{V31}
mov edx, dword ptr [ebp-0x18]
mov ecx, gword ptr [ebp-0x3C]
; gcrRegs +[ecx]
@@ -685,15 +686,9 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12
mov ecx, gword ptr [ecx+4*edx+0x08]
mov gword ptr [ebp-0x94], ecx
; GC ptr vars +{V44}
- mov gword ptr [ebp-0x78], eax
- ; GC ptr vars +{V31}
- lea edx, bword ptr [eax+0x04]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0x9C], edx
mov ecx, gword ptr [ebp-0x48]
call [<unknown method>]
; gcrRegs -[ecx]
- ; byrRegs -[edx]
mov ecx, eax
; gcrRegs +[ecx]
mov edx, gword ptr [ebp-0x48]
@@ -702,25 +697,26 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12
; GC ptr vars -{V12}
call [<unknown method>]
; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0x9C]
+ mov ecx, gword ptr [ebp-0x78]
+ ; gcrRegs +[ecx]
+ lea edx, bword ptr [ecx+0x04]
; byrRegs +[edx]
+ ; GC ptr vars -{V31}
call [CORINFO_HELP_ASSIGN_REF_EAX]
; gcrRegs -[eax]
; byrRegs -[edx]
- mov eax, gword ptr [ebp-0x78]
- ; gcrRegs +[eax]
- lea edx, bword ptr [eax+0x08]
+ lea edx, bword ptr [ecx+0x08]
; byrRegs +[edx]
- mov ecx, gword ptr [ebp-0x94]
- ; gcrRegs +[ecx]
- ; GC ptr vars -{V31 V44}
- call [CORINFO_HELP_ASSIGN_REF_ECX]
- ; gcrRegs -[ecx]
+ mov eax, gword ptr [ebp-0x94]
+ ; gcrRegs +[eax]
+ ; GC ptr vars -{V44}
+ call [CORINFO_HELP_ASSIGN_REF_EAX]
+ ; gcrRegs -[eax]
; byrRegs -[edx]
lea edx, bword ptr [ebx+0x04]
; byrRegs +[edx]
- call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax]
+ call [CORINFO_HELP_ASSIGN_REF_ECX]
+ ; gcrRegs -[ecx]
; byrRegs -[edx]
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
@@ -756,7 +752,7 @@ G_M28747_IG21: ; bbWeight=0.02, gcVars=0000000018801410 {V03 V04 V05 V12
mov edx, gword ptr [eax+0x1018]
; gcrRegs +[edx]
jmp SHORT G_M28747_IG23
- ;; size=182 bbWeight=0.02 PerfScore 1.42
+ ;; size=170 bbWeight=0.02 PerfScore 1.38
G_M28747_IG22: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000001 {eax}, byref
; gcrRegs -[edx]
mov edx, gword ptr [eax+0x100C]
@@ -843,6 +839,6 @@ G_M28747_IG28: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000
int3
;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1641, prolog size 40, PerfScore 565.10, instruction count 407, allocated bytes for code 1641 (MethodHash=f6968fb4) for method Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
+; Total bytes of code 1623, prolog size 34, PerfScore 564.81, instruction count 405, allocated bytes for code 1623 (MethodHash=f6968fb4) for method Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
; ============================================================
-15 (-0.41%) : 31631.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
@@ -121,9 +121,8 @@
; V109 rat9 [V109 ] ( 1, 0.08) long -> [ebp-0x38] multireg-ret "ReplaceWithLclVar is creating a new local variable"
; V110 rat10 [V110,T102] ( 2, 0.12) int -> eax "field V109.lo (fldOffset=0x0)" P-INDEP
; V111 rat11 [V111,T103] ( 2, 0.12) int -> edx "field V109.hi (fldOffset=0x4)" P-INDEP
-; TEMP_01 byref -> [ebp-0xD4]
;
-; Lcl frame size = 200
+; Lcl frame size = 196
G_M28852_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -131,14 +130,12 @@ G_M28852_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 200
- xor eax, eax
- mov dword ptr [ebp-0xD4], eax
+ sub esp, 196
mov edi, ecx
; gcrRegs +[edi]
mov esi, edx
; gcrRegs +[esi]
- ;; size=24 bbWeight=1 PerfScore 6.25
+ ;; size=16 bbWeight=1 PerfScore 5.00
G_M28852_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov edx, dword ptr [(reloc)] ; const ptr
mov edx, gword ptr [edx]
@@ -363,7 +360,7 @@ G_M28852_IG05: ; bbWeight=1, extend
mov dword ptr [ebp-0x18], edx
mov ecx, dword ptr [ebp-0x14]
test ecx, ecx
- jle G_M28852_IG35
+ jle G_M28852_IG36
mov ebx, gword ptr [ebp-0x40]
; gcrRegs +[ebx]
cmp dword ptr [ebx+0x04], ecx
@@ -1072,11 +1069,9 @@ G_M28852_IG18: ; bbWeight=1.98, gcrefRegs=000000C8 {ebx esi edi}, byrefRe
lea edx, bword ptr [ebx+4*ecx+0x08]
; byrRegs +[edx]
call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax ebx]
+ ; gcrRegs -[eax]
; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x40]
- ; gcrRegs +[ebx]
- ;; size=56 bbWeight=1.98 PerfScore 46.53
+ ;; size=53 bbWeight=1.98 PerfScore 44.55
G_M28852_IG19: ; bbWeight=3.96, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
@@ -1133,10 +1128,9 @@ G_M28852_IG19: ; bbWeight=3.96, gcrefRegs=000000C8 {ebx esi edi}, byrefRe
G_M28852_IG20: ; bbWeight=1, gcVars=00000000000000020000000000000000 {V08}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V09 V76 V77 V78 V79 V80 V81 V82 V83 V84 V85 V86 V87 V88 V89 V90 V91 V92 V93 V94 V95 V96 V97 V98 V99}
mov ecx, dword ptr [ebp-0x14]
- jmp G_M28852_IG35
+ jmp G_M28852_IG36
;; size=8 bbWeight=1 PerfScore 3.00
-G_M28852_IG21: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
- ; gcrRegs -[ebx]
+G_M28852_IG21: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars +{V09 V71 V78}
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
@@ -1189,46 +1183,8 @@ G_M28852_IG21: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {
; gcrRegs +[eax]
mov ecx, dword ptr [ebp-0x18]
mov dword ptr [eax+0x04], ecx
- mov edx, dword ptr [(reloc)]
- mov ebx, gword ptr [ebp-0x54]
- ; gcrRegs +[ebx]
- lea edx, bword ptr [ebx+edx+0x2C]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0xD4], edx
push eax
; gcr arg push 0
- mov eax, dword ptr [(reloc)]
- ; gcrRegs -[eax]
- mov eax, gword ptr [eax]
- ; gcrRegs +[eax]
- mov edx, eax
- ; gcrRegs +[edx]
- ; byrRegs -[edx]
- mov ecx, gword ptr [ebp-0x44]
- ; gcrRegs +[ecx]
- ; GC ptr vars -{V17}
- call [<unknown method>]
- ; gcrRegs -[ecx edx]
- ; gcr arg pop 1
- mov edx, eax
- ; gcrRegs +[edx]
- mov ecx, esi
- ; gcrRegs +[ecx]
- call [<unknown method>]
- ; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0xD4]
- ; byrRegs +[edx]
- call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax]
- ; byrRegs -[edx]
- call [CORINFO_HELP_READYTORUN_NEW]
- ; gcrRegs +[eax]
- mov ecx, dword ptr [ebp-0x18]
- mov dword ptr [eax+0x04], ecx
- push eax
- ; gcr arg push 0
- ;; size=176 bbWeight=0.04 PerfScore 2.87
-G_M28852_IG22: ; bbWeight=0.04, extend
mov edx, dword ptr [(reloc)]
mov edx, gword ptr [edx]
; gcrRegs +[edx]
@@ -1243,9 +1199,39 @@ G_M28852_IG22: ; bbWeight=0.04, extend
; gcrRegs +[ecx]
call [<unknown method>]
; gcrRegs -[ecx edx]
+ mov edx, dword ptr [(reloc)]
+ mov ecx, gword ptr [ebp-0x54]
+ ; gcrRegs +[ecx]
+ lea edx, bword ptr [ecx+edx+0x2C]
+ ; byrRegs +[edx]
+ call [CORINFO_HELP_ASSIGN_REF_EAX]
+ ; gcrRegs -[eax ecx]
+ ; byrRegs -[edx]
+ call [CORINFO_HELP_READYTORUN_NEW]
+ ; gcrRegs +[eax]
+ mov ecx, dword ptr [ebp-0x18]
+ mov dword ptr [eax+0x04], ecx
+ push eax
+ ; gcr arg push 0
+ mov edx, dword ptr [(reloc)]
+ mov edx, gword ptr [edx]
+ ; gcrRegs +[edx]
+ mov ecx, gword ptr [ebp-0x44]
+ ; gcrRegs +[ecx]
+ ;; size=174 bbWeight=0.04 PerfScore 2.98
+G_M28852_IG22: ; bbWeight=0.04, extend
+ call [<unknown method>]
+ ; gcrRegs -[ecx edx]
+ ; gcr arg pop 1
mov edx, eax
; gcrRegs +[edx]
- mov ecx, ebx
+ mov ecx, esi
+ ; gcrRegs +[ecx]
+ call [<unknown method>]
+ ; gcrRegs -[ecx edx]
+ mov edx, eax
+ ; gcrRegs +[edx]
+ mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx]
call [System.Data.DataColumn:set_Prefix(System.String):this]
; gcrRegs -[eax ecx edx]
@@ -1283,7 +1269,7 @@ G_M28852_IG22: ; bbWeight=0.04, extend
; gcrRegs -[ecx]
mov edx, eax
; gcrRegs +[edx]
- mov ecx, ebx
+ mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx]
call [<unknown method>]
; gcrRegs -[eax ecx edx]
@@ -1316,13 +1302,15 @@ G_M28852_IG22: ; bbWeight=0.04, extend
call [CORINFO_HELP_READYTORUN_CHKCAST]
; gcrRegs -[ecx]
mov edx, dword ptr [(reloc)]
- lea edx, bword ptr [ebx+edx+0x3C]
+ mov ecx, gword ptr [ebp-0x54]
+ ; gcrRegs +[ecx]
+ lea edx, bword ptr [ecx+edx+0x3C]
; byrRegs +[edx]
- ;; size=172 bbWeight=0.04 PerfScore 2.74
-G_M28852_IG23: ; bbWeight=0.04, isz, extend
call [CORINFO_HELP_ASSIGN_REF_EAX]
- ; gcrRegs -[eax]
+ ; gcrRegs -[eax ecx]
; byrRegs -[edx]
+ ;; size=172 bbWeight=0.04 PerfScore 2.76
+G_M28852_IG23: ; bbWeight=0.04, isz, extend
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
mov ecx, dword ptr [ebp-0x18]
@@ -1357,13 +1345,16 @@ G_M28852_IG23: ; bbWeight=0.04, isz, extend
call [CORINFO_HELP_READYTORUN_CHKCAST]
; gcrRegs -[ecx]
mov edx, dword ptr [(reloc)]
- lea edx, bword ptr [ebx+edx+0x38]
+ mov ecx, gword ptr [ebp-0x54]
+ ; gcrRegs +[ecx]
+ lea edx, bword ptr [ecx+edx+0x38]
; byrRegs +[edx]
call [CORINFO_HELP_ASSIGN_REF_EAX]
+ ; gcrRegs -[ecx]
; byrRegs -[edx]
test eax, eax
je SHORT G_M28852_IG25
- ;; size=93 bbWeight=0.04 PerfScore 1.56
+ ;; size=90 bbWeight=0.04 PerfScore 1.48
G_M28852_IG24: ; bbWeight=0.02, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref, isz
mov gword ptr [ebp-0x60], eax
; GC ptr vars +{V41}
@@ -1378,9 +1369,12 @@ G_M28852_IG24: ; bbWeight=0.02, gcrefRegs=000000C9 {eax ebx esi edi}, byr
mov eax, dword ptr [eax+0x38]
; gcrRegs -[eax]
mov edx, dword ptr [(reloc)]
- mov dword ptr [ebx+edx+0x4C], eax
- ;; size=31 bbWeight=0.02 PerfScore 0.23
-G_M28852_IG25: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ mov ecx, gword ptr [ebp-0x54]
+ ; gcrRegs +[ecx]
+ mov dword ptr [ecx+edx+0x4C], eax
+ ;; size=34 bbWeight=0.02 PerfScore 0.25
+G_M28852_IG25: ; bbWeight=0.04, gcVars=00000000000000820000000000000009 {V08 V09 V17 V78}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; gcrRegs -[ecx]
; GC ptr vars -{V41}
call [CORINFO_HELP_READYTORUN_NEW]
; gcrRegs +[eax]
@@ -1426,10 +1420,10 @@ G_M28852_IG26: ; bbWeight=0.01, gcrefRegs=000000C9 {eax ebx esi edi}, byr
mov eax, gword ptr [ebp-0x58]
; gcrRegs +[eax]
;; size=20 bbWeight=0.01 PerfScore 0.07
-G_M28852_IG27: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M28852_IG27: ; bbWeight=0.04, gcVars=00000000000000820000000000000009 {V08 V09 V17 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V25}
mov edx, dword ptr [eax+0x04]
- mov ecx, ebx
+ mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx]
call [<unknown method>]
; gcrRegs -[eax ecx]
@@ -1465,7 +1459,7 @@ G_M28852_IG27: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {
mov ecx, dword ptr [eax]
cmp ecx, dword ptr [(reloc)]
je SHORT G_M28852_IG29
- ;; size=80 bbWeight=0.04 PerfScore 1.47
+ ;; size=81 bbWeight=0.04 PerfScore 1.50
G_M28852_IG28: ; bbWeight=0.01, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [(reloc)]
mov gword ptr [ebp-0x5C], eax
@@ -1477,10 +1471,10 @@ G_M28852_IG28: ; bbWeight=0.01, gcrefRegs=000000C9 {eax ebx esi edi}, byr
mov eax, gword ptr [ebp-0x5C]
; gcrRegs +[eax]
;; size=20 bbWeight=0.01 PerfScore 0.07
-G_M28852_IG29: ; bbWeight=0.04, gcVars=00000000000000820000000000000008 {V08 V09 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
+G_M28852_IG29: ; bbWeight=0.04, gcVars=00000000000000820000000000000009 {V08 V09 V17 V78}, gcrefRegs=000000C9 {eax ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V27}
mov edx, dword ptr [eax+0x04]
- mov ecx, ebx
+ mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx]
call [<unknown method>]
...
libraries.pmi.windows.x86.checked.mch
-18 (-3.06%) : 123025.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray
1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
@@ -8,22 +8,22 @@
; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan>
;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]>
; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def
; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]>
; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>>
; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall"
;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
+; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep>
;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]>
;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
@@ -40,43 +40,40 @@
; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp"
; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg"
; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
-; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
+; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP
; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP
;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect"
; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr"
; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr"
; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr"
; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr"
; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative"
; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative"
-; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
-; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative"
+; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
+; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree"
-;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup"
-; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable"
-; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup"
-; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
-; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup"
+; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
+; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 68
@@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
; GC ptr vars +{V05}
xor edx, edx
mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi]
- mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx]
- mov ecx, dword ptr [ecx+0x08]
- test ecx, ecx
- jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
; GC ptr vars -{V20}
@@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
; ============================================================
-18 (-3.06%) : 170847.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray
1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
@@ -8,22 +8,22 @@
; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan>
;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]>
; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def
; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]>
; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>>
; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall"
;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
+; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep>
;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]>
;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
@@ -40,43 +40,40 @@
; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp"
; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg"
; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
-; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
+; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP
; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP
;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect"
; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr"
; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr"
; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr"
; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr"
; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative"
; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative"
-; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
-; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative"
+; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
+; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree"
-;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup"
-; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable"
-; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup"
-; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
-; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup"
+; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
+; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 68
@@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
; GC ptr vars +{V05}
xor edx, edx
mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi]
- mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx]
- mov ecx, dword ptr [ecx+0x08]
- test ecx, ecx
- jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
; GC ptr vars -{V20}
@@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
; ============================================================
-27 (-2.20%) : 79515.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary
2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
@@ -86,11 +86,10 @@
; V75 tmp56 [V75,T29] ( 2, 8 ) ref -> ecx "argument with side effect"
; V76 tmp57 [V76,T30] ( 2, 8 ) ref -> ecx "argument with side effect"
; V77 cse0 [V77,T01] ( 7, 88 ) int -> [ebp-0x40] spill-single-def "CSE - aggressive"
-; TEMP_03 byref -> [ebp-0x68]
-; TEMP_02 int -> [ebp-0x6C]
-; TEMP_01 int -> [ebp-0x70]
+; TEMP_02 int -> [ebp-0x68]
+; TEMP_01 int -> [ebp-0x6C]
;
-; Lcl frame size = 100
+; Lcl frame size = 96
G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -98,20 +97,17 @@ G_M1087_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {},
push edi
push esi
push ebx
- sub esp, 100
+ sub esp, 96
vxorps xmm4, xmm4, xmm4
- vmovdqu ymmword ptr [ebp-0x68], ymm4
- vmovdqu ymmword ptr [ebp-0x48], ymm4
- vmovdqu xmmword ptr [ebp-0x28], xmm4
+ vmovdqu ymmword ptr [ebp-0x34], ymm4
xor eax, eax
- mov dword ptr [ebp-0x18], eax
mov dword ptr [ebp-0x14], eax
mov dword ptr [ebp-0x10], eax
mov edi, ecx
; gcrRegs +[edi]
mov esi, edx
; gcrRegs +[esi]
- ;; size=43 bbWeight=1 PerfScore 14.58
+ ;; size=30 bbWeight=1 PerfScore 9.58
G_M1087_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov eax, edi
; gcrRegs +[eax]
@@ -136,12 +132,12 @@ G_M1087_IG03: ; bbWeight=0.50, gcVars=0000010100000000 {V32 V33}, gcrefRe
mov ecx, gword ptr [edi+0x0C]
; gcrRegs +[ecx]
mov edx, 1
- mov dword ptr [ebp-0x6C], edx
+ mov dword ptr [ebp-0x68], edx
mov edx, dword ptr [ecx]
mov edx, dword ptr [edx+0x30]
- mov dword ptr [ebp-0x70], edx
- mov edx, dword ptr [ebp-0x6C]
- mov edi, dword ptr [ebp-0x70]
+ mov dword ptr [ebp-0x6C], edx
+ mov edx, dword ptr [ebp-0x68]
+ mov edi, dword ptr [ebp-0x6C]
; gcrRegs -[edi]
call [edi+0x10]<unknown method>
; gcrRegs -[ecx] +[eax]
@@ -461,24 +457,20 @@ G_M1087_IG22: ; bbWeight=0.02, gcVars=0000000001000800 {V21 V43}, gcrefRe
; gcrRegs +[eax]
mov ecx, dword ptr [ebp-0x24]
mov dword ptr [eax+0x1C], ecx
+ mov gword ptr [ebp-0x58], eax
+ ; GC ptr vars +{V22}
lea edx, bword ptr [eax+0x14]
; byrRegs +[edx]
mov ebx, gword ptr [ebp-0x64]
; gcrRegs +[ebx]
; GC ptr vars -{V43}
call CORINFO_HELP_ASSIGN_REF_EBX
- ; gcrRegs -[ebx]
+ ; gcrRegs -[eax ebx]
; byrRegs -[edx]
- mov gword ptr [ebp-0x58], eax
- ; GC ptr vars +{V22}
- lea edx, bword ptr [eax+0x18]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0x68], edx
mov ecx, gword ptr [ebp-0x54]
; gcrRegs +[ecx]
call [Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxNode:get_SyntaxTree():Microsoft.CodeAnalysis.SyntaxTree:this]
- ; gcrRegs -[ecx]
- ; byrRegs -[edx]
+ ; gcrRegs -[ecx] +[eax]
mov ecx, eax
; gcrRegs +[ecx]
mov edx, gword ptr [ebp-0x54]
@@ -489,34 +481,31 @@ G_M1087_IG22: ; bbWeight=0.02, gcVars=0000000001000800 {V21 V43}, gcrefRe
; GC ptr vars -{V21}
call [eax+0x1C]<unknown method>
; gcrRegs -[ecx edx] +[eax]
- mov edx, bword ptr [ebp-0x68]
+ mov ebx, gword ptr [ebp-0x58]
+ ; gcrRegs +[ebx]
+ lea edx, bword ptr [ebx+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V22}
call CORINFO_HELP_ASSIGN_REF_EAX
; gcrRegs -[eax]
; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x58]
- ; gcrRegs +[ebx]
jmp SHORT G_M1087_IG24
- ;; size=71 bbWeight=0.02 PerfScore 0.51
+ ;; size=65 bbWeight=0.02 PerfScore 0.47
G_M1087_IG23: ; bbWeight=0.02, gcVars=0000000000000200 {V07}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ebx]
- ; GC ptr vars -{V22} +{V07}
+ ; GC ptr vars +{V07}
mov ecx, 0xD1FFAB1E ; Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol
call CORINFO_HELP_NEWSFAST
; gcrRegs +[eax]
mov edx, dword ptr [ebp-0x24]
mov dword ptr [eax+0x1C], edx
- mov gword ptr [eax+0x14], 0xD1FFAB1E
mov gword ptr [ebp-0x50], eax
; GC ptr vars +{V19}
- lea edx, bword ptr [eax+0x18]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0x68], edx
+ mov gword ptr [eax+0x14], 0xD1FFAB1E
mov ecx, gword ptr [ebp-0x48]
; gcrRegs +[ecx]
call [Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxNode:get_SyntaxTree():Microsoft.CodeAnalysis.SyntaxTree:this]
; gcrRegs -[ecx]
- ; byrRegs -[edx]
mov ecx, eax
; gcrRegs +[ecx]
mov edx, gword ptr [ebp-0x48]
@@ -527,21 +516,19 @@ G_M1087_IG23: ; bbWeight=0.02, gcVars=0000000000000200 {V07}, gcrefRegs=0
; GC ptr vars -{V07}
call [eax+0x1C]<unknown method>
; gcrRegs -[ecx edx] +[eax]
- mov edx, bword ptr [ebp-0x68]
+ mov ecx, gword ptr [ebp-0x50]
+ ; gcrRegs +[ecx]
+ lea edx, bword ptr [ecx+0x18]
; byrRegs +[edx]
+ ; GC ptr vars -{V19}
call CORINFO_HELP_ASSIGN_REF_EAX
; gcrRegs -[eax]
; byrRegs -[edx]
- mov edx, gword ptr [ebp-0x50]
- ; gcrRegs +[edx]
- mov ecx, edx
- ; gcrRegs +[ecx]
mov ebx, ecx
; gcrRegs +[ebx]
- ;; size=69 bbWeight=0.02 PerfScore 0.45
-G_M1087_IG24: ; bbWeight=0.04, gcVars=0000000000000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[ecx edx]
- ; GC ptr vars -{V19}
+ ;; size=61 bbWeight=0.02 PerfScore 0.41
+G_M1087_IG24: ; bbWeight=0.04, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[ecx]
mov eax, dword ptr [ebp-0x24]
cmp eax, dword ptr [edi+0x04]
jae G_M1087_IG41
@@ -794,6 +781,6 @@ G_M1087_IG46: ; bbWeight=0, gcVars=0000000000000001 {V14}, gcrefRegs=0000
int3
;; size=9 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1228, prolog size 39, PerfScore 1019.57, instruction count 384, allocated bytes for code 1228 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
+; Total bytes of code 1201, prolog size 26, PerfScore 1014.49, instruction count 376, allocated bytes for code 1201 (MethodHash=9a81fbc0) for method Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
; ============================================================
+0 (0.00%) : 216967.dasm - Microsoft.CodeAnalysis.Collections.SegmentedDictionary2[System.__Canon,System.Nullable
1[int]]:TrimExcess(int):this (FullOpts)
@@ -10,9 +10,9 @@
;
; V00 this [V00,T02] ( 17, 19.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2[System.__Canon,System.Nullable`1[int]]>
; V01 arg1 [V01,T13] ( 4, 4 ) int -> edx single-def
-; V02 loc0 [V02,T28] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
+; V02 loc0 [V02,T27] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
; V03 loc1 [V03 ] ( 5, 12 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]>
-; V04 loc2 [V04,T30] ( 2, 2 ) int -> ecx single-def
+; V04 loc2 [V04,T28] ( 2, 2 ) int -> ecx single-def
; V05 loc3 [V05,T21] ( 3, 5 ) int -> [ebp-0x1C] spill-single-def
; V06 loc4 [V06 ] ( 2, 2.50) struct ( 8) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]>
; V07 loc5 [V07,T12] ( 5, 7 ) int -> [ebp-0x28]
@@ -43,24 +43,21 @@
; V32 tmp21 [V32,T09] ( 3, 12 ) int -> edi "index expr"
; V33 tmp22 [V33,T10] ( 3, 12 ) int -> eax "index expr"
; V34 cse0 [V34,T11] ( 4, 9 ) int -> [ebp-0x34] spill-single-def "CSE - moderate"
-;* V35 cse1 [V35,T31] ( 0, 0 ) int -> zero-ref "CSE - moderate"
+;* V35 cse1 [V35,T29] ( 0, 0 ) int -> zero-ref "CSE - moderate"
; V36 cse2 [V36,T16] ( 3, 6 ) int -> esi "CSE - moderate"
; V37 rat0 [V37,T22] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V38 rat1 [V38,T23] ( 3, 4 ) int -> eax "runtime lookup"
; V39 rat2 [V39,T20] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-;* V40 rat3 [V40,T29] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V41 rat4 [V41,T32] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V42 rat5 [V42,T27] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V43 rat6 [V43,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V44 rat7 [V44,T04] ( 3, 16 ) int -> edx "runtime lookup"
-; V45 rat8 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
-; V46 rat9 [V46,T07] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable"
-; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V48 rat11 [V48,T25] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP
-; V49 rat12 [V49,T18] ( 2, 6 ) int -> edx "field V47.hi (fldOffset=0x4)" P-INDEP
-; V50 rat13 [V50 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V51 rat14 [V51,T26] ( 1, 4 ) int -> eax "field V50.lo (fldOffset=0x0)" P-INDEP
-; V52 rat15 [V52,T19] ( 2, 6 ) int -> edi "field V50.hi (fldOffset=0x4)" P-INDEP
+; V40 rat3 [V40,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V41 rat4 [V41,T04] ( 3, 16 ) int -> edx "runtime lookup"
+; V42 rat5 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
+; V43 rat6 [V43,T07] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable"
+; V44 rat7 [V44 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V45 rat8 [V45,T25] ( 1, 4 ) int -> eax "field V44.lo (fldOffset=0x0)" P-INDEP
+; V46 rat9 [V46,T18] ( 2, 6 ) int -> edx "field V44.hi (fldOffset=0x4)" P-INDEP
+; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V48 rat11 [V48,T26] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP
+; V49 rat12 [V49,T19] ( 2, 6 ) int -> edi "field V47.hi (fldOffset=0x4)" P-INDEP
;
; Lcl frame size = 60
@@ -123,7 +120,7 @@ G_M3693_IG06: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=000000
pop ebp
ret
;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
mov eax, dword ptr [ebx+0x18]
mov dword ptr [ebp-0x1C], eax
inc dword ptr [ebx+0x24]
@@ -256,7 +253,7 @@ G_M3693_IG14: ; bbWeight=2, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000
mov edi, dword ptr [ebp-0x2C]
; byrRegs -[edi]
;; size=52 bbWeight=2 PerfScore 51.50
-G_M3693_IG15: ; bbWeight=4, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG15: ; bbWeight=4, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[ecx]
; GC ptr vars -{V15}
inc edi
@@ -277,7 +274,7 @@ G_M3693_IG17: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret
;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG18: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M3693_IG19: ; bbWeight=0, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
@@ -285,7 +282,7 @@ G_M3693_IG19: ; bbWeight=0, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
call [Microsoft.CodeAnalysis.Collections.Internal.ThrowHelper:ThrowArgumentOutOfRangeException(int)]
int3
;; size=12 bbWeight=0 PerfScore 0.00
-G_M3693_IG20: ; bbWeight=0, gcVars=0000000000000020 {V15}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M3693_IG20: ; bbWeight=0, gcVars=00000020 {V15}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[esi]
; GC ptr vars +{V05 V15}
mov ecx, 0xD1FFAB1E
+0 (0.00%) : 120960.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable
1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)
@@ -10,14 +10,14 @@
;
; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x50] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 RetBuf [V01,T16] ( 4, 4 ) byref -> [ebp-0x54] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def
;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]>
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live
; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x58] do-not-enreg[M] class-hnd EH-live <<unknown class>>
;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax
@@ -26,20 +26,20 @@
;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup"
; V21 tmp8 [V21 ] ( 3, 6 ) struct ( 8) [ebp-0x38] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
; V28 tmp15 [V28 ] ( 3, 6 ) struct ( 8) [ebp-0x40] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x44] "Inline return value spill temp"
; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]>
;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
@@ -48,13 +48,13 @@
;* V37 tmp24 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V38 tmp25 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp26 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V40 tmp27 [V40,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V40 tmp27 [V40,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V41 tmp28 [V41,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp"
; V42 tmp29 [V42,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
; V43 tmp30 [V43,T07] ( 3, 24 ) byref -> edx "dup spill"
;* V44 tmp31 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V46 tmp33 [V46,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V46 tmp33 [V46,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP
;* V48 tmp35 [V48 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP
;* V49 tmp36 [V49 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP
@@ -64,8 +64,8 @@
;* V53 tmp40 [V53 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
; V54 tmp41 [V54 ] ( 3, 6 ) int -> [ebp-0x40] do-not-enreg[X] addr-exposed "field V28.Item1 (fldOffset=0x0)" P-DEP
; V55 tmp42 [V55 ] ( 3, 6 ) int -> [ebp-0x3C] do-not-enreg[X] addr-exposed "field V28.Item2 (fldOffset=0x4)" P-DEP
-; V56 tmp43 [V56,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
-; V57 tmp44 [V57,T42] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+; V56 tmp43 [V56,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
+; V57 tmp44 [V57,T40] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP
;* V59 tmp46 [V59 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP
;* V60 tmp47 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP
@@ -74,27 +74,24 @@
;* V63 tmp50 [V63 ] ( 0, 0 ) int -> zero-ref single-def "field V39._length (fldOffset=0x4)" P-INDEP
; V64 tmp51 [V64,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)"
; V65 tmp52 [V65,T14] ( 3, 9 ) int -> [ebp-0x48] spill-single-def "V06.[004..008)"
-; V66 tmp53 [V66,T36] ( 3, 3 ) byref -> edi "V16.[000..004)"
-; V67 tmp54 [V67,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V66 tmp53 [V66,T34] ( 3, 3 ) byref -> edi "V16.[000..004)"
+; V67 tmp54 [V67,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V68 tmp55 [V68,T03] ( 2, 32 ) ref -> edx "argument with side effect"
; V69 GsCookie [V69 ] ( 1, 1 ) int -> [ebp-0x5C] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V70 EHSlots [V70 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V71 LocAllocSP [V71,T44] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V71 LocAllocSP [V71,T41] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V72 cse0 [V72,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V73 cse1 [V73,T39] ( 3, 3 ) int -> eax "CSE - conservative"
-; V74 rat0 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V73 cse1 [V73,T37] ( 3, 3 ) int -> eax "CSE - conservative"
+; V74 rat0 [V74,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat1 [V75,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat2 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat2 [V76,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat3 [V77,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V78 rat4 [V78,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V78 rat4 [V78,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V79 rat5 [V79,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V80 rat6 [V80,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V81 rat7 [V81,T43] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V82 rat8 [V82,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V83 rat9 [V83,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
-; V84 rat10 [V84,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V85 rat11 [V85,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
-; V86 rat12 [V86,T20] ( 3, 6 ) int -> [ebp-0x4C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V80 rat6 [V80,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
+; V81 rat7 [V81,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V82 rat8 [V82,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
+; V83 rat9 [V83,T20] ( 3, 6 ) int -> [ebp-0x4C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 84
+0 (0.00%) : 168620.dasm - Microsoft.CodeAnalysis.Collections.SegmentedDictionary2[System.__Canon,System.Nullable
1[int]]:TrimExcess(int):this (FullOpts)
@@ -10,9 +10,9 @@
;
; V00 this [V00,T02] ( 17, 19.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2[System.__Canon,System.Nullable`1[int]]>
; V01 arg1 [V01,T14] ( 4, 4 ) int -> edx single-def
-; V02 loc0 [V02,T29] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
+; V02 loc0 [V02,T28] ( 3, 2.50) int -> [ebp-0x10] spill-single-def
; V03 loc1 [V03 ] ( 5, 12 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]>
-; V04 loc2 [V04,T31] ( 2, 2 ) int -> ecx single-def
+; V04 loc2 [V04,T29] ( 2, 2 ) int -> ecx single-def
; V05 loc3 [V05,T21] ( 3, 5 ) int -> [ebp-0x1C] spill-single-def
; V06 loc4 [V06 ] ( 2, 2.50) struct ( 8) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedDictionary`2+Entry[System.__Canon,System.Nullable`1[int]]]>
; V07 loc5 [V07,T13] ( 5, 7 ) int -> [ebp-0x28]
@@ -32,9 +32,9 @@
; V21 tmp10 [V21,T06] ( 3, 12 ) ref -> esi class-hnd "impAppendStmt" <<unknown class>>
; V22 tmp11 [V22,T07] ( 3, 12 ) ref -> ecx class-hnd "impAppendStmt" <<unknown class>>
;* V23 tmp12 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V24 tmp13 [V24,T32] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V24 tmp13 [V24,T30] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V25 tmp14 [V25 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V26 tmp15 [V26,T33] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V26 tmp15 [V26,T31] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V27 tmp16 [V27 ] ( 4, 11 ) ref -> [ebp-0x18] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP
; V28 tmp17 [V28 ] ( 5, 12 ) int -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
; V29 tmp18 [V29 ] ( 2, 2.50) ref -> [ebp-0x24] do-not-enreg[X] addr-exposed "field V06._items (fldOffset=0x0)" P-DEP
@@ -48,19 +48,16 @@
; V37 rat0 [V37,T22] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V38 rat1 [V38,T23] ( 3, 4 ) int -> eax "runtime lookup"
; V39 rat2 [V39,T20] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-;* V40 rat3 [V40,T30] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V41 rat4 [V41,T34] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V42 rat5 [V42,T28] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V43 rat6 [V43,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V44 rat7 [V44,T04] ( 3, 16 ) int -> edx "runtime lookup"
-; V45 rat8 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
-; V46 rat9 [V46,T08] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable"
-; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V48 rat11 [V48,T26] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP
-; V49 rat12 [V49,T18] ( 2, 6 ) int -> edx "field V47.hi (fldOffset=0x4)" P-INDEP
-; V50 rat13 [V50 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V51 rat14 [V51,T27] ( 1, 4 ) int -> eax "field V50.lo (fldOffset=0x0)" P-INDEP
-; V52 rat15 [V52,T19] ( 2, 6 ) int -> edx "field V50.hi (fldOffset=0x4)" P-INDEP
+; V40 rat3 [V40,T03] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V41 rat4 [V41,T04] ( 3, 16 ) int -> edx "runtime lookup"
+; V42 rat5 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
+; V43 rat6 [V43,T08] ( 3, 12 ) byref -> eax "ReplaceWithLclVar is creating a new local variable"
+; V44 rat7 [V44 ] ( 1, 4 ) long -> [ebp-0x3C] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V45 rat8 [V45,T26] ( 1, 4 ) int -> eax "field V44.lo (fldOffset=0x0)" P-INDEP
+; V46 rat9 [V46,T18] ( 2, 6 ) int -> edx "field V44.hi (fldOffset=0x4)" P-INDEP
+; V47 rat10 [V47 ] ( 1, 4 ) long -> [ebp-0x44] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V48 rat11 [V48,T27] ( 1, 4 ) int -> eax "field V47.lo (fldOffset=0x0)" P-INDEP
+; V49 rat12 [V49,T19] ( 2, 6 ) int -> edx "field V47.hi (fldOffset=0x4)" P-INDEP
;
; Lcl frame size = 60
@@ -123,7 +120,7 @@ G_M3693_IG06: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=000000
pop ebp
ret
;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
mov eax, dword ptr [ebx+0x18]
mov dword ptr [ebp-0x1C], eax
inc dword ptr [ebx+0x24]
@@ -250,7 +247,7 @@ G_M3693_IG13: ; bbWeight=2, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
mov edi, dword ptr [ebp-0x2C]
; byrRegs -[edi]
;; size=144 bbWeight=2 PerfScore 156.00
-G_M3693_IG14: ; bbWeight=4, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG14: ; bbWeight=4, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[ecx]
; GC ptr vars -{V15}
inc edi
@@ -271,7 +268,7 @@ G_M3693_IG16: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret
;; size=8 bbWeight=0.50 PerfScore 1.75
-G_M3693_IG17: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
+G_M3693_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref
call CORINFO_HELP_RNGCHKFAIL
;; size=5 bbWeight=0 PerfScore 0.00
G_M3693_IG18: ; bbWeight=0, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
libraries_tests.run.windows.x86.Release.mch
-15 (-4.02%) : 237079.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (Tier0-FullOpts)
@@ -16,7 +16,7 @@
; V06 tmp1 [V06,T05] ( 6, 8 ) byref -> ebx
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V08 tmp3 [V08,T06] ( 6, 8 ) int -> [ebp-0x1C] "VirtualCall with runtime lookup"
-; V09 tmp4 [V09,T09] ( 4, 4 ) int -> ebx
+; V09 tmp4 [V09,T09] ( 2, 3.96) int -> ecx
; V10 tmp5 [V10,T07] ( 4, 8 ) ref -> ebx "argument with side effect"
; V11 cse0 [V11,T08] ( 5, 7 ) int -> [ebp-0x20] spill-single-def "CSE - moderate"
; V12 rat0 [V12,T02] ( 3, 11.09) int -> ecx "fgMakeTemp is creating a new local variable"
@@ -120,10 +120,10 @@ G_M22994_IG10: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
nop
call [eax]
; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
+ xor ecx, ecx
test eax, eax
- sete bl
- test ebx, ebx
+ sete cl
+ test ecx, ecx
jne G_M22994_IG23
;; size=34 bbWeight=1.98 PerfScore 24.26
G_M22994_IG11: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
@@ -161,11 +161,11 @@ G_M22994_IG14: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
cmp gword ptr [ebp-0x18], 0
jne SHORT G_M22994_IG16
cmp eax, dword ptr [esi+0x04]
- jae G_M22994_IG25
+ jae SHORT G_M22994_IG25
mov dword ptr [ebp-0x14], eax
cmp gword ptr [esi+4*eax+0x08], 0
je SHORT G_M22994_IG20
- ;; size=33 bbWeight=0.02 PerfScore 0.31
+ ;; size=29 bbWeight=0.02 PerfScore 0.31
G_M22994_IG15: ; bbWeight=0.01, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ecx esi edi]
; byrRegs -[ebx]
@@ -207,19 +207,16 @@ G_M22994_IG19: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
nop
call [eax]
; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
test eax, eax
- sete bl
- test ebx, ebx
mov edx, dword ptr [ebp-0x20]
- jne SHORT G_M22994_IG23
- ;; size=38 bbWeight=0.02 PerfScore 0.35
-G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M22994_IG23
+ ;; size=31 bbWeight=0.02 PerfScore 0.32
+G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ebp-0x14]
inc eax
cmp edx, eax
- jg G_M22994_IG13
- ;; size=12 bbWeight=0.04 PerfScore 0.10
+ jg SHORT G_M22994_IG13
+ ;; size=8 bbWeight=0.04 PerfScore 0.10
G_M22994_IG21: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi edi]
mov eax, 1
@@ -248,6 +245,6 @@ G_M22994_IG25: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 373, prolog size 24, PerfScore 131.30, instruction count 134, allocated bytes for code 373 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
+; Total bytes of code 358, prolog size 24, PerfScore 131.27, instruction count 131, allocated bytes for code 358 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
; ============================================================
-18 (-3.06%) : 12328.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray
1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
@@ -8,22 +8,22 @@
; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan>
;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]>
; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def
; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]>
; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>>
; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall"
;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
+; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep>
;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]>
;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
@@ -40,43 +40,40 @@
; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp"
; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg"
; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
-; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
+; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP
; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP
;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect"
; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr"
; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr"
; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr"
; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr"
; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative"
; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative"
-; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
-; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative"
+; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
+; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree"
-;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup"
-; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable"
-; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup"
-; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
-; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup"
+; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
+; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 68
@@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
; GC ptr vars +{V05}
xor edx, edx
mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi]
- mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx]
- mov ecx, dword ptr [ecx+0x14]
- test ecx, ecx
- jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
; GC ptr vars -{V20}
@@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
; ============================================================
-14 (-2.37%) : 103485.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.Canon]:AddStrategy(System.Canon,System.Object):this (Tier0-FullOpts)
@@ -8,64 +8,61 @@
; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 24, 21.50) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
+; V00 this [V00,T00] ( 23, 21 ) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
; V01 arg1 [V01,T07] ( 10, 7.50) ref -> edi class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T38] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
+; V02 arg2 [V02,T36] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
; V03 loc0 [V03,T06] ( 6, 11 ) int -> ebx
;* V04 loc1 [V04 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V05 tmp0 [V05,T33] ( 2, 2 ) int -> ecx "spilling helperCall"
-; V06 tmp1 [V06,T31] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]>
-; V07 tmp2 [V07,T32] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
+; V05 tmp0 [V05,T31] ( 2, 2 ) int -> ecx "spilling helperCall"
+; V06 tmp1 [V06,T29] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]>
+; V07 tmp2 [V07,T30] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref single-def
;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref single-def
;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref single-def
;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref single-def
-; V12 tmp7 [V12,T24] ( 4, 2 ) ref -> edx
-;* V13 tmp8 [V13,T41] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V12 tmp7 [V12,T22] ( 4, 2 ) ref -> edx
+;* V13 tmp8 [V13,T38] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V14 tmp9 [V14,T10] ( 5, 5 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]>
;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V17 tmp12 [V17,T03] ( 3, 16 ) int -> edx "spilling helperCall"
; V18 tmp13 [V18,T09] ( 3, 8 ) int -> [ebp-0x10] "spilling helperCall"
;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "non-inline candidate call"
-; V20 tmp15 [V20,T26] ( 3, 2 ) int -> eax "spilling helperCall"
+; V20 tmp15 [V20,T24] ( 3, 2 ) int -> eax "spilling helperCall"
;* V21 tmp16 [V21 ] ( 0, 0 ) ref -> zero-ref
;* V22 tmp17 [V22 ] ( 0, 0 ) ref -> zero-ref single-def
-; V23 tmp18 [V23,T35] ( 3, 1.50) int -> eax
+; V23 tmp18 [V23,T33] ( 3, 1.50) int -> eax
;* V24 tmp19 [V24 ] ( 0, 0 ) ref -> zero-ref single-def
-; V25 tmp20 [V25,T27] ( 3, 2 ) int -> eax "spilling helperCall"
+; V25 tmp20 [V25,T25] ( 3, 2 ) int -> eax "spilling helperCall"
;* V26 tmp21 [V26 ] ( 0, 0 ) ref -> zero-ref
-; V27 tmp22 [V27,T34] ( 3, 1.50) ref -> edi
-; V28 tmp23 [V28,T28] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp22 [V27,T32] ( 3, 1.50) ref -> edi
+; V28 tmp23 [V28,T26] ( 3, 2 ) int -> eax "spilling helperCall"
;* V29 tmp24 [V29 ] ( 0, 0 ) ref -> zero-ref
;* V30 tmp25 [V30 ] ( 0, 0 ) ref -> zero-ref single-def
-; V31 tmp26 [V31,T36] ( 3, 1.50) int -> eax
+; V31 tmp26 [V31,T34] ( 3, 1.50) int -> eax
;* V32 tmp27 [V32 ] ( 0, 0 ) ref -> zero-ref single-def
;* V33 tmp28 [V33 ] ( 0, 0 ) ref -> zero-ref
-; V34 tmp29 [V34,T39] ( 2, 1 ) ref -> edi
+; V34 tmp29 [V34,T37] ( 2, 1 ) ref -> edi
; V35 tmp30 [V35,T11] ( 3, 3 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inlining Arg" <<unknown class>>
-; V36 cse0 [V36,T37] ( 2, 1 ) int -> ecx "CSE - moderate"
-; V37 cse1 [V37,T25] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
+; V36 cse0 [V36,T35] ( 2, 1 ) int -> ecx "CSE - moderate"
+; V37 cse1 [V37,T23] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
; V38 cse2 [V38,T04] ( 9, 13 ) byref -> [ebp-0x20] multi-def "CSE - aggressive"
-; V39 rat0 [V39,T18] ( 2, 2 ) int -> ecx "Spilling to split statement for tree"
-;* V40 rat1 [V40,T40] ( 0, 0 ) int -> zero-ref "runtime lookup"
-; V41 rat2 [V41,T12] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable"
-; V42 rat3 [V42,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V43 rat4 [V43,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable"
-; V44 rat5 [V44,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V45 rat6 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
-; V46 rat7 [V46,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V47 rat8 [V47,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V48 rat9 [V48,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V49 rat10 [V49,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V50 rat11 [V50,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V39 rat0 [V39,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V40 rat1 [V40,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable"
+; V41 rat2 [V41,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V42 rat3 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
+; V43 rat4 [V43,T17] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V44 rat5 [V44,T12] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V45 rat6 [V45,T18] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V46 rat7 [V46,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V47 rat8 [V47,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V48 rat9 [V48,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V49 rat10 [V49,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V50 rat11 [V50,T27] ( 3, 2 ) int -> eax "runtime lookup"
; V51 rat12 [V51,T15] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V52 rat13 [V52,T22] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V53 rat14 [V53,T29] ( 3, 2 ) int -> eax "runtime lookup"
-; V54 rat15 [V54,T16] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V55 rat16 [V55,T23] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V56 rat17 [V56,T30] ( 3, 2 ) int -> edx "runtime lookup"
-; V57 rat18 [V57,T17] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V52 rat13 [V52,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V53 rat14 [V53,T28] ( 3, 2 ) int -> edx "runtime lookup"
+; V54 rat15 [V54,T16] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [ebp-0x24]
;
; Lcl frame size = 24
@@ -101,14 +98,8 @@ G_M56103_IG03: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
;; size=22 bbWeight=0.50 PerfScore 4.25
G_M56103_IG04: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
xor ebx, ebx
- mov ecx, dword ptr [esi]
- mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx]
- mov ecx, dword ptr [ecx+0x08]
- test ecx, ecx
- jne SHORT G_M56103_IG09
jmp SHORT G_M56103_IG09
- ;; size=18 bbWeight=0.50 PerfScore 5.75
+ ;; size=4 bbWeight=0.50 PerfScore 1.12
G_M56103_IG05: ; bbWeight=2, gcVars=0000000000000010 {V38}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars +{V38}
mov ecx, dword ptr [esi]
@@ -374,7 +365,7 @@ G_M56103_IG35: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRe
test edx, edx
je SHORT G_M56103_IG39
;; size=37 bbWeight=0.50 PerfScore 8.88
-G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; byrRegs -[eax]
mov ecx, edx
call CORINFO_HELP_NEWSFAST
@@ -432,9 +423,9 @@ G_M56103_IG38: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret 4
;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ebx edi]
- ; GC ptr vars +{V07 V25 V37}
+ ; GC ptr vars +{V07 V23 V37}
mov edx, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov edx, eax
@@ -442,11 +433,11 @@ G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefR
;; size=14 bbWeight=0.10 PerfScore 0.35
G_M56103_IG40: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ebx edi]
- ; GC ptr vars -{V07 V25 V37}
+ ; GC ptr vars -{V07 V23 V37}
call [System.MulticastDelegate:ThrowNullThisInDelegateToInstance()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 591, prolog size 9, PerfScore 219.48, instruction count 207, allocated bytes for code 591 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (Tier0-FullOpts)
+; Total bytes of code 577, prolog size 9, PerfScore 214.85, instruction count 201, allocated bytes for code 577 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (Tier0-FullOpts)
; ============================================================
+0 (0.00%) : 16147.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable
1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (Tier0-FullOpts)
@@ -10,14 +10,14 @@
;
; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x40] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 RetBuf [V01,T16] ( 6, 6 ) byref -> [ebp-0x44] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def
;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]>
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live
; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x48] do-not-enreg[M] class-hnd EH-live <<unknown class>>
;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax
@@ -26,44 +26,44 @@
;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup"
;* V21 tmp8 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V28 tmp15 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x34] "Inline return value spill temp"
; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]>
;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V36 tmp23 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V37 tmp24 [V37 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V38 tmp25 [V38,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V38 tmp25 [V38,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V39 tmp26 [V39,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp"
; V40 tmp27 [V40,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
; V41 tmp28 [V41,T07] ( 3, 24 ) byref -> edx "dup spill"
;* V42 tmp29 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp30 [V43 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V44 tmp31 [V44,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V44 tmp31 [V44,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP
;* V46 tmp33 [V46 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP
;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP
-; V48 tmp35 [V48,T42] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP
-; V49 tmp36 [V49,T43] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
+; V48 tmp35 [V48,T40] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP
+; V49 tmp36 [V49,T41] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V50 tmp37 [V50 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP
;* V51 tmp38 [V51 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
-;* V52 tmp39 [V52,T47] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP
-; V53 tmp40 [V53,T44] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP
-; V54 tmp41 [V54,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
-; V55 tmp42 [V55,T45] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+;* V52 tmp39 [V52,T44] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP
+; V53 tmp40 [V53,T42] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP
+; V54 tmp41 [V54,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
+; V55 tmp42 [V55,T43] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V56 tmp43 [V56 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP
;* V57 tmp44 [V57 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP
;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP
@@ -72,27 +72,24 @@
;* V61 tmp48 [V61 ] ( 0, 0 ) int -> zero-ref single-def "field V37._length (fldOffset=0x4)" P-INDEP
; V62 tmp49 [V62,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)"
; V63 tmp50 [V63,T14] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V06.[004..008)"
-; V64 tmp51 [V64,T36] ( 3, 3 ) byref -> edi "V16.[000..004)"
-; V65 tmp52 [V65,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V64 tmp51 [V64,T34] ( 3, 3 ) byref -> edi "V16.[000..004)"
+; V65 tmp52 [V65,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V66 tmp53 [V66,T03] ( 2, 32 ) ref -> edx "argument with side effect"
; V67 GsCookie [V67 ] ( 1, 1 ) int -> [ebp-0x4C] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 EHSlots [V68 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V69 LocAllocSP [V69,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V69 LocAllocSP [V69,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V70 cse0 [V70,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V71 cse1 [V71,T39] ( 3, 3 ) int -> eax "CSE - conservative"
-; V72 rat0 [V72,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V71 cse1 [V71,T37] ( 3, 3 ) int -> eax "CSE - conservative"
+; V72 rat0 [V72,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V73 rat1 [V73,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V74 rat2 [V74,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V74 rat2 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat3 [V75,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat4 [V76,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat4 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat5 [V77,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V78 rat6 [V78,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V79 rat7 [V79,T46] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V80 rat8 [V80,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V81 rat9 [V81,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
-; V82 rat10 [V82,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V83 rat11 [V83,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
-; V84 rat12 [V84,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V78 rat6 [V78,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
+; V79 rat7 [V79,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V80 rat8 [V80,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
+; V81 rat9 [V81,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 68
+0 (0.00%) : 201876.dasm - System.Collections.Generic.HashSet1[System.ValueTuple
2[System.Canon,int]]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.ValueTuple
2[System.Canon,int]],ubyte):System.ValueTuple`2[int,int]:this (Tier0-FullOpts)
@@ -10,49 +10,49 @@
;
; V00 this [V00,T04] ( 10, 24 ) ref -> [ebp-0x50] do-not-enreg[H] this class-hnd EH-live single-def <System.Collections.Generic.HashSet`1[System.ValueTuple`2[System.__Canon,int]]>
; V01 RetBuf [V01,T15] ( 6, 6 ) byref -> [ebp-0x54] EH-live single-def
-; V02 arg1 [V02,T41] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]>
-; V03 arg2 [V03,T32] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
-; V04 loc0 [V04,T36] ( 3, 3 ) int -> edi
+; V02 arg1 [V02,T39] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]>
+; V03 arg2 [V03,T30] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V04 loc0 [V04,T34] ( 3, 3 ) int -> edi
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]>
;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op <System.Collections.Generic.BitHelper>
; V08 loc4 [V08,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live
; V09 loc5 [V09,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V10 loc6 [V10,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
-; V11 loc7 [V11,T23] ( 6, 5 ) ref -> [ebp-0x58] class-hnd EH-live spill-single-def <<unknown class>>
+; V10 loc6 [V10,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V11 loc7 [V11,T22] ( 6, 5 ) ref -> [ebp-0x58] class-hnd EH-live spill-single-def <<unknown class>>
; V12 loc8 [V12 ] ( 1, 1 ) struct ( 8) [ebp-0x38] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]>
;* V13 loc9 [V13 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[int]>
; V14 loc10 [V14,T06] ( 7, 20 ) ref -> [ebp-0x5C] class-hnd EH-live spill-single-def <<unknown class>>
; V15 loc11 [V15 ] ( 2, 16 ) struct ( 8) [ebp-0x40] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]>
; V16 loc12 [V16,T02] ( 6, 32 ) int -> esi
-; V17 loc13 [V17,T38] ( 2, 2 ) int -> ecx
+; V17 loc13 [V17,T36] ( 2, 2 ) int -> ecx
;* V18 tmp1 [V18 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V19 tmp2 [V19 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper>
;* V20 tmp3 [V20 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V21 tmp4 [V21 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <System.Collections.Generic.BitHelper>
;* V22 tmp5 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V23 tmp6 [V23,T28] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V23 tmp6 [V23,T26] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V24 tmp7 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp8 [V25,T03] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp9 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V27 tmp10 [V27 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper>
;* V28 tmp11 [V28 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V29 tmp12 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V30 tmp13 [V30,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V30 tmp13 [V30,T27] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V31 tmp14 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V32 tmp15 [V32,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V32 tmp15 [V32,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V33 tmp16 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V34 tmp17 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V35 tmp18 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V36 tmp19 [V36,T16] ( 8, 7 ) int -> edi "Inline return value spill temp"
-; V37 tmp20 [V37,T31] ( 2, 4 ) int -> eax "Inlining Arg"
+; V37 tmp20 [V37,T29] ( 2, 4 ) int -> eax "Inlining Arg"
; V38 tmp21 [V38,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]>
;* V39 tmp22 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V40 tmp23 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V41 tmp24 [V41 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V42 tmp25 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V43 tmp26 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V44 tmp27 [V44,T33] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V44 tmp27 [V44,T31] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V45 tmp28 [V45,T07] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
;* V46 tmp29 [V46 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]>
; V47 tmp30 [V47,T08] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
@@ -66,18 +66,18 @@
;* V55 tmp38 [V55 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP
; V56 tmp39 [V56 ] ( 2, 16 ) ref -> [ebp-0x40] do-not-enreg[X] addr-exposed "field V15.Item1 (fldOffset=0x0)" P-DEP
; V57 tmp40 [V57 ] ( 2, 16 ) int -> [ebp-0x3C] do-not-enreg[X] addr-exposed "field V15.Item2 (fldOffset=0x4)" P-DEP
-; V58 tmp41 [V58,T34] ( 3, 3 ) byref -> [ebp-0x60] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+; V58 tmp41 [V58,T32] ( 3, 3 ) byref -> [ebp-0x60] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
;* V59 tmp42 [V59 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x4)" P-INDEP
;* V60 tmp43 [V60 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP
;* V61 tmp44 [V61 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x4)" P-INDEP
-; V62 tmp45 [V62,T43] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP
-; V63 tmp46 [V63,T44] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
+; V62 tmp45 [V62,T41] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP
+; V63 tmp46 [V63,T42] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
;* V64 tmp47 [V64 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp48 [V65 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x4)" P-INDEP
-;* V66 tmp49 [V66,T48] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP
-; V67 tmp50 [V67,T45] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP
-; V68 tmp51 [V68,T42] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP
-; V69 tmp52 [V69,T46] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
+;* V66 tmp49 [V66,T45] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP
+; V67 tmp50 [V67,T43] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP
+; V68 tmp51 [V68,T40] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP
+; V69 tmp52 [V69,T44] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
;* V70 tmp53 [V70 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP
;* V71 tmp54 [V71 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x4)" P-INDEP
;* V72 tmp55 [V72 ] ( 0, 0 ) byref -> zero-ref single-def "field V41._reference (fldOffset=0x0)" P-INDEP
@@ -90,26 +90,23 @@
;* V79 tmp62 [V79 ] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x4)" P-INDEP
; V80 tmp63 [V80,T13] ( 3, 9 ) byref -> edi single-def "V07.[000..004)"
; V81 tmp64 [V81,T14] ( 3, 9 ) int -> [ebp-0x44] spill-single-def "V07.[004..008)"
-; V82 tmp65 [V82,T35] ( 3, 3 ) byref -> registers "V21.[000..004)"
-; V83 tmp66 [V83,T39] ( 3, 3 ) int -> registers "V21.[004..008)"
+; V82 tmp65 [V82,T33] ( 3, 3 ) byref -> registers "V21.[000..004)"
+; V83 tmp66 [V83,T37] ( 3, 3 ) int -> registers "V21.[004..008)"
; V84 GsCookie [V84 ] ( 1, 1 ) int -> [ebp-0x64] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V85 EHSlots [V85 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V86 LocAllocSP [V86,T49] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V86 LocAllocSP [V86,T46] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V87 cse0 [V87,T09] ( 3, 12 ) int -> [ebp-0x48] spill-single-def "CSE - moderate"
; V88 cse1 [V88,T10] ( 3, 12 ) int -> [ebp-0x4C] spill-single-def "CSE - moderate"
-; V89 cse2 [V89,T40] ( 3, 3 ) int -> edi "CSE - conservative"
-; V90 rat0 [V90,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V89 cse2 [V89,T38] ( 3, 3 ) int -> edi "CSE - conservative"
+; V90 rat0 [V90,T23] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V91 rat1 [V91,T19] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V92 rat2 [V92,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V92 rat2 [V92,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V93 rat3 [V93,T20] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V94 rat4 [V94,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V94 rat4 [V94,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V95 rat5 [V95,T21] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat6 [V96,T27] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V97 rat7 [V97,T47] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V98 rat8 [V98,T22] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V99 rat9 [V99,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
-; V100 rat10 [V100,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V101 rat11 [V101,T18] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
+; V96 rat6 [V96,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
+; V97 rat7 [V97,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V98 rat8 [V98,T18] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 92
@@ -168,7 +165,7 @@ G_M10461_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
mov gword ptr [ebp-0x58], eax
; GC ptr vars +{V11}
;; size=10 bbWeight=1 PerfScore 4.50
-G_M10461_IG06: ; bbWeight=1, gcVars=0000000000808010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG06: ; bbWeight=1, gcVars=0000000000408010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
@@ -217,13 +214,13 @@ G_M10461_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov dword ptr [ebp-0x1C], 0
jmp SHORT G_M10461_IG14
;; size=9 bbWeight=1 PerfScore 3.00
-G_M10461_IG12: ; bbWeight=1, gcVars=0000000000808010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V11 V23}
+G_M10461_IG12: ; bbWeight=1, gcVars=0000000000408010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V11}
mov ecx, gword ptr [ebp-0x58]
; gcrRegs +[ecx]
test ecx, ecx
je SHORT G_M10461_IG13
- ; GC ptr vars -{V11 V23}
+ ; GC ptr vars -{V11}
call [<unknown method>]
; gcrRegs -[ecx]
;; size=13 bbWeight=1 PerfScore 5.25
@@ -318,9 +315,9 @@ G_M10461_IG20: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs -[eax]
jmp SHORT G_M10461_IG22
;; size=49 bbWeight=1 PerfScore 14.50
-G_M10461_IG21: ; bbWeight=1, gcVars=0000000400008010 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M10461_IG21: ; bbWeight=1, gcVars=0000000100008010 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[edi]
- ; GC ptr vars +{V58}
+ ; GC ptr vars +{V32 V58}
cmp edi, 100
ja G_M10461_IG46
mov ecx, edi
@@ -340,7 +337,7 @@ G_M10461_IG21: ; bbWeight=1, gcVars=0000000400008010 {V00 V01 V58}, gcref
;; size=45 bbWeight=1 PerfScore 11.25
G_M10461_IG22: ; bbWeight=1, gcVars=0000000000008010 {V00 V01}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref
; byrRegs -[ecx]
- ; GC ptr vars -{V58}
+ ; GC ptr vars -{V32 V58}
mov dword ptr [ebp-0x44], eax
xor ecx, ecx
mov dword ptr [ebp-0x28], ecx
+0 (0.00%) : 202620.dasm - System.Collections.Generic.HashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable
1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (Instrumented Tier1)
@@ -10,37 +10,37 @@
;
; V00 this [V00,T05] ( 10, 24 ) ref -> [ebp-0x44] do-not-enreg[H] this class-hnd EH-live single-def <System.Collections.Generic.HashSet`1[System.__Canon]>
; V01 RetBuf [V01,T17] ( 6, 6 ) byref -> [ebp-0x48] EH-live single-def
-; V02 arg1 [V02,T46] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V03 arg2 [V03,T37] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
-; V04 loc0 [V04,T41] ( 3, 3 ) int -> edi
+; V02 arg1 [V02,T44] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V03 arg2 [V03,T35] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V04 loc0 [V04,T39] ( 3, 3 ) int -> edi
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]>
;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op <System.Collections.Generic.BitHelper>
; V08 loc4 [V08,T13] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live
; V09 loc5 [V09,T14] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V10 loc6 [V10,T42] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V10 loc6 [V10,T40] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V11 loc7 [V11,T18] ( 8, 7 ) ref -> [ebp-0x4C] class-hnd EH-live spill-single-def <<unknown class>>
;* V12 loc8 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
;* V13 loc9 [V13 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[int]>
; V14 loc10 [V14,T07] ( 9, 22 ) ref -> [ebp-0x50] class-hnd EH-live spill-single-def <<unknown class>>
;* V15 loc11 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
; V16 loc12 [V16,T02] ( 6, 32 ) int -> [ebp-0x34] spill-single-def
-; V17 loc13 [V17,T43] ( 2, 2 ) int -> ecx
+; V17 loc13 [V17,T41] ( 2, 2 ) int -> ecx
;* V18 tmp1 [V18 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V19 tmp2 [V19 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper>
;* V20 tmp3 [V20 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V21 tmp4 [V21 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <System.Collections.Generic.BitHelper>
;* V22 tmp5 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V23 tmp6 [V23,T33] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V23 tmp6 [V23,T31] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V24 tmp7 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp8 [V25,T03] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp9 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V27 tmp10 [V27 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper>
;* V28 tmp11 [V28 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V29 tmp12 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V30 tmp13 [V30,T34] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V30 tmp13 [V30,T32] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V31 tmp14 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V32 tmp15 [V32,T35] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V32 tmp15 [V32,T33] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V33 tmp16 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V34 tmp17 [V34 ] ( 0, 0 ) ref -> zero-ref single-def "handle histogram profile tmp"
;* V35 tmp18 [V35 ] ( 0, 0 ) ref -> zero-ref "handle histogram profile tmp"
@@ -49,14 +49,14 @@
;* V38 tmp21 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp22 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V40 tmp23 [V40,T19] ( 8, 7 ) int -> edi "Inline return value spill temp"
-; V41 tmp24 [V41,T36] ( 2, 4 ) int -> eax "Inlining Arg"
+; V41 tmp24 [V41,T34] ( 2, 4 ) int -> eax "Inlining Arg"
; V42 tmp25 [V42,T20] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]>
;* V43 tmp26 [V43 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V44 tmp27 [V44 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V45 tmp28 [V45 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V46 tmp29 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V47 tmp30 [V47 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V48 tmp31 [V48,T38] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V48 tmp31 [V48,T36] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V49 tmp32 [V49,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
;* V50 tmp33 [V50 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]>
; V51 tmp34 [V51,T10] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
@@ -66,18 +66,18 @@
;* V55 tmp38 [V55 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x4)" P-INDEP
;* V56 tmp39 [V56 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-INDEP
;* V57 tmp40 [V57 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP
-; V58 tmp41 [V58,T39] ( 3, 3 ) byref -> [ebp-0x54] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+; V58 tmp41 [V58,T37] ( 3, 3 ) byref -> [ebp-0x54] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
;* V59 tmp42 [V59 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x4)" P-INDEP
;* V60 tmp43 [V60 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP
;* V61 tmp44 [V61 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x4)" P-INDEP
-; V62 tmp45 [V62,T48] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP
-; V63 tmp46 [V63,T49] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
+; V62 tmp45 [V62,T46] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP
+; V63 tmp46 [V63,T47] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
;* V64 tmp47 [V64 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp48 [V65 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x4)" P-INDEP
-;* V66 tmp49 [V66,T53] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP
-; V67 tmp50 [V67,T50] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP
-; V68 tmp51 [V68,T47] ( 2, 2 ) byref -> edi "field V43._reference (fldOffset=0x0)" P-INDEP
-; V69 tmp52 [V69,T51] ( 2, 2 ) int -> eax "field V43._length (fldOffset=0x4)" P-INDEP
+;* V66 tmp49 [V66,T50] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP
+; V67 tmp50 [V67,T48] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP
+; V68 tmp51 [V68,T45] ( 2, 2 ) byref -> edi "field V43._reference (fldOffset=0x0)" P-INDEP
+; V69 tmp52 [V69,T49] ( 2, 2 ) int -> eax "field V43._length (fldOffset=0x4)" P-INDEP
;* V70 tmp53 [V70 ] ( 0, 0 ) byref -> zero-ref "field V44._reference (fldOffset=0x0)" P-INDEP
;* V71 tmp54 [V71 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x4)" P-INDEP
;* V72 tmp55 [V72 ] ( 0, 0 ) byref -> zero-ref single-def "field V45._reference (fldOffset=0x0)" P-INDEP
@@ -90,31 +90,28 @@
;* V79 tmp62 [V79 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x4)" P-INDEP
; V80 tmp63 [V80,T15] ( 3, 9 ) byref -> edi single-def "V07.[000..004)"
; V81 tmp64 [V81,T16] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V07.[004..008)"
-; V82 tmp65 [V82,T40] ( 3, 3 ) byref -> registers "V21.[000..004)"
-; V83 tmp66 [V83,T44] ( 3, 3 ) int -> registers "V21.[004..008)"
+; V82 tmp65 [V82,T38] ( 3, 3 ) byref -> registers "V21.[000..004)"
+; V83 tmp66 [V83,T42] ( 3, 3 ) int -> registers "V21.[004..008)"
; V84 tmp67 [V84,T04] ( 2, 32 ) ref -> edx "argument with side effect"
; V85 GsCookie [V85 ] ( 1, 1 ) int -> [ebp-0x58] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V86 EHSlots [V86 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V87 LocAllocSP [V87,T54] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V87 LocAllocSP [V87,T51] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V88 cse0 [V88,T11] ( 3, 12 ) int -> [ebp-0x3C] spill-single-def "CSE - moderate"
-; V89 cse1 [V89,T31] ( 4, 4 ) ref -> esi multi-def "CSE - moderate"
+; V89 cse1 [V89,T29] ( 4, 4 ) ref -> esi multi-def "CSE - moderate"
; V90 cse2 [V90,T08] ( 6, 13 ) ref -> esi multi-def "CSE - moderate"
-; V91 cse3 [V91,T32] ( 4, 4 ) ref -> edi multi-def "CSE - conservative"
-; V92 cse4 [V92,T26] ( 5, 5 ) ref -> edi multi-def "CSE - conservative"
+; V91 cse3 [V91,T30] ( 4, 4 ) ref -> edi multi-def "CSE - conservative"
+; V92 cse4 [V92,T25] ( 5, 5 ) ref -> edi multi-def "CSE - conservative"
; V93 cse5 [V93,T12] ( 3, 12 ) int -> [ebp-0x40] spill-single-def "CSE - moderate"
-; V94 cse6 [V94,T45] ( 3, 3 ) int -> edi "CSE - conservative"
-; V95 rat0 [V95,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V94 cse6 [V94,T43] ( 3, 3 ) int -> edi "CSE - conservative"
+; V95 rat0 [V95,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V96 rat1 [V96,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V97 rat2 [V97,T28] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V97 rat2 [V97,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V98 rat3 [V98,T23] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V99 rat4 [V99,T29] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V99 rat4 [V99,T28] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V100 rat5 [V100,T24] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V101 rat6 [V101,T30] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V102 rat7 [V102,T52] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V103 rat8 [V103,T25] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V104 rat9 [V104,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
-; V105 rat10 [V105,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V106 rat11 [V106,T21] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
+; V101 rat6 [V101,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat7 [V102,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V103 rat8 [V103,T21] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 80
@@ -360,7 +357,7 @@ G_M33533_IG21: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs -[eax]
jmp SHORT G_M33533_IG23
;; size=49 bbWeight=1 PerfScore 14.50
-G_M33533_IG22: ; bbWeight=1, gcVars=0000008000020020 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M33533_IG22: ; bbWeight=1, gcVars=0000002000020020 {V00 V01 V58}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; byrRegs -[edi]
; GC ptr vars +{V58}
mov ecx, 0xD1FFAB1E
librariestestsnotieredcompilation.run.windows.x86.Release.mch
-15 (-4.02%) : 99311.dasm - System.Data.DataRowComparer:CompareEquatableArraySystem.__Canon:ubyte (FullOpts)
@@ -16,7 +16,7 @@
; V06 tmp1 [V06,T05] ( 6, 8 ) byref -> ebx
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V08 tmp3 [V08,T06] ( 6, 8 ) int -> [ebp-0x1C] "VirtualCall with runtime lookup"
-; V09 tmp4 [V09,T09] ( 4, 4 ) int -> ebx
+; V09 tmp4 [V09,T09] ( 2, 3.96) int -> ecx
; V10 tmp5 [V10,T07] ( 4, 8 ) ref -> ebx "argument with side effect"
; V11 cse0 [V11,T08] ( 5, 7 ) int -> [ebp-0x20] spill-single-def "CSE - moderate"
; V12 rat0 [V12,T02] ( 3, 11.09) int -> ecx "fgMakeTemp is creating a new local variable"
@@ -120,10 +120,10 @@ G_M22994_IG10: ; bbWeight=1.98, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
nop
call [eax]
; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
+ xor ecx, ecx
test eax, eax
- sete bl
- test ebx, ebx
+ sete cl
+ test ecx, ecx
jne G_M22994_IG23
;; size=34 bbWeight=1.98 PerfScore 24.26
G_M22994_IG11: ; bbWeight=3.96, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
@@ -161,11 +161,11 @@ G_M22994_IG14: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
cmp gword ptr [ebp-0x18], 0
jne SHORT G_M22994_IG16
cmp eax, dword ptr [esi+0x04]
- jae G_M22994_IG25
+ jae SHORT G_M22994_IG25
mov dword ptr [ebp-0x14], eax
cmp gword ptr [esi+4*eax+0x08], 0
je SHORT G_M22994_IG20
- ;; size=33 bbWeight=0.02 PerfScore 0.31
+ ;; size=29 bbWeight=0.02 PerfScore 0.31
G_M22994_IG15: ; bbWeight=0.01, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ecx esi edi]
; byrRegs -[ebx]
@@ -207,19 +207,16 @@ G_M22994_IG19: ; bbWeight=0.02, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
nop
call [eax]
; gcrRegs -[ecx edx ebx]
- xor ebx, ebx
test eax, eax
- sete bl
- test ebx, ebx
mov edx, dword ptr [ebp-0x20]
- jne SHORT G_M22994_IG23
- ;; size=38 bbWeight=0.02 PerfScore 0.35
-G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M22994_IG23
+ ;; size=31 bbWeight=0.02 PerfScore 0.32
+G_M22994_IG20: ; bbWeight=0.04, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ebp-0x14]
inc eax
cmp edx, eax
- jg G_M22994_IG13
- ;; size=12 bbWeight=0.04 PerfScore 0.10
+ jg SHORT G_M22994_IG13
+ ;; size=8 bbWeight=0.04 PerfScore 0.10
G_M22994_IG21: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[esi edi]
mov eax, 1
@@ -248,6 +245,6 @@ G_M22994_IG25: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 373, prolog size 24, PerfScore 131.30, instruction count 134, allocated bytes for code 373 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
+; Total bytes of code 358, prolog size 24, PerfScore 131.27, instruction count 131, allocated bytes for code 358 (MethodHash=f2dda62d) for method System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
; ============================================================
-18 (-3.06%) : 6265.dasm - Microsoft.CodeAnalysis.NodeStateTable1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray
1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
@@ -8,22 +8,22 @@
; 2 inlinees with PGO data; 17 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T06] ( 10, 11.50) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
+; V00 this [V00,T06] ( 9, 11 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.TimeSpan>
;* V02 arg2 [V02 ] ( 0, 0 ) struct ( 4) zero-ref single-def <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]]>
; V03 arg3 [V03,T21] ( 3, 4 ) int -> [ebp-0x10] single-def
; V04 loc0 [V04 ] ( 5, 9 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]>
; V05 loc1 [V05,T26] ( 3, 3 ) ref -> [ebp-0x38] class-hnd exact spill-single-def <<unknown class>>
; V06 loc2 [V06,T05] ( 7, 14.50) int -> [ebp-0x24]
-; V07 tmp0 [V07,T38] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
+; V07 tmp0 [V07,T36] ( 2, 2 ) ref -> ecx class-hnd exact single-def "dup spill" <Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
;* V08 tmp1 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V10 tmp3 [V10,T16] ( 2, 8 ) int -> ecx "spilling helperCall"
;* V11 tmp4 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V12 tmp5 [V12,T15] ( 2, 8 ) ref -> [ebp-0x3C] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
;* V13 tmp6 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Object,int]>
-; V14 tmp7 [V14,T39] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V15 tmp8 [V15,T40] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
+; V14 tmp7 [V14,T37] ( 2, 2 ) ref -> edi class-hnd exact single-def "impAppendStmt" <<unknown class>>
+; V15 tmp8 [V15,T38] ( 2, 2 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <System.String>
; V16 tmp9 [V16,T19] ( 6, 6 ) ref -> [ebp-0x40] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalGeneratorRunStep>
;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 4) zero-ref single-def "spilled call-like call argument" <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.Object,int]]>
;* V18 tmp11 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[Microsoft.CodeAnalysis.NodeStateTable`1+TableEntry[System.__Canon]]>
@@ -40,43 +40,40 @@
; V29 tmp22 [V29,T23] ( 3, 4 ) int -> eax "Inline return value spill temp"
; V30 tmp23 [V30,T12] ( 3, 10.96) int -> eax "Inlining Arg"
; V31 tmp24 [V31,T18] ( 7, 7 ) ref -> edi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]>
-; V32 tmp25 [V32,T34] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
+; V32 tmp25 [V32,T33] ( 5, 2.50) int -> ebx single-def "Inline stloc first use temp"
;* V33 tmp26 [V33 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V34 tmp27 [V34,T49] ( 2, 1 ) int -> edx "Inline return value spill temp"
+; V34 tmp27 [V34,T47] ( 2, 1 ) int -> edx "Inline return value spill temp"
; V35 tmp28 [V35,T30] ( 3, 3 ) int -> edx "Inlining Arg"
-; V36 tmp29 [V36,T50] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
-; V37 tmp30 [V37,T52] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
+; V36 tmp29 [V36,T48] ( 2, 1 ) long -> [ebp+0x0C] do-not-enreg[F] single-def "field V01._ticks (fldOffset=0x0)" P-INDEP
+; V37 tmp30 [V37,T49] ( 1, 0.50) ref -> [ebp+0x08] single-def "field V02.array (fldOffset=0x0)" P-INDEP
; V38 tmp31 [V38,T24] ( 2, 4 ) ref -> [ebp-0x4C] spill-single-def "field V13.Item1 (fldOffset=0x0)" P-INDEP
; V39 tmp32 [V39,T25] ( 2, 4 ) int -> [ebp-0x30] spill-single-def "field V13.Item2 (fldOffset=0x4)" P-INDEP
-; V40 tmp33 [V40,T48] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
+; V40 tmp33 [V40,T46] ( 2, 1 ) ref -> eax "field V17.array (fldOffset=0x0)" P-INDEP
;* V41 tmp34 [V41 ] ( 0, 0 ) ref -> zero-ref "field V25.Item1 (fldOffset=0x0)" P-INDEP
;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "field V25.Item2 (fldOffset=0x4)" P-INDEP
-; V43 tmp36 [V43,T41] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V44 tmp37 [V44,T43] ( 2, 2 ) int -> edx "argument with side effect"
+; V43 tmp36 [V43,T39] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V44 tmp37 [V44,T41] ( 2, 2 ) int -> edx "argument with side effect"
; V45 tmp38 [V45,T04] ( 2, 16 ) int -> ebx "argument with side effect"
; V46 tmp39 [V46,T07] ( 3, 12 ) ref -> edx "arr expr"
; V47 tmp40 [V47,T08] ( 3, 12 ) ref -> ecx "arr expr"
; V48 tmp41 [V48,T09] ( 3, 12 ) ref -> eax "arr expr"
; V49 tmp42 [V49,T11] ( 3, 12 ) int -> edx "index expr"
; V50 tmp43 [V50,T10] ( 3, 12 ) byref -> eax "BlockOp address local"
-; V51 tmp44 [V51,T42] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V52 tmp45 [V52,T44] ( 2, 2 ) int -> eax "argument with side effect"
+; V51 tmp44 [V51,T40] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V52 tmp45 [V52,T42] ( 2, 2 ) int -> eax "argument with side effect"
; V53 cse0 [V53,T31] ( 3, 3 ) int -> [ebp-0x34] spill-single-def "CSE - conservative"
; V54 cse1 [V54,T20] ( 3, 6 ) ref -> eax "CSE - conservative"
-; V55 cse2 [V55,T45] ( 3, 1.50) ref -> ecx "CSE - conservative"
-; V56 cse3 [V56,T46] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
-; V57 cse4 [V57,T47] ( 3, 1.50) ref -> edx "CSE - conservative"
+; V55 cse2 [V55,T43] ( 3, 1.50) ref -> ecx "CSE - conservative"
+; V56 cse3 [V56,T44] ( 3, 1.50) ref -> [ebp-0x50] spill-single-def "CSE - conservative"
+; V57 cse4 [V57,T45] ( 3, 1.50) ref -> edx "CSE - conservative"
; V58 cse5 [V58,T14] ( 4, 8 ) ref -> ecx "CSE - moderate"
-; V59 rat0 [V59,T35] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V60 rat1 [V60,T37] ( 3, 2 ) int -> ebx "runtime lookup"
+; V59 rat0 [V59,T34] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V60 rat1 [V60,T35] ( 3, 2 ) int -> ebx "runtime lookup"
; V61 rat2 [V61,T32] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
-; V62 rat3 [V62,T36] ( 2, 2 ) int -> ecx "Spilling to split statement for tree"
-;* V63 rat4 [V63,T51] ( 0, 0 ) int -> zero-ref "runtime lookup"
-; V64 rat5 [V64,T33] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable"
-; V65 rat6 [V65,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V66 rat7 [V66,T03] ( 3, 16 ) int -> ebx "runtime lookup"
-; V67 rat8 [V67,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
-; V68 rat9 [V68,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
+; V62 rat3 [V62,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V63 rat4 [V63,T03] ( 3, 16 ) int -> ebx "runtime lookup"
+; V64 rat5 [V64,T01] ( 3, 22.40) int -> ebx "fgMakeTemp is creating a new local variable"
+; V65 rat6 [V65,T28] ( 3, 3 ) byref -> edx "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 68
@@ -172,14 +169,8 @@ G_M31021_IG07: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
; GC ptr vars +{V05}
xor edx, edx
mov dword ptr [ebp-0x24], edx
- mov ecx, dword ptr [esi]
- mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx]
- mov ecx, dword ptr [ecx+0x14]
- test ecx, ecx
- jne G_M31021_IG13
jmp G_M31021_IG13
- ;; size=34 bbWeight=0.50 PerfScore 7.25
+ ;; size=16 bbWeight=0.50 PerfScore 2.62
G_M31021_IG08: ; bbWeight=2, gcVars=0000000004000000 {V05}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
; GC ptr vars -{V20}
@@ -404,6 +395,6 @@ G_M31021_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=000000
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 589, prolog size 23, PerfScore 297.74, instruction count 192, allocated bytes for code 589 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
+; Total bytes of code 571, prolog size 23, PerfScore 293.12, instruction count 186, allocated bytes for code 571 (MethodHash=ed5686d2) for method Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
; ============================================================
-14 (-2.37%) : 34735.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.Canon]:AddStrategy(System.Canon,System.Object):this (FullOpts)
@@ -8,64 +8,61 @@
; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 24, 21.50) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
+; V00 this [V00,T00] ( 23, 21 ) ref -> esi this class-hnd single-def <Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]>
; V01 arg1 [V01,T07] ( 10, 7.50) ref -> edi class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T38] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
+; V02 arg2 [V02,T36] ( 2, 1.50) ref -> ebx class-hnd single-def <System.Object>
; V03 loc0 [V03,T06] ( 6, 11 ) int -> ebx
;* V04 loc1 [V04 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
-; V05 tmp0 [V05,T33] ( 2, 2 ) int -> ecx "spilling helperCall"
-; V06 tmp1 [V06,T31] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]>
-; V07 tmp2 [V07,T32] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
+; V05 tmp0 [V05,T31] ( 2, 2 ) int -> ecx "spilling helperCall"
+; V06 tmp1 [V06,T29] ( 2, 2 ) ref -> edx class-hnd exact single-def "dup spill" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]>
+; V07 tmp2 [V07,T30] ( 2, 2 ) ref -> [ebp-0x14] class-hnd exact spill-single-def "impAppendStmt" <Grace.Data.Immutable.ImmutableHashTree`2[System.__Canon,System.__Canon]>
;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref single-def
;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref single-def
;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref single-def
;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref single-def
-; V12 tmp7 [V12,T24] ( 4, 2 ) ref -> edx
-;* V13 tmp8 [V13,T41] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V12 tmp7 [V12,T22] ( 4, 2 ) ref -> edx
+;* V13 tmp8 [V13,T38] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V14 tmp9 [V14,T10] ( 5, 5 ) ref -> eax class-hnd exact single-def "NewObj constructor temp" <Grace.Data.Immutable.ImmutableHashTree`2+UpdateDelegate[System.__Canon,System.__Canon]>
;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V17 tmp12 [V17,T03] ( 3, 16 ) int -> edx "spilling helperCall"
; V18 tmp13 [V18,T09] ( 3, 8 ) int -> [ebp-0x10] "spilling helperCall"
;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "non-inline candidate call"
-; V20 tmp15 [V20,T26] ( 3, 2 ) int -> eax "spilling helperCall"
+; V20 tmp15 [V20,T24] ( 3, 2 ) int -> eax "spilling helperCall"
;* V21 tmp16 [V21 ] ( 0, 0 ) ref -> zero-ref
;* V22 tmp17 [V22 ] ( 0, 0 ) ref -> zero-ref single-def
-; V23 tmp18 [V23,T35] ( 3, 1.50) int -> eax
+; V23 tmp18 [V23,T33] ( 3, 1.50) int -> eax
;* V24 tmp19 [V24 ] ( 0, 0 ) ref -> zero-ref single-def
-; V25 tmp20 [V25,T27] ( 3, 2 ) int -> eax "spilling helperCall"
+; V25 tmp20 [V25,T25] ( 3, 2 ) int -> eax "spilling helperCall"
;* V26 tmp21 [V26 ] ( 0, 0 ) ref -> zero-ref
-; V27 tmp22 [V27,T34] ( 3, 1.50) ref -> edi
-; V28 tmp23 [V28,T28] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp22 [V27,T32] ( 3, 1.50) ref -> edi
+; V28 tmp23 [V28,T26] ( 3, 2 ) int -> eax "spilling helperCall"
;* V29 tmp24 [V29 ] ( 0, 0 ) ref -> zero-ref
;* V30 tmp25 [V30 ] ( 0, 0 ) ref -> zero-ref single-def
-; V31 tmp26 [V31,T36] ( 3, 1.50) int -> eax
+; V31 tmp26 [V31,T34] ( 3, 1.50) int -> eax
;* V32 tmp27 [V32 ] ( 0, 0 ) ref -> zero-ref single-def
;* V33 tmp28 [V33 ] ( 0, 0 ) ref -> zero-ref
-; V34 tmp29 [V34,T39] ( 2, 1 ) ref -> edi
+; V34 tmp29 [V34,T37] ( 2, 1 ) ref -> edi
; V35 tmp30 [V35,T11] ( 3, 3 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inlining Arg" <<unknown class>>
-; V36 cse0 [V36,T37] ( 2, 1 ) int -> ecx "CSE - moderate"
-; V37 cse1 [V37,T25] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
+; V36 cse0 [V36,T35] ( 2, 1 ) int -> ecx "CSE - moderate"
+; V37 cse1 [V37,T23] ( 4, 2 ) byref -> [ebp-0x1C] spill-single-def "CSE - moderate"
; V38 cse2 [V38,T04] ( 9, 13 ) byref -> [ebp-0x20] multi-def "CSE - aggressive"
-; V39 rat0 [V39,T18] ( 2, 2 ) int -> ecx "Spilling to split statement for tree"
-;* V40 rat1 [V40,T40] ( 0, 0 ) int -> zero-ref "runtime lookup"
-; V41 rat2 [V41,T12] ( 2, 2 ) int -> ecx "fgMakeTemp is creating a new local variable"
-; V42 rat3 [V42,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V43 rat4 [V43,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable"
-; V44 rat5 [V44,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V45 rat6 [V45,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
-; V46 rat7 [V46,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V47 rat8 [V47,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V48 rat9 [V48,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V49 rat10 [V49,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V50 rat11 [V50,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V39 rat0 [V39,T08] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V40 rat1 [V40,T05] ( 3, 11.20) int -> eax "fgMakeTemp is creating a new local variable"
+; V41 rat2 [V41,T02] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V42 rat3 [V42,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
+; V43 rat4 [V43,T17] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V44 rat5 [V44,T12] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V45 rat6 [V45,T18] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V46 rat7 [V46,T13] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V47 rat8 [V47,T19] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V48 rat9 [V48,T14] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V49 rat10 [V49,T20] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V50 rat11 [V50,T27] ( 3, 2 ) int -> eax "runtime lookup"
; V51 rat12 [V51,T15] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V52 rat13 [V52,T22] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V53 rat14 [V53,T29] ( 3, 2 ) int -> eax "runtime lookup"
-; V54 rat15 [V54,T16] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V55 rat16 [V55,T23] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V56 rat17 [V56,T30] ( 3, 2 ) int -> edx "runtime lookup"
-; V57 rat18 [V57,T17] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V52 rat13 [V52,T21] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V53 rat14 [V53,T28] ( 3, 2 ) int -> edx "runtime lookup"
+; V54 rat15 [V54,T16] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
; TEMP_01 int -> [ebp-0x24]
;
; Lcl frame size = 24
@@ -101,14 +98,8 @@ G_M56103_IG03: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=0
;; size=22 bbWeight=0.50 PerfScore 4.25
G_M56103_IG04: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
xor ebx, ebx
- mov ecx, dword ptr [esi]
- mov ecx, dword ptr [ecx+0x24]
- mov ecx, dword ptr [ecx]
- mov ecx, dword ptr [ecx+0x08]
- test ecx, ecx
- jne SHORT G_M56103_IG09
jmp SHORT G_M56103_IG09
- ;; size=18 bbWeight=0.50 PerfScore 5.75
+ ;; size=4 bbWeight=0.50 PerfScore 1.12
G_M56103_IG05: ; bbWeight=2, gcVars=0000000000000010 {V38}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars +{V38}
mov ecx, dword ptr [esi]
@@ -374,7 +365,7 @@ G_M56103_IG35: ; bbWeight=0.50, gcrefRegs=000000C8 {ebx esi edi}, byrefRe
test edx, edx
je SHORT G_M56103_IG39
;; size=37 bbWeight=0.50 PerfScore 8.88
-G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG36: ; bbWeight=0.50, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; byrRegs -[eax]
mov ecx, edx
call CORINFO_HELP_NEWSFAST
@@ -432,9 +423,9 @@ G_M56103_IG38: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret 4
;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000040800000 {V07 V37}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ebx edi]
- ; GC ptr vars +{V07 V25 V37}
+ ; GC ptr vars +{V07 V23 V37}
mov edx, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov edx, eax
@@ -442,11 +433,11 @@ G_M56103_IG39: ; bbWeight=0.10, gcVars=0000000102000000 {V07 V37}, gcrefR
;; size=14 bbWeight=0.10 PerfScore 0.35
G_M56103_IG40: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ebx edi]
- ; GC ptr vars -{V07 V25 V37}
+ ; GC ptr vars -{V07 V23 V37}
call [System.MulticastDelegate:ThrowNullThisInDelegateToInstance()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 591, prolog size 9, PerfScore 219.48, instruction count 207, allocated bytes for code 591 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
+; Total bytes of code 577, prolog size 9, PerfScore 214.85, instruction count 201, allocated bytes for code 577 (MethodHash=e89c24d8) for method Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
; ============================================================
+0 (0.00%) : 79241.dasm - System.Collections.Generic.HashSet1[System.ValueTuple
2[System.Canon,int]]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable1[System.ValueTuple
2[System.Canon,int]],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)
@@ -10,42 +10,42 @@
;
; V00 this [V00,T04] ( 10, 24 ) ref -> [ebp-0x48] do-not-enreg[H] this class-hnd EH-live single-def <System.Collections.Generic.HashSet`1[System.ValueTuple`2[System.__Canon,int]]>
; V01 RetBuf [V01,T14] ( 6, 6 ) byref -> [ebp-0x4C] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]>
-; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
-; V04 loc0 [V04,T35] ( 3, 3 ) int -> edi
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,int]]>
+; V03 arg2 [V03,T29] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V04 loc0 [V04,T33] ( 3, 3 ) int -> edi
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]>
;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op <System.Collections.Generic.BitHelper>
; V08 loc4 [V08,T10] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live
; V09 loc5 [V09,T11] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V10 loc6 [V10,T36] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
-; V11 loc7 [V11,T22] ( 6, 5 ) ref -> [ebp-0x50] class-hnd EH-live spill-single-def <<unknown class>>
+; V10 loc6 [V10,T34] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V11 loc7 [V11,T21] ( 6, 5 ) ref -> [ebp-0x50] class-hnd EH-live spill-single-def <<unknown class>>
; V12 loc8 [V12 ] ( 1, 1 ) struct ( 8) [ebp-0x38] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]>
;* V13 loc9 [V13 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[int]>
; V14 loc10 [V14,T06] ( 7, 20 ) ref -> [ebp-0x54] class-hnd EH-live spill-single-def <<unknown class>>
; V15 loc11 [V15 ] ( 2, 16 ) struct ( 8) [ebp-0x40] do-not-enreg[XS] must-init addr-exposed <System.ValueTuple`2[System.__Canon,int]>
; V16 loc12 [V16,T03] ( 5, 28 ) int -> eax
-; V17 loc13 [V17,T37] ( 2, 2 ) int -> ecx
+; V17 loc13 [V17,T35] ( 2, 2 ) int -> ecx
;* V18 tmp1 [V18 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V19 tmp2 [V19 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper>
;* V20 tmp3 [V20 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V21 tmp4 [V21 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <System.Collections.Generic.BitHelper>
;* V22 tmp5 [V22 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V23 tmp6 [V23,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V23 tmp6 [V23,T25] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V24 tmp7 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp8 [V25,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp9 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V27 tmp10 [V27 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.BitHelper>
;* V28 tmp11 [V28 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V29 tmp12 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V30 tmp13 [V30,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V30 tmp13 [V30,T26] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V31 tmp14 [V31 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V32 tmp15 [V32,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V32 tmp15 [V32,T27] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V33 tmp16 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V34 tmp17 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V35 tmp18 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V36 tmp19 [V36,T15] ( 8, 7 ) int -> edi "Inline return value spill temp"
-; V37 tmp20 [V37,T30] ( 2, 4 ) int -> eax "Inlining Arg"
+; V37 tmp20 [V37,T28] ( 2, 4 ) int -> eax "Inlining Arg"
; V38 tmp21 [V38,T16] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]>
;* V39 tmp22 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V40 tmp23 [V40 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
@@ -54,7 +54,7 @@
;* V43 tmp26 [V43 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V44 tmp27 [V44 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V45 tmp28 [V45 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V46 tmp29 [V46,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V46 tmp29 [V46,T30] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V47 tmp30 [V47,T07] ( 3, 12 ) int -> edx "Inline stloc first use temp"
;* V48 tmp31 [V48 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]>
;* V49 tmp32 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
@@ -72,18 +72,18 @@
;* V61 tmp44 [V61 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x4)" P-INDEP
; V62 tmp45 [V62 ] ( 2, 16 ) ref -> [ebp-0x40] do-not-enreg[X] addr-exposed "field V15.Item1 (fldOffset=0x0)" P-DEP
; V63 tmp46 [V63 ] ( 2, 16 ) int -> [ebp-0x3C] do-not-enreg[X] addr-exposed "field V15.Item2 (fldOffset=0x4)" P-DEP
-; V64 tmp47 [V64,T33] ( 3, 3 ) byref -> [ebp-0x58] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+; V64 tmp47 [V64,T31] ( 3, 3 ) byref -> [ebp-0x58] spill-single-def "field V18._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp48 [V65 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x4)" P-INDEP
;* V66 tmp49 [V66 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP
;* V67 tmp50 [V67 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x4)" P-INDEP
-; V68 tmp51 [V68,T42] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP
-; V69 tmp52 [V69,T43] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
+; V68 tmp51 [V68,T40] ( 2, 2 ) int -> eax "field V26.Item1 (fldOffset=0x0)" P-INDEP
+; V69 tmp52 [V69,T41] ( 2, 2 ) int -> edx "field V26.Item2 (fldOffset=0x4)" P-INDEP
;* V70 tmp53 [V70 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP
;* V71 tmp54 [V71 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x4)" P-INDEP
-;* V72 tmp55 [V72,T47] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP
-; V73 tmp56 [V73,T44] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP
-; V74 tmp57 [V74,T41] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP
-; V75 tmp58 [V75,T45] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
+;* V72 tmp55 [V72,T44] ( 0, 0 ) int -> zero-ref "field V33.Item1 (fldOffset=0x0)" P-INDEP
+; V73 tmp56 [V73,T42] ( 2, 2 ) int -> ecx "field V33.Item2 (fldOffset=0x4)" P-INDEP
+; V74 tmp57 [V74,T39] ( 2, 2 ) byref -> edi "field V39._reference (fldOffset=0x0)" P-INDEP
+; V75 tmp58 [V75,T43] ( 2, 2 ) int -> eax "field V39._length (fldOffset=0x4)" P-INDEP
;* V76 tmp59 [V76 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP
;* V77 tmp60 [V77 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x4)" P-INDEP
;* V78 tmp61 [V78 ] ( 0, 0 ) byref -> zero-ref single-def "field V41._reference (fldOffset=0x0)" P-INDEP
@@ -96,25 +96,22 @@
;* V85 tmp68 [V85 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x4)" P-INDEP
; V86 tmp69 [V86,T12] ( 3, 9 ) byref -> edi single-def "V07.[000..004)"
; V87 tmp70 [V87,T13] ( 3, 9 ) int -> [ebp-0x44] spill-single-def "V07.[004..008)"
-; V88 tmp71 [V88,T34] ( 3, 3 ) byref -> registers "V21.[000..004)"
-; V89 tmp72 [V89,T38] ( 3, 3 ) int -> registers "V21.[004..008)"
+; V88 tmp71 [V88,T32] ( 3, 3 ) byref -> registers "V21.[000..004)"
+; V89 tmp72 [V89,T36] ( 3, 3 ) int -> registers "V21.[004..008)"
; V90 GsCookie [V90 ] ( 1, 1 ) int -> [ebp-0x5C] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V91 EHSlots [V91 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V92 LocAllocSP [V92,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V92 LocAllocSP [V92,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V93 cse0 [V93,T09] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V94 cse1 [V94,T39] ( 3, 3 ) int -> edi "CSE - conservative"
-; V95 rat0 [V95,T23] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V94 cse1 [V94,T37] ( 3, 3 ) int -> edi "CSE - conservative"
+; V95 rat0 [V95,T22] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V96 rat1 [V96,T18] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V97 rat2 [V97,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V97 rat2 [V97,T23] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V98 rat3 [V98,T19] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V99 rat4 [V99,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V99 rat4 [V99,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V100 rat5 [V100,T20] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V101 rat6 [V101,T26] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V102 rat7 [V102,T46] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V103 rat8 [V103,T21] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V104 rat9 [V104,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
-; V105 rat10 [V105,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V106 rat11 [V106,T17] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
+; V101 rat6 [V101,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat7 [V102,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V103 rat8 [V103,T17] ( 3, 6 ) int -> edi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 84
@@ -174,7 +171,7 @@ G_M10461_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
mov gword ptr [ebp-0x50], eax
; GC ptr vars +{V11}
;; size=10 bbWeight=1 PerfScore 4.50
-G_M10461_IG06: ; bbWeight=1, gcVars=0000000000404010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG06: ; bbWeight=1, gcVars=0000000000204010 {V00 V01 V11}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
@@ -223,7 +220,7 @@ G_M10461_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov dword ptr [ebp-0x1C], 0
jmp SHORT G_M10461_IG14
;; size=9 bbWeight=1 PerfScore 3.00
-G_M10461_IG12: ; bbWeight=1, gcVars=0000000000404010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG12: ; bbWeight=1, gcVars=0000000000204010 {V00 V01 V11}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars +{V11}
mov ecx, gword ptr [ebp-0x50]
; gcrRegs +[ecx]
@@ -324,7 +321,7 @@ G_M10461_IG20: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs -[eax]
jmp SHORT G_M10461_IG23
;; size=49 bbWeight=1 PerfScore 14.50
-G_M10461_IG21: ; bbWeight=1, gcVars=0000000200004010 {V00 V01 V64}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M10461_IG21: ; bbWeight=1, gcVars=0000000080004010 {V00 V01 V64}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; byrRegs -[edi]
; GC ptr vars +{V64}
mov eax, bword ptr [ebp-0x58]
+0 (0.00%) : 9251.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable
1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)
@@ -10,14 +10,14 @@
;
; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x40] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 RetBuf [V01,T16] ( 6, 6 ) byref -> [ebp-0x44] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def
;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]>
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live
; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x48] do-not-enreg[M] class-hnd EH-live <<unknown class>>
;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax
@@ -26,20 +26,20 @@
;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup"
;* V21 tmp8 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V28 tmp15 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x34] "Inline return value spill temp"
; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]>
;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
@@ -48,24 +48,24 @@
;* V37 tmp24 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V38 tmp25 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp26 [V39 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V40 tmp27 [V40,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V40 tmp27 [V40,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V41 tmp28 [V41,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp"
; V42 tmp29 [V42,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
; V43 tmp30 [V43,T07] ( 3, 24 ) byref -> edx "dup spill"
;* V44 tmp31 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V46 tmp33 [V46,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V46 tmp33 [V46,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP
;* V48 tmp35 [V48 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP
;* V49 tmp36 [V49 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP
-; V50 tmp37 [V50,T42] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP
-; V51 tmp38 [V51,T43] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
+; V50 tmp37 [V50,T40] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP
+; V51 tmp38 [V51,T41] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V52 tmp39 [V52 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP
;* V53 tmp40 [V53 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
-;* V54 tmp41 [V54,T47] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP
-; V55 tmp42 [V55,T44] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP
-; V56 tmp43 [V56,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
-; V57 tmp44 [V57,T45] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+;* V54 tmp41 [V54,T44] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP
+; V55 tmp42 [V55,T42] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP
+; V56 tmp43 [V56,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
+; V57 tmp44 [V57,T43] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP
;* V59 tmp46 [V59 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP
;* V60 tmp47 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP
@@ -74,27 +74,24 @@
;* V63 tmp50 [V63 ] ( 0, 0 ) int -> zero-ref single-def "field V39._length (fldOffset=0x4)" P-INDEP
; V64 tmp51 [V64,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)"
; V65 tmp52 [V65,T14] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V06.[004..008)"
-; V66 tmp53 [V66,T36] ( 3, 3 ) byref -> edi "V16.[000..004)"
-; V67 tmp54 [V67,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V66 tmp53 [V66,T34] ( 3, 3 ) byref -> edi "V16.[000..004)"
+; V67 tmp54 [V67,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V68 tmp55 [V68,T03] ( 2, 32 ) ref -> edx "argument with side effect"
; V69 GsCookie [V69 ] ( 1, 1 ) int -> [ebp-0x4C] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V70 EHSlots [V70 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V71 LocAllocSP [V71,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V71 LocAllocSP [V71,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V72 cse0 [V72,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V73 cse1 [V73,T39] ( 3, 3 ) int -> eax "CSE - conservative"
-; V74 rat0 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V73 cse1 [V73,T37] ( 3, 3 ) int -> eax "CSE - conservative"
+; V74 rat0 [V74,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat1 [V75,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat2 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat2 [V76,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat3 [V77,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V78 rat4 [V78,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V78 rat4 [V78,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V79 rat5 [V79,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V80 rat6 [V80,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V81 rat7 [V81,T46] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V82 rat8 [V82,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V83 rat9 [V83,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
-; V84 rat10 [V84,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V85 rat11 [V85,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
-; V86 rat12 [V86,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V80 rat6 [V80,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
+; V81 rat7 [V81,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V82 rat8 [V82,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
+; V83 rat9 [V83,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 68
+0 (0.00%) : 68139.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.Canon,System.Canon]:CopyToObjects(System.Object[],int):this (FullOpts)
@@ -11,7 +11,7 @@
; V00 this [V00,T10] ( 4, 4 ) ref -> [ebp-0x1C] this class-hnd single-def <System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]>
; V01 arg1 [V01,T11] ( 3, 18 ) ref -> ebx class-hnd single-def <System.Object[]>
; V02 arg2 [V02,T06] ( 3, 48 ) int -> esi
-; V03 loc0 [V03,T17] ( 3, 6 ) ref -> [ebp-0x20] class-hnd exact spill-single-def <<unknown class>>
+; V03 loc0 [V03,T15] ( 3, 6 ) ref -> [ebp-0x20] class-hnd exact spill-single-def <<unknown class>>
; V04 loc1 [V04,T12] ( 5, 17 ) int -> [ebp-0x10]
;* V05 loc2 [V05 ] ( 0, 0 ) struct ( 4) zero-ref <System.Collections.Concurrent.ConcurrentDictionary`2+VolatileNode[System.__Canon,System.__Canon]>
; V06 loc3 [V06,T02] ( 7, 88 ) ref -> [ebp-0x24] class-hnd <<unknown class>>
@@ -21,20 +21,17 @@
;* V10 tmp3 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V11 tmp4 [V11,T04] ( 2, 64 ) ref -> ecx class-hnd "Inlining Arg" <System.__Canon>
; V12 tmp5 [V12,T05] ( 2, 64 ) ref -> edx class-hnd "Inlining Arg" <System.__Canon>
-; V13 tmp6 [V13,T16] ( 2, 8 ) ref -> eax "field V05._node (fldOffset=0x0)" P-INDEP
+; V13 tmp6 [V13,T14] ( 2, 8 ) ref -> eax "field V05._node (fldOffset=0x0)" P-INDEP
; V14 tmp7 [V14,T07] ( 2, 32 ) ref -> [ebp-0x28] spill-single-def "field V07.key (fldOffset=0x0)" P-INDEP
; V15 tmp8 [V15,T08] ( 2, 32 ) ref -> [ebp-0x2C] spill-single-def "field V07.value (fldOffset=0x4)" P-INDEP
; V16 cse0 [V16,T13] ( 2, 17 ) int -> edi hoist "CSE - moderate"
-; V17 cse1 [V17,T18] ( 3, 6 ) int -> [ebp-0x14] spill-single-def "CSE - moderate"
-; V18 rat0 [V18,T20] ( 3, 4.40) int -> [ebp-0x18] spill-single-def "Spilling to split statement for tree"
-; V19 rat1 [V19,T21] ( 3, 4 ) int -> edi "runtime lookup"
-; V20 rat2 [V20,T19] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable"
-;* V21 rat3 [V21,T15] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V22 rat4 [V22,T22] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V23 rat5 [V23,T14] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-;* V24 rat6 [V24,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V25 rat7 [V25,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V26 rat8 [V26,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V17 cse1 [V17,T16] ( 3, 6 ) int -> [ebp-0x14] spill-single-def "CSE - moderate"
+; V18 rat0 [V18,T18] ( 3, 4.40) int -> [ebp-0x18] spill-single-def "Spilling to split statement for tree"
+; V19 rat1 [V19,T19] ( 3, 4 ) int -> edi "runtime lookup"
+; V20 rat2 [V20,T17] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable"
+;* V21 rat3 [V21,T03] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V22 rat4 [V22,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V23 rat5 [V23,T01] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 32
@@ -77,7 +74,7 @@ G_M20844_IG02: ; bbWeight=1, gcVars=00000400 {V00}, gcrefRegs=00000008 {e
test edi, edi
je SHORT G_M20844_IG04
;; size=51 bbWeight=1 PerfScore 22.75
-G_M20844_IG03: ; bbWeight=0.80, gcVars=00020400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M20844_IG03: ; bbWeight=0.80, gcVars=00008400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
jmp SHORT G_M20844_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
@@ -141,7 +138,7 @@ G_M20844_IG06: ; bbWeight=16, gcrefRegs=00000009 {eax ebx}, byrefRegs=000
test eax, eax
jne SHORT G_M20844_IG06
;; size=65 bbWeight=16 PerfScore 324.00
-G_M20844_IG07: ; bbWeight=4, gcVars=00020400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M20844_IG07: ; bbWeight=4, gcVars=00008400 {V00 V03}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
; GC ptr vars -{V06}
mov edx, dword ptr [ebp-0x10]
realworld.run.windows.x86.checked.mch
-32 (-0.43%) : 15279.dasm - Microsoft.ML.Transforms.Text.TextFeaturizingEstimator:Fit(Microsoft.ML.IDataView):Microsoft.ML.ITransformer:this (FullOpts)
@@ -139,34 +139,34 @@
; V128 tmp94 [V128,T17] ( 6, 16 ) ref -> [ebp-0x168] class-hnd exact "Inlining Arg" <System.String>
; V129 tmp95 [V129,T132] ( 3, 3 ) ref -> [ebp-0x16C] class-hnd spill-single-def "Inlining Arg" <System.__Canon>
; V130 tmp96 [V130,T28] ( 4, 16 ) ref -> esi class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
-; V131 tmp97 [V131,T29] ( 4, 16 ) ref -> [ebp-0x170] class-hnd exact "Inlining Arg" <System.String>
-; V132 tmp98 [V132,T53] ( 6, 10 ) ref -> [ebp-0x174] class-hnd "Inline stloc first use temp" <System.String[]>
+; V131 tmp97 [V131,T29] ( 4, 16 ) ref -> edx class-hnd exact "Inlining Arg" <System.String>
+; V132 tmp98 [V132,T53] ( 6, 10 ) ref -> [ebp-0x170] class-hnd "Inline stloc first use temp" <System.String[]>
; V133 tmp99 [V133,T46] ( 8, 12 ) int -> registers "Inline stloc first use temp"
; V134 tmp100 [V134,T18] ( 6, 16 ) ref -> eax class-hnd exact "Inlining Arg" <System.String>
;* V135 tmp101 [V135 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V136 tmp102 [V136,T133] ( 3, 3 ) ref -> [ebp-0x178] class-hnd spill-single-def "Inlining Arg" <System.__Canon>
+; V136 tmp102 [V136,T133] ( 3, 3 ) ref -> [ebp-0x174] class-hnd spill-single-def "Inlining Arg" <System.__Canon>
;* V137 tmp103 [V137 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
;* V138 tmp104 [V138 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String>
-; V139 tmp105 [V139,T188] ( 3, 1.50) ref -> [ebp-0x17C] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V139 tmp105 [V139,T188] ( 3, 1.50) ref -> [ebp-0x178] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V140 tmp106 [V140,T153] ( 4, 2 ) int -> [ebp-0x24] spill-single-def "Inline stloc first use temp"
; V141 tmp107 [V141,T134] ( 3, 3 ) ref -> ebx class-hnd single-def "Inlining Arg" <Microsoft.ML.ITransformer>
;* V142 tmp108 [V142,T243] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V143 tmp109 [V143,T86] ( 3, 5 ) ref -> ebx class-hnd exact single-def "Inlining Arg" <System.String>
;* V144 tmp110 [V144 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView>
;* V145 tmp111 [V145 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V146 tmp112 [V146,T135] ( 3, 3 ) ref -> [ebp-0x180] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
-; V147 tmp113 [V147,T93] ( 4, 4 ) ref -> [ebp-0x184] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
-; V148 tmp114 [V148,T110] ( 7, 3.50) ref -> [ebp-0x188] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V146 tmp112 [V146,T135] ( 3, 3 ) ref -> [ebp-0x17C] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
+; V147 tmp113 [V147,T93] ( 4, 4 ) ref -> [ebp-0x180] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
+; V148 tmp114 [V148,T110] ( 7, 3.50) ref -> [ebp-0x184] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V149 tmp115 [V149,T206] ( 3, 1.50) int -> edx "Inline return value spill temp"
;* V150 tmp116 [V150 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
-; V151 tmp117 [V151,T94] ( 4, 4 ) ref -> [ebp-0x18C] class-hnd spill-single-def "Inlining Arg" <int[]>
-; V152 tmp118 [V152,T111] ( 7, 3.50) ref -> [ebp-0x190] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V151 tmp117 [V151,T94] ( 4, 4 ) ref -> [ebp-0x188] class-hnd spill-single-def "Inlining Arg" <int[]>
+; V152 tmp118 [V152,T111] ( 7, 3.50) ref -> [ebp-0x18C] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V153 tmp119 [V153,T207] ( 3, 1.50) int -> edx "Inline return value spill temp"
;* V154 tmp120 [V154 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
;* V155 tmp121 [V155 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String>
; V156 tmp122 [V156,T30] ( 4, 16 ) ref -> eax class-hnd exact "Inlining Arg" <System.String>
; V157 tmp123 [V157,T31] ( 4, 16 ) ref -> edx class-hnd exact "Inlining Arg" <System.String>
-; V158 tmp124 [V158,T54] ( 6, 10 ) ref -> [ebp-0x194] class-hnd "Inline stloc first use temp" <System.String[]>
+; V158 tmp124 [V158,T54] ( 6, 10 ) ref -> [ebp-0x190] class-hnd "Inline stloc first use temp" <System.String[]>
; V159 tmp125 [V159,T47] ( 8, 12 ) int -> registers "Inline stloc first use temp"
; V160 tmp126 [V160,T19] ( 6, 16 ) ref -> edx class-hnd "Inlining Arg" <System.__Canon>
;* V161 tmp127 [V161 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[int]>
@@ -175,21 +175,21 @@
;* V164 tmp130 [V164 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Nullable`1[int]>
;* V165 tmp131 [V165 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView>
;* V166 tmp132 [V166 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V167 tmp133 [V167,T136] ( 3, 3 ) ref -> [ebp-0x198] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
-; V168 tmp134 [V168,T95] ( 4, 4 ) ref -> [ebp-0x19C] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
-; V169 tmp135 [V169,T112] ( 7, 3.50) ref -> [ebp-0x1A0] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V167 tmp133 [V167,T136] ( 3, 3 ) ref -> [ebp-0x194] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
+; V168 tmp134 [V168,T95] ( 4, 4 ) ref -> [ebp-0x198] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
+; V169 tmp135 [V169,T112] ( 7, 3.50) ref -> [ebp-0x19C] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V170 tmp136 [V170,T208] ( 3, 1.50) int -> edx "Inline return value spill temp"
;* V171 tmp137 [V171 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
-; V172 tmp138 [V172,T96] ( 4, 4 ) ref -> [ebp-0x1A4] class-hnd spill-single-def "Inlining Arg" <int[]>
-; V173 tmp139 [V173,T113] ( 7, 3.50) ref -> [ebp-0x1A8] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V172 tmp138 [V172,T96] ( 4, 4 ) ref -> [ebp-0x1A0] class-hnd spill-single-def "Inlining Arg" <int[]>
+; V173 tmp139 [V173,T113] ( 7, 3.50) ref -> [ebp-0x1A4] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V174 tmp140 [V174,T209] ( 3, 1.50) int -> edx "Inline return value spill temp"
;* V175 tmp141 [V175 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
;* V176 tmp142 [V176 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String>
-; V177 tmp143 [V177,T189] ( 3, 1.50) ref -> [ebp-0x1AC] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V177 tmp143 [V177,T189] ( 3, 1.50) ref -> [ebp-0x1A8] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V178 tmp144 [V178,T154] ( 4, 2 ) int -> ecx single-def "Inline stloc first use temp"
-; V179 tmp145 [V179,T137] ( 3, 3 ) ref -> [ebp-0x1B0] class-hnd spill-single-def "Inlining Arg" <Microsoft.ML.ITransformer>
+; V179 tmp145 [V179,T137] ( 3, 3 ) ref -> [ebp-0x1AC] class-hnd spill-single-def "Inlining Arg" <Microsoft.ML.ITransformer>
;* V180 tmp146 [V180 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
-; V181 tmp147 [V181,T190] ( 3, 1.50) ref -> [ebp-0x1B4] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V181 tmp147 [V181,T190] ( 3, 1.50) ref -> [ebp-0x1B0] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V182 tmp148 [V182,T155] ( 4, 2 ) int -> [ebp-0x28] spill-single-def "Inline stloc first use temp"
;* V183 tmp149 [V183,T237] ( 0, 0 ) ref -> zero-ref single-def
;* V184 tmp150 [V184,T238] ( 0, 0 ) ref -> zero-ref single-def
@@ -197,72 +197,72 @@
; V186 tmp152 [V186,T185] ( 2, 2 ) ubyte -> [ebp-0x2C] spill-single-def "Inlining Arg"
;* V187 tmp153 [V187 ] ( 0, 0 ) int -> zero-ref
;* V188 tmp154 [V188 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V189 tmp155 [V189,T192] ( 3, 1.50) ref -> [ebp-0x1B8] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V189 tmp155 [V189,T192] ( 3, 1.50) ref -> [ebp-0x1B4] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V190 tmp156 [V190,T156] ( 4, 2 ) int -> ecx single-def "Inline stloc first use temp"
;* V191 tmp157 [V191 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Microsoft.ML.DataViewSchema>
-; V192 tmp158 [V192,T193] ( 3, 1.50) ref -> [ebp-0x1BC] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
+; V192 tmp158 [V192,T193] ( 3, 1.50) ref -> [ebp-0x1B8] class-hnd spill-single-def "Inline stloc first use temp" <System.String[]>
; V193 tmp159 [V193,T157] ( 4, 2 ) int -> [ebp-0x30] spill-single-def "Inline stloc first use temp"
;* V194 tmp160 [V194,T239] ( 0, 0 ) ref -> zero-ref single-def
;* V195 tmp161 [V195,T240] ( 0, 0 ) ref -> zero-ref single-def
-; V196 tmp162 [V196,T194] ( 3, 1.50) ref -> [ebp-0x1C0] spill-single-def
+; V196 tmp162 [V196,T194] ( 3, 1.50) ref -> [ebp-0x1BC] spill-single-def
; V197 tmp163 [V197,T186] ( 2, 2 ) ubyte -> [ebp-0x34] spill-single-def "Inlining Arg"
;* V198 tmp164 [V198 ] ( 0, 0 ) int -> zero-ref
;* V199 tmp165 [V199 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V200 tmp166 [V200,T195] ( 3, 1.50) ref -> [ebp-0x1C4] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V200 tmp166 [V200,T195] ( 3, 1.50) ref -> [ebp-0x1C0] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V201 tmp167 [V201,T158] ( 4, 2 ) int -> [ebp-0x38] spill-single-def "Inline stloc first use temp"
;* V202 tmp168 [V202 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView>
;* V203 tmp169 [V203 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>>
-; V204 tmp170 [V204,T138] ( 3, 3 ) ref -> [ebp-0x1C8] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
-; V205 tmp171 [V205,T97] ( 4, 4 ) ref -> [ebp-0x1CC] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
-; V206 tmp172 [V206,T114] ( 7, 3.50) ref -> [ebp-0x1D0] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V204 tmp170 [V204,T138] ( 3, 3 ) ref -> [ebp-0x1C4] class-hnd exact spill-single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
+; V205 tmp171 [V205,T97] ( 4, 4 ) ref -> [ebp-0x1C8] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
+; V206 tmp172 [V206,T114] ( 7, 3.50) ref -> [ebp-0x1CC] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V207 tmp173 [V207,T210] ( 3, 1.50) int -> edx "Inline return value spill temp"
;* V208 tmp174 [V208 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
-; V209 tmp175 [V209,T98] ( 4, 4 ) ref -> [ebp-0x1D4] class-hnd spill-single-def "Inlining Arg" <int[]>
-; V210 tmp176 [V210,T115] ( 7, 3.50) ref -> [ebp-0x1D8] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V209 tmp175 [V209,T98] ( 4, 4 ) ref -> [ebp-0x1D0] class-hnd spill-single-def "Inlining Arg" <int[]>
+; V210 tmp176 [V210,T115] ( 7, 3.50) ref -> [ebp-0x1D4] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V211 tmp177 [V211,T211] ( 3, 1.50) int -> edx "Inline return value spill temp"
-; V212 tmp178 [V212,T196] ( 3, 1.50) ref -> [ebp-0x1DC] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V212 tmp178 [V212,T196] ( 3, 1.50) ref -> [ebp-0x1D8] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V213 tmp179 [V213,T159] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp"
;* V214 tmp180 [V214 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]>
; V215 tmp181 [V215,T197] ( 3, 1.50) ref -> edx class-hnd single-def "Inline stloc first use temp" <<unknown class>>
; V216 tmp182 [V216,T160] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp"
;* V217 tmp183 [V217 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]>
-; V218 tmp184 [V218,T198] ( 3, 1.50) ref -> [ebp-0x1E0] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V218 tmp184 [V218,T198] ( 3, 1.50) ref -> [ebp-0x1DC] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V219 tmp185 [V219,T161] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp"
;* V220 tmp186 [V220 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]>
-; V221 tmp187 [V221,T199] ( 3, 1.50) ref -> [ebp-0x1E4] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V221 tmp187 [V221,T199] ( 3, 1.50) ref -> [ebp-0x1E0] class-hnd spill-single-def "Inline stloc first use temp" <<unknown class>>
; V222 tmp188 [V222,T162] ( 4, 2 ) int -> edi single-def "Inline stloc first use temp"
;* V223 tmp189 [V223 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Collections.Generic.KeyValuePair`2[System.String,System.String]>
; V224 tmp190 [V224,T139] ( 3, 3 ) ref -> ecx class-hnd exact single-def "Inlining Arg" <<unknown class>>
;* V225 tmp191 [V225 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <Microsoft.ML.IDataView>
;* V226 tmp192 [V226 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>>
; V227 tmp193 [V227,T140] ( 3, 3 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
-; V228 tmp194 [V228,T99] ( 4, 4 ) ref -> [ebp-0x1E8] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
-; V229 tmp195 [V229,T116] ( 7, 3.50) ref -> [ebp-0x1EC] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
+; V228 tmp194 [V228,T99] ( 4, 4 ) ref -> [ebp-0x1E4] class-hnd spill-single-def "Inlining Arg" <<unknown class>>
+; V229 tmp195 [V229,T116] ( 7, 3.50) ref -> [ebp-0x1E8] class-hnd exact spill-single-def "Inline stloc first use temp" <<unknown class>>
; V230 tmp196 [V230,T212] ( 3, 1.50) int -> edx "Inline return value spill temp"
;* V231 tmp197 [V231 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
; V232 tmp198 [V232,T100] ( 4, 4 ) ref -> edi class-hnd single-def "Inlining Arg" <int[]>
-; V233 tmp199 [V233,T117] ( 7, 3.50) ref -> [ebp-0x1F0] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V233 tmp199 [V233,T117] ( 7, 3.50) ref -> [ebp-0x1EC] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V234 tmp200 [V234,T213] ( 3, 1.50) int -> edx "Inline return value spill temp"
; V235 tmp201 [V235,T101] ( 2, 4 ) ref -> ebx class-hnd single-def "impAppendStmt" <<unknown class>>
; V236 tmp202 [V236,T75] ( 3, 6 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <Microsoft.ML.Data.TransformerChain`1[Microsoft.ML.ITransformer]>
;* V237 tmp203 [V237 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline return value spill temp" <int[]>
; V238 tmp204 [V238,T70] ( 4, 7 ) ref -> edi class-hnd single-def "Inlining Arg" <int[]>
-; V239 tmp205 [V239,T68] ( 7, 7 ) ref -> [ebp-0x1F4] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
+; V239 tmp205 [V239,T68] ( 7, 7 ) ref -> [ebp-0x1F0] class-hnd exact spill-single-def "Inline stloc first use temp" <int[]>
; V240 tmp206 [V240,T163] ( 3, 2 ) int -> edx "Inline return value spill temp"
; V241 tmp207 [V241,T227] ( 2, 1 ) ref -> eax single-def "field V54.key (fldOffset=0x0)" P-INDEP
; V242 tmp208 [V242,T148] ( 5, 2.50) ref -> eax single-def "field V54.value (fldOffset=0x4)" P-INDEP
; V243 tmp209 [V243,T228] ( 2, 1 ) ref -> eax single-def "field V55.key (fldOffset=0x0)" P-INDEP
; V244 tmp210 [V244,T149] ( 5, 2.50) ref -> eax single-def "field V55.value (fldOffset=0x4)" P-INDEP
;* V245 tmp211 [V245,T241] ( 0, 0 ) ref -> zero-ref single-def "field V56.key (fldOffset=0x0)" P-INDEP
-; V246 tmp212 [V246,T200] ( 3, 1.50) ref -> [ebp-0x1F8] spill-single-def "field V56.value (fldOffset=0x4)" P-INDEP
+; V246 tmp212 [V246,T200] ( 3, 1.50) ref -> [ebp-0x1F4] spill-single-def "field V56.value (fldOffset=0x4)" P-INDEP
;* V247 tmp213 [V247,T242] ( 0, 0 ) ref -> zero-ref single-def "field V57.key (fldOffset=0x0)" P-INDEP
-; V248 tmp214 [V248,T201] ( 3, 1.50) ref -> [ebp-0x1FC] spill-single-def "field V57.value (fldOffset=0x4)" P-INDEP
+; V248 tmp214 [V248,T201] ( 3, 1.50) ref -> [ebp-0x1F8] spill-single-def "field V57.value (fldOffset=0x4)" P-INDEP
; V249 tmp215 [V249,T60] ( 4, 8 ) ref -> eax "field V63.Item1 (fldOffset=0x0)" P-INDEP
-; V250 tmp216 [V250,T61] ( 4, 8 ) ref -> [ebp-0x200] "field V63.Item2 (fldOffset=0x4)" P-INDEP
+; V250 tmp216 [V250,T61] ( 4, 8 ) ref -> [ebp-0x1FC] "field V63.Item2 (fldOffset=0x4)" P-INDEP
;* V251 tmp217 [V251,T105] ( 0, 0 ) ubyte -> zero-ref "field V77.hasValue (fldOffset=0x0)" P-INDEP
; V252 tmp218 [V252,T64] ( 4, 8 ) int -> eax "field V77.value (fldOffset=0x4)" P-INDEP
; V253 tmp219 [V253,T62] ( 4, 8 ) ref -> eax "field V82.Item1 (fldOffset=0x0)" P-INDEP
-; V254 tmp220 [V254,T63] ( 4, 8 ) ref -> [ebp-0x204] "field V82.Item2 (fldOffset=0x4)" P-INDEP
+; V254 tmp220 [V254,T63] ( 4, 8 ) ref -> [ebp-0x200] "field V82.Item2 (fldOffset=0x4)" P-INDEP
;* V255 tmp221 [V255 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V161.hasValue (fldOffset=0x0)" P-INDEP
;* V256 tmp222 [V256 ] ( 0, 0 ) int -> zero-ref single-def "field V161.value (fldOffset=0x4)" P-INDEP
;* V257 tmp223 [V257,T244] ( 0, 0 ) ubyte -> zero-ref single-def "field V163.hasValue (fldOffset=0x0)" P-INDEP
@@ -279,29 +279,29 @@
;* V268 tmp234 [V268 ] ( 0, 0 ) ref -> zero-ref single-def "field V223.value (fldOffset=0x4)" P-INDEP
; V269 tmp235 [V269,T102] ( 2, 4 ) ref -> edx single-def "argument with side effect"
; V270 tmp236 [V270,T170] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V271 tmp237 [V271,T171] ( 2, 2 ) ref -> [ebp-0x208] spill-single-def "argument with side effect"
+; V271 tmp237 [V271,T171] ( 2, 2 ) ref -> [ebp-0x204] spill-single-def "argument with side effect"
; V272 tmp238 [V272,T172] ( 2, 2 ) ref -> edx single-def "argument with side effect"
; V273 tmp239 [V273,T32] ( 4, 16 ) ref -> edx "argument with side effect"
; V274 tmp240 [V274,T33] ( 4, 16 ) ref -> edi "argument with side effect"
; V275 tmp241 [V275,T34] ( 4, 16 ) ref -> eax "argument with side effect"
-; V276 tmp242 [V276,T11] ( 6, 24 ) byref -> [ebp-0x20C] "BlockOp address local"
+; V276 tmp242 [V276,T11] ( 6, 24 ) byref -> [ebp-0x208] "BlockOp address local"
; V277 tmp243 [V277,T35] ( 4, 16 ) ref -> eax "argument with side effect"
; V278 tmp244 [V278,T36] ( 4, 16 ) ref -> eax "argument with side effect"
-; V279 tmp245 [V279,T173] ( 2, 2 ) ref -> [ebp-0x210] spill-single-def "argument with side effect"
+; V279 tmp245 [V279,T173] ( 2, 2 ) ref -> [ebp-0x20C] spill-single-def "argument with side effect"
; V280 tmp246 [V280,T174] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V281 tmp247 [V281,T175] ( 2, 2 ) ref -> [ebp-0x214] spill-single-def "argument with side effect"
+; V281 tmp247 [V281,T175] ( 2, 2 ) ref -> [ebp-0x210] spill-single-def "argument with side effect"
; V282 tmp248 [V282,T176] ( 2, 2 ) ref -> edx single-def "argument with side effect"
; V283 tmp249 [V283,T37] ( 4, 16 ) ref -> edx "argument with side effect"
-; V284 tmp250 [V284,T38] ( 4, 16 ) ref -> [ebp-0x218] "argument with side effect"
+; V284 tmp250 [V284,T38] ( 4, 16 ) ref -> [ebp-0x214] "argument with side effect"
; V285 tmp251 [V285,T39] ( 4, 16 ) ref -> eax "argument with side effect"
; V286 tmp252 [V286,T12] ( 6, 24 ) byref -> registers "BlockOp address local"
; V287 tmp253 [V287,T177] ( 2, 2 ) ref -> edx single-def "argument with side effect"
; V288 tmp254 [V288,T178] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V289 tmp255 [V289,T179] ( 2, 2 ) ref -> [ebp-0x21C] spill-single-def "argument with side effect"
+; V289 tmp255 [V289,T179] ( 2, 2 ) ref -> [ebp-0x218] spill-single-def "argument with side effect"
; V290 tmp256 [V290,T180] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V291 tmp257 [V291,T181] ( 2, 2 ) ref -> [ebp-0x220] spill-single-def "argument with side effect"
+; V291 tmp257 [V291,T181] ( 2, 2 ) ref -> [ebp-0x21C] spill-single-def "argument with side effect"
; V292 tmp258 [V292,T182] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V293 tmp259 [V293,T183] ( 2, 2 ) ref -> [ebp-0x224] spill-single-def "argument with side effect"
+; V293 tmp259 [V293,T183] ( 2, 2 ) ref -> [ebp-0x220] spill-single-def "argument with side effect"
; V294 tmp260 [V294,T184] ( 2, 2 ) ref -> edx single-def "argument with side effect"
; V295 tmp261 [V295,T141] ( 3, 3 ) byref -> edi single-def "BlockOp address local"
; V296 tmp262 [V296,T142] ( 3, 3 ) byref -> edi single-def "BlockOp address local"
@@ -338,11 +338,10 @@
; V327 cse21 [V327,T48] ( 3, 11.88) ref -> esi "CSE - conservative"
; V328 cse22 [V328,T49] ( 3, 11.88) ref -> eax "CSE - conservative"
; V329 cse23 [V329,T202] ( 3, 1.50) ref -> eax "CSE - conservative"
-; V330 cse24 [V330,T248] ( 3, 0.12) ref -> [ebp-0x228] spill-single-def "CSE - conservative"
+; V330 cse24 [V330,T248] ( 3, 0.12) ref -> [ebp-0x224] spill-single-def "CSE - conservative"
; V331 cse25 [V331,T249] ( 3, 0.12) ref -> eax "CSE - conservative"
-; TEMP_01 byref -> [ebp-0x22C]
;
-; Lcl frame size = 544
+; Lcl frame size = 536
G_M30044_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -350,14 +349,12 @@ G_M30044_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 544
- xor eax, eax
- mov dword ptr [ebp-0x22C], eax
+ sub esp, 536
mov esi, ecx
; gcrRegs +[esi]
mov edi, edx
; gcrRegs +[edi]
- ;; size=24 bbWeight=1 PerfScore 6.25
+ ;; size=16 bbWeight=1 PerfScore 5.00
G_M30044_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov ebx, gword ptr [esi+0x20]
; gcrRegs +[ebx]
@@ -474,7 +471,7 @@ G_M30044_IG06: ; bbWeight=0.50, gcrefRegs=00000048 {ebx esi}, byrefRegs=0
; GC ptr vars +{V05}
call [<unknown method>]
; gcrRegs -[ecx]
- mov gword ptr [ebp-0x208], eax
+ mov gword ptr [ebp-0x204], eax
; GC ptr vars +{V271}
mov gword ptr [ebp-0x6C], esi
; GC ptr vars +{V00}
@@ -487,7 +484,7 @@ G_M30044_IG06: ; bbWeight=0.50, gcrefRegs=00000048 {ebx esi}, byrefRegs=0
; gcrRegs -[ecx edx esi]
mov edx, eax
; gcrRegs +[edx]
...
-17 (-0.39%) : 34093.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
@@ -1360,41 +1360,34 @@ G_M4474_IG54: ; bbWeight=0.04, gcVars=00000000000000000000000000000000000
; gcrRegs -[ecx] +[eax]
mov edi, eax
; gcrRegs +[edi]
- mov eax, gword ptr [ebp-0x48]
- lea edx, bword ptr [eax+0x04]
- ; byrRegs +[edx]
- mov bword ptr [ebp-0xA8], edx
- mov ecx, dword ptr [ebp-0x14]
+ mov eax, dword ptr [ebp-0x14]
+ ; gcrRegs -[eax]
mov edx, gword ptr [ebp-0x3C]
; gcrRegs +[edx]
- ; byrRegs -[edx]
- cmp ecx, dword ptr [edx+0x04]
+ cmp eax, dword ptr [edx+0x04]
jae G_M4474_IG108
- mov dword ptr [ebp-0x14], ecx
- mov ebx, gword ptr [edx+4*ecx+0x08]
- ; gcrRegs +[ebx]
- mov ecx, ebx
+ mov dword ptr [ebp-0x14], eax
+ mov ecx, gword ptr [edx+4*eax+0x08]
; gcrRegs +[ecx]
- mov ebx, dword ptr [ebx]
- ; gcrRegs -[ebx]
+ mov ebx, dword ptr [ecx]
mov ebx, dword ptr [ebx+0x2C]
call [ebx+0x18]<unknown method>
- ; gcrRegs -[ecx edx]
- mov edx, bword ptr [ebp-0xA8]
+ ; gcrRegs -[ecx edx] +[eax]
+ mov ebx, gword ptr [ebp-0x48]
+ ; gcrRegs +[ebx]
+ lea edx, bword ptr [ebx+0x04]
; byrRegs +[edx]
+ ; GC ptr vars -{V01 V17}
call CORINFO_HELP_ASSIGN_REF_EAX
; gcrRegs -[eax]
; byrRegs -[edx]
- mov ebx, gword ptr [ebp-0x48]
- ; gcrRegs +[ebx]
mov ecx, gword ptr [ebx+0x04]
; gcrRegs +[ecx]
- ; GC ptr vars -{V01 V17}
call [System.String:IsNullOrWhiteSpace(System.String):ubyte]
; gcrRegs -[ecx]
test eax, eax
je SHORT G_M4474_IG56
- ;; size=126 bbWeight=0.04 PerfScore 1.93
+ ;; size=109 bbWeight=0.04 PerfScore 1.80
G_M4474_IG55: ; bbWeight=0.02, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
call [<unknown method>]
; gcrRegs +[eax]
@@ -2558,6 +2551,6 @@ G_M4474_IG109: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
int3
;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 4410, prolog size 26, PerfScore 1390.03, instruction count 1274, allocated bytes for code 4410 (MethodHash=ac86ee85) for method System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
+; Total bytes of code 4393, prolog size 26, PerfScore 1389.90, instruction count 1270, allocated bytes for code 4393 (MethodHash=ac86ee85) for method System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
; ============================================================
-4 (-0.37%) : 20024.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.Canon]:AddIfNotPresent(System.Canon,byref):ubyte:this (FullOpts)
@@ -10,7 +10,7 @@
;
; V00 this [V00,T00] ( 33, 27.50) ref -> ebx this class-hnd single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 arg1 [V01,T17] ( 10, 9 ) ref -> [ebp-0x6C] ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T68] ( 3, 1.50) byref -> [ebp+0x08] single-def
+; V02 arg2 [V02,T64] ( 3, 1.50) byref -> [ebp+0x08] single-def
; V03 loc0 [V03 ] ( 9, 19 ) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1+Entry[System.__Canon]]>
; V04 loc1 [V04,T25] ( 4, 4.50) ref -> [ebp-0x70] class-hnd spill-single-def <<unknown class>>
; V05 loc2 [V05,T18] ( 8, 11 ) int -> [ebp-0x18]
@@ -23,10 +23,10 @@
; V12 loc9 [V12,T12] ( 4, 14 ) byref -> esi
; V13 loc10 [V13,T15] ( 6, 13.50) int -> [ebp-0x24]
; V14 loc11 [V14,T13] ( 4, 14 ) byref -> [ebp-0x7C] spill-single-def
-; V15 loc12 [V15,T69] ( 3, 1.50) int -> edi single-def
+; V15 loc12 [V15,T65] ( 3, 1.50) int -> edi single-def
;* V16 tmp0 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp1 [V17,T62] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
-; V18 tmp2 [V18,T70] ( 3, 1.50) int -> registers
+; V17 tmp1 [V17,T58] ( 3, 2 ) int -> [ebp-0x28] "VirtualCall with runtime lookup"
+; V18 tmp2 [V18,T66] ( 3, 1.50) int -> registers
;* V19 tmp3 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V20 tmp4 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V21 tmp5 [V21 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -34,8 +34,8 @@
;* V23 tmp7 [V23 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V24 tmp8 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V25 tmp9 [V25,T27] ( 4, 4 ) byref -> eax single-def "dup spill"
-; V26 tmp10 [V26,T63] ( 3, 2 ) int -> eax "spilling helperCall"
-; V27 tmp11 [V27,T71] ( 3, 1.50) int -> eax
+; V26 tmp10 [V26,T59] ( 3, 2 ) int -> eax "spilling helperCall"
+; V27 tmp11 [V27,T67] ( 3, 1.50) int -> eax
;* V28 tmp12 [V28 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V29 tmp13 [V29 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V30 tmp14 [V30 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
@@ -47,9 +47,9 @@
; V36 tmp20 [V36,T30] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V37 tmp21 [V37,T31] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V38 tmp22 [V38 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V39 tmp23 [V39,T95] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V39 tmp23 [V39,T89] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp24 [V40 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V41 tmp25 [V41,T96] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V41 tmp25 [V41,T90] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V42 tmp26 [V42 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V43 tmp27 [V43 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V44 tmp28 [V44 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -57,9 +57,9 @@
; V46 tmp30 [V46,T32] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V47 tmp31 [V47,T33] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V48 tmp32 [V48 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V49 tmp33 [V49,T97] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V49 tmp33 [V49,T91] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V50 tmp34 [V50 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V51 tmp35 [V51,T98] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V51 tmp35 [V51,T92] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V52 tmp36 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray`1[int]>
;* V53 tmp37 [V53 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V54 tmp38 [V54 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
@@ -67,83 +67,77 @@
; V56 tmp40 [V56,T34] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
; V57 tmp41 [V57,T35] ( 3, 3 ) ref -> ecx class-hnd single-def "impAppendStmt" <<unknown class>>
;* V58 tmp42 [V58 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V59 tmp43 [V59,T99] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V59 tmp43 [V59,T93] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V60 tmp44 [V60 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V61 tmp45 [V61,T100] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V61 tmp45 [V61,T94] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V62 tmp46 [V62 ] ( 6, 10.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03._items (fldOffset=0x0)" P-DEP
; V63 tmp47 [V63 ] ( 9, 19 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03._length (fldOffset=0x4)" P-DEP
-; V64 tmp48 [V64,T80] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
-; V65 tmp49 [V65,T83] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
-; V66 tmp50 [V66,T81] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
-; V67 tmp51 [V67,T84] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
-; V68 tmp52 [V68,T82] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
-; V69 tmp53 [V69,T85] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
+; V64 tmp48 [V64,T76] ( 2, 1 ) ref -> [ebp-0x80] spill-single-def "field V32._items (fldOffset=0x0)" P-INDEP
+; V65 tmp49 [V65,T79] ( 2, 1 ) int -> [ebp-0x2C] spill-single-def "field V32._length (fldOffset=0x4)" P-INDEP
+; V66 tmp50 [V66,T77] ( 2, 1 ) ref -> [ebp-0x84] spill-single-def "field V42._items (fldOffset=0x0)" P-INDEP
+; V67 tmp51 [V67,T80] ( 2, 1 ) int -> [ebp-0x30] spill-single-def "field V42._length (fldOffset=0x4)" P-INDEP
+; V68 tmp52 [V68,T78] ( 2, 1 ) ref -> [ebp-0x88] spill-single-def "field V52._items (fldOffset=0x0)" P-INDEP
+; V69 tmp53 [V69,T81] ( 2, 1 ) int -> [ebp-0x34] spill-single-def "field V52._length (fldOffset=0x4)" P-INDEP
; V70 tmp54 [V70,T42] ( 3, 3 ) int -> eax "index expr"
; V71 tmp55 [V71,T43] ( 3, 3 ) int -> edx "index expr"
; V72 tmp56 [V72,T44] ( 3, 3 ) int -> eax "index expr"
; V73 tmp57 [V73,T45] ( 3, 3 ) int -> edx "index expr"
; V74 tmp58 [V74,T21] ( 2, 8 ) ref -> edx "argument with side effect"
; V75 tmp59 [V75,T22] ( 2, 8 ) ref -> ecx "argument with side effect"
-; V76 tmp60 [V76,T66] ( 2, 2 ) int -> edx "argument with side effect"
+; V76 tmp60 [V76,T62] ( 2, 2 ) int -> edx "argument with side effect"
; V77 tmp61 [V77,T46] ( 3, 3 ) int -> eax "index expr"
; V78 tmp62 [V78,T47] ( 3, 3 ) int -> edx "index expr"
-; V79 tmp63 [V79,T67] ( 2, 2 ) int -> esi "argument with side effect"
-; V80 cse0 [V80,T72] ( 3, 1.50) int -> ecx "CSE - conservative"
-; V81 cse1 [V81,T73] ( 3, 1.50) int -> esi "CSE - conservative"
-; V82 rat0 [V82,T55] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
-; V83 rat1 [V83,T64] ( 3, 2 ) int -> ecx "runtime lookup"
+; V79 tmp63 [V79,T63] ( 2, 2 ) int -> esi "argument with side effect"
+; V80 cse0 [V80,T68] ( 3, 1.50) int -> ecx "CSE - conservative"
+; V81 cse1 [V81,T69] ( 3, 1.50) int -> esi "CSE - conservative"
+; V82 rat0 [V82,T53] ( 3, 2.20) int -> [ebp-0x38] spill-single-def "Spilling to split statement for tree"
+; V83 rat1 [V83,T60] ( 3, 2 ) int -> ecx "runtime lookup"
; V84 rat2 [V84,T48] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-;* V85 rat3 [V85,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V86 rat4 [V86,T86] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V87 rat5 [V87,T49] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V88 rat6 [V88,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V89 rat7 [V89,T10] ( 3, 16 ) int -> esi "runtime lookup"
-; V90 rat8 [V90,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
-;* V91 rat9 [V91,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V92 rat10 [V92,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V93 rat11 [V93,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V94 rat12 [V94,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V95 rat13 [V95,T50] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
-;* V96 rat14 [V96,T58] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V97 rat15 [V97,T87] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V98 rat16 [V98,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V99 rat17 [V99,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
-; V100 rat18 [V100,T11] ( 3, 16 ) int -> eax "runtime lookup"
-; V101 rat19 [V101,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
-; V102 rat20 [V102,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
-; V103 rat21 [V103,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
-;* V104 rat22 [V104,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V105 rat23 [V105,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V106 rat24 [V106,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V107 rat25 [V107,T59] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V108 rat26 [V108,T52] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-;* V109 rat27 [V109,T60] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V110 rat28 [V110,T88] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V111 rat29 [V111,T53] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V112 rat30 [V112,T61] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
-; V113 rat31 [V113,T65] ( 3, 2 ) int -> esi "runtime lookup"
-; V114 rat32 [V114,T54] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
-; V115 rat33 [V115,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V116 rat34 [V116 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V117 rat35 [V117,T89] ( 1, 1 ) int -> eax "field V116.lo (fldOffset=0x0)" P-INDEP
-; V118 rat36 [V118,T74] ( 2, 1.50) int -> edx "field V116.hi (fldOffset=0x4)" P-INDEP
-; V119 rat37 [V119 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V120 rat38 [V120,T90] ( 1, 1 ) int -> eax "field V119.lo (fldOffset=0x0)" P-INDEP
-; V121 rat39 [V121,T75] ( 2, 1.50) int -> edx "field V119.hi (fldOffset=0x4)" P-INDEP
-; V122 rat40 [V122,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
-; V123 rat41 [V123 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V124 rat42 [V124,T91] ( 1, 1 ) int -> eax "field V123.lo (fldOffset=0x0)" P-INDEP
-; V125 rat43 [V125,T76] ( 2, 1.50) int -> edx "field V123.hi (fldOffset=0x4)" P-INDEP
-; V126 rat44 [V126 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V127 rat45 [V127,T92] ( 1, 1 ) int -> eax "field V126.lo (fldOffset=0x0)" P-INDEP
-; V128 rat46 [V128,T77] ( 2, 1.50) int -> edx "field V126.hi (fldOffset=0x4)" P-INDEP
-; V129 rat47 [V129,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
-; V130 rat48 [V130 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V131 rat49 [V131,T93] ( 1, 1 ) int -> eax "field V130.lo (fldOffset=0x0)" P-INDEP
-; V132 rat50 [V132,T78] ( 2, 1.50) int -> edx "field V130.hi (fldOffset=0x4)" P-INDEP
-; V133 rat51 [V133 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
-; V134 rat52 [V134,T94] ( 1, 1 ) int -> eax "field V133.lo (fldOffset=0x0)" P-INDEP
-; V135 rat53 [V135,T79] ( 2, 1.50) int -> edx "field V133.hi (fldOffset=0x4)" P-INDEP
+; V85 rat3 [V85,T06] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V86 rat4 [V86,T10] ( 3, 16 ) int -> esi "runtime lookup"
+; V87 rat5 [V87,T02] ( 3, 22.40) int -> esi "fgMakeTemp is creating a new local variable"
+;* V88 rat6 [V88,T07] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V89 rat7 [V89,T23] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V90 rat8 [V90,T03] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V91 rat9 [V91,T54] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V92 rat10 [V92,T49] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V93 rat11 [V93,T08] ( 3, 17.60) int -> ecx "Spilling to split statement for tree"
+; V94 rat12 [V94,T11] ( 3, 16 ) int -> eax "runtime lookup"
+; V95 rat13 [V95,T04] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable"
+; V96 rat14 [V96,T19] ( 3, 8.80) int -> ecx "Spilling to split statement for tree"
+; V97 rat15 [V97,T16] ( 3, 11.20) int -> esi "fgMakeTemp is creating a new local variable"
+;* V98 rat16 [V98,T09] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V99 rat17 [V99,T24] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V100 rat18 [V100,T05] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V101 rat19 [V101,T55] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V102 rat20 [V102,T50] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+;* V103 rat21 [V103,T56] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
+;* V104 rat22 [V104,T82] ( 0, 0 ) int -> zero-ref "runtime lookup"
+;* V105 rat23 [V105,T51] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
+; V106 rat24 [V106,T57] ( 3, 2.20) int -> ecx "Spilling to split statement for tree"
+; V107 rat25 [V107,T61] ( 3, 2 ) int -> esi "runtime lookup"
+; V108 rat26 [V108,T52] ( 3, 2.80) int -> esi "fgMakeTemp is creating a new local variable"
+; V109 rat27 [V109,T36] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V110 rat28 [V110 ] ( 1, 1 ) long -> [ebp-0x40] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V111 rat29 [V111,T83] ( 1, 1 ) int -> eax "field V110.lo (fldOffset=0x0)" P-INDEP
+; V112 rat30 [V112,T70] ( 2, 1.50) int -> edx "field V110.hi (fldOffset=0x4)" P-INDEP
+; V113 rat31 [V113 ] ( 1, 1 ) long -> [ebp-0x48] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V114 rat32 [V114,T84] ( 1, 1 ) int -> eax "field V113.lo (fldOffset=0x0)" P-INDEP
+; V115 rat33 [V115,T71] ( 2, 1.50) int -> edx "field V113.hi (fldOffset=0x4)" P-INDEP
+; V116 rat34 [V116,T37] ( 3, 3 ) byref -> [ebp-0x8C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V117 rat35 [V117 ] ( 1, 1 ) long -> [ebp-0x50] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V118 rat36 [V118,T85] ( 1, 1 ) int -> eax "field V117.lo (fldOffset=0x0)" P-INDEP
+; V119 rat37 [V119,T72] ( 2, 1.50) int -> edx "field V117.hi (fldOffset=0x4)" P-INDEP
+; V120 rat38 [V120 ] ( 1, 1 ) long -> [ebp-0x58] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V121 rat39 [V121,T86] ( 1, 1 ) int -> eax "field V120.lo (fldOffset=0x0)" P-INDEP
+; V122 rat40 [V122,T73] ( 2, 1.50) int -> edx "field V120.hi (fldOffset=0x4)" P-INDEP
+; V123 rat41 [V123,T38] ( 3, 3 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable"
+; V124 rat42 [V124 ] ( 1, 1 ) long -> [ebp-0x60] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V125 rat43 [V125,T87] ( 1, 1 ) int -> eax "field V124.lo (fldOffset=0x0)" P-INDEP
+; V126 rat44 [V126,T74] ( 2, 1.50) int -> edx "field V124.hi (fldOffset=0x4)" P-INDEP
+; V127 rat45 [V127 ] ( 1, 1 ) long -> [ebp-0x68] multireg-ret "ReplaceWithLclVar is creating a new local variable"
+; V128 rat46 [V128,T88] ( 1, 1 ) int -> eax "field V127.lo (fldOffset=0x0)" P-INDEP
+; V129 rat47 [V129,T75] ( 2, 1.50) int -> edx "field V127.hi (fldOffset=0x4)" P-INDEP
; TEMP_02 ref -> [ebp-0x90]
; TEMP_01 int -> [ebp-0x94]
;
@@ -165,7 +159,7 @@ G_M18379_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebx, ecx
; gcrRegs +[ebx]
;; size=31 bbWeight=1 PerfScore 9.00
-G_M18379_IG02: ; bbWeight=1, gcVars=00000000000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG02: ; bbWeight=1, gcVars=000000000000000000020000 {V01}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp dword ptr [ebx+0x24], 0
jne SHORT G_M18379_IG04
;; size=6 bbWeight=1 PerfScore 4.00
@@ -191,7 +185,7 @@ G_M18379_IG04: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
xor edi, edi
; byrRegs -[edi]
test esi, esi
- jne G_M18379_IG21
+ jne G_M18379_IG20
;; size=24 bbWeight=1 PerfScore 7.50
G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
@@ -203,7 +197,7 @@ G_M18379_IG05: ; bbWeight=0.50, gcrefRegs=00000008 {ebx}, byrefRegs=00000
xor eax, eax
jmp SHORT G_M18379_IG07
;; size=11 bbWeight=0.50 PerfScore 2.25
-G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M18379_IG06: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V01}
mov ecx, esi
; gcrRegs +[ecx]
@@ -216,7 +210,7 @@ G_M18379_IG06: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov esi, gword ptr [ebp-0x6C]
; gcrRegs +[esi]
;; size=16 bbWeight=0.50 PerfScore 4.62
-G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M18379_IG07: ; bbWeight=0.50, gcVars=000000000000000000000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V01}
mov edx, gword ptr [ebx+0x20]
; gcrRegs +[edx]
@@ -248,11 +242,11 @@ G_M18379_IG07: ; bbWeight=0.50, gcVars=00000000000000000000000000000000 {
mov eax, edx
sar eax, 14
cmp eax, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
mov ecx, gword ptr [ecx+4*eax+0x08]
and edx, 0x3FFF
cmp edx, dword ptr [ecx+0x04]
- jae G_M18379_IG49
+ jae G_M18379_IG48
lea eax, bword ptr [ecx+4*edx+0x08]
; byrRegs +[eax]
...
+0 (0.00%) : 20185.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet1[System.__Canon]:CheckUniqueAndUnfoundElements(System.Collections.Generic.IEnumerable
1[System.__Canon],ubyte):System.ValueTuple`2[int,int]:this (FullOpts)
@@ -10,14 +10,14 @@
;
; V00 this [V00,T06] ( 8, 22 ) ref -> [ebp-0x40] do-not-enreg[H] this class-hnd EH-live single-def <Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]>
; V01 RetBuf [V01,T16] ( 6, 6 ) byref -> [ebp-0x44] EH-live single-def
-; V02 arg1 [V02,T40] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V03 arg2 [V03,T33] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
+; V02 arg1 [V02,T38] ( 2, 2 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V03 arg2 [V03,T31] ( 1, 4 ) ubyte -> [ebp+0x08] single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref single-def
;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[int]>
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SF] ld-addr-op <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
; V07 loc3 [V07,T11] ( 4, 10 ) int -> [ebp-0x28] do-not-enreg[Z] EH-live
; V08 loc4 [V08,T12] ( 4, 10 ) int -> [ebp-0x2C] do-not-enreg[Z] EH-live
-; V09 loc5 [V09,T37] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
+; V09 loc5 [V09,T35] ( 3, 3 ) int -> [ebp-0x30] do-not-enreg[Z] EH-live
; V10 loc6 [V10,T05] ( 13, 27 ) ref -> [ebp-0x48] do-not-enreg[M] class-hnd EH-live <<unknown class>>
;* V11 loc7 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
; V12 loc8 [V12,T04] ( 5, 28 ) int -> eax
@@ -26,44 +26,44 @@
;* V15 tmp2 [V15 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V16 tmp3 [V16 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V17 tmp4 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V18 tmp5 [V18,T29] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
+; V18 tmp5 [V18,T27] ( 3, 4 ) int -> edx "VirtualCall with runtime lookup"
;* V19 tmp6 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V20 tmp7 [V20,T02] ( 3, 32 ) int -> eax "VirtualCall with runtime lookup"
;* V21 tmp8 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V22 tmp9 [V22 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.Internal.BitHelper>
;* V23 tmp10 [V23 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Span`1[int]>
;* V24 tmp11 [V24 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V25 tmp12 [V25,T30] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V25 tmp12 [V25,T28] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V26 tmp13 [V26 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V27 tmp14 [V27,T31] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V27 tmp14 [V27,T29] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V28 tmp15 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
; V29 tmp16 [V29,T15] ( 8, 8 ) int -> [ebp-0x34] "Inline return value spill temp"
; V30 tmp17 [V30,T18] ( 3, 6 ) int -> eax "Inlining Arg"
-; V31 tmp18 [V31,T32] ( 2, 4 ) int -> edi "Inlining Arg"
+; V31 tmp18 [V31,T30] ( 2, 4 ) int -> edi "Inlining Arg"
; V32 tmp19 [V32,T17] ( 3, 6 ) ref -> eax class-hnd exact single-def "Inlining Arg" <int[]>
;* V33 tmp20 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V34 tmp21 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
;* V35 tmp22 [V35 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
;* V36 tmp23 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V37 tmp24 [V37 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V38 tmp25 [V38,T34] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V38 tmp25 [V38,T32] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V39 tmp26 [V39,T08] ( 3, 12 ) int -> edx "Inline stloc first use temp"
; V40 tmp27 [V40,T09] ( 3, 12 ) int -> ecx "Inline stloc first use temp"
; V41 tmp28 [V41,T07] ( 3, 24 ) byref -> edx "dup spill"
;* V42 tmp29 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp30 [V43 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x4)" P-INDEP
-; V44 tmp31 [V44,T35] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V44 tmp31 [V44,T33] ( 3, 3 ) byref -> edi single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V45 tmp32 [V45 ] ( 0, 0 ) int -> zero-ref single-def "field V13._length (fldOffset=0x4)" P-INDEP
;* V46 tmp33 [V46 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP
;* V47 tmp34 [V47 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x4)" P-INDEP
-; V48 tmp35 [V48,T42] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP
-; V49 tmp36 [V49,T43] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
+; V48 tmp35 [V48,T40] ( 2, 2 ) int -> eax single-def "field V21.Item1 (fldOffset=0x0)" P-INDEP
+; V49 tmp36 [V49,T41] ( 2, 2 ) int -> edx single-def "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V50 tmp37 [V50 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP
;* V51 tmp38 [V51 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x4)" P-INDEP
-;* V52 tmp39 [V52,T47] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP
-; V53 tmp40 [V53,T44] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP
-; V54 tmp41 [V54,T41] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
-; V55 tmp42 [V55,T45] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
+;* V52 tmp39 [V52,T44] ( 0, 0 ) int -> zero-ref single-def "field V28.Item1 (fldOffset=0x0)" P-INDEP
+; V53 tmp40 [V53,T42] ( 2, 2 ) int -> eax single-def "field V28.Item2 (fldOffset=0x4)" P-INDEP
+; V54 tmp41 [V54,T39] ( 2, 2 ) byref -> edi "field V33._reference (fldOffset=0x0)" P-INDEP
+; V55 tmp42 [V55,T43] ( 2, 2 ) int -> eax "field V33._length (fldOffset=0x4)" P-INDEP
;* V56 tmp43 [V56 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP
;* V57 tmp44 [V57 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x4)" P-INDEP
;* V58 tmp45 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP
@@ -72,27 +72,24 @@
;* V61 tmp48 [V61 ] ( 0, 0 ) int -> zero-ref single-def "field V37._length (fldOffset=0x4)" P-INDEP
; V62 tmp49 [V62,T13] ( 3, 9 ) byref -> edi single-def "V06.[000..004)"
; V63 tmp50 [V63,T14] ( 3, 9 ) int -> [ebp-0x38] spill-single-def "V06.[004..008)"
-; V64 tmp51 [V64,T36] ( 3, 3 ) byref -> edi "V16.[000..004)"
-; V65 tmp52 [V65,T38] ( 3, 3 ) int -> eax "V16.[004..008)"
+; V64 tmp51 [V64,T34] ( 3, 3 ) byref -> edi "V16.[000..004)"
+; V65 tmp52 [V65,T36] ( 3, 3 ) int -> eax "V16.[004..008)"
; V66 tmp53 [V66,T03] ( 2, 32 ) ref -> edx "argument with side effect"
; V67 GsCookie [V67 ] ( 1, 1 ) int -> [ebp-0x4C] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 EHSlots [V68 ] ( 1, 1 ) struct (16) [ebp-0x24] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V69 LocAllocSP [V69,T48] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
+; V69 LocAllocSP [V69,T45] ( 1, 1 ) int -> [ebp-0x10] "LocAllocSPvar"
; V70 cse0 [V70,T10] ( 3, 12 ) int -> ecx "CSE - moderate"
-; V71 cse1 [V71,T39] ( 3, 3 ) int -> eax "CSE - conservative"
-; V72 rat0 [V72,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V71 cse1 [V71,T37] ( 3, 3 ) int -> eax "CSE - conservative"
+; V72 rat0 [V72,T24] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V73 rat1 [V73,T21] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V74 rat2 [V74,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V74 rat2 [V74,T25] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V75 rat3 [V75,T22] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V76 rat4 [V76,T27] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V76 rat4 [V76,T26] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
; V77 rat5 [V77,T23] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
-;* V78 rat6 [V78,T28] ( 0, 0 ) int -> zero-ref "Spilling to split statement for tree"
-;* V79 rat7 [V79,T46] ( 0, 0 ) int -> zero-ref "runtime lookup"
-;* V80 rat8 [V80,T24] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V81 rat9 [V81,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
-; V82 rat10 [V82,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V83 rat11 [V83,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
-; V84 rat12 [V84,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
+; V78 rat6 [V78,T01] ( 3, 35.20) int -> ecx "Spilling to split statement for tree"
+; V79 rat7 [V79,T00] ( 3, 44.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V80 rat8 [V80,T19] ( 3, 6 ) int -> eax "ReplaceWithLclVar is creating a new local variable"
+; V81 rat9 [V81,T20] ( 3, 6 ) int -> [ebp-0x3C] spill-single-def "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 68
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.windows.x86.checked.mch |
1 |
1 |
0 |
0 |
-4 |
+0 |
benchmarks.run_pgo.windows.x86.checked.mch |
2 |
2 |
0 |
0 |
-17 |
+0 |
benchmarks.run_tiered.windows.x86.checked.mch |
1 |
1 |
0 |
0 |
-4 |
+0 |
coreclr_tests.run.windows.x86.checked.mch |
2 |
2 |
0 |
0 |
-8 |
+0 |
libraries.crossgen2.windows.x86.checked.mch |
6 |
6 |
0 |
0 |
-97 |
+0 |
libraries.pmi.windows.x86.checked.mch |
26 |
17 |
0 |
9 |
-192 |
+0 |
libraries_tests.run.windows.x86.Release.mch |
30 |
26 |
0 |
4 |
-765 |
+0 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
13 |
10 |
0 |
3 |
-124 |
+0 |
realworld.run.windows.x86.checked.mch |
4 |
3 |
0 |
1 |
-53 |
+0 |
|
85 |
68 |
0 |
17 |
-1,264 |
+0 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.windows.x86.checked.mch |
24,475 |
4 |
24,471 |
13 (0.05%) |
13 (0.05%) |
benchmarks.run_pgo.windows.x86.checked.mch |
119,515 |
42,004 |
77,511 |
348 (0.29%) |
348 (0.29%) |
benchmarks.run_tiered.windows.x86.checked.mch |
47,896 |
28,726 |
19,170 |
11 (0.02%) |
11 (0.02%) |
coreclr_tests.run.windows.x86.checked.mch |
574,836 |
320,010 |
254,826 |
569 (0.10%) |
571 (0.10%) |
libraries.crossgen2.windows.x86.checked.mch |
241,911 |
15 |
241,896 |
16 (0.01%) |
16 (0.01%) |
libraries.pmi.windows.x86.checked.mch |
303,524 |
6 |
303,518 |
707 (0.23%) |
708 (0.23%) |
libraries_tests.run.windows.x86.Release.mch |
632,899 |
429,177 |
203,722 |
2,910 (0.46%) |
2,910 (0.46%) |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
315,247 |
21,872 |
293,375 |
508 (0.16%) |
508 (0.16%) |
realworld.run.windows.x86.checked.mch |
35,971 |
3 |
35,968 |
11 (0.03%) |
11 (0.03%) |
|
2,296,274 |
841,817 |
1,454,457 |
5,093 (0.22%) |
5,096 (0.22%) |
jit-analyze output
benchmarks.run.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 7107453 (overridden on cmd)
Total bytes of diff: 7107449 (overridden on cmd)
Total bytes of delta: -4 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-4 : 18028.dasm (-0.37 % of base)
1 total files with Code Size differences (1 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-4 (-0.37 % of base) : 18028.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
Top method improvements (percentages):
-4 (-0.37 % of base) : 18028.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
1 total methods with Code Size differences (1 improved, 0 regressed).
benchmarks.run_pgo.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 45222512 (overridden on cmd)
Total bytes of diff: 45222495 (overridden on cmd)
Total bytes of delta: -17 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-13 : 12020.dasm (-2.08 % of base)
-4 : 72723.dasm (-0.37 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-13 (-2.08 % of base) : 12020.dasm - Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
-4 (-0.37 % of base) : 72723.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)
Top method improvements (percentages):
-13 (-2.08 % of base) : 12020.dasm - Microsoft.Extensions.Options.OptionsFactory`1[System.__Canon]:Create(System.String):System.__Canon:this (Tier0-FullOpts)
-4 (-0.37 % of base) : 72723.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)
2 total methods with Code Size differences (2 improved, 0 regressed).
benchmarks.run_tiered.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 9511426 (overridden on cmd)
Total bytes of diff: 9511422 (overridden on cmd)
Total bytes of delta: -4 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-4 : 34115.dasm (-0.37 % of base)
1 total files with Code Size differences (1 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-4 (-0.37 % of base) : 34115.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)
Top method improvements (percentages):
-4 (-0.37 % of base) : 34115.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)
1 total methods with Code Size differences (1 improved, 0 regressed).
coreclr_tests.run.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 309179129 (overridden on cmd)
Total bytes of diff: 309179121 (overridden on cmd)
Total bytes of delta: -8 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-4 : 223677.dasm (-0.37 % of base)
-4 : 476978.dasm (-0.37 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-4 (-0.37 % of base) : 476978.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
-4 (-0.37 % of base) : 223677.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)
Top method improvements (percentages):
-4 (-0.37 % of base) : 476978.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
-4 (-0.37 % of base) : 223677.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (Tier0-FullOpts)
2 total methods with Code Size differences (2 improved, 0 regressed).
libraries.crossgen2.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 31628298 (overridden on cmd)
Total bytes of diff: 31628201 (overridden on cmd)
Total bytes of delta: -97 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-20 : 152646.dasm (-1.50 % of base)
-20 : 76488.dasm (-2.04 % of base)
-18 : 96225.dasm (-1.10 % of base)
-15 : 31631.dasm (-0.41 % of base)
-15 : 154738.dasm (-1.29 % of base)
-9 : 32127.dasm (-2.91 % of base)
6 total files with Code Size differences (6 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-20 (-2.04 % of base) : 76488.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
-20 (-1.50 % of base) : 152646.dasm - System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
-18 (-1.10 % of base) : 96225.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
-15 (-0.41 % of base) : 31631.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
-15 (-1.29 % of base) : 154738.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-9 (-2.91 % of base) : 32127.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
Top method improvements (percentages):
-9 (-2.91 % of base) : 32127.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
-20 (-2.04 % of base) : 76488.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
-20 (-1.50 % of base) : 152646.dasm - System.Xml.Xsl.Runtime.XmlQueryStaticData:.ctor(ubyte[],System.Type[]):this (FullOpts)
-15 (-1.29 % of base) : 154738.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-18 (-1.10 % of base) : 96225.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
-15 (-0.41 % of base) : 31631.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
6 total methods with Code Size differences (6 improved, 0 regressed).
libraries.pmi.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 48827232 (overridden on cmd)
Total bytes of diff: 48827040 (overridden on cmd)
Total bytes of delta: -192 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-27 : 79515.dasm (-2.20 % of base)
-23 : 70069.dasm (-0.50 % of base)
-19 : 101930.dasm (-0.69 % of base)
-18 : 123025.dasm (-3.06 % of base)
-18 : 170847.dasm (-3.06 % of base)
-11 : 192539.dasm (-0.93 % of base)
-8 : 221414.dasm (-0.57 % of base)
-8 : 276481.dasm (-0.57 % of base)
-8 : 276482.dasm (-0.46 % of base)
-8 : 221415.dasm (-0.45 % of base)
-8 : 239851.dasm (-0.30 % of base)
-7 : 269944.dasm (-1.07 % of base)
-7 : 86094.dasm (-0.25 % of base)
-7 : 86097.dasm (-0.17 % of base)
-7 : 102209.dasm (-0.19 % of base)
-4 : 168768.dasm (-0.37 % of base)
-4 : 120953.dasm (-0.37 % of base)
17 total files with Code Size differences (17 improved, 0 regressed), 9 unchanged.
Top method improvements (bytes):
-27 (-2.20 % of base) : 79515.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
-23 (-0.50 % of base) : 70069.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
-19 (-0.69 % of base) : 101930.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
-18 (-3.06 % of base) : 123025.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-18 (-3.06 % of base) : 170847.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-11 (-0.93 % of base) : 192539.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-8 (-0.30 % of base) : 239851.dasm - System.Data.Odbc.OdbcDataReader:BuildMetaDataInfo():this (FullOpts)
-8 (-0.57 % of base) : 221414.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-8 (-0.57 % of base) : 276481.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-8 (-0.46 % of base) : 276482.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-8 (-0.45 % of base) : 221415.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-7 (-0.17 % of base) : 86097.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)
-7 (-0.25 % of base) : 86094.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
-7 (-0.19 % of base) : 102209.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
-7 (-1.07 % of base) : 269944.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-4 (-0.37 % of base) : 168768.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
-4 (-0.37 % of base) : 120953.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
Top method improvements (percentages):
-18 (-3.06 % of base) : 123025.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-18 (-3.06 % of base) : 170847.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-27 (-2.20 % of base) : 79515.dasm - Microsoft.CodeAnalysis.VisualBasic.DocumentationCommentCrefBinder:CreateTypeParameterSymbolsAndConstructSymbols(Microsoft.CodeAnalysis.VisualBasic.Syntax.GenericNameSyntax,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.Symbol],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.VisualBasic.Symbols.CrefTypeParameterSymbol]) (FullOpts)
-7 (-1.07 % of base) : 269944.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-11 (-0.93 % of base) : 192539.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-19 (-0.69 % of base) : 101930.dasm - Microsoft.CodeAnalysis.VisualBasic.OptionsValidator:ParseImports(System.Collections.Generic.IEnumerable`1[System.String],Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.VisualBasic.GlobalImport[] (FullOpts)
-8 (-0.57 % of base) : 276481.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-8 (-0.57 % of base) : 221414.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-23 (-0.50 % of base) : 70069.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
-8 (-0.46 % of base) : 276482.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-8 (-0.45 % of base) : 221415.dasm - System.DefaultBinder:SelectProperty(int,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.PropertyInfo:this (FullOpts)
-4 (-0.37 % of base) : 168768.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
-4 (-0.37 % of base) : 120953.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
-8 (-0.30 % of base) : 239851.dasm - System.Data.Odbc.OdbcDataReader:BuildMetaDataInfo():this (FullOpts)
-7 (-0.25 % of base) : 86094.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitOnedimensionalElementInitializers(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],ubyte):this (FullOpts)
-7 (-0.19 % of base) : 102209.dasm - Microsoft.CodeAnalysis.VisualBasic.OverloadResolution:AnalyzeNarrowingCandidates(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.OverloadResolution+CandidateAnalysisResult],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.VisualBasic.BoundExpression],Microsoft.CodeAnalysis.VisualBasic.Symbols.TypeSymbol,ubyte,Microsoft.CodeAnalysis.VisualBasic.Binder,byref,byref):int (FullOpts)
-7 (-0.17 % of base) : 86097.dasm - Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator:EmitAllElementInitializersRecursive(Microsoft.CodeAnalysis.VisualBasic.Symbols.ArrayTypeSymbol,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.VisualBasic.CodeGen.CodeGenerator+IndexDesc],ubyte):this (FullOpts)
17 total methods with Code Size differences (17 improved, 0 regressed).
libraries_tests.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 185843933 (overridden on cmd)
Total bytes of diff: 185843168 (overridden on cmd)
Total bytes of delta: -765 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-50 : 327043.dasm (-2.25 % of base)
-50 : 381338.dasm (-2.25 % of base)
-50 : 628116.dasm (-2.25 % of base)
-50 : 118265.dasm (-2.24 % of base)
-44 : 508316.dasm (-1.91 % of base)
-42 : 217641.dasm (-1.82 % of base)
-41 : 237144.dasm (-1.72 % of base)
-41 : 246616.dasm (-1.72 % of base)
-37 : 275642.dasm (-1.63 % of base)
-35 : 338778.dasm (-1.54 % of base)
-35 : 483381.dasm (-1.55 % of base)
-31 : 448915.dasm (-1.38 % of base)
-31 : 305295.dasm (-1.38 % of base)
-31 : 171359.dasm (-1.38 % of base)
-31 : 317857.dasm (-1.39 % of base)
-31 : 349418.dasm (-1.38 % of base)
-28 : 625967.dasm (-1.34 % of base)
-23 : 236905.dasm (-0.50 % of base)
-18 : 12328.dasm (-3.06 % of base)
-15 : 237079.dasm (-4.02 % of base)
26 total files with Code Size differences (26 improved, 0 regressed), 4 unchanged.
Top method improvements (bytes):
-50 (-2.25 % of base) : 327043.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-50 (-2.25 % of base) : 381338.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-50 (-2.25 % of base) : 628116.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-50 (-2.24 % of base) : 118265.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-44 (-1.91 % of base) : 508316.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-42 (-1.82 % of base) : 217641.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-41 (-1.72 % of base) : 237144.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-41 (-1.72 % of base) : 246616.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-37 (-1.63 % of base) : 275642.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-35 (-1.54 % of base) : 338778.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-35 (-1.55 % of base) : 483381.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 448915.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 305295.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 171359.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.39 % of base) : 317857.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 349418.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-28 (-1.34 % of base) : 625967.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (Tier0-FullOpts)
-23 (-0.50 % of base) : 236905.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (Tier0-FullOpts)
-18 (-3.06 % of base) : 12328.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
-15 (-4.02 % of base) : 237079.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
Top method improvements (percentages):
-15 (-4.02 % of base) : 237079.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (Tier0-FullOpts)
-18 (-3.06 % of base) : 12328.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (Tier0-FullOpts)
-14 (-2.37 % of base) : 103485.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (Tier0-FullOpts)
-50 (-2.25 % of base) : 628116.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-50 (-2.25 % of base) : 327043.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-50 (-2.25 % of base) : 381338.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-50 (-2.24 % of base) : 118265.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-44 (-1.91 % of base) : 508316.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-42 (-1.82 % of base) : 217641.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-41 (-1.72 % of base) : 237144.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-41 (-1.72 % of base) : 246616.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-37 (-1.63 % of base) : 275642.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-35 (-1.55 % of base) : 483381.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-35 (-1.54 % of base) : 338778.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.39 % of base) : 317857.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 448915.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 171359.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 305295.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-31 (-1.38 % of base) : 349418.dasm - System.String:Join(System.String,System.Collections.Generic.IEnumerable`1[System.String]):System.String (Tier1)
-28 (-1.34 % of base) : 625967.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (Tier0-FullOpts)
26 total methods with Code Size differences (26 improved, 0 regressed).
librariestestsnotieredcompilation.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 102198175 (overridden on cmd)
Total bytes of diff: 102198051 (overridden on cmd)
Total bytes of delta: -124 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-23 : 99271.dasm (-0.50 % of base)
-18 : 6265.dasm (-3.06 % of base)
-17 : 311445.dasm (-0.75 % of base)
-15 : 99311.dasm (-4.02 % of base)
-14 : 34735.dasm (-2.37 % of base)
-11 : 62896.dasm (-0.93 % of base)
-8 : 185203.dasm (-0.57 % of base)
-7 : 157676.dasm (-1.12 % of base)
-7 : 160975.dasm (-1.11 % of base)
-4 : 4863.dasm (-0.37 % of base)
10 total files with Code Size differences (10 improved, 0 regressed), 3 unchanged.
Top method improvements (bytes):
-23 (-0.50 % of base) : 99271.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
-18 (-3.06 % of base) : 6265.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-17 (-0.75 % of base) : 311445.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (FullOpts)
-15 (-4.02 % of base) : 99311.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
-14 (-2.37 % of base) : 34735.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
-11 (-0.93 % of base) : 62896.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-8 (-0.57 % of base) : 185203.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-7 (-1.12 % of base) : 157676.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-7 (-1.11 % of base) : 160975.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-4 (-0.37 % of base) : 4863.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
Top method improvements (percentages):
-15 (-4.02 % of base) : 99311.dasm - System.Data.DataRowComparer:CompareEquatableArray[System.__Canon](System.__Canon[],System.__Canon[]):ubyte (FullOpts)
-18 (-3.06 % of base) : 6265.dasm - Microsoft.CodeAnalysis.NodeStateTable`1+Builder[System.__Canon]:RecordStepInfoForLastEntry(System.TimeSpan,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[Microsoft.CodeAnalysis.IncrementalGeneratorRunStep,int]],int):this (FullOpts)
-14 (-2.37 % of base) : 34735.dasm - Grace.DependencyInjection.Impl.ActivationStrategyCollection`1[System.__Canon]:AddStrategy(System.__Canon,System.Object):this (FullOpts)
-7 (-1.12 % of base) : 157676.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-7 (-1.11 % of base) : 160975.dasm - System.Net.Cookie:set_Port(System.String):this (FullOpts)
-11 (-0.93 % of base) : 62896.dasm - System.Xml.Serialization.ReflectionXmlSerializationReader:WriteEncodedStructMethod(System.Xml.Serialization.StructMapping):System.Object:this (FullOpts)
-17 (-0.75 % of base) : 311445.dasm - System.Threading.Tests.AsyncLocalTests+<AddUpdateAndRemoveManyLocals_ReferenceType_NotifyOnChange>d__15:MoveNext():this (FullOpts)
-8 (-0.57 % of base) : 185203.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (FullOpts)
-23 (-0.50 % of base) : 99271.dasm - System.Data.DataTable:DeserializeTableSchema(System.Runtime.Serialization.SerializationInfo,ubyte):this (FullOpts)
-4 (-0.37 % of base) : 4863.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
10 total methods with Code Size differences (10 improved, 0 regressed).
realworld.run.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 11363356 (overridden on cmd)
Total bytes of diff: 11363303 (overridden on cmd)
Total bytes of delta: -53 (-0.00 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-32 : 15279.dasm (-0.43 % of base)
-17 : 34093.dasm (-0.39 % of base)
-4 : 20024.dasm (-0.37 % of base)
3 total files with Code Size differences (3 improved, 0 regressed), 1 unchanged.
Top method improvements (bytes):
-32 (-0.43 % of base) : 15279.dasm - Microsoft.ML.Transforms.Text.TextFeaturizingEstimator:Fit(Microsoft.ML.IDataView):Microsoft.ML.ITransformer:this (FullOpts)
-17 (-0.39 % of base) : 34093.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
-4 (-0.37 % of base) : 20024.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
Top method improvements (percentages):
-32 (-0.43 % of base) : 15279.dasm - Microsoft.ML.Transforms.Text.TextFeaturizingEstimator:Fit(Microsoft.ML.IDataView):Microsoft.ML.ITransformer:this (FullOpts)
-17 (-0.39 % of base) : 34093.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeMethod(System.Reflection.MethodBase,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],ubyte,int):System.Linq.Expressions.Expression (FullOpts)
-4 (-0.37 % of base) : 20024.dasm - Microsoft.CodeAnalysis.Collections.SegmentedHashSet`1[System.__Canon]:AddIfNotPresent(System.__Canon,byref):ubyte:this (FullOpts)
3 total methods with Code Size differences (3 improved, 0 regressed).