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