Assembly Diffs

linux arm

Diffs are based on 70,838 contexts (28,524 MinOpts, 42,314 FullOpts).

MISSED contexts: base: 4,075 (3.76%), diff: 33,979 (31.35%)

Overall (-53,266 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 416,870 -2,428
benchmarks.run_pgo.linux.arm.checked.mch 1,814,364 -15,576
benchmarks.run_tiered.linux.arm.checked.mch 1,798,372 -10,400
coreclr_tests.run.linux.arm.checked.mch 84,084 -32
libraries.pmi.linux.arm.checked.mch 926,186 -6,330
libraries_tests.run.linux.arm.Release.mch 836,994 -9,804
librariestestsnotieredcompilation.run.linux.arm.Release.mch 418,846 -3,996
realworld.run.linux.arm.checked.mch 1,992,442 -4,700

MinOpts (-21,732 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.linux.arm.checked.mch 1,103,720 -6,886
benchmarks.run_tiered.linux.arm.checked.mch 1,328,278 -7,284
libraries_tests.run.linux.arm.Release.mch 691,708 -7,562

FullOpts (-31,534 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 403,432 -2,428
benchmarks.run_pgo.linux.arm.checked.mch 710,644 -8,690
benchmarks.run_tiered.linux.arm.checked.mch 470,094 -3,116
coreclr_tests.run.linux.arm.checked.mch 84,084 -32
libraries.pmi.linux.arm.checked.mch 926,186 -6,330
libraries_tests.run.linux.arm.Release.mch 145,286 -2,242
librariestestsnotieredcompilation.run.linux.arm.Release.mch 418,846 -3,996
realworld.run.linux.arm.checked.mch 1,987,926 -4,700

Example diffs

benchmarks.run.linux.arm.checked.mch

-30 (-33.33%) : 253.dasm - System.Linq.Enumerable:IsEmptyArraySystem.__Canon:ubyte (FullOpts)

@@ -2,82 +2,66 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T05] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T03] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38282_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M38282_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M38282_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38282_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M38282_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M38282_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M38282_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1 r4] +[r0]
+ ; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M38282_IG09 - ;; size=18 bbWeight=1 PerfScore 7.00 -G_M38282_IG06: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M38282_IG06 + ;; size=36 bbWeight=1 PerfScore 12.00 +G_M38282_IG03: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
ldr r0, [r0+0x04] ; gcrRegs -[r0] cmp r0, 0
- beq SHORT G_M38282_IG07
+ beq SHORT G_M38282_IG04
movs r0, 0
- b SHORT G_M38282_IG08
+ b SHORT G_M38282_IG05
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M38282_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M38282_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00 -G_M38282_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M38282_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M38282_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG10: ; bbWeight=0.50, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00
+G_M38282_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 90, prolog size 14, PerfScore 24.10, instruction count 34, allocated bytes for code 90 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
+; Total bytes of code 60, prolog size 4, PerfScore 19.50, instruction count 24, allocated bytes for code 60 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -89,7 +73,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 45 (0x0002d) Actual length = 90 (0x00005a)
+ Function Length : 30 (0x0001e) Actual length = 60 (0x00003c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -101,7 +85,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-20 (-30.30%) : 3661.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.Text.Json.Serialization.Tests.ReadJson`1+d5[System.Canon]](byref):this (FullOpts)

@@ -2,79 +2,71 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; fully interruptible ; No matching PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) byref -> zero-ref this single-def
-; V01 TypeCtx [V01,T00] ( 5, 4.20) int -> r1 single-def -; V02 arg1 [V02,T02] ( 3, 3 ) byref -> r4 single-def
+; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> r1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) byref -> r4 single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M63615_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r1, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r1, [sp+0x04]
mov r4, r2 ; byrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M63615_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz - ldr r0, [r1+0x20] - ldr r0, [r0+0x08] - cmp r0, 0 - beq SHORT G_M63615_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M63615_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz - b SHORT G_M63615_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M63615_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M63615_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
mov r0, r1 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M63615_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
mov r1, r4 ; byrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- ;; size=12 bbWeight=1 PerfScore 4.00 -G_M63615_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,lr}
+ ;; size=32 bbWeight=1 PerfScore 10.00 +G_M63615_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 8 + pop {r4,lr}
bx r3 // <unknown method> ; gcr arg pop 0 ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 66, prolog size 16, PerfScore 18.00, instruction count 23, allocated bytes for code 66 (MethodHash=258c0780) for method System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.Text.Json.Serialization.Tests.ReadJson`1+<Setup>d__5[System.__Canon]](byref):this (FullOpts)
+; Total bytes of code 46, prolog size 6, PerfScore 16.00, instruction count 16, allocated bytes for code 46 (MethodHash=258c0780) for method System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.Text.Json.Serialization.Tests.ReadJson`1+<Setup>d__5[System.__Canon]](byref):this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0
- E bit : 1
+ E bit : 0
X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 66 (0x000042) - --- One epilog, unwind codes at 0
+ Function Length : 23 (0x00017) Actual length = 46 (0x00002e) + ---- Epilog scopes ---- + ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ----
- ---- Epilog start at index 0 ---- - 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end + ---- Epilog start at index 3 ---- + 02 add sp, sp, #8 ; opsize 16 + A0 10 pop {r4,lr} ; opsize 32 + FF end
FF end

-22 (-28.95%) : 4552.dasm - Utf8Json.JsonSerializer:DeserializeSystem.__Canon:System.__Canon (FullOpts)

@@ -2,48 +2,32 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; fully interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.IO.Stream>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.IO.Stream>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V04 tmp2 [V04,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V05 rat0 [V05,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V06 rat1 [V06,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V04 tmp2 [V04,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M3168_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M3168_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M3168_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M3168_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M3168_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M3168_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M3168_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M3168_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r2, 0xd1ff movt r2, 0xd1ff ldr r2, [r2] @@ -53,31 +37,38 @@ G_M3168_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- ;; size=22 bbWeight=1 PerfScore 7.00 -G_M3168_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,lr}
+ ;; size=40 bbWeight=1 PerfScore 12.00 +G_M3168_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 8 + pop {r4,lr}
bx r3 // <unknown method> ; gcr arg pop 0 ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 76, prolog size 16, PerfScore 21.60, instruction count 26, allocated bytes for code 76 (MethodHash=e992f39f) for method Utf8Json.JsonSerializer:Deserialize[System.__Canon](System.IO.Stream):System.__Canon (FullOpts)
+; Total bytes of code 54, prolog size 6, PerfScore 18.00, instruction count 18, allocated bytes for code 54 (MethodHash=e992f39f) for method Utf8Json.JsonSerializer:Deserialize[System.__Canon](System.IO.Stream):System.__Canon (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0
- E bit : 1
+ E bit : 0
X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 76 (0x00004c) - --- One epilog, unwind codes at 0
+ Function Length : 27 (0x0001b) Actual length = 54 (0x000036) + ---- Epilog scopes ---- + ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ----
- ---- Epilog start at index 0 ---- - 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end + ---- Epilog start at index 3 ---- + 02 add sp, sp, #8 ; opsize 16 + A0 10 pop {r4,lr} ; opsize 32 + FF end
FF end

+8 (+3.92%) : 3988.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpanSystem.__Canon:System.Span`1System.__Canon

@@ -8,27 +8,26 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T01] ( 4, 4 ) byref -> r5 single-def -; V01 TypeCtx [V01,T02] ( 5, 3.60) int -> r6 single-def
+; V00 RetBuf [V00,T02] ( 4, 4 ) byref -> r6 single-def +; V01 TypeCtx [V01,T01] ( 5, 4 ) int -> r5 single-def
; V02 arg0 [V02,T00] ( 6, 4.50) ref -> r4 class-hnd single-def <System.Collections.Generic.List`1[System.__Canon]> ;* V03 loc0 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[System.__Canon]>
-; V04 loc1 [V04,T07] ( 4, 2 ) int -> r8 -; V05 loc2 [V05,T06] ( 4, 2 ) ref -> r7 class-hnd single-def <<unknown class>>
+; V04 loc1 [V04,T06] ( 4, 2 ) int -> r8 +; V05 loc2 [V05,T05] ( 4, 2 ) ref -> r7 class-hnd single-def <<unknown class>>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V07 loc4 [V07,T08] ( 3, 2 ) int -> r3 "spilling helperCall"
+; V07 loc4 [V07,T08] ( 2, 2 ) int -> r0 "spilling helperCall"
;* V08 tmp2 [V08 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V09 tmp3 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V10 tmp4 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp5 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp6 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V13 tmp7 [V13,T09] ( 2, 2 ) byref -> r7 single-def "Inlining Arg"
+; V13 tmp7 [V13,T07] ( 2, 2 ) byref -> r7 single-def "Inlining Arg"
;* V14 tmp8 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V15 tmp9 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V16 tmp10 [V16,T04] ( 3, 2.50) byref -> r7 "field V03._reference (fldOffset=0x0)" P-INDEP -; V17 tmp11 [V17,T05] ( 3, 2.50) int -> r8 "field V03._length (fldOffset=0x4)" P-INDEP -; V18 tmp12 [V18,T10] ( 2, 1 ) byref -> r7 single-def "field V08._reference (fldOffset=0x0)" P-INDEP -; V19 tmp13 [V19,T11] ( 2, 1 ) int -> r8 "field V08._length (fldOffset=0x4)" P-INDEP -; V20 rat0 [V20,T03] ( 3, 2.80) int -> r3 "fgMakeTemp is creating a new local variable"
+; V16 tmp10 [V16,T03] ( 3, 2.50) byref -> r7 "field V03._reference (fldOffset=0x0)" P-INDEP +; V17 tmp11 [V17,T04] ( 3, 2.50) int -> r8 "field V03._length (fldOffset=0x4)" P-INDEP +; V18 tmp12 [V18,T09] ( 2, 1 ) byref -> r7 single-def "field V08._reference (fldOffset=0x0)" P-INDEP +; V19 tmp13 [V19,T10] ( 2, 1 ) int -> r8 "field V08._length (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 12 @@ -37,19 +36,19 @@ G_M30960_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub sp, 12 add r11, sp, 32 str r1, [r11-0x1C]
- mov r5, r0 - ; byrRegs +[r5] - mov r6, r1
+ mov r6, r0 + ; byrRegs +[r6] + mov r5, r1
mov r4, r2 ; gcrRegs +[r4] ;; size=20 bbWeight=1 PerfScore 7.00
-G_M30960_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
+G_M30960_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0040 {r6}, byref, isz
movs r7, 0 mov r8, 0 cmp r4, 0
- beq SHORT G_M30960_IG09
+ beq SHORT G_M30960_IG06
;; size=10 bbWeight=1 PerfScore 4.00
-G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
+G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0040 {r6}, byref, isz
ldr r8, [r4+0x08] ldr r7, [r4+0x04] ; gcrRegs +[r7] @@ -64,34 +63,22 @@ G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, ldr r3, [r3] blx r3 // <unknown method> ;; size=38 bbWeight=0.50 PerfScore 6.00
-G_M30960_IG04: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref, isz
+G_M30960_IG04: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0040 {r6}, byref, isz
ldr r0, [r7+0x04] cmp r0, r8
- blo SHORT G_M30960_IG11 - ldr r0, [r6+0x20] - ldr r3, [r0+0x08] - cmp r3, 0 - beq SHORT G_M30960_IG06 - ;; size=14 bbWeight=0.50 PerfScore 3.50 -G_M30960_IG05: ; bbWeight=0.40, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref, isz - b SHORT G_M30960_IG07 - ;; size=2 bbWeight=0.40 PerfScore 0.40 -G_M30960_IG06: ; bbWeight=0.10, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref - mov r0, r6
+ blo SHORT G_M30960_IG08 + mov r0, r5
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r3, r0 - ;; size=22 bbWeight=0.10 PerfScore 0.70 -G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref, isz - ldr r0, [r4+0x04] - ; gcrRegs +[r0] - ldr r0, [r0] - ; gcrRegs -[r0] - cmp r0, r3 - beq SHORT G_M30960_IG08
+ blx r3 // CORINFO_HELP_MEMCPY + ldr r1, [r4+0x04] + ; gcrRegs +[r1] + ldr r1, [r1] + ; gcrRegs -[r1] + cmp r1, r0 + beq SHORT G_M30960_IG05
movw r0, 0xd1ff movt r0, 0xd1ff movw r1, 0xd1ff @@ -101,13 +88,19 @@ G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=36 bbWeight=0.50 PerfScore 6.00 -G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ;; size=62 bbWeight=0.50 PerfScore 10.50 +G_M30960_IG05: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0040 {r6}, byref, isz + mov r0, r5 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
adds r7, 8 ; gcrRegs -[r7] ; byrRegs +[r7] cmp r8, 0
- bge SHORT G_M30960_IG09
+ bge SHORT G_M30960_IG06
movw r0, 0xd1ff movt r0, 0xd1ff movw r1, 0xd1ff @@ -116,17 +109,17 @@ G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ;; size=36 bbWeight=0.50 PerfScore 5.50 -G_M30960_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=00A0 {r5 r7}, byref - str r7, [r5] - str r8, [r5+0x04]
+ ;; size=56 bbWeight=0.50 PerfScore 8.50 +G_M30960_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=00C0 {r6 r7}, byref + str r7, [r6] + str r8, [r6+0x04]
;; size=6 bbWeight=1 PerfScore 2.00
-G_M30960_IG10: ; bbWeight=1, epilog, nogc, extend
+G_M30960_IG07: ; bbWeight=1, epilog, nogc, extend
add sp, 12 pop {r4,r5,r6,r7,r8,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M30960_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; byrRegs -[r5 r7]
+G_M30960_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[r6-r7]
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -134,7 +127,7 @@ G_M30960_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 204, prolog size 14, PerfScore 37.10, instruction count 70, allocated bytes for code 204 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
+; Total bytes of code 212, prolog size 14, PerfScore 40.00, instruction count 70, allocated bytes for code 212 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -146,7 +139,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 102 (0x00066) Actual length = 204 (0x0000cc)
+ Function Length : 106 (0x0006a) Actual length = 212 (0x0000d4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+8 (+5.00%) : 1907.dasm - System.Array:IndexOfSystem.__Canon:int (FullOpts)

@@ -8,11 +8,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) int -> r0 single-def
+; V00 TypeCtx [V00,T01] ( 5, 5 ) int -> r5 single-def
; V01 arg0 [V01,T00] ( 5, 5 ) ref -> r4 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T05] ( 3, 3 ) ref -> r6 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> r5 single-def -; V04 arg3 [V04,T09] ( 2, 2 ) int -> r7 single-def
+; V02 arg1 [V02,T04] ( 3, 3 ) ref -> r7 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> r6 single-def +; V04 arg3 [V04,T06] ( 2, 2 ) int -> r8 single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -24,79 +24,66 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T03] ( 3, 6 ) ref -> r0 single-def "argument with side effect"
-; V16 cse0 [V16,T08] ( 3, 3 ) int -> r1 "CSE - aggressive" -; V17 rat0 [V17,T07] ( 3, 4 ) int -> r1 "runtime lookup" -; V18 rat1 [V18,T04] ( 3, 5.60) int -> r1 "spilling expr" -; V19 rat2 [V19,T06] ( 3, 4.48) int -> r1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T05] ( 3, 3 ) int -> r0 "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 20
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - sub sp, 16 - add r11, sp, 32 - str r0, [r11-0x14]
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 20 + add r11, sp, 40 + str r0, [r11-0x1C] + mov r5, r0
mov r4, r1 ; gcrRegs +[r4]
- mov r6, r2 - ; gcrRegs +[r6] - mov r5, r3 - ldr r7, [sp+0x28] - ;; size=22 bbWeight=1 PerfScore 8.00 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+ mov r7, r2 + ; gcrRegs +[r7] + mov r6, r3 + ldr r8, [sp+0x30] + ;; size=26 bbWeight=1 PerfScore 9.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, byref, isz
cmp r4, 0
- beq SHORT G_M13831_IG08 - ldr r1, [r4+0x04] - cmp r1, r5 - blo SHORT G_M13831_IG09 - subs r1, r1, r5 - cmp r1, r7 - blo SHORT G_M13831_IG10 - ldr r1, [r0+0x20] - ldr r3, [r1+0x04] - cmp r3, 12 - ble SHORT G_M13831_IG05 - ;; size=24 bbWeight=1 PerfScore 12.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M13831_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+ beq SHORT G_M13831_IG04 + ldr r0, [r4+0x04] + cmp r0, r6 + blo SHORT G_M13831_IG05 + subs r0, r0, r6 + cmp r0, r8 + blo SHORT G_M13831_IG06 + mov r0, r5
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.36 PerfScore 2.16 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + mov r0, r5 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] ; gcrRegs +[r0]
- str r7, [sp]
+ str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2]
- mov r3, r5
+ mov r3, r6
ldr lr, [r0] ldr lr, [lr+0x30] ldr lr, [lr] blx lr // <unknown method>
- ; gcrRegs -[r0-r2 r4 r6] - ;; size=36 bbWeight=1 PerfScore 13.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - add sp, 16 - pop {r4,r5,r6,r7,r11,pc}
+ ; gcrRegs -[r0-r2 r4 r7] + ;; size=92 bbWeight=1 PerfScore 32.00 +G_M13831_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 20 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2 movw r3, 0xd1ff movt r3, 0xd1ff @@ -104,14 +91,14 @@ G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r3 // System.ThrowHelper:ThrowArgumentNullException(int) bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -119,7 +106,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 160, prolog size 14, PerfScore 40.20, instruction count 61, allocated bytes for code 160 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
+; Total bytes of code 168, prolog size 14, PerfScore 43.00, instruction count 59, allocated bytes for code 168 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================ Unwind Info: @@ -131,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 80 (0x00050) Actual length = 160 (0x0000a0)
+ Function Length : 84 (0x00054) Actual length = 168 (0x0000a8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -139,7 +126,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 04 add sp, sp, #16 ; opsize 16 - A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ 05 add sp, sp, #20 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

+34 (+17.00%) : 2076.dasm - System.Linq.Enumerable:gEnumerableToArray|296_0[System.ValueTuple`2[System.Canon,System.Canon]](System.Collections.Generic.IEnumerable1[System.ValueTuple2[System.Canon,System.Canon]]):System.ValueTuple`2[System.Canon,System.__Canon]

@@ -8,13 +8,13 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> r4 single-def -; V01 arg0 [V01,T05] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]>
+; V00 TypeCtx [V00,T00] ( 8, 8 ) int -> r4 single-def +; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]>
; V02 loc0 [V02 ] ( 1, 1 ) struct (64) [sp+0x94] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.ValueTuple`2[System.__Canon,System.__Canon]]> ; V03 loc1 [V03 ] ( 5, 5 ) struct (136) [sp+0x0C] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1[System.ValueTuple`2[System.__Canon,System.__Canon]]>
-; V04 loc2 [V04,T14] ( 2, 2 ) ref -> r4 class-hnd exact single-def <System.ValueTuple`2[System.__Canon,System.__Canon][]>
+; V04 loc2 [V04,T08] ( 2, 2 ) ref -> r5 class-hnd exact single-def <System.ValueTuple`2[System.__Canon,System.__Canon][]>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V06 tmp1 [V06,T04] ( 2, 4 ) int -> r6 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V08 tmp3 [V08 ] ( 3, 6 ) struct ( 8) [sp+0x04] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" <System.Span`1[System.ValueTuple`2[System.__Canon,System.__Canon]]> ;* V09 tmp4 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -25,16 +25,9 @@ ; V14 tmp9 [V14,T02] ( 3, 6 ) int -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V08._length (fldOffset=0x4)" P-DEP ;* V15 tmp10 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP ;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x4)" P-INDEP
-; V17 tmp12 [V17,T10] ( 2, 4 ) int -> r1 "argument with side effect" -; V18 tmp13 [V18,T11] ( 2, 4 ) int -> r1 "argument with side effect" -; V19 tmp14 [V19,T12] ( 2, 4 ) int -> r1 "argument with side effect" -; V20 tmp15 [V20,T13] ( 2, 4 ) int -> r1 "argument with side effect" -; V21 cse0 [V21,T07] ( 4, 4 ) int -> r6 "CSE - aggressive" -; V22 rat0 [V22,T08] ( 3, 4 ) int -> r1 "runtime lookup" -; V23 rat1 [V23,T03] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable" -; V24 rat2 [V24,T09] ( 3, 4 ) int -> r6 "runtime lookup" -; V25 rat3 [V25,T04] ( 3, 5.60) int -> r0 "spilling expr" -; V26 rat4 [V26,T06] ( 3, 4.48) int -> r6 "fgMakeTemp is creating a new local variable"
+; V17 tmp12 [V17,T05] ( 2, 4 ) int -> r1 "argument with side effect" +; V18 tmp13 [V18,T06] ( 2, 4 ) int -> r1 "argument with side effect" +; V19 tmp14 [V19,T07] ( 2, 4 ) int -> r1 "argument with side effect"
; ; Lcl frame size = 220 @@ -54,70 +47,49 @@ G_M13440_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r5, r1 ; gcrRegs +[r5] ;; size=34 bbWeight=1 PerfScore 13.00
-G_M13440_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r1, [r0+0x08] - cmp r1, 0 - beq SHORT G_M13440_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M13440_IG03: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13440_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M13440_IG04: ; bbWeight=0.20, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M13440_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=22 bbWeight=0.20 PerfScore 1.40 -G_M13440_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + mov r6, r0 + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
add r0, sp, 4 add r2, sp, 148
+ mov r1, r6
movs r3, 8 movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.ValueTuple`2[System.__Canon,System.__Canon]],System.ValueTuple`2[System.__Canon,System.__Canon]](byref,int):System.Span`1[System.ValueTuple`2[System.__Canon,System.__Canon]]
- ;; size=20 bbWeight=1 PerfScore 7.00 -G_M13440_IG06: ; bbWeight=1, nogc, extend
+ ;; size=64 bbWeight=1 PerfScore 21.00 +G_M13440_IG03: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x84] ldr r0, [sp+0x08] str r0, [sp+0x88] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M13440_IG07: ; bbWeight=1, nogc, extend
+G_M13440_IG04: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x8C] ldr r0, [sp+0x08] str r0, [sp+0x90] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M13440_IG08: ; bbWeight=1, isz, extend - ldr r0, [r4+0x20] - ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M13440_IG11 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M13440_IG09: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r6, [r0+0x0C] - cmp r6, 0 - beq SHORT G_M13440_IG11 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M13440_IG10: ; bbWeight=0.64, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13440_IG12 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M13440_IG11: ; bbWeight=0.36, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M13440_IG05: ; bbWeight=1, extend
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r6, r0 - ;; size=22 bbWeight=0.36 PerfScore 2.52 -G_M13440_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r1, r6
+ blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 mov r2, r5 ; gcrRegs +[r2] @@ -126,31 +98,43 @@ G_M13440_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r2 r5]
- mov r1, r6
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.ValueTuple`2[System.__Canon,System.__Canon]]:ToArray():System.ValueTuple`2[System.__Canon,System.__Canon][]:this ; gcrRegs +[r0]
- mov r4, r0 - ; gcrRegs +[r4] - mov r1, r6 - add r0, sp, 12
+ mov r5, r0 + ; gcrRegs +[r5] + mov r0, r4
; gcrRegs -[r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0 + add r0, sp, 12
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.ValueTuple`2[System.__Canon,System.__Canon]]:Dispose():this
- mov r0, r4
+ mov r0, r5
; gcrRegs +[r0]
- ;; size=54 bbWeight=1 PerfScore 21.00 -G_M13440_IG13: ; bbWeight=1, epilog, nogc, extend
+ ;; size=114 bbWeight=1 PerfScore 39.00 +G_M13440_IG06: ; bbWeight=1, epilog, nogc, extend
add sp, 220 pop {r4,r5,r6,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 200, prolog size 30, PerfScore 66.76, instruction count 78, allocated bytes for code 200 (MethodHash=1d88cb7f) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
+; Total bytes of code 234, prolog size 30, PerfScore 83.00, instruction count 83, allocated bytes for code 234 (MethodHash=1d88cb7f) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
; ============================================================ Unwind Info: @@ -162,7 +146,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 100 (0x00064) Actual length = 200 (0x0000c8)
+ Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

benchmarks.run_pgo.linux.arm.checked.mch

-26 (-38.24%) : 13590.dasm - System.Linq.Enumerable:FirstOrDefaultSystem.__Canon:System.__Canon (Tier1)

@@ -2,48 +2,33 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 loc0 [V02 ] ( 1, 1 ) ubyte -> [sp+0x00] do-not-enreg[X] addr-exposed ld-addr-op ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M56297_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M56297_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M56297_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M56297_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M56297_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M56297_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M56297_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M56297_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
add r2, sp, 0 mov r1, r4 ; gcrRegs +[r1] @@ -52,13 +37,13 @@ G_M56297_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r1 r4] +[r0]
- ;; size=16 bbWeight=1 PerfScore 6.00 -G_M56297_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=34 bbWeight=1 PerfScore 11.00 +G_M56297_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 68, prolog size 14, PerfScore 19.60, instruction count 24, allocated bytes for code 68 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
+; Total bytes of code 42, prolog size 4, PerfScore 15.00, instruction count 15, allocated bytes for code 42 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -70,11 +55,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 68 (0x000044)
+ Function Length : 21 (0x00015) Actual length = 42 (0x00002a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-30 (-34.09%) : 11901.dasm - System.Linq.Enumerable:IsEmptyArraySystem.__Canon:ubyte (Tier1)

@@ -3,79 +3,63 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 24 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T05] ( 3, 3 ) ref -> r0 class-hnd single-def <<unknown class>>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T03] ( 3, 3 ) ref -> r0 class-hnd single-def <<unknown class>>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38282_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M38282_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M38282_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38282_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M38282_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M38282_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M38282_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1 r4] +[r0]
+ ; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M38282_IG08
+ beq SHORT G_M38282_IG05
ldr r0, [r0+0x04] ; gcrRegs -[r0] cmp r0, 0
- beq SHORT G_M38282_IG06
+ beq SHORT G_M38282_IG03
movs r0, 0
- b SHORT G_M38282_IG07 - ;; size=26 bbWeight=1 PerfScore 11.00 -G_M38282_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ b SHORT G_M38282_IG04 + ;; size=44 bbWeight=1 PerfScore 16.00 +G_M38282_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=1 PerfScore 1.00
-G_M38282_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00 -G_M38282_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M38282_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00 +G_M38282_IG05: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 0 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M38282_IG09: ; bbWeight=0, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0 PerfScore 0.00
+G_M38282_IG06: ; bbWeight=0, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0 PerfScore 0.00
-; Total bytes of code 88, prolog size 14, PerfScore 25.60, instruction count 33, allocated bytes for code 88 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
+; Total bytes of code 58, prolog size 4, PerfScore 21.00, instruction count 23, allocated bytes for code 58 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -87,7 +71,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 44 (0x0002c) Actual length = 88 (0x000058)
+ Function Length : 29 (0x0001d) Actual length = 58 (0x00003a)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -99,7 +83,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-30 (-34.09%) : 17433.dasm - System.Linq.Enumerable:IsEmptyArraySystem.__Canon:ubyte (Tier1)

@@ -3,79 +3,63 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 2 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T05] ( 3, 3 ) ref -> r0 class-hnd single-def <<unknown class>>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T03] ( 3, 3 ) ref -> r0 class-hnd single-def <<unknown class>>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38282_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M38282_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M38282_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38282_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M38282_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M38282_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M38282_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1 r4] +[r0]
+ ; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M38282_IG08
+ beq SHORT G_M38282_IG05
ldr r0, [r0+0x04] ; gcrRegs -[r0] cmp r0, 0
- beq SHORT G_M38282_IG06
+ beq SHORT G_M38282_IG03
movs r0, 0
- b SHORT G_M38282_IG07 - ;; size=26 bbWeight=1 PerfScore 11.00 -G_M38282_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ b SHORT G_M38282_IG04 + ;; size=44 bbWeight=1 PerfScore 16.00 +G_M38282_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=1 PerfScore 1.00
-G_M38282_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00 -G_M38282_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M38282_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00 +G_M38282_IG05: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 0 ;; size=2 bbWeight=0 PerfScore 0.00
-G_M38282_IG09: ; bbWeight=0, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0 PerfScore 0.00
+G_M38282_IG06: ; bbWeight=0, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0 PerfScore 0.00
-; Total bytes of code 88, prolog size 14, PerfScore 25.60, instruction count 33, allocated bytes for code 88 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
+; Total bytes of code 58, prolog size 4, PerfScore 21.00, instruction count 23, allocated bytes for code 58 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -87,7 +71,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 44 (0x0002c) Actual length = 88 (0x000058)
+ Function Length : 29 (0x0001d) Actual length = 58 (0x00003a)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -99,7 +83,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+10 (+5.05%) : 20173.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -9,11 +9,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) int -> r0 single-def
+; V00 TypeCtx [V00,T02] ( 5, 5 ) int -> r6 single-def
; V01 arg0 [V01,T00] ( 6, 5 ) ref -> r4 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T05] ( 4, 3 ) ref -> r6 ld-addr-op class-hnd single-def <System.__Canon>
+; V02 arg1 [V02,T04] ( 4, 3 ) ref -> r7 ld-addr-op class-hnd single-def <System.__Canon>
; V03 arg2 [V03,T01] ( 6, 5 ) int -> r5 single-def
-; V04 arg3 [V04,T09] ( 3, 2 ) int -> r7 single-def
+; V04 arg3 [V04,T06] ( 3, 2 ) int -> r8 single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -23,61 +23,48 @@ ;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp3 [V12,T03] ( 5, 6 ) ref -> r0 class-hnd single-def "spilling ret_expr" <System.Collections.Generic.EqualityComparer`1[System.__Canon]> ;* V13 tmp4 [V13 ] ( 0, 0 ) int -> zero-ref
-; V14 tmp5 [V14,T10] ( 3, 2 ) int -> r0 "guarded devirt return temp"
+; V14 tmp5 [V14,T07] ( 3, 2 ) int -> r0 "guarded devirt return temp"
;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Collections.Generic.ObjectEqualityComparer`1[System.Diagnostics.Metrics.Instrument]> ;* V16 tmp7 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V17 tmp8 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V18 cse0 [V18,T08] ( 3, 3 ) int -> r1 "CSE - aggressive" -; V19 rat0 [V19,T07] ( 3, 4 ) int -> r1 "runtime lookup" -; V20 rat1 [V20,T04] ( 3, 5.60) int -> r1 "spilling expr" -; V21 rat2 [V21,T06] ( 3, 4.48) int -> r1 "fgMakeTemp is creating a new local variable"
+; V18 cse0 [V18,T05] ( 3, 3 ) int -> r0 "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 20
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - sub sp, 16 - add r11, sp, 32 - str r0, [r11-0x14]
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 20 + add r11, sp, 40 + str r0, [r11-0x1C] + mov r6, r0
mov r4, r1 ; gcrRegs +[r4]
- mov r6, r2 - ; gcrRegs +[r6]
+ mov r7, r2 + ; gcrRegs +[r7]
mov r5, r3
- ldr r7, [sp+0x28] - ;; size=22 bbWeight=1 PerfScore 8.00 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+ ldr r8, [sp+0x30] + ;; size=26 bbWeight=1 PerfScore 9.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, byref, isz
cmp r4, 0
- beq SHORT G_M13831_IG08 - ldr r1, [r4+0x04] - cmp r1, r5 - blo SHORT G_M13831_IG09 - subs r1, r1, r5 - cmp r1, r7 - blo SHORT G_M13831_IG10 - ldr r1, [r0+0x20] - ldr r3, [r1+0x04] - cmp r3, 12 - ble SHORT G_M13831_IG05 - ;; size=24 bbWeight=1 PerfScore 12.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M13831_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+ beq SHORT G_M13831_IG04 + ldr r0, [r4+0x04] + cmp r0, r5 + blo SHORT G_M13831_IG05 + subs r0, r0, r5 + cmp r0, r8 + blo SHORT G_M13831_IG06 + mov r0, r6
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.36 PerfScore 2.16 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + mov r0, r6 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -87,24 +74,24 @@ G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b movw r2, 0xd1ff movt r2, 0xd1ff cmp r1, r2
- bne SHORT G_M13831_IG11 - str r7, [sp]
+ bne SHORT G_M13831_IG07 + str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2] mov r3, r5 movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // System.Collections.Generic.ObjectEqualityComparer`1[System.__Canon]:IndexOf(System.__Canon[],System.__Canon,int,int):int:this
- ; gcrRegs -[r0-r2 r4 r6] - ;; size=50 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 16 - pop {r4,r5,r6,r7,r11,pc}
+ ; gcrRegs -[r0-r2 r4 r7] + ;; size=106 bbWeight=1 PerfScore 37.00 +G_M13831_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + add sp, 20 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2 movw r3, 0xd1ff movt r3, 0xd1ff @@ -112,37 +99,37 @@ G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r3 // System.ThrowHelper:ThrowArgumentNullException(int) bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG11: ; bbWeight=0, gcrefRegs=0051 {r0 r4 r6}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r4 r6] - str r7, [sp]
+G_M13831_IG07: ; bbWeight=0, gcrefRegs=0091 {r0 r4 r7}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0 r4 r7] + str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2] mov r3, r5 ldr lr, [r0] ldr lr, [lr+0x30] ldr lr, [lr] blx lr // <unknown method>
- ; gcrRegs -[r0-r2 r4 r6] - b SHORT G_M13831_IG07 - ;; size=24 bbWeight=0 PerfScore 0.00
+ ; gcrRegs -[r0-r2 r4 r7] + b SHORT G_M13831_IG03 + ;; size=26 bbWeight=0 PerfScore 0.00
-; Total bytes of code 198, prolog size 14, PerfScore 45.20, instruction count 75, allocated bytes for code 198 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 208, prolog size 14, PerfScore 48.00, instruction count 73, allocated bytes for code 208 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================ Unwind Info: @@ -154,7 +141,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 99 (0x00063) Actual length = 198 (0x0000c6)
+ Function Length : 104 (0x00068) Actual length = 208 (0x0000d0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -162,7 +149,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 04 add sp, sp, #16 ; opsize 16 - A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ 05 add sp, sp, #20 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

+10 (+5.05%) : 21951.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -9,11 +9,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) int -> r0 single-def
+; V00 TypeCtx [V00,T02] ( 5, 5 ) int -> r6 single-def
; V01 arg0 [V01,T00] ( 6, 5 ) ref -> r4 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T05] ( 4, 3 ) ref -> r6 ld-addr-op class-hnd single-def <System.__Canon>
+; V02 arg1 [V02,T04] ( 4, 3 ) ref -> r7 ld-addr-op class-hnd single-def <System.__Canon>
; V03 arg2 [V03,T01] ( 6, 5 ) int -> r5 single-def
-; V04 arg3 [V04,T09] ( 3, 2 ) int -> r7 single-def
+; V04 arg3 [V04,T06] ( 3, 2 ) int -> r8 single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -23,61 +23,48 @@ ;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp3 [V12,T03] ( 5, 6 ) ref -> r0 class-hnd single-def "spilling ret_expr" <System.Collections.Generic.EqualityComparer`1[System.__Canon]> ;* V13 tmp4 [V13 ] ( 0, 0 ) int -> zero-ref
-; V14 tmp5 [V14,T10] ( 3, 2 ) int -> r0 "guarded devirt return temp"
+; V14 tmp5 [V14,T07] ( 3, 2 ) int -> r0 "guarded devirt return temp"
;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Collections.Generic.ObjectEqualityComparer`1[System.Object]> ;* V16 tmp7 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V17 tmp8 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V18 cse0 [V18,T08] ( 3, 3 ) int -> r1 "CSE - aggressive" -; V19 rat0 [V19,T07] ( 3, 4 ) int -> r1 "runtime lookup" -; V20 rat1 [V20,T04] ( 3, 5.60) int -> r1 "spilling expr" -; V21 rat2 [V21,T06] ( 3, 4.48) int -> r1 "fgMakeTemp is creating a new local variable"
+; V18 cse0 [V18,T05] ( 3, 3 ) int -> r0 "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 20
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - sub sp, 16 - add r11, sp, 32 - str r0, [r11-0x14]
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 20 + add r11, sp, 40 + str r0, [r11-0x1C] + mov r6, r0
mov r4, r1 ; gcrRegs +[r4]
- mov r6, r2 - ; gcrRegs +[r6]
+ mov r7, r2 + ; gcrRegs +[r7]
mov r5, r3
- ldr r7, [sp+0x28] - ;; size=22 bbWeight=1 PerfScore 8.00 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+ ldr r8, [sp+0x30] + ;; size=26 bbWeight=1 PerfScore 9.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, byref, isz
cmp r4, 0
- beq SHORT G_M13831_IG08 - ldr r1, [r4+0x04] - cmp r1, r5 - blo SHORT G_M13831_IG09 - subs r1, r1, r5 - cmp r1, r7 - blo SHORT G_M13831_IG10 - ldr r1, [r0+0x20] - ldr r3, [r1+0x04] - cmp r3, 12 - ble SHORT G_M13831_IG05 - ;; size=24 bbWeight=1 PerfScore 12.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M13831_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+ beq SHORT G_M13831_IG04 + ldr r0, [r4+0x04] + cmp r0, r5 + blo SHORT G_M13831_IG05 + subs r0, r0, r5 + cmp r0, r8 + blo SHORT G_M13831_IG06 + mov r0, r6
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.36 PerfScore 2.16 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + mov r0, r6 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -87,24 +74,24 @@ G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b movw r2, 0xd1ff movt r2, 0xd1ff cmp r1, r2
- bne SHORT G_M13831_IG11 - str r7, [sp]
+ bne SHORT G_M13831_IG07 + str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2] mov r3, r5 movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // System.Collections.Generic.ObjectEqualityComparer`1[System.__Canon]:IndexOf(System.__Canon[],System.__Canon,int,int):int:this
- ; gcrRegs -[r0-r2 r4 r6] - ;; size=50 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 16 - pop {r4,r5,r6,r7,r11,pc}
+ ; gcrRegs -[r0-r2 r4 r7] + ;; size=106 bbWeight=1 PerfScore 37.00 +G_M13831_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + add sp, 20 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2 movw r3, 0xd1ff movt r3, 0xd1ff @@ -112,37 +99,37 @@ G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r3 // System.ThrowHelper:ThrowArgumentNullException(int) bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG11: ; bbWeight=0, gcrefRegs=0051 {r0 r4 r6}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r4 r6] - str r7, [sp]
+G_M13831_IG07: ; bbWeight=0, gcrefRegs=0091 {r0 r4 r7}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0 r4 r7] + str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2] mov r3, r5 ldr lr, [r0] ldr lr, [lr+0x30] ldr lr, [lr] blx lr // <unknown method>
- ; gcrRegs -[r0-r2 r4 r6] - b SHORT G_M13831_IG07 - ;; size=24 bbWeight=0 PerfScore 0.00
+ ; gcrRegs -[r0-r2 r4 r7] + b SHORT G_M13831_IG03 + ;; size=26 bbWeight=0 PerfScore 0.00
-; Total bytes of code 198, prolog size 14, PerfScore 45.20, instruction count 75, allocated bytes for code 198 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 208, prolog size 14, PerfScore 48.00, instruction count 73, allocated bytes for code 208 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================ Unwind Info: @@ -154,7 +141,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 99 (0x00063) Actual length = 198 (0x0000c6)
+ Function Length : 104 (0x00068) Actual length = 208 (0x0000d0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -162,7 +149,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 04 add sp, sp, #16 ; opsize 16 - A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ 05 add sp, sp, #20 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

+10 (+5.05%) : 23083.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -9,11 +9,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) int -> r0 single-def
+; V00 TypeCtx [V00,T02] ( 5, 5 ) int -> r6 single-def
; V01 arg0 [V01,T00] ( 6, 5 ) ref -> r4 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T05] ( 4, 3 ) ref -> r6 ld-addr-op class-hnd single-def <System.__Canon>
+; V02 arg1 [V02,T04] ( 4, 3 ) ref -> r7 ld-addr-op class-hnd single-def <System.__Canon>
; V03 arg2 [V03,T01] ( 6, 5 ) int -> r5 single-def
-; V04 arg3 [V04,T09] ( 3, 2 ) int -> r7 single-def
+; V04 arg3 [V04,T06] ( 3, 2 ) int -> r8 single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -23,61 +23,48 @@ ;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp3 [V12,T03] ( 5, 6 ) ref -> r0 class-hnd single-def "spilling ret_expr" <System.Collections.Generic.EqualityComparer`1[System.__Canon]> ;* V13 tmp4 [V13 ] ( 0, 0 ) int -> zero-ref
-; V14 tmp5 [V14,T10] ( 3, 2 ) int -> r0 "guarded devirt return temp"
+; V14 tmp5 [V14,T07] ( 3, 2 ) int -> r0 "guarded devirt return temp"
;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Collections.Generic.ObjectEqualityComparer`1[System.Object]> ;* V16 tmp7 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V17 tmp8 [V17 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V18 cse0 [V18,T08] ( 3, 3 ) int -> r1 "CSE - aggressive" -; V19 rat0 [V19,T07] ( 3, 4 ) int -> r1 "runtime lookup" -; V20 rat1 [V20,T04] ( 3, 5.60) int -> r1 "spilling expr" -; V21 rat2 [V21,T06] ( 3, 4.48) int -> r1 "fgMakeTemp is creating a new local variable"
+; V18 cse0 [V18,T05] ( 3, 3 ) int -> r0 "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 20
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - sub sp, 16 - add r11, sp, 32 - str r0, [r11-0x14]
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 20 + add r11, sp, 40 + str r0, [r11-0x1C] + mov r6, r0
mov r4, r1 ; gcrRegs +[r4]
- mov r6, r2 - ; gcrRegs +[r6]
+ mov r7, r2 + ; gcrRegs +[r7]
mov r5, r3
- ldr r7, [sp+0x28] - ;; size=22 bbWeight=1 PerfScore 8.00 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+ ldr r8, [sp+0x30] + ;; size=26 bbWeight=1 PerfScore 9.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, byref, isz
cmp r4, 0
- beq SHORT G_M13831_IG08 - ldr r1, [r4+0x04] - cmp r1, r5 - blo SHORT G_M13831_IG09 - subs r1, r1, r5 - cmp r1, r7 - blo SHORT G_M13831_IG10 - ldr r1, [r0+0x20] - ldr r3, [r1+0x04] - cmp r3, 12 - ble SHORT G_M13831_IG05 - ;; size=24 bbWeight=1 PerfScore 12.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M13831_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+ beq SHORT G_M13831_IG04 + ldr r0, [r4+0x04] + cmp r0, r5 + blo SHORT G_M13831_IG05 + subs r0, r0, r5 + cmp r0, r8 + blo SHORT G_M13831_IG06 + mov r0, r6
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.36 PerfScore 2.16 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + mov r0, r6 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -87,24 +74,24 @@ G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b movw r2, 0xd1ff movt r2, 0xd1ff cmp r1, r2
- bne SHORT G_M13831_IG11 - str r7, [sp]
+ bne SHORT G_M13831_IG07 + str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2] mov r3, r5 movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // System.Collections.Generic.ObjectEqualityComparer`1[System.__Canon]:IndexOf(System.__Canon[],System.__Canon,int,int):int:this
- ; gcrRegs -[r0-r2 r4 r6] - ;; size=50 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 16 - pop {r4,r5,r6,r7,r11,pc}
+ ; gcrRegs -[r0-r2 r4 r7] + ;; size=106 bbWeight=1 PerfScore 37.00 +G_M13831_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + add sp, 20 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2 movw r3, 0xd1ff movt r3, 0xd1ff @@ -112,37 +99,37 @@ G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r3 // System.ThrowHelper:ThrowArgumentNullException(int) bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG11: ; bbWeight=0, gcrefRegs=0051 {r0 r4 r6}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r4 r6] - str r7, [sp]
+G_M13831_IG07: ; bbWeight=0, gcrefRegs=0091 {r0 r4 r7}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r0 r4 r7] + str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2] mov r3, r5 ldr lr, [r0] ldr lr, [lr+0x30] ldr lr, [lr] blx lr // <unknown method>
- ; gcrRegs -[r0-r2 r4 r6] - b SHORT G_M13831_IG07 - ;; size=24 bbWeight=0 PerfScore 0.00
+ ; gcrRegs -[r0-r2 r4 r7] + b SHORT G_M13831_IG03 + ;; size=26 bbWeight=0 PerfScore 0.00
-; Total bytes of code 198, prolog size 14, PerfScore 45.20, instruction count 75, allocated bytes for code 198 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 208, prolog size 14, PerfScore 48.00, instruction count 73, allocated bytes for code 208 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================ Unwind Info: @@ -154,7 +141,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 99 (0x00063) Actual length = 198 (0x0000c6)
+ Function Length : 104 (0x00068) Actual length = 208 (0x0000d0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -162,7 +149,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 04 add sp, sp, #16 ; opsize 16 - A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ 05 add sp, sp, #20 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

benchmarks.run_tiered.linux.arm.checked.mch

-26 (-38.24%) : 15817.dasm - System.Linq.Enumerable:FirstOrDefaultSystem.__Canon:System.__Canon (Tier1)

@@ -2,48 +2,33 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 loc0 [V02 ] ( 1, 1 ) ubyte -> [sp+0x00] do-not-enreg[X] addr-exposed ld-addr-op ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M56297_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M56297_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M56297_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M56297_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M56297_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M56297_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M56297_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M56297_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
add r2, sp, 0 mov r1, r4 ; gcrRegs +[r1] @@ -52,13 +37,13 @@ G_M56297_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r1 r4] +[r0]
- ;; size=16 bbWeight=1 PerfScore 6.00 -G_M56297_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=34 bbWeight=1 PerfScore 11.00 +G_M56297_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 68, prolog size 14, PerfScore 19.60, instruction count 24, allocated bytes for code 68 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
+; Total bytes of code 42, prolog size 4, PerfScore 15.00, instruction count 15, allocated bytes for code 42 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -70,11 +55,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 68 (0x000044)
+ Function Length : 21 (0x00015) Actual length = 42 (0x00002a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-30 (-34.09%) : 2710.dasm - System.Linq.Enumerable:IsEmptyArraySystem.__Canon:ubyte (Tier1)

@@ -2,81 +2,65 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T05] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T03] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38282_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M38282_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M38282_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38282_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M38282_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M38282_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M38282_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1 r4] +[r0]
+ ; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M38282_IG09 - ;; size=16 bbWeight=1 PerfScore 6.00 -G_M38282_IG06: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M38282_IG06 + ;; size=34 bbWeight=1 PerfScore 11.00 +G_M38282_IG03: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
ldr r0, [r0+0x04] ; gcrRegs -[r0] cmp r0, 0
- beq SHORT G_M38282_IG07
+ beq SHORT G_M38282_IG04
movs r0, 0
- b SHORT G_M38282_IG08
+ b SHORT G_M38282_IG05
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M38282_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M38282_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00 -G_M38282_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M38282_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M38282_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG10: ; bbWeight=0.50, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00
+G_M38282_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 88, prolog size 14, PerfScore 23.10, instruction count 33, allocated bytes for code 88 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
+; Total bytes of code 58, prolog size 4, PerfScore 18.50, instruction count 23, allocated bytes for code 58 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -88,7 +72,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 44 (0x0002c) Actual length = 88 (0x000058)
+ Function Length : 29 (0x0001d) Actual length = 58 (0x00003a)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -100,7 +84,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-22 (-33.33%) : 2931.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject1[System.__Canon]:CreateCharacteristic[ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic1ubyte

@@ -2,78 +2,69 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; fully interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.String>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.String>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V04 tmp2 [V04,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V05 rat0 [V05,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V06 rat1 [V06,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V04 tmp2 [V04,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M42409_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M42409_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M42409_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M42409_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M42409_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M42409_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M42409_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M42409_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- ;; size=12 bbWeight=1 PerfScore 4.00 -G_M42409_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,lr}
+ ;; size=30 bbWeight=1 PerfScore 9.00 +G_M42409_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 8 + pop {r4,lr}
bx r3 // BenchmarkDotNet.Characteristics.Characteristic:Create[System.__Canon,ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[ubyte] ; gcr arg pop 0 ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 66, prolog size 16, PerfScore 18.60, instruction count 23, allocated bytes for code 66 (MethodHash=8f1b5a56) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateCharacteristic[ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[ubyte] (Tier1)
+; Total bytes of code 44, prolog size 6, PerfScore 15.00, instruction count 15, allocated bytes for code 44 (MethodHash=8f1b5a56) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateCharacteristic[ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[ubyte] (Tier1)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0
- E bit : 1
+ E bit : 0
X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 66 (0x000042) - --- One epilog, unwind codes at 0
+ Function Length : 22 (0x00016) Actual length = 44 (0x00002c) + ---- Epilog scopes ---- + ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ----
- ---- Epilog start at index 0 ---- - 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end + ---- Epilog start at index 3 ---- + 02 add sp, sp, #8 ; opsize 16 + A0 10 pop {r4,lr} ; opsize 32 + FF end
FF end

+8 (+5.00%) : 4206.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -8,11 +8,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) int -> r0 single-def
+; V00 TypeCtx [V00,T01] ( 5, 5 ) int -> r5 single-def
; V01 arg0 [V01,T00] ( 5, 5 ) ref -> r4 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T05] ( 3, 3 ) ref -> r6 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> r5 single-def -; V04 arg3 [V04,T09] ( 2, 2 ) int -> r7 single-def
+; V02 arg1 [V02,T04] ( 3, 3 ) ref -> r7 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> r6 single-def +; V04 arg3 [V04,T06] ( 2, 2 ) int -> r8 single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -24,79 +24,66 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T03] ( 3, 6 ) ref -> r0 single-def "argument with side effect"
-; V16 cse0 [V16,T08] ( 3, 3 ) int -> r1 "CSE - aggressive" -; V17 rat0 [V17,T07] ( 3, 4 ) int -> r1 "runtime lookup" -; V18 rat1 [V18,T04] ( 3, 5.60) int -> r1 "spilling expr" -; V19 rat2 [V19,T06] ( 3, 4.48) int -> r1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T05] ( 3, 3 ) int -> r0 "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 20
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - sub sp, 16 - add r11, sp, 32 - str r0, [r11-0x14]
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 20 + add r11, sp, 40 + str r0, [r11-0x1C] + mov r5, r0
mov r4, r1 ; gcrRegs +[r4]
- mov r6, r2 - ; gcrRegs +[r6] - mov r5, r3 - ldr r7, [sp+0x28] - ;; size=22 bbWeight=1 PerfScore 8.00 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+ mov r7, r2 + ; gcrRegs +[r7] + mov r6, r3 + ldr r8, [sp+0x30] + ;; size=26 bbWeight=1 PerfScore 9.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, byref, isz
cmp r4, 0
- beq SHORT G_M13831_IG08 - ldr r1, [r4+0x04] - cmp r1, r5 - blo SHORT G_M13831_IG09 - subs r1, r1, r5 - cmp r1, r7 - blo SHORT G_M13831_IG10 - ldr r1, [r0+0x20] - ldr r3, [r1+0x04] - cmp r3, 12 - ble SHORT G_M13831_IG05 - ;; size=24 bbWeight=1 PerfScore 12.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M13831_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+ beq SHORT G_M13831_IG04 + ldr r0, [r4+0x04] + cmp r0, r6 + blo SHORT G_M13831_IG05 + subs r0, r0, r6 + cmp r0, r8 + blo SHORT G_M13831_IG06 + mov r0, r5
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.36 PerfScore 2.16 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + mov r0, r5 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] ; gcrRegs +[r0]
- str r7, [sp]
+ str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2]
- mov r3, r5
+ mov r3, r6
ldr lr, [r0] ldr lr, [lr+0x30] ldr lr, [lr] blx lr // <unknown method>
- ; gcrRegs -[r0-r2 r4 r6] - ;; size=36 bbWeight=1 PerfScore 13.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - add sp, 16 - pop {r4,r5,r6,r7,r11,pc}
+ ; gcrRegs -[r0-r2 r4 r7] + ;; size=92 bbWeight=1 PerfScore 32.00 +G_M13831_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 20 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2 movw r3, 0xd1ff movt r3, 0xd1ff @@ -104,14 +91,14 @@ G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r3 // System.ThrowHelper:ThrowArgumentNullException(int) bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -119,7 +106,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 160, prolog size 14, PerfScore 40.20, instruction count 61, allocated bytes for code 160 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 168, prolog size 14, PerfScore 43.00, instruction count 59, allocated bytes for code 168 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================ Unwind Info: @@ -131,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 80 (0x00050) Actual length = 160 (0x0000a0)
+ Function Length : 84 (0x00054) Actual length = 168 (0x0000a8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -139,7 +126,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 04 add sp, sp, #16 ; opsize 16 - A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ 05 add sp, sp, #20 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

+8 (+7.27%) : 12133.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -8,92 +8,84 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T03] ( 3, 2.50) ref -> r5 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.60) int -> r1 single-def -; V02 arg1 [V02,T01] ( 4, 3.50) byref -> r4 single-def
+; V00 this [V00,T03] ( 3, 2.50) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 5, 4 ) int -> r4 single-def +; V02 arg1 [V02,T01] ( 4, 3.50) byref -> r5 single-def
; V03 loc0 [V03,T02] ( 6, 4.50) ref -> r0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> ;* V04 loc1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T04] ( 4, 4 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 4 ) ref -> r7 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 2 ) int -> r0 "runtime lookup" -; V10 rat1 [V10,T05] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r11,lr} - sub sp, 12
+ push {r2,r3,r4,r5,r6,r7,r11,lr}
add r11, sp, 24 str r1, [r11-0x14]
- mov r5, r0 - ; gcrRegs +[r5] - mov r4, r2 - ; byrRegs +[r4]
+ mov r6, r0 + ; gcrRegs +[r6] + mov r4, r1 + mov r5, r2 + ; byrRegs +[r5]
;; size=18 bbWeight=1 PerfScore 6.00
-G_M58319_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz - ldr r0, [r4]
+G_M58319_IG02: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz + ldr r0, [r5]
; gcrRegs +[r0] cmp r0, 0
- bne SHORT G_M58319_IG07
+ bne SHORT G_M58319_IG04
;; size=6 bbWeight=1 PerfScore 3.00
-G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
; gcrRegs -[r0]
- ldr r0, [r1+0x20] - ldr r0, [r0+0x08] - cmp r0, 0 - beq SHORT G_M58319_IG05 - ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz - b SHORT G_M58319_IG06 - ;; size=2 bbWeight=0.40 PerfScore 0.40 -G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref - mov r0, r1
+ mov r0, r4
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=20 bbWeight=0.10 PerfScore 0.60 -G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY
movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
- mov r6, r0 - ; gcrRegs +[r6] - add r0, r6, 8
+ mov r7, r0 + ; gcrRegs +[r7] + add r0, r7, 8
; gcrRegs -[r0] ; byrRegs +[r0]
- mov r1, r5
+ mov r1, r6
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r5]
+ ; gcrRegs -[r1 r6]
; byrRegs -[r0] mov r0, r4
+ movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r0, r5
; byrRegs +[r0]
- mov r1, r6
+ mov r1, r7
; gcrRegs +[r1] movs r2, 0 movw r3, 0xd1ff movt r3, 0xd1ff blx r3 // <unknown method> ; gcrRegs -[r1] +[r0]
- ; byrRegs -[r0 r4]
+ ; byrRegs -[r0 r5]
cmp r0, 0
- bne SHORT G_M58319_IG07 - mov r0, r6 - ;; size=50 bbWeight=0.50 PerfScore 9.00 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[r6] - add sp, 12 - pop {r4,r5,r6,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ bne SHORT G_M58319_IG04 + mov r0, r7 + ;; size=90 bbWeight=0.50 PerfScore 15.00 +G_M58319_IG04: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[r7] + pop {r2,r3,r4,r5,r6,r7,r11,pc} + ;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 110, prolog size 14, PerfScore 23.00, instruction count 40, allocated bytes for code 110 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 118, prolog size 12, PerfScore 25.00, instruction count 40, allocated bytes for code 118 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -105,11 +97,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 55 (0x00037) Actual length = 110 (0x00006e)
+ Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32 + FF end
FF end

+34 (+17.00%) : 16790.dasm - System.Linq.Enumerable:gEnumerableToArray|296_0System.__Canon:System.Canon

@@ -8,13 +8,13 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> r4 single-def -; V01 arg0 [V01,T05] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 8, 8 ) int -> r4 single-def +; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 loc0 [V02 ] ( 1, 1 ) struct (32) [sp+0x94] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon]> ; V03 loc1 [V03 ] ( 5, 5 ) struct (136) [sp+0x0C] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]>
-; V04 loc2 [V04,T14] ( 2, 2 ) ref -> r4 class-hnd single-def <System.__Canon[]>
+; V04 loc2 [V04,T08] ( 2, 2 ) ref -> r5 class-hnd single-def <System.__Canon[]>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V06 tmp1 [V06,T04] ( 2, 4 ) int -> r6 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V08 tmp3 [V08 ] ( 3, 6 ) struct ( 8) [sp+0x04] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" <System.Span`1[System.__Canon]> ;* V09 tmp4 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -25,16 +25,9 @@ ; V14 tmp9 [V14,T02] ( 3, 6 ) int -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V08._length (fldOffset=0x4)" P-DEP ;* V15 tmp10 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP ;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x4)" P-INDEP
-; V17 tmp12 [V17,T10] ( 2, 4 ) int -> r1 "argument with side effect" -; V18 tmp13 [V18,T11] ( 2, 4 ) int -> r1 "argument with side effect" -; V19 tmp14 [V19,T12] ( 2, 4 ) int -> r1 "argument with side effect" -; V20 tmp15 [V20,T13] ( 2, 4 ) int -> r1 "argument with side effect" -; V21 cse0 [V21,T07] ( 4, 4 ) int -> r6 "CSE - aggressive" -; V22 rat0 [V22,T08] ( 3, 4 ) int -> r1 "runtime lookup" -; V23 rat1 [V23,T03] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable" -; V24 rat2 [V24,T09] ( 3, 4 ) int -> r6 "runtime lookup" -; V25 rat3 [V25,T04] ( 3, 5.60) int -> r0 "spilling expr" -; V26 rat4 [V26,T06] ( 3, 4.48) int -> r6 "fgMakeTemp is creating a new local variable"
+; V17 tmp12 [V17,T05] ( 2, 4 ) int -> r1 "argument with side effect" +; V18 tmp13 [V18,T06] ( 2, 4 ) int -> r1 "argument with side effect" +; V19 tmp14 [V19,T07] ( 2, 4 ) int -> r1 "argument with side effect"
; ; Lcl frame size = 188 @@ -54,70 +47,49 @@ G_M19942_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r5, r1 ; gcrRegs +[r5] ;; size=34 bbWeight=1 PerfScore 13.00
-G_M19942_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r1, [r0+0x08] - cmp r1, 0 - beq SHORT G_M19942_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M19942_IG03: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M19942_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M19942_IG04: ; bbWeight=0.20, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M19942_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=22 bbWeight=0.20 PerfScore 1.40 -G_M19942_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + mov r6, r0 + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
add r0, sp, 4 add r2, sp, 148
+ mov r1, r6
movs r3, 8 movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon]
- ;; size=20 bbWeight=1 PerfScore 7.00 -G_M19942_IG06: ; bbWeight=1, nogc, extend
+ ;; size=64 bbWeight=1 PerfScore 21.00 +G_M19942_IG03: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x84] ldr r0, [sp+0x08] str r0, [sp+0x88] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M19942_IG07: ; bbWeight=1, nogc, extend
+G_M19942_IG04: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x8C] ldr r0, [sp+0x08] str r0, [sp+0x90] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M19942_IG08: ; bbWeight=1, isz, extend - ldr r0, [r4+0x20] - ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M19942_IG11 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M19942_IG09: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r6, [r0+0x0C] - cmp r6, 0 - beq SHORT G_M19942_IG11 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M19942_IG10: ; bbWeight=0.64, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M19942_IG12 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M19942_IG11: ; bbWeight=0.36, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M19942_IG05: ; bbWeight=1, extend
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r6, r0 - ;; size=22 bbWeight=0.36 PerfScore 2.52 -G_M19942_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r1, r6
+ blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 mov r2, r5 ; gcrRegs +[r2] @@ -126,31 +98,43 @@ G_M19942_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r2 r5]
- mov r1, r6
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:ToArray():System.__Canon[]:this ; gcrRegs +[r0]
- mov r4, r0 - ; gcrRegs +[r4] - mov r1, r6 - add r0, sp, 12
+ mov r5, r0 + ; gcrRegs +[r5] + mov r0, r4
; gcrRegs -[r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0 + add r0, sp, 12
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:Dispose():this
- mov r0, r4
+ mov r0, r5
; gcrRegs +[r0]
- ;; size=54 bbWeight=1 PerfScore 21.00 -G_M19942_IG13: ; bbWeight=1, epilog, nogc, extend
+ ;; size=114 bbWeight=1 PerfScore 39.00 +G_M19942_IG06: ; bbWeight=1, epilog, nogc, extend
add sp, 188 pop {r4,r5,r6,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 200, prolog size 30, PerfScore 66.76, instruction count 78, allocated bytes for code 200 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
+; Total bytes of code 234, prolog size 30, PerfScore 83.00, instruction count 83, allocated bytes for code 234 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
; ============================================================ Unwind Info: @@ -162,7 +146,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 100 (0x00064) Actual length = 200 (0x0000c8)
+ Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

coreclr_tests.run.linux.arm.checked.mch

-32 (-10.60%) : 86.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)

@@ -7,25 +7,20 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T05] ( 7, 4.88) int -> r6 single-def -; V01 arg0 [V01,T06] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T04] ( 5, 12 ) int -> r6 single-def +; V01 arg0 [V01,T05] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 arg1 [V02,T01] ( 5, 19 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
-; V03 arg2 [V03,T07] ( 4, 4 ) byref -> r7 single-def
+; V03 arg2 [V03,T06] ( 4, 4 ) byref -> r7 single-def
; V04 loc0 [V04,T02] ( 7, 20 ) ref -> [sp+0x08] class-hnd EH-live spill-single-def <<unknown class>>
-; V05 loc1 [V05,T03] ( 3, 17 ) ref -> r6 class-hnd <System.__Canon> -; V06 loc2 [V06,T13] ( 2, 2 ) ref -> [sp+0x04] do-not-enreg[Z] must-init class-hnd EH-live <System.__Canon>
+; V05 loc1 [V05,T03] ( 3, 17 ) ref -> r8 class-hnd <System.__Canon> +; V06 loc2 [V06,T08] ( 2, 2 ) ref -> [sp+0x04] do-not-enreg[Z] must-init class-hnd EH-live <System.__Canon>
;* V07 loc3 [V07 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <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,T08] ( 4, 6 ) int -> r3 "VirtualCall with runtime lookup"
+; V10 tmp2 [V10,T07] ( 3, 6 ) int -> r3 "VirtualCall with runtime lookup"
;* V11 tmp3 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V12 tmp4 [V12,T00] ( 3, 48 ) int -> r4 "VirtualCall with runtime lookup"
-; V13 PSPSym [V13,T14] ( 1, 1 ) int -> [sp+0x10] do-not-enreg[V] "PSPSym" -; V14 cse0 [V14,T04] ( 2, 8.50) int -> r8 hoist "CSE - aggressive" -; V15 rat0 [V15,T09] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable" -; V16 rat1 [V16,T12] ( 3, 2 ) int -> r8 "runtime lookup" -; V17 rat2 [V17,T10] ( 3, 2.80) int -> r0 "spilling expr" -; V18 rat3 [V18,T11] ( 3, 2.24) int -> r8 "fgMakeTemp is creating a new local variable"
+; V13 PSPSym [V13,T09] ( 1, 1 ) int -> [sp+0x10] do-not-enreg[V] "PSPSym"
; ; Lcl frame size = 20 @@ -46,32 +41,20 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r7, r3 ; byrRegs +[r7] ;; size=30 bbWeight=1 PerfScore 12.00
-G_M62024_IG02: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, gcvars, byref, isz - ; GC ptr vars +{V06 V13}
+G_M62024_IG02: ; bbWeight=1, gcVars=00000100 {V06}, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, gcvars, byref, isz + ; GC ptr vars +{V06}
cmp r4, 0
- beq SHORT G_M62024_IG21
+ beq SHORT G_M62024_IG14
cmp r5, 0
- beq SHORT G_M62024_IG22 - ldr r0, [r6+0x20] - ldr r0, [r0+0x08] - cmp r0, 0 - beq SHORT G_M62024_IG04 - ;; size=16 bbWeight=1 PerfScore 8.00 -G_M62024_IG03: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, byref, isz - mov r3, r0 - b SHORT G_M62024_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, byref
+ beq SHORT G_M62024_IG15
mov r0, r6 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov r3, r0
- ;; size=22 bbWeight=0.20 PerfScore 1.40 -G_M62024_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, byref
mov r0, r4 ; gcrRegs +[r0] mov r4, r3 @@ -83,10 +66,9 @@ G_M62024_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, ; gcrRegs +[r4] str r4, [sp+0x08] ; GC ptr vars +{V04}
- ;; size=12 bbWeight=1 PerfScore 6.00 -G_M62024_IG06: ; bbWeight=1, gcVars=00002004 {V04 V06}, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, gcvars, byref, isz
+ ;; size=42 bbWeight=1 PerfScore 17.00 +G_M62024_IG03: ; bbWeight=1, gcVars=00000104 {V04 V06}, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, gcvars, byref, isz
; gcrRegs -[r0]
- ; GC ptr vars -{V13}
mov r0, r4 ; gcrRegs +[r0] movw r4, 0xd1ff @@ -97,42 +79,25 @@ G_M62024_IG06: ; bbWeight=1, gcVars=00002004 {V04 V06}, gcrefRegs=0030 {r ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M62024_IG14
+ beq SHORT G_M62024_IG07
;; size=18 bbWeight=1 PerfScore 7.00
-G_M62024_IG07: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz - ldr r0, [r6+0x20] - ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M62024_IG10 - ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M62024_IG08: ; bbWeight=0.40, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz - ldr r8, [r0+0x0C] - cmp r8, 0 - beq SHORT G_M62024_IG10 - ;; size=10 bbWeight=0.40 PerfScore 1.20 -G_M62024_IG09: ; bbWeight=0.32, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz - b SHORT G_M62024_IG11 - ;; size=2 bbWeight=0.32 PerfScore 0.32 -G_M62024_IG10: ; bbWeight=0.18, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref
+G_M62024_IG04: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz
mov r0, r6 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov r8, r0 - ;; size=22 bbWeight=0.18 PerfScore 1.26 -G_M62024_IG11: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz - mov r4, r8
+ mov r4, r0
ldr r0, [sp+0x08] // [V04 loc0] ; gcrRegs +[r0] ldr r3, [r4] blx r3 ; gcr arg pop 0
- mov r6, r0 - ; gcrRegs +[r6] - mov r1, r6
+ mov r8, r0 + ; gcrRegs +[r8] + mov r1, r8
; gcrRegs +[r1] ldr r0, [r5+0x04] ldr r3, [r5+0x0C] @@ -140,31 +105,31 @@ G_M62024_IG11: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, by ; gcrRegs -[r0-r1] ; gcr arg pop 0 cmp r0, 0
- bne SHORT G_M62024_IG13
+ bne SHORT G_M62024_IG06
ldr r0, [sp+0x08] // [V04 loc0] ; gcrRegs +[r0] movw r4, 0xd1ff movt r4, 0xd1ff ldr r3, [r4] blx r3 // <unknown method>
- ; gcrRegs -[r0 r6]
+ ; gcrRegs -[r0 r8]
; gcr arg pop 0 cmp r0, 0
- bne SHORT G_M62024_IG11 - ;; size=40 bbWeight=8 PerfScore 144.00 -G_M62024_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, byref, isz
+ bne SHORT G_M62024_IG04 + ;; size=60 bbWeight=8 PerfScore 192.00 +G_M62024_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, byref, isz
; gcrRegs -[r5]
- b SHORT G_M62024_IG14
+ b SHORT G_M62024_IG07
;; size=2 bbWeight=1 PerfScore 1.00
-G_M62024_IG13: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref, isz - ; gcrRegs +[r6]
+G_M62024_IG06: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0080 {r7}, byref, isz + ; gcrRegs +[r8]
movs r0, 1 strb r0, [r7]
- str r6, [sp+0x04] // [V06 loc2] - b SHORT G_M62024_IG15 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M62024_IG14: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, gcvars, byref, isz - ; gcrRegs -[r6]
+ str r8, [sp+0x04] // [V06 loc2] + b SHORT G_M62024_IG08 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M62024_IG07: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, gcvars, byref, isz + ; gcrRegs -[r8]
; GC ptr vars -{V06} ldr r0, [sp+0x08] // [V04 loc0] ; gcrRegs +[r0] @@ -175,38 +140,38 @@ G_M62024_IG14: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=0000 {}, by blx r3 // <unknown method> ; gcrRegs -[r0] ; gcr arg pop 0
- b SHORT G_M62024_IG19
+ b SHORT G_M62024_IG12
;; size=16 bbWeight=1 PerfScore 6.00
-G_M62024_IG15: ; bbWeight=1, gcVars=00002004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M62024_IG08: ; bbWeight=1, gcVars=00000104 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[r7]
- ; GC ptr vars +{V02 V04 V06 V13} - bl G_M62024_IG23
+ ; GC ptr vars +{V02 V04 V06} + bl G_M62024_IG16
;; size=4 bbWeight=1 PerfScore 1.00
-G_M62024_IG16: ; bbWeight=1, nogc, extend
+G_M62024_IG09: ; bbWeight=1, nogc, extend
nop ;; size=2 bbWeight=1 PerfScore 1.00
-G_M62024_IG17: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; GC ptr vars -{V02 V04 V13}
+G_M62024_IG10: ; bbWeight=1, gcVars=00000100 {V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; GC ptr vars -{V02 V04}
ldr r0, [sp+0x04] // [V06 loc2] ; gcrRegs +[r0] ;; size=2 bbWeight=1 PerfScore 1.00
-G_M62024_IG18: ; bbWeight=1, epilog, nogc, extend
+G_M62024_IG11: ; bbWeight=1, epilog, nogc, extend
add sp, 20 pop {r4,r5,r6,r7,r8,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M62024_IG19: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, gcvars, byref
+G_M62024_IG12: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, gcvars, byref
; gcrRegs -[r0] ; byrRegs +[r7] ; GC ptr vars -{V06} movs r0, 0 strb r0, [r7] ;; size=4 bbWeight=1 PerfScore 2.00
-G_M62024_IG20: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M62024_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; byrRegs -[r7] add sp, 20 pop {r4,r5,r6,r7,r8,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M62024_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M62024_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 17 movw r3, 0xd1ff movt r3, 0xd1ff @@ -215,7 +180,7 @@ G_M62024_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M62024_IG22: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M62024_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 12 movw r3, 0xd1ff movt r3, 0xd1ff @@ -224,33 +189,33 @@ G_M62024_IG22: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M62024_IG23: ; bbWeight=1, gcVars=00002004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc - ; GC ptr vars +{V02 V04 V06 V13}
+G_M62024_IG16: ; bbWeight=1, gcVars=00000104 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc + ; GC ptr vars +{V02 V04 V06}
push {r3,r4,r5,r6,r7,r8,r11,lr} add r3, r11, 8 str r3, [sp] ;; size=10 bbWeight=1 PerfScore 3.00 ...

+0 (0.00%) : 1.dasm - __GeneratedMainWrapper:Main():int (FullOpts)

@@ -45,7 +45,7 @@ G_M2004_IG02: ; bbWeight=1.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre mov r0, r5 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; gcr arg pop 0 mov r6, r0 @@ -54,7 +54,7 @@ G_M2004_IG02: ; bbWeight=1.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre ; gcrRegs -[r0] movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; gcr arg pop 0 mov r7, r0 @@ -65,7 +65,7 @@ G_M2004_IG02: ; bbWeight=1.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre addw r0, r5, 0x82c movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; gcr arg pop 0 mov r8, r0 @@ -86,7 +86,7 @@ G_M2004_IG02: ; bbWeight=1.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byre addw r0, r5, 0x8c4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; gcr arg pop 0 mov r5, r0

+0 (0.00%) : 9.dasm - System.Console:g_EnsureInitialized|260():System.IO.TextWriter (FullOpts)

No diffs found?

+0 (0.00%) : 816.dasm - DelegateTest.DelegateEquals:PosTest6():ubyte:this (FullOpts)

@@ -156,7 +156,7 @@ G_M21267_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; gcr arg pop 0 mov r5, r0 @@ -180,7 +180,7 @@ G_M21267_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; gcr arg pop 0 mov r4, r0

+0 (0.00%) : 1048.dasm - Helper:.cctor() (FullOpts)

@@ -65,7 +65,7 @@ G_M23136_IG04: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b movt r0, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] mov r1, r0 ; gcrRegs +[r1]

+0 (0.00%) : 1884.dasm - a:main():int (FullOpts)

@@ -49,14 +49,14 @@ G_M56322_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] str r0, [sp+0x04] // [V00 loc0] mov r0, r4 ; gcrRegs -[r0] movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] mov r1, r0 ; gcrRegs +[r1] @@ -91,14 +91,14 @@ G_M56322_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] str r0, [sp+0x04] // [V00 loc0] mov r0, r4 ; gcrRegs -[r0] movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] add r3, sp, 4 // [V00 loc0] movw r5, 0xd1ff @@ -112,7 +112,7 @@ G_M56322_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; byrRegs +[r5] mov r1, r0 @@ -129,7 +129,7 @@ G_M56322_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] subs r3, r6, r5 subs r3, r3, r5 @@ -141,7 +141,7 @@ G_M56322_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] subs r3, r6, r5 str r0, [sp+0x04] // [V00 loc0] @@ -151,7 +151,7 @@ G_M56322_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov r0, r4 movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] subs r3, r6, r5 str r0, [sp+0x04] // [V00 loc0]

libraries.pmi.linux.arm.checked.mch

-28 (-34.15%) : 11109.dasm - Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[System.Canon,System.Nullable1[int]](System.Converter2[System.Canon,System.Nullable1[int]]):Microsoft.FSharp.Core.FSharpFunc2[System.__Canon,System.Nullable`1[int]] (FullOpts)

@@ -2,53 +2,38 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Converter`2[System.__Canon,System.Nullable`1[int]]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Converter`2[System.__Canon,System.Nullable`1[int]]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <<StartupCode$FSharp-Core>.$Prim-types+ToFSharpFunc@3791-1[System.__Canon,System.Nullable`1[int]]> ;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 rat0 [V05,T04] ( 3, 4 ) int -> r1 "runtime lookup" -; V06 rat1 [V06,T02] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M36080_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M36080_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M36080_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M36080_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M36080_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M36080_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M36080_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M36080_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
+ ; gcr arg pop 0
mov r2, r0 ; gcrRegs +[r2] adds r0, r2, 4 @@ -63,13 +48,12 @@ G_M36080_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ; byrRegs -[r0] mov r0, r2 ; gcrRegs +[r0]
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M36080_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M36080_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.00, instruction count 29, allocated bytes for code 82 (MethodHash=cede730f) for method Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[System.__Canon,System.Nullable`1[int]](System.Converter`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
+; Total bytes of code 54, prolog size 4, PerfScore 19.00, instruction count 19, allocated bytes for code 54 (MethodHash=cede730f) for method Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[System.__Canon,System.Nullable`1[int]](System.Converter`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
; ============================================================ Unwind Info: @@ -81,11 +65,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 82 (0x000052)
+ Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-34.15%) : 11113.dasm - Microsoft.FSharp.Core.FuncConvert:FromFuncSystem.__Canon:Microsoft.FSharp.Core.FSharpFunc`2System.Canon,System.Canon

@@ -2,53 +2,38 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Func`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Func`1[System.__Canon]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <<StartupCode$FSharp-Core>.$Prim-types+FromFunc@3799[System.__Canon]> ;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 rat0 [V05,T04] ( 3, 4 ) int -> r1 "runtime lookup" -; V06 rat1 [V06,T02] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M8134_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M8134_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r1, [r1+0x08] - cmp r1, 0 - beq SHORT G_M8134_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M8134_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M8134_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M8134_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M8134_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M8134_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
+ ; gcr arg pop 0
mov r2, r0 ; gcrRegs +[r2] adds r0, r2, 4 @@ -63,13 +48,12 @@ G_M8134_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ; byrRegs -[r0] mov r0, r2 ; gcrRegs +[r0]
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M8134_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M8134_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.00, instruction count 29, allocated bytes for code 82 (MethodHash=ecb1e039) for method Microsoft.FSharp.Core.FuncConvert:FromFunc[System.__Canon](System.Func`1[System.__Canon]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
+; Total bytes of code 54, prolog size 4, PerfScore 19.00, instruction count 19, allocated bytes for code 54 (MethodHash=ecb1e039) for method Microsoft.FSharp.Core.FuncConvert:FromFunc[System.__Canon](System.Func`1[System.__Canon]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -81,11 +65,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 82 (0x000052)
+ Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-34.15%) : 11118.dasm - Microsoft.FSharp.Core.FuncConvert:FromActionSystem.__Canon:Microsoft.FSharp.Core.FSharpFunc`2System.Canon,System.Canon

@@ -2,53 +2,38 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Action`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Action`1[System.__Canon]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <<StartupCode$FSharp-Core>.$Prim-types+FromAction@3820-1[System.__Canon]> ;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 rat0 [V05,T04] ( 3, 4 ) int -> r1 "runtime lookup" -; V06 rat1 [V06,T02] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M50630_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M50630_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r1, [r1+0x08] - cmp r1, 0 - beq SHORT G_M50630_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M50630_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M50630_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M50630_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M50630_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M50630_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
+ ; gcr arg pop 0
mov r2, r0 ; gcrRegs +[r2] adds r0, r2, 4 @@ -63,13 +48,12 @@ G_M50630_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ; byrRegs -[r0] mov r0, r2 ; gcrRegs +[r0]
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M50630_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M50630_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.00, instruction count 29, allocated bytes for code 82 (MethodHash=c1733a39) for method Microsoft.FSharp.Core.FuncConvert:FromAction[System.__Canon](System.Action`1[System.__Canon]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
+; Total bytes of code 54, prolog size 4, PerfScore 19.00, instruction count 19, allocated bytes for code 54 (MethodHash=c1733a39) for method Microsoft.FSharp.Core.FuncConvert:FromAction[System.__Canon](System.Action`1[System.__Canon]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -81,11 +65,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 82 (0x000052)
+ Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+24 (+7.41%) : 8065.dasm - System.Runtime.InteropServices.Marshal:CopyToManagedSystem.__Canon (FullOpts)

@@ -8,11 +8,11 @@ ; 3 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 6, 6 ) int -> r4 single-def
; V01 arg0 [V01,T03] ( 4, 4 ) int -> r7 single-def ; V02 arg1 [V02,T02] ( 4, 4 ) ref -> r6 class-hnd single-def <System.__Canon[]> ; V03 arg2 [V03,T01] ( 5, 4 ) int -> r5 single-def
-; V04 arg3 [V04,T10] ( 4, 3 ) int -> r8 single-def
+; V04 arg3 [V04,T07] ( 4, 3 ) int -> r8 single-def
; V05 loc0 [V05 ] ( 2, 2 ) struct ( 8) [sp+0x1C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[System.__Canon]> ; V06 OutArgs [V06 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V07 tmp1 [V07 ] ( 3, 6 ) struct ( 8) [sp+0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> @@ -26,20 +26,17 @@ ; V15 tmp9 [V15 ] ( 3, 6 ) int -> [sp+0x18] do-not-enreg[X] addr-exposed "field V07._length (fldOffset=0x4)" P-DEP ; V16 tmp10 [V16 ] ( 3, 5 ) byref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V09._reference (fldOffset=0x0)" P-DEP ; V17 tmp11 [V17 ] ( 3, 5 ) int -> [sp+0x10] do-not-enreg[X] addr-exposed "field V09._length (fldOffset=0x4)" P-DEP
-; V18 tmp12 [V18,T11] ( 2, 0 ) ref -> r1 single-def "argument with side effect" -; V19 tmp13 [V19,T12] ( 2, 0 ) ref -> r1 single-def "argument with side effect" -; V20 tmp14 [V20,T07] ( 2, 4 ) int -> r1 "argument with side effect" -; V21 tmp15 [V21,T08] ( 2, 4 ) int -> r1 "argument with side effect" -; V22 tmp16 [V22,T09] ( 2, 4 ) int -> r1 "argument with side effect" -; V23 cse0 [V23,T05] ( 4, 4 ) int -> r9 "CSE - aggressive" -; V24 rat0 [V24,T06] ( 3, 4 ) int -> r9 "runtime lookup" -; V25 rat1 [V25,T04] ( 3, 5.60) int -> r9 "fgMakeTemp is creating a new local variable"
+; V18 tmp12 [V18,T08] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V19 tmp13 [V19,T09] ( 2, 0 ) ref -> r1 single-def "argument with side effect" +; V20 tmp14 [V20,T04] ( 2, 4 ) int -> r1 "argument with side effect" +; V21 tmp15 [V21,T05] ( 2, 4 ) int -> r1 "argument with side effect" +; V22 tmp16 [V22,T06] ( 2, 4 ) int -> r1 "argument with side effect"
;
-; Lcl frame size = 40
+; Lcl frame size = 44
G_M25615_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r9,r11,lr} - sub sp, 40
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 44
add r11, sp, 64 sub r6, r11, 52 movs r4, 0 @@ -66,21 +63,21 @@ G_M25615_IG02: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byre blx r3 // <unknown method> ; gcrRegs -[r0] cmp r7, 0
- beq SHORT G_M25615_IG08
+ beq SHORT G_M25615_IG06
cmp r5, 0
- blt SHORT G_M25615_IG09
+ blt SHORT G_M25615_IG07
cmp r8, 0
- blt SHORT G_M25615_IG10
+ blt SHORT G_M25615_IG08
movs r0, 0 str r0, [sp+0x14] str r0, [sp+0x18]
- ldr r0, [r4+0x20] - ldr r9, [r0+0x08] - cmp r9, 0 - beq SHORT G_M25615_IG07 - ;; size=54 bbWeight=1 PerfScore 20.00 -G_M25615_IG03: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref - mov r1, r9
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 20 mov r2, r7 mov r3, r8 @@ -88,18 +85,24 @@ G_M25615_IG03: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byre movt lr, 0xd1ff ldr lr, [lr] blx lr // System.Span`1[System.__Canon]:.ctor(uint,int):this
- ;; size=22 bbWeight=1 PerfScore 8.00 -G_M25615_IG04: ; bbWeight=1, nogc, extend - ldr r1, [sp+0x14] - str r1, [sp+0x1C] - ldr r1, [sp+0x18] - str r1, [sp+0x20]
+ ;; size=84 bbWeight=1 PerfScore 30.00 +G_M25615_IG03: ; bbWeight=1, nogc, extend + ldr r0, [sp+0x14] + str r0, [sp+0x1C] + ldr r0, [sp+0x18] + str r0, [sp+0x20]
;; size=8 bbWeight=1 PerfScore 4.00
-G_M25615_IG05: ; bbWeight=1, extend - movs r1, 0 - str r1, [sp+0x0C] - str r1, [sp+0x10] - mov r1, r9
+G_M25615_IG04: ; bbWeight=1, extend + movs r0, 0 + str r0, [sp+0x0C] + str r0, [sp+0x10] + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
str r8, [sp] add r0, sp, 12 mov r2, r6 @@ -110,7 +113,13 @@ G_M25615_IG05: ; bbWeight=1, extend ldr lr, [lr] blx lr // System.Span`1[System.__Canon]:.ctor(System.__Canon[],int,int):this ; gcrRegs -[r2 r6]
- mov r1, r9
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
ldr r2, [sp+0x0C] ; byrRegs +[r2] ldr r3, [sp+0x10] @@ -120,30 +129,18 @@ G_M25615_IG05: ; bbWeight=1, extend ldr lr, [lr] blx lr // System.Span`1[System.__Canon]:CopyTo(System.Span`1[System.__Canon]):this ; byrRegs -[r2]
- ;; size=54 bbWeight=1 PerfScore 20.00 -G_M25615_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 40 - pop {r4,r5,r6,r7,r8,r9,r11,pc}
+ ;; size=94 bbWeight=1 PerfScore 32.00 +G_M25615_IG05: ; bbWeight=1, epilog, nogc, extend + add sp, 44 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M25615_IG07: ; bbWeight=0.20, gcVars=00000000 {}, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r6] - mov r0, r4 - movw r1, 0xd1ff - movt r1, 0xd1ff - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r9, r0 - b SHORT G_M25615_IG03 - ;; size=24 bbWeight=0.20 PerfScore 1.60 -G_M25615_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; gcrRegs -[r6]
+G_M25615_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r0, 0xd1ff movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_STRCNS
+ blx r3 // CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[r0] movw r3, 0xd1ff movt r3, 0xd1ff @@ -152,13 +149,13 @@ G_M25615_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[r0] bkpt ;; size=36 bbWeight=0 PerfScore 0.00
-G_M25615_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M25615_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r0, 0xd1ff movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_STRCNS
+ blx r3 // CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[r0] mov r1, r0 ; gcrRegs +[r1] @@ -171,13 +168,13 @@ G_M25615_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[r1] bkpt ;; size=40 bbWeight=0 PerfScore 0.00
-G_M25615_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M25615_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r0, 0xd1ff movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_STRCNS
+ blx r3 // CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[r0] mov r1, r0 ; gcrRegs +[r1] @@ -191,7 +188,7 @@ G_M25615_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=40 bbWeight=0 PerfScore 0.00
-; Total bytes of code 324, prolog size 28, PerfScore 70.60, instruction count 114, allocated bytes for code 324 (MethodHash=6f309bf0) for method System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
+; Total bytes of code 348, prolog size 28, PerfScore 83.00, instruction count 120, allocated bytes for code 348 (MethodHash=6f309bf0) for method System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
; ============================================================ Unwind Info: @@ -203,7 +200,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 162 (0x000a2) Actual length = 324 (0x000144)
+ Function Length : 174 (0x000ae) Actual length = 348 (0x00015c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -211,7 +208,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 0A add sp, sp, #40 ; opsize 16 - AB F0 pop {r4,r5,r6,r7,r8,r9,r11,lr} ; opsize 32
+ 0B add sp, sp, #44 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

+24 (+10.26%) : 8062.dasm - System.Runtime.InteropServices.Marshal:CopyToNativeSystem.__Canon (FullOpts)

@@ -8,11 +8,11 @@ ; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 6, 6 ) int -> r4 single-def
; V01 arg0 [V01,T01] ( 4, 4 ) ref -> r5 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T04] ( 3, 3 ) int -> r7 single-def
+; V02 arg1 [V02,T03] ( 3, 3 ) int -> r7 single-def
; V03 arg2 [V03,T02] ( 4, 4 ) int -> r6 single-def
-; V04 arg3 [V04,T10] ( 2, 2 ) int -> r8 single-def
+; V04 arg3 [V04,T07] ( 2, 2 ) int -> r8 single-def
; V05 loc0 [V05 ] ( 2, 2 ) struct ( 8) [sp+0x1C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[System.__Canon]> ; V06 OutArgs [V06 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V07 tmp1 [V07 ] ( 3, 6 ) struct ( 8) [sp+0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> @@ -26,18 +26,15 @@ ; V15 tmp9 [V15 ] ( 3, 6 ) int -> [sp+0x18] do-not-enreg[X] addr-exposed "field V07._length (fldOffset=0x4)" P-DEP ; V16 tmp10 [V16 ] ( 3, 5 ) byref -> [sp+0x0C] do-not-enreg[X] addr-exposed "field V09._reference (fldOffset=0x0)" P-DEP ; V17 tmp11 [V17 ] ( 3, 5 ) int -> [sp+0x10] do-not-enreg[X] addr-exposed "field V09._length (fldOffset=0x4)" P-DEP
-; V18 tmp12 [V18,T07] ( 2, 4 ) int -> r1 "argument with side effect" -; V19 tmp13 [V19,T08] ( 2, 4 ) int -> r1 "argument with side effect" -; V20 tmp14 [V20,T09] ( 2, 4 ) int -> r1 "argument with side effect" -; V21 cse0 [V21,T05] ( 4, 4 ) int -> r9 "CSE - aggressive" -; V22 rat0 [V22,T06] ( 3, 4 ) int -> r9 "runtime lookup" -; V23 rat1 [V23,T03] ( 3, 5.60) int -> r9 "fgMakeTemp is creating a new local variable"
+; V18 tmp12 [V18,T04] ( 2, 4 ) int -> r1 "argument with side effect" +; V19 tmp13 [V19,T05] ( 2, 4 ) int -> r1 "argument with side effect" +; V20 tmp14 [V20,T06] ( 2, 4 ) int -> r1 "argument with side effect"
;
-; Lcl frame size = 40
+; Lcl frame size = 44
G_M14219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r9,r11,lr} - sub sp, 40
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 44
add r11, sp, 64 sub r6, r11, 52 movs r4, 0 @@ -64,17 +61,17 @@ G_M14219_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre blx r3 // <unknown method> ; gcrRegs -[r0] cmp r6, 0
- beq SHORT G_M14219_IG08
+ beq SHORT G_M14219_IG06
movs r0, 0 str r0, [sp+0x14] str r0, [sp+0x18]
- ldr r0, [r4+0x20] - ldr r9, [r0+0x08] - cmp r9, 0 - beq SHORT G_M14219_IG07 - ;; size=44 bbWeight=1 PerfScore 16.00 -G_M14219_IG03: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r1, r9
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
str r8, [sp] add r0, sp, 20 mov r2, r5 @@ -85,18 +82,24 @@ G_M14219_IG03: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ldr lr, [lr] blx lr // System.Span`1[System.__Canon]:.ctor(System.__Canon[],int,int):this ; gcrRegs -[r2 r5]
- ;; size=26 bbWeight=1 PerfScore 9.00 -G_M14219_IG04: ; bbWeight=1, nogc, extend - ldr r1, [sp+0x14] - str r1, [sp+0x1C] - ldr r1, [sp+0x18] - str r1, [sp+0x20]
+ ;; size=78 bbWeight=1 PerfScore 27.00 +G_M14219_IG03: ; bbWeight=1, nogc, extend + ldr r0, [sp+0x14] + str r0, [sp+0x1C] + ldr r0, [sp+0x18] + str r0, [sp+0x20]
;; size=8 bbWeight=1 PerfScore 4.00
-G_M14219_IG05: ; bbWeight=1, extend - movs r1, 0 - str r1, [sp+0x0C] - str r1, [sp+0x10] - mov r1, r9
+G_M14219_IG04: ; bbWeight=1, extend + movs r0, 0 + str r0, [sp+0x0C] + str r0, [sp+0x10] + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 mov r2, r6 mov r3, r8 @@ -104,7 +107,13 @@ G_M14219_IG05: ; bbWeight=1, extend movt lr, 0xd1ff ldr lr, [lr] blx lr // System.Span`1[System.__Canon]:.ctor(uint,int):this
- mov r1, r9
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
ldr r2, [sp+0x0C] ; byrRegs +[r2] ldr r3, [sp+0x10] @@ -114,30 +123,18 @@ G_M14219_IG05: ; bbWeight=1, extend ldr lr, [lr] blx lr // System.Span`1[System.__Canon]:CopyTo(System.Span`1[System.__Canon]):this ; byrRegs -[r2]
- ;; size=50 bbWeight=1 PerfScore 19.00 -G_M14219_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 40 - pop {r4,r5,r6,r7,r8,r9,r11,pc}
+ ;; size=90 bbWeight=1 PerfScore 31.00 +G_M14219_IG05: ; bbWeight=1, epilog, nogc, extend + add sp, 44 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M14219_IG07: ; bbWeight=0.20, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r5] - mov r0, r4 - movw r1, 0xd1ff - movt r1, 0xd1ff - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r9, r0 - b SHORT G_M14219_IG03 - ;; size=24 bbWeight=0.20 PerfScore 1.60 -G_M14219_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; gcrRegs -[r5]
+G_M14219_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movw r0, 0xd1ff movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_STRCNS
+ blx r3 // CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[r0] movw r3, 0xd1ff movt r3, 0xd1ff @@ -147,7 +144,7 @@ G_M14219_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 234, prolog size 28, PerfScore 66.60, instruction count 84, allocated bytes for code 234 (MethodHash=f9ccc874) for method System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
+; Total bytes of code 258, prolog size 28, PerfScore 79.00, instruction count 90, allocated bytes for code 258 (MethodHash=f9ccc874) for method System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
; ============================================================ Unwind Info: @@ -159,7 +156,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
+ Function Length : 129 (0x00081) Actual length = 258 (0x000102)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -167,7 +164,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 0A add sp, sp, #40 ; opsize 16 - AB F0 pop {r4,r5,r6,r7,r8,r9,r11,lr} ; opsize 32
+ 0B add sp, sp, #44 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

+14 (+10.29%) : 4139.dasm - System.Numerics.Vector:AndNotSystem.__Canon:System.Numerics.Vector`1System.__Canon

@@ -7,58 +7,52 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T04] ( 3, 3 ) byref -> r4 single-def -; V01 TypeCtx [V01,T01] ( 5, 4.20) int -> r1 single-def -; V02 arg0 [V02,T00] ( 6, 6 ) struct (16) [sp+0x40] do-not-enreg[SA] multireg-arg single-def double-align <System.Numerics.Vector`1[System.__Canon]> -; V03 arg1 [V03,T05] ( 4, 4 ) struct (16) [sp+0x50] do-not-enreg[SA] multireg-arg single-def double-align <System.Numerics.Vector`1[System.__Canon]>
+; V00 RetBuf [V00,T02] ( 3, 3 ) byref -> r5 single-def +; V01 TypeCtx [V01,T01] ( 5, 5 ) int -> r4 single-def +; V02 arg0 [V02,T00] ( 6, 6 ) struct (16) [sp+0x48] do-not-enreg[SA] multireg-arg single-def double-align <System.Numerics.Vector`1[System.__Canon]> +; V03 arg1 [V03,T03] ( 4, 4 ) struct (16) [sp+0x58] do-not-enreg[SA] multireg-arg single-def double-align <System.Numerics.Vector`1[System.__Canon]>
; V04 OutArgs [V04 ] ( 1, 1 ) struct (24) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V05 loc1 [V05,T10] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V06 tmp2 [V06,T02] ( 3, 6 ) int -> r5 "spilling helperCall"
+; V05 loc1 [V05,T04] ( 2, 4 ) int -> r6 "spilling helperCall" +; V06 tmp2 [V06,T05] ( 2, 4 ) int -> r4 "spilling helperCall"
; V07 tmp3 [V07 ] ( 2, 4 ) struct (16) [sp+0x18] do-not-enreg[HS] hidden-struct-arg double-align "spilled call-like call argument" <System.Numerics.Vector`1[System.__Canon]>
-; V08 tmp4 [V08,T07] ( 2, 4 ) long -> [sp+0x18] do-not-enreg[H] hidden-struct-arg "field V07._00 (fldOffset=0x0)" P-DEP -; V09 tmp5 [V09,T08] ( 2, 4 ) long -> [sp+0x20] do-not-enreg[H] hidden-struct-arg "field V07._01 (fldOffset=0x8)" P-DEP -; V10 cse0 [V10,T09] ( 2, 2 ) int -> r5 "CSE - aggressive" -; V11 rat0 [V11,T06] ( 3, 4 ) int -> r5 "runtime lookup" -; V12 rat1 [V12,T03] ( 3, 5.60) int -> r5 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T06] ( 2, 4 ) long -> [sp+0x18] do-not-enreg[H] hidden-struct-arg "field V07._00 (fldOffset=0x0)" P-DEP +; V09 tmp5 [V09,T07] ( 2, 4 ) long -> [sp+0x20] do-not-enreg[H] hidden-struct-arg "field V07._01 (fldOffset=0x8)" P-DEP
;
-; Lcl frame size = 48
+; Lcl frame size = 52
G_M26296_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push {r2,r3}
- push {r4,r5,r11,lr} - sub sp, 48 - add r11, sp, 56 - str r1, [r11-0x0C] - mov r4, r0 - ; byrRegs +[r4] - ;; size=18 bbWeight=1 PerfScore 6.00 -G_M26296_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz - ldr r0, [r1+0x20] - ldr r5, [r0+0x08] - cmp r5, 0 - beq SHORT G_M26296_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M26296_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz - b SHORT G_M26296_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M26296_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref - mov r0, r1
+ push {r4,r5,r6,r11,lr} + sub sp, 52 + add r11, sp, 64 + str r1, [r11-0x14] + mov r5, r0 + ; byrRegs +[r5] + mov r4, r1 + ;; size=20 bbWeight=1 PerfScore 7.00 +G_M26296_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref + mov r0, r4
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r5, r0 - ;; size=22 bbWeight=0.20 PerfScore 1.40 -G_M26296_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref - ldr r2, [sp+0x50] - ldr r3, [sp+0x54] - ldr r0, [sp+0x58] - ldr r1, [sp+0x5C]
+ blx r3 // CORINFO_HELP_MEMCPY + mov r6, r0 + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r4, r0 + ldr r2, [sp+0x58] + ldr r3, [sp+0x5C] + ldr r0, [sp+0x60] + ldr r1, [sp+0x64]
str r0, [sp] str r1, [sp+0x04] add r0, sp, 24
- mov r1, r5
+ mov r1, r6
movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] @@ -71,29 +65,29 @@ G_M26296_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byre str r3, [sp+0x10] ldr r3, [sp+0x24] str r3, [sp+0x14]
- ldr r2, [sp+0x40] - ldr r3, [sp+0x44] - ldr r0, [sp+0x48] - ldr r1, [sp+0x4C]
+ ldr r2, [sp+0x48] + ldr r3, [sp+0x4C] + ldr r0, [sp+0x50] + ldr r1, [sp+0x54]
str r0, [sp] str r1, [sp+0x04]
- mov r0, r4
+ mov r0, r5
; byrRegs +[r0]
- mov r1, r5
+ mov r1, r4
movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // System.Numerics.Vector`1[System.__Canon]:op_BitwiseAnd(System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon]
- ; byrRegs -[r0 r4] - ;; size=76 bbWeight=1 PerfScore 32.00 -G_M26296_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 48 - pop {r4,r5,r11,lr}
+ ; byrRegs -[r0 r5] + ;; size=120 bbWeight=1 PerfScore 46.00 +G_M26296_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 52 + pop {r4,r5,r6,r11,lr}
add sp, 8 bx lr ;; size=10 bbWeight=1 PerfScore 4.00
-; Total bytes of code 136, prolog size 16, PerfScore 48.20, instruction count 54, allocated bytes for code 136 (MethodHash=4cad9947) for method System.Numerics.Vector:AndNot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
+; Total bytes of code 150, prolog size 16, PerfScore 57.00, instruction count 57, allocated bytes for code 150 (MethodHash=4cad9947) for method System.Numerics.Vector:AndNot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -105,20 +99,20 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 68 (0x00044) Actual length = 136 (0x000088)
+ Function Length : 75 (0x0004b) Actual length = 150 (0x000096)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) Condition : 14 (0xe) (always) Epilog Start Index : 6 (0x06) ---- Unwind codes ----
- 0C add sp, sp, #48 ; opsize 16 - A8 30 pop {r4,r5,r11,lr} ; opsize 32
+ 0D add sp, sp, #52 ; opsize 16 + A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
EC 0C pop {r2,r3} ; opsize 16 FF end ---- Epilog start at index 6 ----
- 0C add sp, sp, #48 ; opsize 16 - A8 30 pop {r4,r5,r11,lr} ; opsize 32
+ 0D add sp, sp, #52 ; opsize 16 + A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
02 add sp, sp, #8 ; opsize 16 FD end + nop ; opsize 16 FF end

libraries_tests.run.linux.arm.Release.mch

-26 (-38.24%) : 10612.dasm - System.Linq.Enumerable:FirstOrDefaultSystem.__Canon:System.__Canon (Tier1)

@@ -2,48 +2,33 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 loc0 [V02 ] ( 1, 1 ) ubyte -> [sp+0x00] do-not-enreg[X] addr-exposed ld-addr-op ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M56297_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M56297_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M56297_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M56297_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M56297_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M56297_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M56297_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M56297_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
add r2, sp, 0 mov r1, r4 ; gcrRegs +[r1] @@ -52,13 +37,13 @@ G_M56297_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r1 r4] +[r0]
- ;; size=16 bbWeight=1 PerfScore 6.00 -G_M56297_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=34 bbWeight=1 PerfScore 11.00 +G_M56297_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 68, prolog size 14, PerfScore 19.60, instruction count 24, allocated bytes for code 68 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
+; Total bytes of code 42, prolog size 4, PerfScore 15.00, instruction count 15, allocated bytes for code 42 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -70,11 +55,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 68 (0x000044)
+ Function Length : 21 (0x00015) Actual length = 42 (0x00002a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-26 (-36.11%) : 7272.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder:StartSystem.__Canon:this (Instrumented Tier1)

@@ -2,85 +2,71 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; Instrumented Tier1 code ; optimized code
-; r11 based frame
+; sp based frame
; fully interruptible ; No matching PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) byref -> zero-ref this single-def
-; V01 TypeCtx [V01,T00] ( 5, 4.36) int -> r1 single-def -; V02 arg1 [V02,T02] ( 3, 3 ) byref -> r4 single-def
+; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> r1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) byref -> r4 single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T05] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T04] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r0 "spilling expr" -; V08 rat2 [V08,T03] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M8536_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r1, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r1, [sp+0x04]
mov r4, r2 ; byrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M8536_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz - ldr r0, [r1+0x20] - ldr r3, [r0+0x04] - cmp r3, 12 - ble SHORT G_M8536_IG05 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M8536_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz - ldr r0, [r0+0x0C] - cmp r0, 0 - beq SHORT G_M8536_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M8536_IG04: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz - b SHORT G_M8536_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M8536_IG05: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M8536_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
mov r0, r1 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=20 bbWeight=0.36 PerfScore 2.16 -G_M8536_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
mov r1, r4 ; byrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- ;; size=12 bbWeight=1 PerfScore 4.00 -G_M8536_IG07: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,lr}
+ ;; size=32 bbWeight=1 PerfScore 10.00 +G_M8536_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 8 + pop {r4,lr}
bx r3 // <unknown method> ; gcr arg pop 0 ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 72, prolog size 16, PerfScore 21.20, instruction count 26, allocated bytes for code 72 (MethodHash=bcebdea7) for method System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.__Canon](byref):this (Instrumented Tier1)
+; Total bytes of code 46, prolog size 6, PerfScore 16.00, instruction count 16, allocated bytes for code 46 (MethodHash=bcebdea7) for method System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.__Canon](byref):this (Instrumented Tier1)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0
- E bit : 1
+ E bit : 0
X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 72 (0x000048) - --- One epilog, unwind codes at 0
+ Function Length : 23 (0x00017) Actual length = 46 (0x00002e) + ---- Epilog scopes ---- + ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ----
- ---- Epilog start at index 0 ---- - 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end + ---- Epilog start at index 3 ---- + 02 add sp, sp, #8 ; opsize 16 + A0 10 pop {r4,lr} ; opsize 32 + FF end
FF end

-30 (-34.09%) : 4606.dasm - System.Linq.Enumerable:IsEmptyArraySystem.__Canon:ubyte (Tier1)

@@ -3,83 +3,67 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; r11 based frame
+; sp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 550 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T05] ( 3, 2.22) ref -> r0 class-hnd single-def <<unknown class>>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T03] ( 3, 2.22) ref -> r0 class-hnd single-def <<unknown class>>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38282_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M38282_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M38282_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38282_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M38282_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M38282_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M38282_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1 r4] +[r0]
+ ; gcr arg pop 0
cmp r0, 0
- bne SHORT G_M38282_IG08 - ;; size=16 bbWeight=1 PerfScore 6.00 -G_M38282_IG06: ; bbWeight=0.78, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ bne SHORT G_M38282_IG05 + ;; size=34 bbWeight=1 PerfScore 11.00 +G_M38282_IG03: ; bbWeight=0.78, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0] movs r0, 0 ;; size=2 bbWeight=0.78 PerfScore 0.78
-G_M38282_IG07: ; bbWeight=0.78, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.78 PerfScore 1.57 -G_M38282_IG08: ; bbWeight=0.22, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M38282_IG04: ; bbWeight=0.78, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.78 PerfScore 0.78 +G_M38282_IG05: ; bbWeight=0.22, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r0] ldr r0, [r0+0x04] ; gcrRegs -[r0] cmp r0, 0
- beq SHORT G_M38282_IG09
+ beq SHORT G_M38282_IG06
movs r0, 0
- b SHORT G_M38282_IG10
+ b SHORT G_M38282_IG07
;; size=10 bbWeight=0.22 PerfScore 1.08
-G_M38282_IG09: ; bbWeight=0.22, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M38282_IG06: ; bbWeight=0.22, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=0.22 PerfScore 0.22
-G_M38282_IG10: ; bbWeight=0.22, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.22 PerfScore 0.43
+G_M38282_IG07: ; bbWeight=0.22, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.22 PerfScore 0.22
-; Total bytes of code 88, prolog size 14, PerfScore 21.68, instruction count 33, allocated bytes for code 88 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
+; Total bytes of code 58, prolog size 4, PerfScore 17.08, instruction count 23, allocated bytes for code 58 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -91,7 +75,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 44 (0x0002c) Actual length = 88 (0x000058)
+ Function Length : 29 (0x0001d) Actual length = 58 (0x00003a)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -103,7 +87,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+4 (+2.06%) : 828.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)

@@ -5,33 +5,34 @@ ; optimized using Dynamic PGO ; r11 based frame ; fully interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 2
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 2
; 2 inlinees with PGO data; 6 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 5, 4 ) ref -> r6 this class-hnd single-def <System.Collections.Hashtable>
+; V00 this [V00,T03] ( 5, 4 ) ref -> r6 this class-hnd single-def <System.Collections.Hashtable>
; V01 arg1 [V01,T00] ( 10, 7 ) ref -> r4 class-hnd single-def <System.Object>
-; V02 arg2 [V02,T01] ( 7, 5 ) ref -> r5 class-hnd single-def <System.Object>
+; V02 arg2 [V02,T02] ( 7, 5 ) ref -> r5 class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T08] ( 3, 2.25) int -> r6 "guarded devirt return temp" -; V05 tmp2 [V05,T06] ( 3, 3 ) ref -> r4 class-hnd exact single-def "guarded devirt this exact temp" <System.String>
+; V04 tmp1 [V04,T09] ( 3, 2 ) int -> r0 "guarded devirt return temp" +; V05 tmp2 [V05,T07] ( 3, 3 ) ref -> r4 class-hnd exact single-def "guarded devirt this exact temp" <System.String>
;* V06 tmp3 [V06 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V07 tmp4 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V09 tmp6 [V09,T03] ( 5, 4.50) ref -> r5 class-hnd exact "Inline stloc first use temp" <System.String> -; V10 tmp7 [V10,T05] ( 2, 4 ) byref -> r0 single-def "impAppendStmt"
+; V08 tmp5 [V08,T04] ( 4, 4 ) ref -> r5 class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V09 tmp6 [V09,T06] ( 2, 4 ) byref -> r0 single-def "impAppendStmt" +;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp11 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V15 tmp12 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp13 [V16,T04] ( 3, 4 ) int -> r5 "Single return block return value" -; V17 cse0 [V17,T07] ( 3, 3 ) int -> r2 "CSE - aggressive" -; V18 cse1 [V18,T09] ( 2, 2 ) ref -> r1 "CSE - aggressive"
+; V15 tmp12 [V15,T05] ( 3, 4 ) int -> r5 "Single return block return value" +; V16 cse0 [V16,T08] ( 3, 3 ) int -> r2 "CSE - aggressive" +; V17 cse1 [V17,T10] ( 2, 2 ) ref -> r1 "CSE - aggressive" +; V18 rat0 [V18,T01] ( 5, 7.50) ref -> r5 "replacement local" +; V19 rat1 [V19,T11] ( 2, 2 ) int -> r2 "CSE for expectedClsNode"
; ; Lcl frame size = 4
-G_M51920_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51920_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
push {r3,r4,r5,r6,r11,lr} add r11, sp, 16 mov r6, r0 @@ -58,36 +59,43 @@ G_M51920_IG03: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {} ldr r2, [r6+0x04] ; gcrRegs +[r2] cmp r2, r4
- beq SHORT G_M51920_IG10
+ beq SHORT G_M51920_IG16
cmp r4, r5
- beq SHORT G_M51920_IG12
+ beq SHORT G_M51920_IG10
ldr r2, [r6+0x10] cmp r2, 0
- bne SHORT G_M51920_IG14
+ bne SHORT G_M51920_IG12
cmp r4, 0
- beq SHORT G_M51920_IG10
+ beq SHORT G_M51920_IG16
ldr r2, [r4] ; gcrRegs -[r2] movw r1, 0xd1ff movt r1, 0xd1ff cmp r2, r1
- bne SHORT G_M51920_IG15
+ bne SHORT G_M51920_IG14
cmp r5, 0
- beq SHORT G_M51920_IG09
+ beq SHORT G_M51920_IG06
;; size=38 bbWeight=1 PerfScore 17.00 G_M51920_IG04: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[r6]
- ldr r2, [r5] - movw r1, 0xd1ff - movt r1, 0xd1ff - cmp r2, r1 - bne SHORT G_M51920_IG09
+ movw r2, 0xd1ff + movt r2, 0xd1ff + ldr r1, [r5] + cmp r1, r2 + beq SHORT G_M51920_IG06
;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M51920_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+G_M51920_IG05: ; bbWeight=0.25, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ; gcrRegs -[r5] + movs r5, 0 + ;; size=2 bbWeight=0.25 PerfScore 0.25 +G_M51920_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[r5] + cmp r5, 0 + beq SHORT G_M51920_IG13
ldr r2, [r4+0x04] ldr r1, [r5+0x04] cmp r2, r1
- bne SHORT G_M51920_IG09
+ bne SHORT G_M51920_IG13
add r0, r4, 8 ; byrRegs +[r0] lsls r2, r2, 1 @@ -100,34 +108,23 @@ G_M51920_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b ; gcrRegs -[r4-r5] ; byrRegs -[r0-r1] ; gcr arg pop 0
- mov r6, r0 - ;; size=32 bbWeight=1 PerfScore 12.00 -G_M51920_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - uxtb r5, r6 - ;; size=2 bbWeight=1 PerfScore 1.00
+ ;; size=34 bbWeight=1 PerfScore 13.00
G_M51920_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ uxtb r5, r0 + ;; size=2 bbWeight=1 PerfScore 1.00 +G_M51920_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
uxtb r0, r5 ;; size=2 bbWeight=1 PerfScore 1.00
-G_M51920_IG08: ; bbWeight=1, epilog, nogc, extend
+G_M51920_IG09: ; bbWeight=1, epilog, nogc, extend
pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=1 PerfScore 1.00
-G_M51920_IG09: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz - movs r6, 0 - b SHORT G_M51920_IG06 - ;; size=4 bbWeight=0.25 PerfScore 0.50 -G_M51920_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - movs r0, 0
+G_M51920_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + movs r0, 1
;; size=2 bbWeight=0 PerfScore 0.00 G_M51920_IG11: ; bbWeight=0, epilog, nogc, extend pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-G_M51920_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - movs r0, 1 - ;; size=2 bbWeight=0 PerfScore 0.00 -G_M51920_IG13: ; bbWeight=0, epilog, nogc, extend - pop {r3,r4,r5,r6,r11,pc} - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M51920_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M51920_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[r4-r6] ldr r0, [r6+0x10] ; gcrRegs +[r0] @@ -143,9 +140,13 @@ G_M51920_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0070 {r4 r5 r6 ; gcrRegs -[r0-r2 r5-r6] ; gcr arg pop 0 mov r5, r0
- b SHORT G_M51920_IG07
+ b SHORT G_M51920_IG08
;; size=22 bbWeight=0 PerfScore 0.00
-G_M51920_IG15: ; bbWeight=0, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
+G_M51920_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + movs r0, 0 + b SHORT G_M51920_IG07 + ;; size=4 bbWeight=0 PerfScore 0.00 +G_M51920_IG14: ; bbWeight=0, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
; gcrRegs +[r4-r5] mov r0, r4 ; gcrRegs +[r0] @@ -155,14 +156,21 @@ G_M51920_IG15: ; bbWeight=0, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b ldr r3, [r3+0x2C] ldr r3, [r3+0x08] ;; size=10 bbWeight=0 PerfScore 0.00
-G_M51920_IG16: ; bbWeight=0, epilog, nogc, extend
+G_M51920_IG15: ; bbWeight=0, epilog, nogc, extend
add sp, 4 pop {r4,r5,r6,r11,lr} bx r3 // <unknown method> ; gcr arg pop 0 ;; size=8 bbWeight=0 PerfScore 0.00
+G_M51920_IG16: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs -[r0-r1 r4-r5] + movs r0, 0 + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M51920_IG17: ; bbWeight=0, epilog, nogc, extend + pop {r3,r4,r5,r6,r11,pc} + ;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 194, prolog size 14, PerfScore 50.00, instruction count 75, allocated bytes for code 194 (MethodHash=350c352f) for method System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
+; Total bytes of code 198, prolog size 14, PerfScore 50.75, instruction count 77, allocated bytes for code 198 (MethodHash=350c352f) for method System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -174,7 +182,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 97 (0x00061) Actual length = 194 (0x0000c2)
+ Function Length : 99 (0x00063) Actual length = 198 (0x0000c6)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -187,11 +195,11 @@ Unwind Info: ---- Scope 2 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) Condition : 14 (0xe) (always)
- Epilog Start Index : 0 (0x00)
+ Epilog Start Index : 3 (0x03)
---- Scope 3 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) Condition : 14 (0xe) (always)
- Epilog Start Index : 3 (0x03)
+ Epilog Start Index : 0 (0x00)
---- Unwind codes ---- ---- Epilog start at index 0 ---- A8 78 pop {r3,r4,r5,r6,r11,lr} ; opsize 32

+40 (+14.49%) : 6363.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessagesSystem.__Canon (Tier0-FullOpts)

@@ -8,72 +8,68 @@ ; 0 inlinees with PGO data; 6 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T09] ( 7, 13.88) int -> [sp+0x38] EH-live single-def -; V01 arg0 [V01,T11] ( 4, 10 ) ref -> [sp+0x14] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon]> -; V02 arg1 [V02,T10] ( 5, 12 ) ref -> [sp+0x10] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]> -; V03 arg2 [V03,T13] ( 3, 2 ) byref -> [sp+0x0C] EH-live single-def
+; V00 TypeCtx [V00,T00] ( 9, 27 ) int -> [sp+0x30] EH-live single-def +; V01 arg0 [V01,T07] ( 4, 10 ) ref -> [sp+0x14] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon]> +; V02 arg1 [V02,T06] ( 5, 12 ) ref -> [sp+0x10] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]> +; V03 arg2 [V03,T09] ( 3, 2 ) byref -> [sp+0x0C] EH-live single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref
-; V05 loc1 [V05,T06] ( 3, 17 ) int -> [sp+0x34] do-not-enreg[Z] EH-live -; V06 loc2 [V06 ] ( 8, 33 ) struct (16) [sp+0x20] do-not-enreg[XSF] must-init addr-exposed ld-addr-op double-align <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]>
+; V05 loc1 [V05,T03] ( 3, 17 ) int -> [sp+0x2C] do-not-enreg[Z] EH-live +; V06 loc2 [V06 ] ( 8, 33 ) struct (16) [sp+0x18] do-not-enreg[XSF] must-init addr-exposed ld-addr-op double-align <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]>
;* V07 loc3 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ; V08 OutArgs [V08 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V10 tmp2 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V11 tmp3 [V11,T07] ( 2, 16 ) ref -> r4 class-hnd "impAppendStmt" <System.__Canon>
+; V11 tmp3 [V11,T04] ( 2, 16 ) ref -> r8 class-hnd "impAppendStmt" <System.__Canon>
;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V13 tmp5 [V13,T00] ( 4, 24 ) int -> [sp+0x1C] "VirtualCall with runtime lookup"
+; V13 tmp5 [V13,T01] ( 3, 24 ) int -> r1 "VirtualCall with runtime lookup"
;* V14 tmp6 [V14 ] ( 0, 0 ) struct ( 8) zero-ref double-align "spilled call-like call argument" <System.Threading.Tasks.Dataflow.DataflowMessageHeader> ;* V15 tmp7 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V16 tmp8 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp9 [V17,T08] ( 2, 16 ) ref -> r4 class-hnd "impAppendStmt" <System.__Canon>
+; V17 tmp9 [V17,T05] ( 2, 16 ) ref -> r4 class-hnd "impAppendStmt" <System.__Canon>
;* V18 tmp10 [V18 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V19 tmp11 [V19,T01] ( 4, 24 ) int -> [sp+0x18] "VirtualCall with runtime lookup"
+; V19 tmp11 [V19,T02] ( 3, 24 ) int -> r1 "VirtualCall with runtime lookup"
;* V20 tmp12 [V20 ] ( 0, 0 ) struct ( 8) zero-ref double-align "spilled call-like call argument" <System.Threading.Tasks.Dataflow.DataflowMessageHeader>
-; V21 tmp13 [V21,T15] ( 2, 0 ) ref -> r1 class-hnd "impSpillSpecialSideEff" <<unknown class>> -; V22 tmp14 [V22,T12] ( 2, 4 ) ref -> r1 class-hnd single-def "Inlining Arg" <System.Collections.Generic.Dictionary`2[System.__Canon,int]>
+; V21 tmp13 [V21,T11] ( 2, 0 ) ref -> r1 class-hnd "impSpillSpecialSideEff" <<unknown class>> +; V22 tmp14 [V22,T08] ( 2, 4 ) ref -> r1 class-hnd single-def "Inlining Arg" <System.Collections.Generic.Dictionary`2[System.__Canon,int]>
;* V23 tmp15 [V23 ] ( 0, 0 ) long -> zero-ref "field V14._id (fldOffset=0x0)" P-INDEP ;* V24 tmp16 [V24 ] ( 0, 0 ) long -> zero-ref "field V20._id (fldOffset=0x0)" P-INDEP
-; V25 PSPSym [V25,T14] ( 1, 1 ) int -> [sp+0x40] do-not-enreg[V] "PSPSym" -; V26 rat0 [V26,T02] ( 3, 22.40) int -> r0 "spilling expr" -; V27 rat1 [V27,T04] ( 3, 17.92) int -> r0 "fgMakeTemp is creating a new local variable" -; V28 rat2 [V28,T03] ( 3, 22.40) int -> r0 "spilling expr" -; V29 rat3 [V29,T05] ( 3, 17.92) int -> r0 "fgMakeTemp is creating a new local variable"
+; V25 PSPSym [V25,T10] ( 1, 1 ) int -> [sp+0x38] do-not-enreg[V] "PSPSym"
;
-; Lcl frame size = 68
+; Lcl frame size = 60
G_M56511_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG push {r4,r5,r6,r7,r8,r11,lr}
- sub sp, 68 - add r11, sp, 88
+ sub sp, 60 + add r11, sp, 80
movs r4, 0
- str r4, [sp+0x20] // [V06 loc2] - add r4, sp, 96 - str r4, [sp+0x40] // [V25 PSPSym]
+ str r4, [sp+0x18] // [V06 loc2] + add r4, sp, 88 + str r4, [sp+0x38] // [V25 PSPSym]
str r0, [r11-0x1C]
- str r0, [sp+0x38] // [V00 TypeCtx]
+ str r0, [sp+0x30] // [V00 TypeCtx]
str r1, [sp+0x14] // [V01 arg0] ; GC ptr vars +{V01} str r2, [sp+0x10] // [V02 arg1] ; GC ptr vars +{V02} str r3, [sp+0x0C] // [V03 arg2] ; GC ptr vars +{V03}
- mov r5, r0 - mov r7, r1 - ; gcrRegs +[r7] - mov r6, r2
+ mov r4, r0 + mov r6, r1
; gcrRegs +[r6]
- mov r8, r3 - ; byrRegs +[r8]
+ mov r5, r2 + ; gcrRegs +[r5] + mov r7, r3 + ; byrRegs +[r7]
;; size=38 bbWeight=1 PerfScore 16.00
-G_M56511_IG02: ; bbWeight=1, gcVars=00002C00 {V01 V02 V03}, gcrefRegs=00C0 {r6 r7}, byrefRegs=0100 {r8}, gcvars, byref, isz - ldr r1, [r6+0x08]
+G_M56511_IG02: ; bbWeight=1, gcVars=000002C0 {V01 V02 V03}, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, gcvars, byref, isz + ldr r1, [r5+0x08]
; gcrRegs +[r1] ldrsb r1, [r1] ; gcrRegs -[r1] movs r1, 0
- str r1, [sp+0x34] // [V05 loc1] - add r1, sp, 32 // [V06 loc2] - mov r0, r6
+ str r1, [sp+0x2C] // [V05 loc1] + add r1, sp, 24 // [V06 loc2] + mov r0, r5
; gcrRegs +[r0] movw r3, 0xd1ff movt r3, 0xd1ff @@ -82,99 +78,90 @@ G_M56511_IG02: ; bbWeight=1, gcVars=00002C00 {V01 V02 V03}, gcrefRegs=00C ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M56511_IG13
+ beq SHORT G_M56511_IG05
;; size=30 bbWeight=1 PerfScore 12.00
-G_M56511_IG03: ; bbWeight=4, gcrefRegs=00C0 {r6 r7}, byrefRegs=0100 {r8}, byref, isz - ldr r4, [sp+0x20] // [V06 loc2] - ; gcrRegs +[r4] - ldr r0, [r5+0x20] - ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M56511_IG06 - ;; size=10 bbWeight=4 PerfScore 20.00 -G_M56511_IG04: ; bbWeight=3.20, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - ldr r0, [r0+0x0C] - cmp r0, 0 - beq SHORT G_M56511_IG06 - ;; size=6 bbWeight=3.20 PerfScore 9.60 -G_M56511_IG05: ; bbWeight=2.56, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - mov r3, r0 - str r3, [sp+0x1C] // [V13 tmp5] - b SHORT G_M56511_IG07 - ;; size=6 bbWeight=2.56 PerfScore 7.68 -G_M56511_IG06: ; bbWeight=1.44, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref - mov r0, r5
+G_M56511_IG03: ; bbWeight=4, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, byref, isz + mov r0, r4
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- str r0, [sp+0x1C] // [V13 tmp5] - ;; size=22 bbWeight=1.44 PerfScore 10.08 -G_M56511_IG07: ; bbWeight=4, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - str r7, [sp] // [V08 OutArgs] - ; gcr arg write - ldr r2, [sp+0x28] // [V06 loc2+0x08] - ldr r3, [sp+0x2C] // [V06 loc2+0x0c]
mov r0, r4
- ; gcrRegs +[r0] - ldr r4, [sp+0x1C] // [V13 tmp5] - ; gcrRegs -[r4] - ldr r1, [r4] - blx r1 - ; gcrRegs -[r0] - ; gcr arg pop 0 - cmp r0, 0 - beq SHORT G_M56511_IG12 - ldr r4, [sp+0x20] // [V06 loc2] - ; gcrRegs +[r4] - ldr r0, [r5+0x20] - ldr r1, [r0+0x04] - cmp r1, 16 - ble SHORT G_M56511_IG10 - ;; size=28 bbWeight=4 PerfScore 56.00 -G_M56511_IG08: ; bbWeight=3.20, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - ldr r0, [r0+0x10] - cmp r0, 0 - beq SHORT G_M56511_IG10 - ;; size=6 bbWeight=3.20 PerfScore 9.60 -G_M56511_IG09: ; bbWeight=2.56, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - mov r3, r0 - str r3, [sp+0x18] // [V19 tmp11] - b SHORT G_M56511_IG11 - ;; size=6 bbWeight=2.56 PerfScore 7.68 -G_M56511_IG10: ; bbWeight=1.44, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref - mov r0, r5
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- str r0, [sp+0x18] // [V19 tmp11] - ;; size=22 bbWeight=1.44 PerfScore 10.08 -G_M56511_IG11: ; bbWeight=4, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref - str r7, [sp] // [V08 OutArgs]
+ ldr r8, [sp+0x18] // [V06 loc2] + ; gcrRegs +[r8] + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + mov r1, r0 + str r6, [sp] // [V08 OutArgs]
; gcr arg write
- ldr r2, [sp+0x28] // [V06 loc2+0x08] - ldr r3, [sp+0x2C] // [V06 loc2+0x0c]
+ ldr r2, [sp+0x20] // [V06 loc2+0x08] + ldr r3, [sp+0x24] // [V06 loc2+0x0c] + mov r0, r8 + ; gcrRegs +[r0] + mov r4, r1 + ldr r1, [r1] + blx r1 + ; gcrRegs -[r0 r8] + ; gcr arg pop 0 + cmp r0, 0 + beq SHORT G_M56511_IG04 + ldr r0, [sp+0x30] // [V00 TypeCtx] + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ldr r0, [sp+0x30] // [V00 TypeCtx] + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ldr r4, [sp+0x18] // [V06 loc2] + ; gcrRegs +[r4] + ldr r0, [sp+0x30] // [V00 TypeCtx] + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + mov r1, r0 + str r6, [sp] // [V08 OutArgs] + ; gcr arg write + ldr r2, [sp+0x20] // [V06 loc2+0x08] + ldr r3, [sp+0x24] // [V06 loc2+0x0c]
mov r0, r4 ; gcrRegs +[r0]
- ldr r4, [sp+0x18] // [V19 tmp11]
+ mov r4, r1
; gcrRegs -[r4]
- ldr r1, [r4]
+ ldr r1, [r1]
blx r1 ; gcrRegs -[r0] ; gcr arg pop 0 ...

+34 (+17.00%) : 1964.dasm - System.Linq.Enumerable:gEnumerableToArray|296_0System.__Canon:System.Canon

@@ -8,13 +8,13 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> r4 single-def -; V01 arg0 [V01,T05] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 8, 8 ) int -> r4 single-def +; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 loc0 [V02 ] ( 1, 1 ) struct (32) [sp+0x94] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon]> ; V03 loc1 [V03 ] ( 5, 5 ) struct (136) [sp+0x0C] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]>
-; V04 loc2 [V04,T14] ( 2, 2 ) ref -> r4 class-hnd single-def <System.__Canon[]>
+; V04 loc2 [V04,T08] ( 2, 2 ) ref -> r5 class-hnd single-def <System.__Canon[]>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V06 tmp1 [V06,T04] ( 2, 4 ) int -> r6 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V08 tmp3 [V08 ] ( 3, 6 ) struct ( 8) [sp+0x04] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" <System.Span`1[System.__Canon]> ;* V09 tmp4 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -25,16 +25,9 @@ ; V14 tmp9 [V14,T02] ( 3, 6 ) int -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V08._length (fldOffset=0x4)" P-DEP ;* V15 tmp10 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP ;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x4)" P-INDEP
-; V17 tmp12 [V17,T10] ( 2, 4 ) int -> r1 "argument with side effect" -; V18 tmp13 [V18,T11] ( 2, 4 ) int -> r1 "argument with side effect" -; V19 tmp14 [V19,T12] ( 2, 4 ) int -> r1 "argument with side effect" -; V20 tmp15 [V20,T13] ( 2, 4 ) int -> r1 "argument with side effect" -; V21 cse0 [V21,T07] ( 4, 4 ) int -> r6 "CSE - aggressive" -; V22 rat0 [V22,T08] ( 3, 4 ) int -> r1 "runtime lookup" -; V23 rat1 [V23,T03] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable" -; V24 rat2 [V24,T09] ( 3, 4 ) int -> r6 "runtime lookup" -; V25 rat3 [V25,T04] ( 3, 5.60) int -> r0 "spilling expr" -; V26 rat4 [V26,T06] ( 3, 4.48) int -> r6 "fgMakeTemp is creating a new local variable"
+; V17 tmp12 [V17,T05] ( 2, 4 ) int -> r1 "argument with side effect" +; V18 tmp13 [V18,T06] ( 2, 4 ) int -> r1 "argument with side effect" +; V19 tmp14 [V19,T07] ( 2, 4 ) int -> r1 "argument with side effect"
; ; Lcl frame size = 188 @@ -54,70 +47,49 @@ G_M19942_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r5, r1 ; gcrRegs +[r5] ;; size=34 bbWeight=1 PerfScore 13.00
-G_M19942_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r1, [r0+0x08] - cmp r1, 0 - beq SHORT G_M19942_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M19942_IG03: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M19942_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M19942_IG04: ; bbWeight=0.20, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M19942_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=22 bbWeight=0.20 PerfScore 1.40 -G_M19942_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + mov r6, r0 + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
add r0, sp, 4 add r2, sp, 148
+ mov r1, r6
movs r3, 8 movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon]
- ;; size=20 bbWeight=1 PerfScore 7.00 -G_M19942_IG06: ; bbWeight=1, nogc, extend
+ ;; size=64 bbWeight=1 PerfScore 21.00 +G_M19942_IG03: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x84] ldr r0, [sp+0x08] str r0, [sp+0x88] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M19942_IG07: ; bbWeight=1, nogc, extend
+G_M19942_IG04: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x8C] ldr r0, [sp+0x08] str r0, [sp+0x90] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M19942_IG08: ; bbWeight=1, isz, extend - ldr r0, [r4+0x20] - ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M19942_IG11 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M19942_IG09: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r6, [r0+0x0C] - cmp r6, 0 - beq SHORT G_M19942_IG11 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M19942_IG10: ; bbWeight=0.64, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M19942_IG12 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M19942_IG11: ; bbWeight=0.36, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M19942_IG05: ; bbWeight=1, extend
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r6, r0 - ;; size=22 bbWeight=0.36 PerfScore 2.52 -G_M19942_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r1, r6
+ blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 mov r2, r5 ; gcrRegs +[r2] @@ -126,31 +98,43 @@ G_M19942_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r2 r5]
- mov r1, r6
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:ToArray():System.__Canon[]:this ; gcrRegs +[r0]
- mov r4, r0 - ; gcrRegs +[r4] - mov r1, r6 - add r0, sp, 12
+ mov r5, r0 + ; gcrRegs +[r5] + mov r0, r4
; gcrRegs -[r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0 + add r0, sp, 12
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:Dispose():this
- mov r0, r4
+ mov r0, r5
; gcrRegs +[r0]
- ;; size=54 bbWeight=1 PerfScore 21.00 -G_M19942_IG13: ; bbWeight=1, epilog, nogc, extend
+ ;; size=114 bbWeight=1 PerfScore 39.00 +G_M19942_IG06: ; bbWeight=1, epilog, nogc, extend
add sp, 188 pop {r4,r5,r6,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 200, prolog size 30, PerfScore 66.76, instruction count 78, allocated bytes for code 200 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
+; Total bytes of code 234, prolog size 30, PerfScore 83.00, instruction count 83, allocated bytes for code 234 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
; ============================================================ Unwind Info: @@ -162,7 +146,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 100 (0x00064) Actual length = 200 (0x0000c8)
+ Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

librariestestsnotieredcompilation.run.linux.arm.Release.mch

-26 (-38.24%) : 5332.dasm - System.Linq.Enumerable:SingleOrDefaultSystem.__Canon:System.__Canon (FullOpts)

@@ -2,48 +2,33 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 loc0 [V02 ] ( 1, 1 ) ubyte -> [sp+0x00] do-not-enreg[X] addr-exposed ld-addr-op ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M27753_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M27753_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M27753_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M27753_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M27753_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M27753_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M27753_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M27753_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
add r2, sp, 0 mov r1, r4 ; gcrRegs +[r1] @@ -52,13 +37,13 @@ G_M27753_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r1 r4] +[r0]
- ;; size=16 bbWeight=1 PerfScore 6.00 -G_M27753_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ; gcr arg pop 0 + ;; size=34 bbWeight=1 PerfScore 11.00 +G_M27753_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 68, prolog size 14, PerfScore 19.60, instruction count 24, allocated bytes for code 68 (MethodHash=f6189396) for method System.Linq.Enumerable:SingleOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
+; Total bytes of code 42, prolog size 4, PerfScore 15.00, instruction count 15, allocated bytes for code 42 (MethodHash=f6189396) for method System.Linq.Enumerable:SingleOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -70,11 +55,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 68 (0x000044)
+ Function Length : 21 (0x00015) Actual length = 42 (0x00002a)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-22 (-33.33%) : 4609.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:AsImmutableSystem.__Canon:System.Collections.Immutable.ImmutableArray`1System.__Canon

@@ -2,78 +2,69 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; fully interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V04 tmp2 [V04,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V05 rat0 [V05,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V06 rat1 [V06,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V04 tmp2 [V04,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M39678_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M39678_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M39678_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M39678_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M39678_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M39678_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M39678_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M39678_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- ;; size=12 bbWeight=1 PerfScore 4.00 -G_M39678_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,lr}
+ ;; size=30 bbWeight=1 PerfScore 9.00 +G_M39678_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 8 + pop {r4,lr}
bx r3 // System.Collections.Immutable.ImmutableArray:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] ; gcr arg pop 0 ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 66, prolog size 16, PerfScore 18.60, instruction count 23, allocated bytes for code 66 (MethodHash=727d6501) for method Microsoft.CodeAnalysis.ImmutableArrayExtensions:AsImmutable[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
+; Total bytes of code 44, prolog size 6, PerfScore 15.00, instruction count 15, allocated bytes for code 44 (MethodHash=727d6501) for method Microsoft.CodeAnalysis.ImmutableArrayExtensions:AsImmutable[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0
- E bit : 1
+ E bit : 0
X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 66 (0x000042) - --- One epilog, unwind codes at 0
+ Function Length : 22 (0x00016) Actual length = 44 (0x00002c) + ---- Epilog scopes ---- + ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ----
- ---- Epilog start at index 0 ---- - 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end + ---- Epilog start at index 3 ---- + 02 add sp, sp, #8 ; opsize 16 + A0 10 pop {r4,lr} ; opsize 32 + FF end
FF end

-30 (-33.33%) : 10.dasm - System.Linq.Enumerable:IsEmptyArraySystem.__Canon:ubyte (FullOpts)

@@ -2,82 +2,66 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T05] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T03] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38282_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M38282_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M38282_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38282_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M38282_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M38282_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M38282_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1 r4] +[r0]
+ ; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M38282_IG09 - ;; size=18 bbWeight=1 PerfScore 7.00 -G_M38282_IG06: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M38282_IG06 + ;; size=36 bbWeight=1 PerfScore 12.00 +G_M38282_IG03: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
ldr r0, [r0+0x04] ; gcrRegs -[r0] cmp r0, 0
- beq SHORT G_M38282_IG07
+ beq SHORT G_M38282_IG04
movs r0, 0
- b SHORT G_M38282_IG08
+ b SHORT G_M38282_IG05
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M38282_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M38282_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00 -G_M38282_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M38282_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M38282_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG10: ; bbWeight=0.50, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00
+G_M38282_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 90, prolog size 14, PerfScore 24.10, instruction count 34, allocated bytes for code 90 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
+; Total bytes of code 60, prolog size 4, PerfScore 19.50, instruction count 24, allocated bytes for code 60 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -89,7 +73,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 45 (0x0002d) Actual length = 90 (0x00005a)
+ Function Length : 30 (0x0001e) Actual length = 60 (0x00003c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -101,7 +85,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+8 (+3.92%) : 2315.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.ValueTuple2[int,System.__Canon]](System.Collections.Generic.List1System.ValueTuple2[int,System.__Canon]]):System.Span1[System.ValueTuple`2[int,System.__Canon]

@@ -8,27 +8,26 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T01] ( 4, 4 ) byref -> r5 single-def -; V01 TypeCtx [V01,T02] ( 5, 3.60) int -> r6 single-def
+; V00 RetBuf [V00,T02] ( 4, 4 ) byref -> r6 single-def +; V01 TypeCtx [V01,T01] ( 5, 4 ) int -> r5 single-def
; V02 arg0 [V02,T00] ( 6, 4.50) ref -> r4 class-hnd single-def <System.Collections.Generic.List`1[System.ValueTuple`2[int,System.__Canon]]> ;* V03 loc0 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Span`1[System.ValueTuple`2[int,System.__Canon]]>
-; V04 loc1 [V04,T07] ( 4, 2 ) int -> r8 -; V05 loc2 [V05,T06] ( 4, 2 ) ref -> r7 class-hnd exact single-def <<unknown class>>
+; V04 loc1 [V04,T06] ( 4, 2 ) int -> r8 +; V05 loc2 [V05,T05] ( 4, 2 ) ref -> r7 class-hnd exact single-def <<unknown class>>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V07 loc4 [V07,T08] ( 3, 2 ) int -> r3 "spilling helperCall"
+; V07 loc4 [V07,T08] ( 2, 2 ) int -> r0 "spilling helperCall"
;* V08 tmp2 [V08 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.ValueTuple`2[int,System.__Canon]]> ;* V09 tmp3 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V10 tmp4 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp5 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp6 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V13 tmp7 [V13,T09] ( 2, 2 ) byref -> r7 single-def "Inlining Arg"
+; V13 tmp7 [V13,T07] ( 2, 2 ) byref -> r7 single-def "Inlining Arg"
;* V14 tmp8 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V15 tmp9 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V16 tmp10 [V16,T04] ( 3, 2.50) byref -> r7 "field V03._reference (fldOffset=0x0)" P-INDEP -; V17 tmp11 [V17,T05] ( 3, 2.50) int -> r8 "field V03._length (fldOffset=0x4)" P-INDEP -; V18 tmp12 [V18,T10] ( 2, 1 ) byref -> r7 single-def "field V08._reference (fldOffset=0x0)" P-INDEP -; V19 tmp13 [V19,T11] ( 2, 1 ) int -> r8 "field V08._length (fldOffset=0x4)" P-INDEP -; V20 rat0 [V20,T03] ( 3, 2.80) int -> r3 "fgMakeTemp is creating a new local variable"
+; V16 tmp10 [V16,T03] ( 3, 2.50) byref -> r7 "field V03._reference (fldOffset=0x0)" P-INDEP +; V17 tmp11 [V17,T04] ( 3, 2.50) int -> r8 "field V03._length (fldOffset=0x4)" P-INDEP +; V18 tmp12 [V18,T09] ( 2, 1 ) byref -> r7 single-def "field V08._reference (fldOffset=0x0)" P-INDEP +; V19 tmp13 [V19,T10] ( 2, 1 ) int -> r8 "field V08._length (fldOffset=0x4)" P-INDEP
; ; Lcl frame size = 12 @@ -37,19 +36,19 @@ G_M15939_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub sp, 12 add r11, sp, 32 str r1, [r11-0x1C]
- mov r5, r0 - ; byrRegs +[r5] - mov r6, r1
+ mov r6, r0 + ; byrRegs +[r6] + mov r5, r1
mov r4, r2 ; gcrRegs +[r4] ;; size=20 bbWeight=1 PerfScore 7.00
-G_M15939_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
+G_M15939_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0040 {r6}, byref, isz
movs r7, 0 mov r8, 0 cmp r4, 0
- beq SHORT G_M15939_IG09
+ beq SHORT G_M15939_IG06
;; size=10 bbWeight=1 PerfScore 4.00
-G_M15939_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
+G_M15939_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0040 {r6}, byref, isz
ldr r8, [r4+0x08] ldr r7, [r4+0x04] ; gcrRegs +[r7] @@ -64,34 +63,22 @@ G_M15939_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, ldr r3, [r3] blx r3 // <unknown method> ;; size=38 bbWeight=0.50 PerfScore 6.00
-G_M15939_IG04: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref, isz
+G_M15939_IG04: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0040 {r6}, byref, isz
ldr r0, [r7+0x04] cmp r0, r8
- blo SHORT G_M15939_IG11 - ldr r0, [r6+0x20] - ldr r3, [r0+0x08] - cmp r3, 0 - beq SHORT G_M15939_IG06 - ;; size=14 bbWeight=0.50 PerfScore 3.50 -G_M15939_IG05: ; bbWeight=0.40, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref, isz - b SHORT G_M15939_IG07 - ;; size=2 bbWeight=0.40 PerfScore 0.40 -G_M15939_IG06: ; bbWeight=0.10, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref - mov r0, r6
+ blo SHORT G_M15939_IG08 + mov r0, r5
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r3, r0 - ;; size=22 bbWeight=0.10 PerfScore 0.70 -G_M15939_IG07: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r5}, byref, isz - ldr r0, [r4+0x04] - ; gcrRegs +[r0] - ldr r0, [r0] - ; gcrRegs -[r0] - cmp r0, r3 - beq SHORT G_M15939_IG08
+ blx r3 // CORINFO_HELP_MEMCPY + ldr r1, [r4+0x04] + ; gcrRegs +[r1] + ldr r1, [r1] + ; gcrRegs -[r1] + cmp r1, r0 + beq SHORT G_M15939_IG05
movw r0, 0xd1ff movt r0, 0xd1ff movw r1, 0xd1ff @@ -101,13 +88,19 @@ G_M15939_IG07: ; bbWeight=0.50, gcrefRegs=0090 {r4 r7}, byrefRegs=0020 {r ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r4]
- ;; size=36 bbWeight=0.50 PerfScore 6.00 -G_M15939_IG08: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ;; size=62 bbWeight=0.50 PerfScore 10.50 +G_M15939_IG05: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0040 {r6}, byref, isz + mov r0, r5 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
adds r7, 8 ; gcrRegs -[r7] ; byrRegs +[r7] cmp r8, 0
- bge SHORT G_M15939_IG09
+ bge SHORT G_M15939_IG06
movw r0, 0xd1ff movt r0, 0xd1ff movw r1, 0xd1ff @@ -116,17 +109,17 @@ G_M15939_IG08: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, movt r3, 0xd1ff ldr r3, [r3] blx r3 // <unknown method>
- ;; size=36 bbWeight=0.50 PerfScore 5.50 -G_M15939_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=00A0 {r5 r7}, byref - str r7, [r5] - str r8, [r5+0x04]
+ ;; size=56 bbWeight=0.50 PerfScore 8.50 +G_M15939_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=00C0 {r6 r7}, byref + str r7, [r6] + str r8, [r6+0x04]
;; size=6 bbWeight=1 PerfScore 2.00
-G_M15939_IG10: ; bbWeight=1, epilog, nogc, extend
+G_M15939_IG07: ; bbWeight=1, epilog, nogc, extend
add sp, 12 pop {r4,r5,r6,r7,r8,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M15939_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; byrRegs -[r5 r7]
+G_M15939_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[r6-r7]
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -134,7 +127,7 @@ G_M15939_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 204, prolog size 14, PerfScore 37.10, instruction count 70, allocated bytes for code 204 (MethodHash=d4abc1bc) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.ValueTuple`2[int,System.__Canon]](System.Collections.Generic.List`1[System.ValueTuple`2[int,System.__Canon]]):System.Span`1[System.ValueTuple`2[int,System.__Canon]] (FullOpts)
+; Total bytes of code 212, prolog size 14, PerfScore 40.00, instruction count 70, allocated bytes for code 212 (MethodHash=d4abc1bc) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.ValueTuple`2[int,System.__Canon]](System.Collections.Generic.List`1[System.ValueTuple`2[int,System.__Canon]]):System.Span`1[System.ValueTuple`2[int,System.__Canon]] (FullOpts)
; ============================================================ Unwind Info: @@ -146,7 +139,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 102 (0x00066) Actual length = 204 (0x0000cc)
+ Function Length : 106 (0x0006a) Actual length = 212 (0x0000d4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+14.49%) : 2906.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessagesSystem.__Canon (FullOpts)

@@ -8,72 +8,68 @@ ; 0 inlinees with PGO data; 6 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T09] ( 7, 13.88) int -> [sp+0x38] EH-live single-def -; V01 arg0 [V01,T11] ( 4, 10 ) ref -> [sp+0x14] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon]> -; V02 arg1 [V02,T10] ( 5, 12 ) ref -> [sp+0x10] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]> -; V03 arg2 [V03,T13] ( 3, 2 ) byref -> [sp+0x0C] EH-live single-def
+; V00 TypeCtx [V00,T00] ( 9, 27 ) int -> [sp+0x30] EH-live single-def +; V01 arg0 [V01,T07] ( 4, 10 ) ref -> [sp+0x14] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon]> +; V02 arg1 [V02,T06] ( 5, 12 ) ref -> [sp+0x10] class-hnd EH-live single-def <System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]> +; V03 arg2 [V03,T09] ( 3, 2 ) byref -> [sp+0x0C] EH-live single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref
-; V05 loc1 [V05,T06] ( 3, 17 ) int -> [sp+0x34] do-not-enreg[Z] EH-live -; V06 loc2 [V06 ] ( 8, 33 ) struct (16) [sp+0x20] do-not-enreg[XSF] must-init addr-exposed ld-addr-op double-align <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]>
+; V05 loc1 [V05,T03] ( 3, 17 ) int -> [sp+0x2C] do-not-enreg[Z] EH-live +; V06 loc2 [V06 ] ( 8, 33 ) struct (16) [sp+0x18] do-not-enreg[XSF] must-init addr-exposed ld-addr-op double-align <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader]>
;* V07 loc3 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ; V08 OutArgs [V08 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V10 tmp2 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V11 tmp3 [V11,T07] ( 2, 16 ) ref -> r4 class-hnd "impAppendStmt" <System.__Canon>
+; V11 tmp3 [V11,T04] ( 2, 16 ) ref -> r8 class-hnd "impAppendStmt" <System.__Canon>
;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V13 tmp5 [V13,T00] ( 4, 24 ) int -> [sp+0x1C] "VirtualCall with runtime lookup"
+; V13 tmp5 [V13,T01] ( 3, 24 ) int -> r1 "VirtualCall with runtime lookup"
;* V14 tmp6 [V14 ] ( 0, 0 ) struct ( 8) zero-ref double-align "spilled call-like call argument" <System.Threading.Tasks.Dataflow.DataflowMessageHeader> ;* V15 tmp7 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V16 tmp8 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V17 tmp9 [V17,T08] ( 2, 16 ) ref -> r4 class-hnd "impAppendStmt" <System.__Canon>
+; V17 tmp9 [V17,T05] ( 2, 16 ) ref -> r4 class-hnd "impAppendStmt" <System.__Canon>
;* V18 tmp10 [V18 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V19 tmp11 [V19,T01] ( 4, 24 ) int -> [sp+0x18] "VirtualCall with runtime lookup"
+; V19 tmp11 [V19,T02] ( 3, 24 ) int -> r1 "VirtualCall with runtime lookup"
;* V20 tmp12 [V20 ] ( 0, 0 ) struct ( 8) zero-ref double-align "spilled call-like call argument" <System.Threading.Tasks.Dataflow.DataflowMessageHeader>
-; V21 tmp13 [V21,T15] ( 2, 0 ) ref -> r1 class-hnd "impSpillSpecialSideEff" <<unknown class>> -; V22 tmp14 [V22,T12] ( 2, 4 ) ref -> r1 class-hnd single-def "Inlining Arg" <System.Collections.Generic.Dictionary`2[System.__Canon,int]>
+; V21 tmp13 [V21,T11] ( 2, 0 ) ref -> r1 class-hnd "impSpillSpecialSideEff" <<unknown class>> +; V22 tmp14 [V22,T08] ( 2, 4 ) ref -> r1 class-hnd single-def "Inlining Arg" <System.Collections.Generic.Dictionary`2[System.__Canon,int]>
;* V23 tmp15 [V23 ] ( 0, 0 ) long -> zero-ref "field V14._id (fldOffset=0x0)" P-INDEP ;* V24 tmp16 [V24 ] ( 0, 0 ) long -> zero-ref "field V20._id (fldOffset=0x0)" P-INDEP
-; V25 PSPSym [V25,T14] ( 1, 1 ) int -> [sp+0x40] do-not-enreg[V] "PSPSym" -; V26 rat0 [V26,T02] ( 3, 22.40) int -> r0 "spilling expr" -; V27 rat1 [V27,T04] ( 3, 17.92) int -> r0 "fgMakeTemp is creating a new local variable" -; V28 rat2 [V28,T03] ( 3, 22.40) int -> r0 "spilling expr" -; V29 rat3 [V29,T05] ( 3, 17.92) int -> r0 "fgMakeTemp is creating a new local variable"
+; V25 PSPSym [V25,T10] ( 1, 1 ) int -> [sp+0x38] do-not-enreg[V] "PSPSym"
;
-; Lcl frame size = 68
+; Lcl frame size = 60
G_M56511_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG push {r4,r5,r6,r7,r8,r11,lr}
- sub sp, 68 - add r11, sp, 88
+ sub sp, 60 + add r11, sp, 80
movs r4, 0
- str r4, [sp+0x20] // [V06 loc2] - add r4, sp, 96 - str r4, [sp+0x40] // [V25 PSPSym]
+ str r4, [sp+0x18] // [V06 loc2] + add r4, sp, 88 + str r4, [sp+0x38] // [V25 PSPSym]
str r0, [r11-0x1C]
- str r0, [sp+0x38] // [V00 TypeCtx]
+ str r0, [sp+0x30] // [V00 TypeCtx]
str r1, [sp+0x14] // [V01 arg0] ; GC ptr vars +{V01} str r2, [sp+0x10] // [V02 arg1] ; GC ptr vars +{V02} str r3, [sp+0x0C] // [V03 arg2] ; GC ptr vars +{V03}
- mov r5, r0 - mov r7, r1 - ; gcrRegs +[r7] - mov r6, r2
+ mov r4, r0 + mov r6, r1
; gcrRegs +[r6]
- mov r8, r3 - ; byrRegs +[r8]
+ mov r5, r2 + ; gcrRegs +[r5] + mov r7, r3 + ; byrRegs +[r7]
;; size=38 bbWeight=1 PerfScore 16.00
-G_M56511_IG02: ; bbWeight=1, gcVars=00002C00 {V01 V02 V03}, gcrefRegs=00C0 {r6 r7}, byrefRegs=0100 {r8}, gcvars, byref, isz - ldr r1, [r6+0x08]
+G_M56511_IG02: ; bbWeight=1, gcVars=000002C0 {V01 V02 V03}, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, gcvars, byref, isz + ldr r1, [r5+0x08]
; gcrRegs +[r1] ldrsb r1, [r1] ; gcrRegs -[r1] movs r1, 0
- str r1, [sp+0x34] // [V05 loc1] - add r1, sp, 32 // [V06 loc2] - mov r0, r6
+ str r1, [sp+0x2C] // [V05 loc1] + add r1, sp, 24 // [V06 loc2] + mov r0, r5
; gcrRegs +[r0] movw r3, 0xd1ff movt r3, 0xd1ff @@ -82,99 +78,90 @@ G_M56511_IG02: ; bbWeight=1, gcVars=00002C00 {V01 V02 V03}, gcrefRegs=00C ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M56511_IG13
+ beq SHORT G_M56511_IG05
;; size=30 bbWeight=1 PerfScore 12.00
-G_M56511_IG03: ; bbWeight=4, gcrefRegs=00C0 {r6 r7}, byrefRegs=0100 {r8}, byref, isz - ldr r4, [sp+0x20] // [V06 loc2] - ; gcrRegs +[r4] - ldr r0, [r5+0x20] - ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M56511_IG06 - ;; size=10 bbWeight=4 PerfScore 20.00 -G_M56511_IG04: ; bbWeight=3.20, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - ldr r0, [r0+0x0C] - cmp r0, 0 - beq SHORT G_M56511_IG06 - ;; size=6 bbWeight=3.20 PerfScore 9.60 -G_M56511_IG05: ; bbWeight=2.56, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - mov r3, r0 - str r3, [sp+0x1C] // [V13 tmp5] - b SHORT G_M56511_IG07 - ;; size=6 bbWeight=2.56 PerfScore 7.68 -G_M56511_IG06: ; bbWeight=1.44, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref - mov r0, r5
+G_M56511_IG03: ; bbWeight=4, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, byref, isz + mov r0, r4
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- str r0, [sp+0x1C] // [V13 tmp5] - ;; size=22 bbWeight=1.44 PerfScore 10.08 -G_M56511_IG07: ; bbWeight=4, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - str r7, [sp] // [V08 OutArgs] - ; gcr arg write - ldr r2, [sp+0x28] // [V06 loc2+0x08] - ldr r3, [sp+0x2C] // [V06 loc2+0x0c]
mov r0, r4
- ; gcrRegs +[r0] - ldr r4, [sp+0x1C] // [V13 tmp5] - ; gcrRegs -[r4] - ldr r1, [r4] - blx r1 - ; gcrRegs -[r0] - ; gcr arg pop 0 - cmp r0, 0 - beq SHORT G_M56511_IG12 - ldr r4, [sp+0x20] // [V06 loc2] - ; gcrRegs +[r4] - ldr r0, [r5+0x20] - ldr r1, [r0+0x04] - cmp r1, 16 - ble SHORT G_M56511_IG10 - ;; size=28 bbWeight=4 PerfScore 56.00 -G_M56511_IG08: ; bbWeight=3.20, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - ldr r0, [r0+0x10] - cmp r0, 0 - beq SHORT G_M56511_IG10 - ;; size=6 bbWeight=3.20 PerfScore 9.60 -G_M56511_IG09: ; bbWeight=2.56, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref, isz - mov r3, r0 - str r3, [sp+0x18] // [V19 tmp11] - b SHORT G_M56511_IG11 - ;; size=6 bbWeight=2.56 PerfScore 7.68 -G_M56511_IG10: ; bbWeight=1.44, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref - mov r0, r5
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- str r0, [sp+0x18] // [V19 tmp11] - ;; size=22 bbWeight=1.44 PerfScore 10.08 -G_M56511_IG11: ; bbWeight=4, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0100 {r8}, byref - str r7, [sp] // [V08 OutArgs]
+ ldr r8, [sp+0x18] // [V06 loc2] + ; gcrRegs +[r8] + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + mov r1, r0 + str r6, [sp] // [V08 OutArgs]
; gcr arg write
- ldr r2, [sp+0x28] // [V06 loc2+0x08] - ldr r3, [sp+0x2C] // [V06 loc2+0x0c]
+ ldr r2, [sp+0x20] // [V06 loc2+0x08] + ldr r3, [sp+0x24] // [V06 loc2+0x0c] + mov r0, r8 + ; gcrRegs +[r0] + mov r4, r1 + ldr r1, [r1] + blx r1 + ; gcrRegs -[r0 r8] + ; gcr arg pop 0 + cmp r0, 0 + beq SHORT G_M56511_IG04 + ldr r0, [sp+0x30] // [V00 TypeCtx] + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ldr r0, [sp+0x30] // [V00 TypeCtx] + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ldr r4, [sp+0x18] // [V06 loc2] + ; gcrRegs +[r4] + ldr r0, [sp+0x30] // [V00 TypeCtx] + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + mov r1, r0 + str r6, [sp] // [V08 OutArgs] + ; gcr arg write + ldr r2, [sp+0x20] // [V06 loc2+0x08] + ldr r3, [sp+0x24] // [V06 loc2+0x0c]
mov r0, r4 ; gcrRegs +[r0]
- ldr r4, [sp+0x18] // [V19 tmp11]
+ mov r4, r1
; gcrRegs -[r4]
- ldr r1, [r4]
+ ldr r1, [r1]
blx r1 ; gcrRegs -[r0] ; gcr arg pop 0 ...

+34 (+17.00%) : 67.dasm - System.Linq.Enumerable:gEnumerableToArray|296_0System.__Canon:System.Canon

@@ -8,13 +8,13 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> r4 single-def -; V01 arg0 [V01,T05] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 8, 8 ) int -> r4 single-def +; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V02 loc0 [V02 ] ( 1, 1 ) struct (32) [sp+0x94] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon]> ; V03 loc1 [V03 ] ( 5, 5 ) struct (136) [sp+0x0C] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]>
-; V04 loc2 [V04,T14] ( 2, 2 ) ref -> r4 class-hnd single-def <System.__Canon[]>
+; V04 loc2 [V04,T08] ( 2, 2 ) ref -> r5 class-hnd single-def <System.__Canon[]>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V06 tmp1 [V06,T04] ( 2, 4 ) int -> r6 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V08 tmp3 [V08 ] ( 3, 6 ) struct ( 8) [sp+0x04] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" <System.Span`1[System.__Canon]> ;* V09 tmp4 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -25,16 +25,9 @@ ; V14 tmp9 [V14,T02] ( 3, 6 ) int -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V08._length (fldOffset=0x4)" P-DEP ;* V15 tmp10 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP ;* V16 tmp11 [V16 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x4)" P-INDEP
-; V17 tmp12 [V17,T10] ( 2, 4 ) int -> r1 "argument with side effect" -; V18 tmp13 [V18,T11] ( 2, 4 ) int -> r1 "argument with side effect" -; V19 tmp14 [V19,T12] ( 2, 4 ) int -> r1 "argument with side effect" -; V20 tmp15 [V20,T13] ( 2, 4 ) int -> r1 "argument with side effect" -; V21 cse0 [V21,T07] ( 4, 4 ) int -> r6 "CSE - aggressive" -; V22 rat0 [V22,T08] ( 3, 4 ) int -> r1 "runtime lookup" -; V23 rat1 [V23,T03] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable" -; V24 rat2 [V24,T09] ( 3, 4 ) int -> r6 "runtime lookup" -; V25 rat3 [V25,T04] ( 3, 5.60) int -> r0 "spilling expr" -; V26 rat4 [V26,T06] ( 3, 4.48) int -> r6 "fgMakeTemp is creating a new local variable"
+; V17 tmp12 [V17,T05] ( 2, 4 ) int -> r1 "argument with side effect" +; V18 tmp13 [V18,T06] ( 2, 4 ) int -> r1 "argument with side effect" +; V19 tmp14 [V19,T07] ( 2, 4 ) int -> r1 "argument with side effect"
; ; Lcl frame size = 188 @@ -54,70 +47,49 @@ G_M19942_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov r5, r1 ; gcrRegs +[r5] ;; size=34 bbWeight=1 PerfScore 13.00
-G_M19942_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r1, [r0+0x08] - cmp r1, 0 - beq SHORT G_M19942_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M19942_IG03: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M19942_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M19942_IG04: ; bbWeight=0.20, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M19942_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=22 bbWeight=0.20 PerfScore 1.40 -G_M19942_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ blx r3 // CORINFO_HELP_MEMCPY + mov r6, r0 + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
add r0, sp, 4 add r2, sp, 148
+ mov r1, r6
movs r3, 8 movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon]
- ;; size=20 bbWeight=1 PerfScore 7.00 -G_M19942_IG06: ; bbWeight=1, nogc, extend
+ ;; size=64 bbWeight=1 PerfScore 21.00 +G_M19942_IG03: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x84] ldr r0, [sp+0x08] str r0, [sp+0x88] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M19942_IG07: ; bbWeight=1, nogc, extend
+G_M19942_IG04: ; bbWeight=1, nogc, extend
ldr r0, [sp+0x04] str r0, [sp+0x8C] ldr r0, [sp+0x08] str r0, [sp+0x90] ;; size=8 bbWeight=1 PerfScore 4.00
-G_M19942_IG08: ; bbWeight=1, isz, extend - ldr r0, [r4+0x20] - ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M19942_IG11 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M19942_IG09: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r6, [r0+0x0C] - cmp r6, 0 - beq SHORT G_M19942_IG11 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M19942_IG10: ; bbWeight=0.64, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M19942_IG12 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M19942_IG11: ; bbWeight=0.36, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M19942_IG05: ; bbWeight=1, extend
mov r0, r4 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r6, r0 - ;; size=22 bbWeight=0.36 PerfScore 2.52 -G_M19942_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r1, r6
+ blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 mov r2, r5 ; gcrRegs +[r2] @@ -126,31 +98,43 @@ G_M19942_IG12: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ldr r3, [r3] blx r3 // <unknown method> ; gcrRegs -[r2 r5]
- mov r1, r6
+ mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0
add r0, sp, 12 movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:ToArray():System.__Canon[]:this ; gcrRegs +[r0]
- mov r4, r0 - ; gcrRegs +[r4] - mov r1, r6 - add r0, sp, 12
+ mov r5, r0 + ; gcrRegs +[r5] + mov r0, r4
; gcrRegs -[r0]
+ movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r1, r0 + add r0, sp, 12
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:Dispose():this
- mov r0, r4
+ mov r0, r5
; gcrRegs +[r0]
- ;; size=54 bbWeight=1 PerfScore 21.00 -G_M19942_IG13: ; bbWeight=1, epilog, nogc, extend
+ ;; size=114 bbWeight=1 PerfScore 39.00 +G_M19942_IG06: ; bbWeight=1, epilog, nogc, extend
add sp, 188 pop {r4,r5,r6,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 200, prolog size 30, PerfScore 66.76, instruction count 78, allocated bytes for code 200 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
+; Total bytes of code 234, prolog size 30, PerfScore 83.00, instruction count 83, allocated bytes for code 234 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
; ============================================================ Unwind Info: @@ -162,7 +146,7 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 100 (0x00064) Actual length = 200 (0x0000c8)
+ Function Length : 117 (0x00075) Actual length = 234 (0x0000ea)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----

realworld.run.linux.arm.checked.mch

-28 (-34.15%) : 4173.dasm - Microsoft.FSharp.Collections.IEnumerator:mkSeqSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -2,53 +2,38 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r4 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Collections.IEnumerator+mkSeq@177[System.__Canon]> ;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 rat0 [V05,T04] ( 3, 4 ) int -> r1 "runtime lookup" -; V06 rat1 [V06,T02] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38576_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M38576_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r1, [r1+0x08] - cmp r1, 0 - beq SHORT G_M38576_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38576_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M38576_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M38576_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M38576_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M38576_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
+ ; gcr arg pop 0
mov r2, r0 ; gcrRegs +[r2] adds r0, r2, 4 @@ -63,13 +48,12 @@ G_M38576_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ; byrRegs -[r0] mov r0, r2 ; gcrRegs +[r0]
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M38576_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M38576_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.00, instruction count 29, allocated bytes for code 82 (MethodHash=af2b694f) for method Microsoft.FSharp.Collections.IEnumerator:mkSeq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 54, prolog size 4, PerfScore 19.00, instruction count 19, allocated bytes for code 54 (MethodHash=af2b694f) for method Microsoft.FSharp.Collections.IEnumerator:mkSeq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -81,11 +65,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 82 (0x000052)
+ Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-28 (-34.15%) : 3330.dasm - Microsoft.FSharp.Control.AsyncPrimitives:MakeAsyncSystem.__Canon:Microsoft.FSharp.Control.FSharpAsync`1System.__Canon

@@ -2,53 +2,38 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r4 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon]> ;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 rat0 [V05,T04] ( 3, 4 ) int -> r1 "runtime lookup" -; V06 rat1 [V06,T02] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M3011_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M3011_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0+0x20] - ldr r1, [r1+0x08] - cmp r1, 0 - beq SHORT G_M3011_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M3011_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M3011_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M3011_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=6 bbWeight=1 PerfScore 3.00 +G_M3011_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M3011_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
+ ; gcr arg pop 0
mov r2, r0 ; gcrRegs +[r2] adds r0, r2, 4 @@ -63,13 +48,12 @@ G_M3011_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref ; byrRegs -[r0] mov r0, r2 ; gcrRegs +[r0]
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M3011_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00
+ ;; size=46 bbWeight=1 PerfScore 15.00 +G_M3011_IG03: ; bbWeight=1, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.00, instruction count 29, allocated bytes for code 82 (MethodHash=daccf43c) for method Microsoft.FSharp.Control.AsyncPrimitives:MakeAsync[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
+; Total bytes of code 54, prolog size 4, PerfScore 19.00, instruction count 19, allocated bytes for code 54 (MethodHash=daccf43c) for method Microsoft.FSharp.Control.AsyncPrimitives:MakeAsync[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -81,11 +65,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 82 (0x000052)
+ Function Length : 27 (0x0001b) Actual length = 54 (0x000036)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

-30 (-33.33%) : 253.dasm - System.Linq.Enumerable:IsEmptyArraySystem.__Canon:ubyte (FullOpts)

@@ -2,82 +2,66 @@ ; Emitting BLENDED_CODE for generic ARM - Unix ; FullOpts code ; optimized code
-; r11 based frame
+; sp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T05] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T03] ( 3, 2.50) ref -> r0 class-hnd single-def <<unknown class>>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 4 ) int -> r0 "argument with side effect" -; V06 rat0 [V06,T03] ( 3, 4 ) int -> r0 "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T02] ( 2, 4 ) int -> r0 "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M38282_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- push {r4,r11,lr} - sub sp, 12 - add r11, sp, 16 - str r0, [r11-0x0C]
+ push {r2,r3,r4,lr} + str r0, [sp+0x04]
mov r4, r1 ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=6 bbWeight=1 PerfScore 3.00
G_M38282_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20] - ldr r3, [r1+0x08] - cmp r3, 0 - beq SHORT G_M38282_IG04 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M38282_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - mov r0, r3 - b SHORT G_M38282_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.60 -G_M38282_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=18 bbWeight=0.20 PerfScore 1.00 -G_M38282_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
mov r1, r4 ; gcrRegs +[r1] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1 r4] +[r0]
+ ; gcr arg pop 0
cmp r0, 0
- beq SHORT G_M38282_IG09 - ;; size=18 bbWeight=1 PerfScore 7.00 -G_M38282_IG06: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ beq SHORT G_M38282_IG06 + ;; size=36 bbWeight=1 PerfScore 12.00 +G_M38282_IG03: ; bbWeight=0.50, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
ldr r0, [r0+0x04] ; gcrRegs -[r0] cmp r0, 0
- beq SHORT G_M38282_IG07
+ beq SHORT G_M38282_IG04
movs r0, 0
- b SHORT G_M38282_IG08
+ b SHORT G_M38282_IG05
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M38282_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M38282_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 1 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00 -G_M38282_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M38282_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50 +G_M38282_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 0 ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M38282_IG10: ; bbWeight=0.50, epilog, nogc, extend - add sp, 12 - pop {r4,r11,pc} - ;; size=6 bbWeight=0.50 PerfScore 1.00
+G_M38282_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop {r2,r3,r4,pc} + ;; size=2 bbWeight=0.50 PerfScore 0.50
-; Total bytes of code 90, prolog size 14, PerfScore 24.10, instruction count 34, allocated bytes for code 90 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
+; Total bytes of code 60, prolog size 4, PerfScore 19.50, instruction count 24, allocated bytes for code 60 (MethodHash=6cb36a75) for method System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -89,7 +73,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 45 (0x0002d) Actual length = 90 (0x00005a)
+ Function Length : 30 (0x0001e) Actual length = 60 (0x00003c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -101,7 +85,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16 - A8 10 pop {r4,r11,lr} ; opsize 32
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16 + FF end
FF end

+8 (+5.00%) : 3300.dasm - System.Array:IndexOfSystem.__Canon:int (FullOpts)

@@ -8,11 +8,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) int -> r0 single-def
+; V00 TypeCtx [V00,T01] ( 5, 5 ) int -> r5 single-def
; V01 arg0 [V01,T00] ( 5, 5 ) ref -> r4 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T05] ( 3, 3 ) ref -> r6 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> r5 single-def -; V04 arg3 [V04,T09] ( 2, 2 ) int -> r7 single-def
+; V02 arg1 [V02,T04] ( 3, 3 ) ref -> r7 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> r6 single-def +; V04 arg3 [V04,T06] ( 2, 2 ) int -> r8 single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -24,79 +24,66 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T03] ( 3, 6 ) ref -> r0 single-def "argument with side effect"
-; V16 cse0 [V16,T08] ( 3, 3 ) int -> r1 "CSE - aggressive" -; V17 rat0 [V17,T07] ( 3, 4 ) int -> r1 "runtime lookup" -; V18 rat1 [V18,T04] ( 3, 5.60) int -> r1 "spilling expr" -; V19 rat2 [V19,T06] ( 3, 4.48) int -> r1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T05] ( 3, 3 ) int -> r0 "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 20
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r11,lr} - sub sp, 16 - add r11, sp, 32 - str r0, [r11-0x14]
+ push {r4,r5,r6,r7,r8,r11,lr} + sub sp, 20 + add r11, sp, 40 + str r0, [r11-0x1C] + mov r5, r0
mov r4, r1 ; gcrRegs +[r4]
- mov r6, r2 - ; gcrRegs +[r6] - mov r5, r3 - ldr r7, [sp+0x28] - ;; size=22 bbWeight=1 PerfScore 8.00 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+ mov r7, r2 + ; gcrRegs +[r7] + mov r6, r3 + ldr r8, [sp+0x30] + ;; size=26 bbWeight=1 PerfScore 9.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=0090 {r4 r7}, byrefRegs=0000 {}, byref, isz
cmp r4, 0
- beq SHORT G_M13831_IG08 - ldr r1, [r4+0x04] - cmp r1, r5 - blo SHORT G_M13831_IG09 - subs r1, r1, r5 - cmp r1, r7 - blo SHORT G_M13831_IG10 - ldr r1, [r0+0x20] - ldr r3, [r1+0x04] - cmp r3, 12 - ble SHORT G_M13831_IG05 - ;; size=24 bbWeight=1 PerfScore 12.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M13831_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz - b SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+ beq SHORT G_M13831_IG04 + ldr r0, [r4+0x04] + cmp r0, r6 + blo SHORT G_M13831_IG05 + subs r0, r0, r6 + cmp r0, r8 + blo SHORT G_M13831_IG06 + mov r0, r5
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r1, r0 - ;; size=20 bbWeight=0.36 PerfScore 2.16 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref - mov r0, r1
+ blx r3 // CORINFO_HELP_MEMCPY + mov r0, r5 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] ; gcrRegs +[r0]
- str r7, [sp]
+ str r8, [sp]
mov r1, r4 ; gcrRegs +[r1]
- mov r2, r6
+ mov r2, r7
; gcrRegs +[r2]
- mov r3, r5
+ mov r3, r6
ldr lr, [r0] ldr lr, [lr+0x30] ldr lr, [lr] blx lr // <unknown method>
- ; gcrRegs -[r0-r2 r4 r6] - ;; size=36 bbWeight=1 PerfScore 13.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - add sp, 16 - pop {r4,r5,r6,r7,r11,pc}
+ ; gcrRegs -[r0-r2 r4 r7] + ;; size=92 bbWeight=1 PerfScore 32.00 +G_M13831_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 20 + pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2 movw r3, 0xd1ff movt r3, 0xd1ff @@ -104,14 +91,14 @@ G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r3 // System.ThrowHelper:ThrowArgumentNullException(int) bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -119,7 +106,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 160, prolog size 14, PerfScore 40.20, instruction count 61, allocated bytes for code 160 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
+; Total bytes of code 168, prolog size 14, PerfScore 43.00, instruction count 59, allocated bytes for code 168 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================ Unwind Info: @@ -131,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 80 (0x00050) Actual length = 160 (0x0000a0)
+ Function Length : 84 (0x00054) Actual length = 168 (0x0000a8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -139,7 +126,7 @@ Unwind Info: Epilog Start Index : 0 (0x00) ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 04 add sp, sp, #16 ; opsize 16 - A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ 05 add sp, sp, #20 ; opsize 16 + A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
FF end

+12 (+6.06%) : 3328.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvokeSystem.Canon,System.Canon:Microsoft.FSharp.Control.AsyncReturn (FullOpts)

@@ -8,24 +8,22 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r4 single-def
+; V00 TypeCtx [V00,T01] ( 5, 4 ) int -> [sp+0x08] EH-live single-def
; V01 arg0 [V01 ] ( 6, 4 ) struct ( 4) [sp+0x24] ld-addr-op single-def <Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]>
-; V02 arg1 [V02,T04] ( 3, 3 ) ref -> r2 class-hnd single-def <System.__Canon>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> r2 class-hnd single-def <System.__Canon>
; V03 arg2 [V03,T02] ( 4, 4 ) ref -> r3 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]>
-; V04 loc0 [V04,T08] ( 2, 2 ) ref -> r5 class-hnd single-def <<unknown class>> -; V05 loc1 [V05,T07] ( 3, 2 ) ubyte -> [sp+0x08] do-not-enreg[M] EH-live
+; V04 loc0 [V04,T06] ( 2, 2 ) ref -> r4 class-hnd single-def <<unknown class>> +; V05 loc1 [V05,T05] ( 3, 2 ) ubyte -> [sp+0x04] do-not-enreg[M] 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 "spilling helperCall" ;* V08 tmp2 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V09 tmp3 [V09,T11] ( 2, 0 ) ref -> r0 class-hnd single-def "Inline stloc first use temp" <<unknown class>> -; V10 tmp4 [V10,T12] ( 2, 0 ) ref -> r4 class-hnd single-def "Inline stloc first use temp" <<unknown class>> -; V11 tmp5 [V11,T13] ( 2, 0 ) ref -> r5 class-hnd single-def "impAppendStmt" <<unknown class>> -; V12 tmp6 [V12,T10] ( 3, 0 ) ref -> [sp+0x04] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>> -; V13 tmp7 [V13,T01] ( 6, 4 ) ref -> [sp+0x24] do-not-enreg[H] EH-live single-def "field V01.contents (fldOffset=0x0)" P-DEP -; V14 tmp8 [V14,T06] ( 2, 4 ) int -> r0 "argument with side effect" -; V15 PSPSym [V15,T09] ( 1, 1 ) int -> [sp+0x10] do-not-enreg[V] "PSPSym" -; V16 rat0 [V16,T05] ( 3, 4 ) int -> r0 "runtime lookup" -; V17 rat1 [V17,T03] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable"
+; V09 tmp3 [V09,T09] ( 2, 0 ) ref -> r0 class-hnd single-def "Inline stloc first use temp" <<unknown class>> +; V10 tmp4 [V10,T10] ( 2, 0 ) ref -> r4 class-hnd single-def "Inline stloc first use temp" <<unknown class>> +; V11 tmp5 [V11,T11] ( 2, 0 ) ref -> r5 class-hnd single-def "impAppendStmt" <<unknown class>> +; V12 tmp6 [V12,T08] ( 3, 0 ) ref -> [sp+0x00] class-hnd exact spill-single-def "NewObj constructor temp" <<unknown class>> +; V13 tmp7 [V13,T00] ( 6, 4 ) ref -> [sp+0x24] do-not-enreg[H] EH-live single-def "field V01.contents (fldOffset=0x0)" P-DEP +; V14 tmp8 [V14,T04] ( 2, 4 ) int -> r0 "argument with side effect" +; V15 PSPSym [V15,T07] ( 1, 1 ) int -> [sp+0x10] do-not-enreg[V] "PSPSym"
; ; Lcl frame size = 20 @@ -37,12 +35,12 @@ G_M49933_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref add r1, sp, 40 str r1, [sp+0x10] // [V15 PSPSym] str r0, [r11-0x10]
- mov r4, r0
+ str r0, [sp+0x08] // [V00 TypeCtx]
;; size=22 bbWeight=1 PerfScore 8.00 G_M49933_IG02: ; bbWeight=1, gcrefRegs=000C {r2 r3}, byrefRegs=0000 {}, byref ; gcrRegs +[r2-r3]
- movs r0, 0 - str r0, [sp+0x08] // [V05 loc1]
+ movs r1, 0 + str r1, [sp+0x04] // [V05 loc1]
;; size=4 bbWeight=1 PerfScore 2.00 G_M49933_IG03: ; bbWeight=1, gcrefRegs=000C {r2 r3}, byrefRegs=0000 {}, byref mov r0, r3 @@ -56,56 +54,52 @@ G_M49933_IG03: ; bbWeight=1, gcrefRegs=000C {r2 r3}, byrefRegs=0000 {}, b blx r3 // <unknown method> ; gcrRegs -[r1-r2] ; gcr arg pop 0
- mov r5, r0 - ; gcrRegs +[r5]
+ mov r4, r0 + ; gcrRegs +[r4]
movs r0, 1 ; gcrRegs -[r0]
- str r0, [sp+0x08] // [V05 loc1]
+ str r0, [sp+0x04] // [V05 loc1]
;; size=18 bbWeight=1 PerfScore 9.00
-G_M49933_IG04: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - ldr r0, [r4+0x20] - ldr r0, [r0+0x0C] - cmp r0, 0 - beq SHORT G_M49933_IG06 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M49933_IG05: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M49933_IG07 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M49933_IG06: ; bbWeight=0.20, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r0, r4
+G_M49933_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + ldr r0, [sp+0x08] // [V00 TypeCtx]
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M49933_IG07: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r1, r5
+ mov r1, r4
; gcrRegs +[r1] ldr r2, [sp+0x24] // [V13 tmp7] ; gcrRegs +[r2] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- ;; size=14 bbWeight=1 PerfScore 5.00 -G_M49933_IG08: ; bbWeight=1, epilog, nogc, extend
+ ;; size=34 bbWeight=1 PerfScore 11.00 +G_M49933_IG05: ; bbWeight=1, epilog, nogc, extend
add sp, 20 pop {r4,r5,r11,lr} add sp, 4 bx r3 // <unknown method> ; gcr arg pop 0 ;; size=10 bbWeight=1 PerfScore 4.00
-G_M49933_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc - ; gcrRegs -[r1-r2 r5]
+G_M49933_IG06: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc + ; gcrRegs -[r1-r2 r4]
push {r2,r3,r4,r5,r11,lr} add r3, r11, 12 str r3, [sp] ;; size=10 bbWeight=0 PerfScore 0.00
-G_M49933_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz - ldr r0, [r11-0x14] // [V05 loc1]
+G_M49933_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz + ldr r0, [r11-0x18] // [V05 loc1]
cmp r0, 0
- bne SHORT G_M49933_IG12
+ bne SHORT G_M49933_IG09 + ldr r0, [r11-0x14] // [V00 TypeCtx] + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0
ldr r0, [r11+0x08] // [V13 tmp7] ; gcrRegs +[r0] ldr r0, [r0+0x08] @@ -123,12 +117,12 @@ G_M49933_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref movw r3, 0xd1ff ; gcrRegs -[r3] movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0] ; gcr arg pop 0 mov r1, r0 ; gcrRegs +[r1]
- str r1, [r11-0x18] // [V12 tmp6]
+ str r1, [r11-0x1C] // [V12 tmp6]
; GC ptr vars +{V12} adds r0, r1, 4 ; gcrRegs -[r0] @@ -141,7 +135,7 @@ G_M49933_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref ; byrRegs -[r0] add r0, r5, 8 ; byrRegs +[r0]
- ldr r1, [r11-0x18] // [V12 tmp6]
+ ldr r1, [r11-0x1C] // [V12 tmp6]
; gcrRegs +[r1] movw r12, 0xd1ff movt r12, 0xd1ff @@ -149,15 +143,15 @@ G_M49933_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1 r5] ; byrRegs -[r0]
- ;; size=82 bbWeight=0 PerfScore 0.00 -G_M49933_IG11: ; bbWeight=0, funclet epilog, nogc, extend
+ ;; size=104 bbWeight=0 PerfScore 0.00 +G_M49933_IG08: ; bbWeight=0, funclet epilog, nogc, extend
pop {r2,r3,r4,r5,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-G_M49933_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
+G_M49933_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
pop {r2,r3,r4,r5,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 198, prolog size 22, PerfScore 34.00, instruction count 71, allocated bytes for code 198 (MethodHash=6b9d3cf2) for method Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
+; Total bytes of code 210, prolog size 22, PerfScore 34.00, instruction count 72, allocated bytes for code 210 (MethodHash=6b9d3cf2) for method Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
; ============================================================ Unwind Info: @@ -169,7 +163,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 49 (0x00031) Actual length = 98 (0x000062)
+ Function Length : 44 (0x0002c) Actual length = 88 (0x000058)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -196,7 +190,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 50 (0x00032) Actual length = 100 (0x000064)
+ Function Length : 61 (0x0003d) Actual length = 122 (0x00007a)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -214,4 +208,4 @@ Unwind Info: *************** EH table for Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncReturn 1 EH table entries, 0 duplicate clauses, 0 cloned finallys, 1 total EH entries reported to VM
-EH#0: try [G_M49933_IG03..G_M49933_IG04) handled by [G_M49933_IG09..END) (fault)
+EH#0: try [G_M49933_IG03..G_M49933_IG04) handled by [G_M49933_IG06..END) (fault)
+12 (+10.00%) : 6860.dasm - Internal.Utilities.Collections.QueueList:foldBack[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Internal.Utilities.Collections.QueueList`1[System.__Canon],System.__Canon):System.__Canon (FullOpts)
@@ -7,110 +7,111 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> r0 single-def -; V01 arg0 [V01,T01] ( 4, 4 ) ref -> r4 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]> -; V02 arg1 [V02,T02] ( 4, 4 ) ref -> r5 class-hnd single-def <Internal.Utilities.Collections.QueueList`1[System.__Canon]> -; V03 arg2 [V03,T05] ( 3, 3 ) ref -> r6 class-hnd single-def <System.__Canon>
+; V00 TypeCtx [V00,T00] ( 5, 5 ) int -> r4 single-def +; V01 arg0 [V01,T01] ( 4, 4 ) ref -> r5 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]> +; V02 arg1 [V02,T02] ( 4, 4 ) ref -> r6 class-hnd single-def <Internal.Utilities.Collections.QueueList`1[System.__Canon]> +; V03 arg2 [V03,T03] ( 3, 3 ) ref -> r7 class-hnd single-def <System.__Canon>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T07] ( 2, 4 ) ref -> r7 class-hnd exact single-def "impAppendStmt" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -;* V06 tmp2 [V06,T11] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V05 tmp1 [V05,T04] ( 2, 4 ) ref -> r8 class-hnd exact single-def "impAppendStmt" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V06 tmp2 [V06,T07] ( 2, 4 ) int -> r9 "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T08] ( 2, 4 ) ref -> r2 single-def "argument with side effect" -; V09 tmp5 [V09,T03] ( 3, 6 ) int -> r8 "argument with side effect" -; V10 tmp6 [V10,T09] ( 2, 4 ) ref -> r3 single-def "argument with side effect" -; V11 cse0 [V11,T10] ( 2, 2 ) int -> r8 "CSE - aggressive" -; V12 rat0 [V12,T06] ( 3, 4 ) int -> r8 "runtime lookup" -; V13 rat1 [V13,T04] ( 3, 5.60) int -> r8 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T05] ( 2, 4 ) ref -> r2 single-def "argument with side effect" +; V09 tmp5 [V09,T08] ( 2, 4 ) int -> r4 "argument with side effect" +; V10 tmp6 [V10,T06] ( 2, 4 ) ref -> r3 single-def "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M61677_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r11,lr} - sub sp, 12
+ push {r2,r3,r4,r5,r6,r7,r8,r9,r11,lr}
add r11, sp, 32 str r0, [r11-0x1C]
- mov r4, r1 - ; gcrRegs +[r4] - mov r5, r2
+ mov r4, r0 + mov r5, r1
; gcrRegs +[r5]
- mov r6, r3
+ mov r6, r2
; gcrRegs +[r6]
- ;; size=20 bbWeight=1 PerfScore 7.00 -G_M61677_IG02: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref, isz - ldr r7, [r5+0x04]
+ mov r7, r3
; gcrRegs +[r7]
- ldr r1, [r0+0x20] - ldr r8, [r1+0x0C] - cmp r8, 0 - beq SHORT G_M61677_IG04 - ;; size=14 bbWeight=1 PerfScore 5.00 -G_M61677_IG03: ; bbWeight=0.80, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz - b SHORT G_M61677_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M61677_IG04: ; bbWeight=0.20, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref
+ ;; size=20 bbWeight=1 PerfScore 7.00 +G_M61677_IG02: ; bbWeight=1, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref + ldr r8, [r6+0x04] + ; gcrRegs +[r8] + mov r0, r4
movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov r8, r0 - ;; size=20 bbWeight=0.20 PerfScore 1.20 -G_M61677_IG05: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000 {}, byref - mov r0, r5
+ blx r3 // CORINFO_HELP_MEMCPY + mov r9, r0 + mov r0, r4 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + mov r4, r0 + mov r0, r6
; gcrRegs +[r0] movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] blx r3 // Internal.Utilities.Collections.QueueList`1[System.__Canon]:lastElements():Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:this
- ; gcrRegs -[r5]
+ ; gcrRegs -[r6]
mov r2, r0 ; gcrRegs +[r2]
- mov r1, r4
+ mov r1, r5
; gcrRegs +[r1]
- mov r0, r8
+ mov r0, r9
; gcrRegs -[r0]
- mov r3, r6
+ mov r3, r7
; gcrRegs +[r3] movw lr, 0xd1ff movt lr, 0xd1ff ldr lr, [lr] blx lr // <unknown method>
- ; gcrRegs -[r1-r3 r6] +[r0]
+ ; gcrRegs -[r1-r3 r7] +[r0]
mov r3, r0 ; gcrRegs +[r3]
- mov r0, r8
+ mov r0, r4
; gcrRegs -[r0]
- mov r2, r7
+ mov r2, r8
; gcrRegs +[r2]
- mov r1, r4
+ mov r1, r5
; gcrRegs +[r1] movw lr, 0xd1ff movt lr, 0xd1ff ldr r12, [lr]
- ;; size=56 bbWeight=1 PerfScore 20.00 -G_M61677_IG06: ; bbWeight=1, epilog, nogc, extend - add sp, 12 - pop {r4,r5,r6,r7,r8,r11,lr}
+ ;; size=104 bbWeight=1 PerfScore 35.00 +G_M61677_IG03: ; bbWeight=1, epilog, nogc, extend + add sp, 8 + pop {r4,r5,r6,r7,r8,r9,r11,lr}
bx r12 // <unknown method> ;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 120, prolog size 14, PerfScore 37.00, instruction count 42, allocated bytes for code 120 (MethodHash=8d550f12) for method Internal.Utilities.Collections.QueueList:foldBack[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Internal.Utilities.Collections.QueueList`1[System.__Canon],System.__Canon):System.__Canon (FullOpts)
+; Total bytes of code 132, prolog size 12, PerfScore 45.00, instruction count 45, allocated bytes for code 132 (MethodHash=8d550f12) for method Internal.Utilities.Collections.QueueList:foldBack[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Internal.Utilities.Collections.QueueList`1[System.__Canon],System.__Canon):System.__Canon (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
F bit : 0
- E bit : 1
+ E bit : 0
X bit : 0 Vers : 0
- Function Length : 60 (0x0003c) Actual length = 120 (0x000078) - --- One epilog, unwind codes at 0
+ Function Length : 66 (0x00042) Actual length = 132 (0x000084) + ---- Epilog scopes ---- + ---- Scope 0 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Condition : 14 (0xe) (always) + Epilog Start Index : 3 (0x03)
---- Unwind codes ----
- ---- Epilog start at index 0 ---- - 03 add sp, sp, #12 ; opsize 16 - A9 F0 pop {r4,r5,r6,r7,r8,r11,lr} ; opsize 32
+ AB FC pop {r2,r3,r4,r5,r6,r7,r8,r9,r11,lr}; opsize 32 + FF end + ---- Epilog start at index 3 ---- + 02 add sp, sp, #8 ; opsize 16 + AB F0 pop {r4,r5,r6,r7,r8,r9,r11,lr} ; opsize 32 + FF end
FF end

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm.checked.mch 982 67 4 911 -2,486 +58
benchmarks.run_pgo.linux.arm.checked.mch 2,747 426 3 2,318 -15,606 +30
benchmarks.run_tiered.linux.arm.checked.mch 3,497 247 4 3,246 -10,458 +58
coreclr_tests.run.linux.arm.checked.mch 111 1 0 110 -32 +0
libraries.crossgen2.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm.checked.mch 2,624 291 10 2,323 -7,336 +1,006
libraries_tests.run.linux.arm.Release.mch 1,911 230 7 1,674 -9,958 +154
librariestestsnotieredcompilation.run.linux.arm.Release.mch 1,120 112 9 999 -4,168 +172
realworld.run.linux.arm.checked.mch 2,649 150 13 2,486 -5,184 +484
15,641 1,524 50 14,067 -55,228 +1,962

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 3,253 186 3,067 527 (8.01%) 2,927 (44.50%)
benchmarks.run_pgo.linux.arm.checked.mch 14,737 10,689 4,048 957 (4.19%) 7,701 (33.72%)
benchmarks.run_tiered.linux.arm.checked.mch 16,567 10,960 5,607 794 (3.52%) 5,597 (24.81%)
coreclr_tests.run.linux.arm.checked.mch 445 3 442 169 (7.45%) 1,428 (62.94%)
libraries.crossgen2.linux.arm.checked.mch 7,526 8 7,518 0 (0.00%) 2,904 (26.82%)
libraries.pmi.linux.arm.checked.mch 12,200 0 12,200 277 (1.63%) 4,363 (25.73%)
libraries_tests.run.linux.arm.Release.mch 7,602 6,621 981 277 (2.30%) 4,063 (33.69%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 3,195 0 3,195 565 (8.97%) 2,709 (42.99%)
realworld.run.linux.arm.checked.mch 5,313 57 5,256 509 (6.37%) 2,287 (28.60%)
70,838 28,524 42,314 4,075 (3.76%) 33,979 (31.35%)

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: 416870 (overridden on cmd)
Total bytes of diff: 414442 (overridden on cmd)
Total bytes of delta: -2428 (-0.58 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          34 : 2076.dasm (17.00 % of base)
           8 : 1907.dasm (5.00 % of base)
           8 : 3988.dasm (3.92 % of base)
           8 : 6285.dasm (3.25 % of base)

Top file improvements (bytes):
        -206 : 3666.dasm (-21.37 % of base)
        -124 : 823.dasm (-27.19 % of base)
        -124 : 252.dasm (-25.62 % of base)
        -108 : 256.dasm (-21.26 % of base)
        -106 : 747.dasm (-17.97 % of base)
         -90 : 4479.dasm (-22.06 % of base)
         -86 : 6323.dasm (-28.10 % of base)
         -82 : 4296.dasm (-16.87 % of base)
         -80 : 3733.dasm (-22.60 % of base)
         -76 : 661.dasm (-16.96 % of base)
         -64 : 218.dasm (-20.13 % of base)
         -62 : 2992.dasm (-21.83 % of base)
         -54 : 3351.dasm (-16.77 % of base)
         -50 : 2893.dasm (-13.51 % of base)
         -46 : 2988.dasm (-14.56 % of base)
         -44 : 3984.dasm (-20.75 % of base)
         -42 : 255.dasm (-17.07 % of base)
         -42 : 4646.dasm (-20.59 % of base)
         -42 : 4691.dasm (-18.26 % of base)
         -36 : 103.dasm (-12.00 % of base)

37 total files with Code Size differences (33 improved, 4 regressed), 36 unchanged.

Top method regressions (bytes):
          34 (17.00 % of base) : 2076.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
           8 (5.00 % of base) : 1907.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
           8 (3.92 % of base) : 3988.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
           8 (3.25 % of base) : 6285.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)

Top method improvements (bytes):
        -206 (-21.37 % of base) : 3666.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -124 (-25.62 % of base) : 252.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -124 (-27.19 % of base) : 823.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -108 (-21.26 % of base) : 256.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -106 (-17.97 % of base) : 747.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -90 (-22.06 % of base) : 4479.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -86 (-28.10 % of base) : 6323.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -82 (-16.87 % of base) : 4296.dasm - System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:Create[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.__Canon],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
         -80 (-22.60 % of base) : 3733.dasm - System.Linq.Enumerable:ElementAt[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.__Canon (FullOpts)
         -76 (-16.96 % of base) : 661.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -64 (-20.13 % of base) : 218.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (FullOpts)
         -62 (-21.83 % of base) : 2992.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (FullOpts)
         -54 (-16.77 % of base) : 3351.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
         -50 (-13.51 % of base) : 2893.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
         -46 (-14.56 % of base) : 2988.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
         -44 (-20.75 % of base) : 3984.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (FullOpts)
         -42 (-17.07 % of base) : 255.dasm - System.Linq.Enumerable:SkipIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -42 (-20.59 % of base) : 4646.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -42 (-18.26 % of base) : 4691.dasm - System.Text.Json.Serialization.Metadata.JsonMetadataServices:GetConverter[System.__Canon](System.Text.Json.Serialization.Metadata.JsonObjectInfoValues`1[System.__Canon]):System.Text.Json.Serialization.JsonConverter`1[System.__Canon] (FullOpts)
         -36 (-12.00 % of base) : 103.dasm - System.Array:Resize[System.__Canon](byref,int) (FullOpts)

Top method regressions (percentages):
          34 (17.00 % of base) : 2076.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
           8 (5.00 % of base) : 1907.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
           8 (3.92 % of base) : 3988.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
           8 (3.25 % of base) : 6285.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)

Top method improvements (percentages):
         -30 (-33.33 % of base) : 253.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
         -20 (-30.30 % of base) : 3661.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.Text.Json.Serialization.Tests.ReadJson`1+<Setup>d__5[System.__Canon]](byref):this (FullOpts)
         -22 (-28.95 % of base) : 4552.dasm - Utf8Json.JsonSerializer:Deserialize[System.__Canon](System.IO.Stream):System.__Canon (FullOpts)
         -28 (-28.57 % of base) : 4233.dasm - System.Threading.Tasks.TaskCache:CreateCacheableTask[System.__Canon](System.__Canon):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)
         -86 (-28.10 % of base) : 6323.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -22 (-27.50 % of base) : 2094.dasm - <PrivateImplementationDetails>:InlineArrayAsReadOnlySpan[System.Collections.Generic.SegmentedArrayBuilder`1+Arrays[System.ValueTuple`2[System.__Canon,System.__Canon]],System.__Canon](byref,int):System.ReadOnlySpan`1[System.__Canon] (FullOpts)
         -22 (-27.50 % of base) : 2077.dasm - <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.ValueTuple`2[System.__Canon,System.__Canon]],System.ValueTuple`2[System.__Canon,System.__Canon]](byref,int):System.Span`1[System.ValueTuple`2[System.__Canon,System.__Canon]] (FullOpts)
         -22 (-27.50 % of base) : 2896.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -124 (-27.19 % of base) : 823.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         -26 (-27.08 % of base) : 842.dasm - System.Linq.Enumerable:HashSetToArray[System.__Canon](System.Collections.Generic.HashSet`1[System.__Canon]):System.__Canon[] (FullOpts)
         -18 (-26.47 % of base) : 2991.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],byref):ubyte (FullOpts)
        -124 (-25.62 % of base) : 252.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -28 (-23.33 % of base) : 2075.dasm - System.Linq.Enumerable:ZipIterator[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]] (FullOpts)
         -20 (-22.73 % of base) : 4958.dasm - System.SZArrayHelper:Contains[System.__Canon](System.__Canon):ubyte:this (FullOpts)
         -80 (-22.60 % of base) : 3733.dasm - System.Linq.Enumerable:ElementAt[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.__Canon (FullOpts)
         -90 (-22.06 % of base) : 4479.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -62 (-21.83 % of base) : 2992.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (FullOpts)
         -26 (-21.67 % of base) : 3668.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (FullOpts)
         -26 (-21.67 % of base) : 6638.dasm - System.Text.Json.JsonSerializer:SerializeToUtf8Bytes[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):ubyte[] (FullOpts)
        -206 (-21.37 % of base) : 3666.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)


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: 1814364 (overridden on cmd)
Total bytes of diff: 1798788 (overridden on cmd)
Total bytes of delta: -15576 (-0.86 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          10 : 20173.dasm (5.05 % of base)
          10 : 23083.dasm (5.05 % of base)
          10 : 21951.dasm (5.05 % of base)

Top file improvements (bytes):
        -232 : 2518.dasm (-37.18 % of base)
        -230 : 657.dasm (-35.28 % of base)
        -206 : 6115.dasm (-21.24 % of base)
        -202 : 663.dasm (-30.51 % of base)
        -200 : 2296.dasm (-30.21 % of base)
        -200 : 11485.dasm (-27.93 % of base)
        -190 : 8949.dasm (-17.09 % of base)
        -172 : 13169.dasm (-32.33 % of base)
        -170 : 8947.dasm (-31.72 % of base)
        -162 : 12734.dasm (-31.89 % of base)
        -140 : 6159.dasm (-32.56 % of base)
        -140 : 2060.dasm (-23.57 % of base)
        -140 : 9297.dasm (-30.17 % of base)
        -130 : 262.dasm (-26.21 % of base)
        -124 : 11906.dasm (-27.19 % of base)
        -124 : 18863.dasm (-27.19 % of base)
        -124 : 11628.dasm (-27.31 % of base)
        -124 : 9321.dasm (-27.31 % of base)
        -112 : 13103.dasm (-25.57 % of base)
        -110 : 13241.dasm (-21.83 % of base)

35 total files with Code Size differences (32 improved, 3 regressed), 37 unchanged.

Top method regressions (bytes):
          10 (5.05 % of base) : 20173.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          10 (5.05 % of base) : 23083.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          10 (5.05 % of base) : 21951.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)

Top method improvements (bytes):
        -232 (-37.18 % of base) : 2518.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -230 (-35.28 % of base) : 657.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -206 (-21.24 % of base) : 6115.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -202 (-30.51 % of base) : 663.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -200 (-27.93 % of base) : 11485.dasm - System.Array:Sort[System.__Canon,System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
        -200 (-30.21 % of base) : 2296.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -190 (-17.09 % of base) : 8949.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (Tier0-FullOpts)
        -172 (-32.33 % of base) : 13169.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -170 (-31.72 % of base) : 8947.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
        -162 (-31.89 % of base) : 12734.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -140 (-32.56 % of base) : 6159.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (Tier0)
        -140 (-30.17 % of base) : 9297.dasm - System.Linq.Enumerable:ElementAt[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.__Canon (Tier0)
        -140 (-23.57 % of base) : 2060.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -130 (-26.21 % of base) : 262.dasm - System.Array:Resize[System.__Canon](byref,int) (Tier0)
        -124 (-27.19 % of base) : 11906.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -124 (-27.19 % of base) : 18863.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -124 (-27.31 % of base) : 11628.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -124 (-27.31 % of base) : 9321.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -112 (-25.57 % of base) : 13103.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
        -110 (-21.83 % of base) : 13241.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier1)

Top method regressions (percentages):
          10 (5.05 % of base) : 20173.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          10 (5.05 % of base) : 23083.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          10 (5.05 % of base) : 21951.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)

Top method improvements (percentages):
         -26 (-38.24 % of base) : 13590.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
        -232 (-37.18 % of base) : 2518.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -230 (-35.28 % of base) : 657.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -30 (-34.09 % of base) : 17433.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
         -30 (-34.09 % of base) : 11901.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
         -30 (-34.09 % of base) : 16247.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
         -30 (-34.09 % of base) : 17052.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
         -80 (-33.33 % of base) : 17413.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
        -140 (-32.56 % of base) : 6159.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (Tier0)
        -172 (-32.33 % of base) : 13169.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -162 (-31.89 % of base) : 12734.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -170 (-31.72 % of base) : 8947.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
         -50 (-31.65 % of base) : 4920.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (Instrumented Tier0)
         -50 (-31.65 % of base) : 4381.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (Tier0)
         -50 (-31.25 % of base) : 8158.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
         -50 (-31.25 % of base) : 6374.dasm - System.Text.Json.JsonSerializer:SerializeToUtf8Bytes[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):ubyte[] (Tier0)
        -202 (-30.51 % of base) : 663.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
         -50 (-30.49 % of base) : 20300.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]:AwaitUnsafeOnCompleted[System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.__Canon],System.Threading.Tasks.TaskCompletionSourceWithCancellation`1+<WaitWithCancellationAsync>d__1[System.__Canon]](byref,byref,byref) (Tier0)
         -80 (-30.30 % of base) : 17042.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -200 (-30.21 % of base) : 2296.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)


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: 1798372 (overridden on cmd)
Total bytes of diff: 1787972 (overridden on cmd)
Total bytes of delta: -10400 (-0.58 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          34 : 16790.dasm (17.00 % of base)
           8 : 14315.dasm (3.92 % of base)
           8 : 4206.dasm (5.00 % of base)
           8 : 12133.dasm (7.27 % of base)

Top file improvements (bytes):
        -232 : 2269.dasm (-37.18 % of base)
        -230 : 610.dasm (-35.28 % of base)
        -206 : 7626.dasm (-21.37 % of base)
        -202 : 616.dasm (-30.51 % of base)
        -200 : 2067.dasm (-30.30 % of base)
        -190 : 11477.dasm (-17.15 % of base)
        -172 : 4048.dasm (-32.33 % of base)
        -170 : 11475.dasm (-31.72 % of base)
        -162 : 13169.dasm (-31.89 % of base)
        -140 : 16677.dasm (-34.31 % of base)
        -140 : 1831.dasm (-23.57 % of base)
        -140 : 7522.dasm (-32.41 % of base)
        -130 : 251.dasm (-26.21 % of base)
        -124 : 16383.dasm (-25.62 % of base)
        -124 : 2928.dasm (-27.19 % of base)
        -112 : 3908.dasm (-25.57 % of base)
        -110 : 12882.dasm (-27.64 % of base)
        -110 : 15030.dasm (-28.06 % of base)
        -110 : 11345.dasm (-20.00 % of base)
        -110 : 532.dasm (-25.70 % of base)

36 total files with Code Size differences (32 improved, 4 regressed), 36 unchanged.

Top method regressions (bytes):
          34 (17.00 % of base) : 16790.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
           8 (5.00 % of base) : 4206.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
           8 (3.92 % of base) : 14315.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
           8 (7.27 % of base) : 12133.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (bytes):
        -232 (-37.18 % of base) : 2269.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -230 (-35.28 % of base) : 610.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -206 (-21.37 % of base) : 7626.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -202 (-30.51 % of base) : 616.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -200 (-30.30 % of base) : 2067.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -190 (-17.15 % of base) : 11477.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (Tier0-FullOpts)
        -172 (-32.33 % of base) : 4048.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -170 (-31.72 % of base) : 11475.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
        -162 (-31.89 % of base) : 13169.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -140 (-32.41 % of base) : 7522.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.IOrderedCollection`1[System.__Canon] (Tier0)
        -140 (-34.31 % of base) : 16677.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -140 (-23.57 % of base) : 1831.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -130 (-26.21 % of base) : 251.dasm - System.Array:Resize[System.__Canon](byref,int) (Tier0)
        -124 (-25.62 % of base) : 16383.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier1)
        -124 (-27.19 % of base) : 2928.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -112 (-25.57 % of base) : 3908.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
        -110 (-27.64 % of base) : 12882.dasm - ProtoBuf.ProtoReader+State:ReadAsRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (Tier0)
        -110 (-20.00 % of base) : 11345.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier0)
        -110 (-28.06 % of base) : 15030.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (Tier0)
        -110 (-25.70 % of base) : 532.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (Tier0)

Top method regressions (percentages):
          34 (17.00 % of base) : 16790.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
           8 (7.27 % of base) : 12133.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
           8 (5.00 % of base) : 4206.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
           8 (3.92 % of base) : 14315.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)

Top method improvements (percentages):
         -26 (-38.24 % of base) : 15817.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
        -232 (-37.18 % of base) : 2269.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -230 (-35.28 % of base) : 610.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -140 (-34.31 % of base) : 16677.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
         -30 (-34.09 % of base) : 2710.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
         -22 (-33.33 % of base) : 2931.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateCharacteristic[ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[ubyte] (Tier1)
         -22 (-33.33 % of base) : 16775.dasm - Newtonsoft.Json.Serialization.JsonTypeReflector:GetCachedAttribute[System.__Canon](System.Object):System.__Canon (Tier1)
         -80 (-33.33 % of base) : 4141.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
        -140 (-32.41 % of base) : 7522.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.IOrderedCollection`1[System.__Canon] (Tier0)
         -22 (-32.35 % of base) : 2964.dasm - System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier1)
        -172 (-32.33 % of base) : 4048.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -50 (-32.05 % of base) : 11799.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
        -162 (-31.89 % of base) : 13169.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -170 (-31.72 % of base) : 11475.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
         -50 (-31.65 % of base) : 12564.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.__Canon](int):ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
         -50 (-31.65 % of base) : 11643.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (Tier0)
         -50 (-31.25 % of base) : 5322.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
         -50 (-31.25 % of base) : 6481.dasm - System.Text.Json.JsonSerializer:SerializeToUtf8Bytes[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):ubyte[] (Tier0)
         -22 (-30.56 % of base) : 4225.dasm - System.Collections.Immutable.ImmutableDictionary:ToImmutableDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.__Canon] (Tier1)
        -202 (-30.51 % of base) : 616.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)


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: 84084 (overridden on cmd)
Total bytes of diff: 84052 (overridden on cmd)
Total bytes of delta: -32 (-0.04 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -32 : 86.dasm (-10.60 % of base)

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

Top method improvements (bytes):
         -32 (-10.60 % of base) : 86.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)

Top method improvements (percentages):
         -32 (-10.60 % of base) : 86.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)


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: 926186 (overridden on cmd)
Total bytes of diff: 919856 (overridden on cmd)
Total bytes of delta: -6330 (-0.68 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         804 : 6434.dasm (152.85 % of base)
          54 : 4185.dasm (29.03 % of base)
          50 : 4173.dasm (21.19 % of base)
          24 : 8062.dasm (10.26 % of base)
          24 : 8065.dasm (7.41 % of base)
          14 : 15819.dasm (6.80 % of base)
          14 : 4139.dasm (10.29 % of base)
          12 : 15824.dasm (3.16 % of base)
           6 : 12657.dasm (6.00 % of base)
           4 : 12669.dasm (1.92 % of base)

Top file improvements (bytes):
         -78 : 11840.dasm (-22.16 % of base)
         -74 : 15878.dasm (-20.67 % of base)
         -70 : 4135.dasm (-25.18 % of base)
         -70 : 12932.dasm (-15.22 % of base)
         -70 : 4346.dasm (-25.18 % of base)
         -64 : 12930.dasm (-21.19 % of base)
         -64 : 12934.dasm (-21.19 % of base)
         -62 : 11832.dasm (-24.03 % of base)
         -62 : 11835.dasm (-23.48 % of base)
         -62 : 11833.dasm (-19.87 % of base)
         -60 : 11829.dasm (-23.44 % of base)
         -60 : 11830.dasm (-23.44 % of base)
         -60 : 11828.dasm (-23.44 % of base)
         -60 : 11831.dasm (-23.44 % of base)
         -58 : 13129.dasm (-21.32 % of base)
         -58 : 13183.dasm (-21.32 % of base)
         -58 : 13187.dasm (-21.32 % of base)
         -58 : 15848.dasm (-15.26 % of base)
         -54 : 12936.dasm (-15.17 % of base)
         -50 : 11565.dasm (-22.52 % of base)

50 total files with Code Size differences (40 improved, 10 regressed), 30 unchanged.

Top method regressions (bytes):
         804 (152.85 % of base) : 6434.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
          54 (29.03 % of base) : 4185.dasm - System.Numerics.Vector:CreateSequence[System.__Canon](System.__Canon,System.__Canon):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          50 (21.19 % of base) : 4173.dasm - System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          24 (7.41 % of base) : 8065.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
          24 (10.26 % of base) : 8062.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
          14 (6.80 % of base) : 15819.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
          14 (10.29 % of base) : 4139.dasm - System.Numerics.Vector:AndNot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          12 (3.16 % of base) : 15824.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallFilterThenInvoke[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Runtime.ExceptionServices.ExceptionDispatchInfo):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
           6 (6.00 % of base) : 12657.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:WithContinuation[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:this (FullOpts)
           4 (1.92 % of base) : 12669.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:HijackCheckThenCall[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon):Microsoft.FSharp.Control.AsyncReturn (FullOpts)

Top method improvements (bytes):
         -78 (-22.16 % of base) : 11840.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Map[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:this (FullOpts)
         -74 (-20.67 % of base) : 15878.dasm - Microsoft.FSharp.Control.AsyncPrimitives:StartAsTask[System.__Canon](System.Threading.CancellationToken,Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon],Microsoft.FSharp.Core.FSharpOption`1[int]):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)
         -70 (-15.22 % of base) : 12932.dasm - Microsoft.FSharp.Control.TaskBuilderBase:For[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.Nullable`1[int]],Microsoft.FSharp.Core.Unit]:this (FullOpts)
         -70 (-25.18 % of base) : 4135.dasm - System.Numerics.Vector:Abs[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -70 (-25.18 % of base) : 4346.dasm - System.Numerics.Vector:SquareRoot[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -64 (-21.19 % of base) : 12930.dasm - Microsoft.FSharp.Control.TaskBuilderBase:TryFinally[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.Nullable`1[int]],Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]):Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.Nullable`1[int]]:this (FullOpts)
         -64 (-21.19 % of base) : 12934.dasm - Microsoft.FSharp.Control.TaskBuilderBase:TryFinallyAsync[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.Nullable`1[int]],Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Threading.Tasks.ValueTask]):Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.Nullable`1[int]]:this (FullOpts)
         -62 (-24.03 % of base) : 11832.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Fold[double](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],double):double:this (FullOpts)
         -62 (-23.48 % of base) : 11835.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Fold[long](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],long):long:this (FullOpts)
         -62 (-19.87 % of base) : 11833.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Fold[System.Numerics.Vector`1[float]](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Numerics.Vector`1[float]):System.Numerics.Vector`1[float]:this (FullOpts)
         -60 (-23.44 % of base) : 11831.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Fold[int](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],int):int:this (FullOpts)
         -60 (-23.44 % of base) : 11830.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Fold[short](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],short):short:this (FullOpts)
         -60 (-23.44 % of base) : 11828.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Fold[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)
         -60 (-23.44 % of base) : 11829.dasm - Microsoft.FSharp.Collections.FSharpSet`1[System.__Canon]:Fold[ubyte](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],ubyte):ubyte:this (FullOpts)
         -58 (-15.26 % of base) : 15848.dasm - Microsoft.FSharp.Control.AsyncPrimitives:DelimitSyncContext[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]):Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon] (FullOpts)
         -58 (-21.32 % of base) : 13183.dasm - Microsoft.FSharp.Linq.QueryBuilder:SkipWhile[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Linq.QuerySource`2[System.__Canon,System.Nullable`1[int]],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte]):Microsoft.FSharp.Linq.QuerySource`2[System.__Canon,System.Nullable`1[int]]:this (FullOpts)
         -58 (-21.32 % of base) : 13187.dasm - Microsoft.FSharp.Linq.QueryBuilder:TakeWhile[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Linq.QuerySource`2[System.__Canon,System.Nullable`1[int]],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte]):Microsoft.FSharp.Linq.QuerySource`2[System.__Canon,System.Nullable`1[int]]:this (FullOpts)
         -58 (-21.32 % of base) : 13129.dasm - Microsoft.FSharp.Linq.QueryBuilder:Where[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Linq.QuerySource`2[System.__Canon,System.Nullable`1[int]],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte]):Microsoft.FSharp.Linq.QuerySource`2[System.__Canon,System.Nullable`1[int]]:this (FullOpts)
         -54 (-15.17 % of base) : 12936.dasm - Microsoft.FSharp.Control.TaskBuilder:RunDynamic[System.__Canon](Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)
         -50 (-22.52 % of base) : 11565.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:Map[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.__Canon]:this (FullOpts)

Top method regressions (percentages):
         804 (152.85 % of base) : 6434.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
          54 (29.03 % of base) : 4185.dasm - System.Numerics.Vector:CreateSequence[System.__Canon](System.__Canon,System.__Canon):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          50 (21.19 % of base) : 4173.dasm - System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          14 (10.29 % of base) : 4139.dasm - System.Numerics.Vector:AndNot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          24 (10.26 % of base) : 8062.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
          24 (7.41 % of base) : 8065.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
          14 (6.80 % of base) : 15819.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
           6 (6.00 % of base) : 12657.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:WithContinuation[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:this (FullOpts)
          12 (3.16 % of base) : 15824.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallFilterThenInvoke[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Runtime.ExceptionServices.ExceptionDispatchInfo):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
           4 (1.92 % of base) : 12669.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:HijackCheckThenCall[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon):Microsoft.FSharp.Control.AsyncReturn (FullOpts)

Top method improvements (percentages):
         -28 (-34.15 % of base) : 15826.dasm - Microsoft.FSharp.Control.AsyncPrimitives:MakeAsync[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
         -28 (-34.15 % of base) : 15231.dasm - Microsoft.FSharp.Control.ObservableModule:Pairwise[System.__Canon](System.IObservable`1[System.__Canon]):System.IObservable`1[System.__Canon] (FullOpts)
         -28 (-34.15 % of base) : 11120.dasm - Microsoft.FSharp.Core.FuncConvert:FromAction[System.__Canon,System.Nullable`1[int]](System.Action`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
         -28 (-34.15 % of base) : 11118.dasm - Microsoft.FSharp.Core.FuncConvert:FromAction[System.__Canon](System.Action`1[System.__Canon]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
         -28 (-34.15 % of base) : 11115.dasm - Microsoft.FSharp.Core.FuncConvert:FromFunc[System.__Canon,System.Nullable`1[int]](System.Func`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
         -28 (-34.15 % of base) : 11113.dasm - Microsoft.FSharp.Core.FuncConvert:FromFunc[System.__Canon](System.Func`1[System.__Canon]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
         -28 (-34.15 % of base) : 11109.dasm - Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[System.__Canon,System.Nullable`1[int]](System.Converter`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
         -28 (-34.15 % of base) : 11111.dasm - Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[System.__Canon,System.Nullable`1[int]](System.Func`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
         -28 (-34.15 % of base) : 11107.dasm - Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[System.__Canon](System.Action`1[System.__Canon]):Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon] (FullOpts)
         -22 (-33.33 % of base) : 13250.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:CreateDictionary[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IDictionary`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
         -22 (-33.33 % of base) : 13254.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:PrintFormatToString[System.__Canon](Microsoft.FSharp.Core.PrintfFormat`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]):System.__Canon (FullOpts)
         -22 (-33.33 % of base) : 13261.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:PrintFormatToStringThenFail[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.PrintfFormat`4[System.__Canon,System.__Canon,System.__Canon,System.Nullable`1[int]]):System.__Canon (FullOpts)
         -22 (-33.33 % of base) : 13339.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToByte[System.__Canon](System.__Canon):ubyte (FullOpts)
         -22 (-33.33 % of base) : 13325.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToDouble[System.__Canon](System.__Canon):double (FullOpts)
         -22 (-33.33 % of base) : 13353.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToSByte[System.__Canon](System.__Canon):byte (FullOpts)
         -22 (-33.33 % of base) : 13311.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToSingle[System.__Canon](System.__Canon):float (FullOpts)
         -22 (-33.33 % of base) : 13417.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked:ToByte[System.__Canon](System.__Canon):ubyte (FullOpts)
         -22 (-33.33 % of base) : 13424.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked:ToSByte[System.__Canon](System.__Canon):byte (FullOpts)
         -22 (-33.33 % of base) : 12521.dasm - Microsoft.FSharp.Quotations.FSharpExpr:Cast[System.__Canon](Microsoft.FSharp.Quotations.FSharpExpr):Microsoft.FSharp.Quotations.FSharpExpr`1[System.__Canon] (FullOpts)
         -22 (-32.35 % of base) : 12862.dasm - Microsoft.FSharp.Control.FSharpAsync:Parallel[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)


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: 836994 (overridden on cmd)
Total bytes of diff: 827190 (overridden on cmd)
Total bytes of delta: -9804 (-1.17 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          68 : 8759.dasm (7.94 % of base)
          40 : 6363.dasm (14.49 % of base)
          34 : 1964.dasm (17.00 % of base)
           4 : 4411.dasm (2.06 % of base)
           4 : 828.dasm (2.06 % of base)
           2 : 1115.dasm (1.72 % of base)
           2 : 4431.dasm (1.72 % of base)

Top file improvements (bytes):
        -232 : 43.dasm (-36.94 % of base)
        -230 : 34.dasm (-35.17 % of base)
        -206 : 6903.dasm (-21.68 % of base)
        -202 : 1515.dasm (-30.51 % of base)
        -200 : 184.dasm (-30.21 % of base)
        -200 : 2630.dasm (-19.88 % of base)
        -162 : 2318.dasm (-31.89 % of base)
        -140 : 191.dasm (-34.31 % of base)
        -140 : 2956.dasm (-35.90 % of base)
        -140 : 4949.dasm (-32.56 % of base)
        -140 : 507.dasm (-34.31 % of base)
        -140 : 1547.dasm (-23.57 % of base)
        -130 : 6193.dasm (-26.21 % of base)
        -124 : 965.dasm (-27.31 % of base)
        -110 : 1813.dasm (-26.07 % of base)
        -110 : 4414.dasm (-17.57 % of base)
        -110 : 4724.dasm (-28.21 % of base)
        -110 : 914.dasm (-17.57 % of base)
        -108 : 10665.dasm (-21.69 % of base)
        -108 : 2086.dasm (-18.18 % of base)

40 total files with Code Size differences (33 improved, 7 regressed), 33 unchanged.

Top method regressions (bytes):
          68 (7.94 % of base) : 8759.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (Tier0-FullOpts)
          40 (14.49 % of base) : 6363.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (Tier0-FullOpts)
          34 (17.00 % of base) : 1964.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
           4 (2.06 % of base) : 4411.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
           4 (2.06 % of base) : 828.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
           2 (1.72 % of base) : 1115.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
           2 (1.72 % of base) : 4431.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (bytes):
        -232 (-36.94 % of base) : 43.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -230 (-35.17 % of base) : 34.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -206 (-21.68 % of base) : 6903.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -202 (-30.51 % of base) : 1515.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -200 (-19.88 % of base) : 2630.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -200 (-30.21 % of base) : 184.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -162 (-31.89 % of base) : 2318.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -140 (-32.56 % of base) : 4949.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.ValueTuple`3[int,int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[int,int,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.ValueTuple`3[int,int,System.__Canon]] (Tier0)
        -140 (-34.31 % of base) : 507.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Instrumented Tier0)
        -140 (-34.31 % of base) : 191.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -140 (-23.57 % of base) : 1547.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -140 (-35.90 % of base) : 2956.dasm - Xunit.Assert:Contains[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[System.__Canon]) (Tier0)
        -130 (-26.21 % of base) : 6193.dasm - System.Array:Resize[System.Collections.Immutable.RefAsValueType`1[System.__Canon]](byref,int) (Tier0)
        -124 (-27.31 % of base) : 965.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -110 (-28.21 % of base) : 4724.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (Tier0)
        -110 (-26.07 % of base) : 1813.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (Tier0)
        -110 (-17.57 % of base) : 4414.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier1)
        -110 (-17.57 % of base) : 914.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier1)
        -108 (-18.18 % of base) : 2086.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
        -108 (-21.69 % of base) : 10665.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier1)

Top method regressions (percentages):
          34 (17.00 % of base) : 1964.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
          40 (14.49 % of base) : 6363.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (Tier0-FullOpts)
          68 (7.94 % of base) : 8759.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (Tier0-FullOpts)
           4 (2.06 % of base) : 4411.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
           4 (2.06 % of base) : 828.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
           2 (1.72 % of base) : 1115.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
           2 (1.72 % of base) : 4431.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (percentages):
         -26 (-38.24 % of base) : 10612.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
        -232 (-36.94 % of base) : 43.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
         -26 (-36.11 % of base) : 7272.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.__Canon](byref):this (Instrumented Tier1)
        -140 (-35.90 % of base) : 2956.dasm - Xunit.Assert:Contains[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[System.__Canon]) (Tier0)
        -230 (-35.17 % of base) : 34.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -140 (-34.31 % of base) : 507.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Instrumented Tier0)
        -140 (-34.31 % of base) : 191.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
         -80 (-34.19 % of base) : 7449.dasm - Microsoft.CodeAnalysis.PublicContract:ToBoxedImmutableArrayWithDistinctNonNullItems[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.String):System.Collections.Generic.IReadOnlyList`1[System.__Canon] (Tier0)
         -80 (-34.19 % of base) : 6508.dasm - System.Collections.Immutable.ImmutableHashSet:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableHashSet`1[System.__Canon] (Tier0)
         -30 (-34.09 % of base) : 2551.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
         -30 (-34.09 % of base) : 4606.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
         -80 (-33.06 % of base) : 9570.dasm - Microsoft.CodeAnalysis.PublicContract:ToBoxedImmutableArrayWithNonNullItems[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.String):System.Collections.Generic.IReadOnlyList`1[System.__Canon] (Tier0)
         -80 (-33.06 % of base) : 18.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
         -50 (-32.89 % of base) : 7741.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilder[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]] (Instrumented Tier0)
         -50 (-32.89 % of base) : 4892.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilder[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]] (Tier0)
        -140 (-32.56 % of base) : 4949.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.ValueTuple`3[int,int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[int,int,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.ValueTuple`3[int,int,System.__Canon]] (Tier0)
         -38 (-32.20 % of base) : 1414.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
         -50 (-32.05 % of base) : 11617.dasm - Microsoft.VisualStudio.Composition.AttributeServices:GetFirstAttribute[System.__Canon](System.Reflection.ICustomAttributeProvider):System.__Canon (Instrumented Tier0)
         -50 (-32.05 % of base) : 6009.dasm - Microsoft.VisualStudio.Composition.AttributeServices:GetFirstAttribute[System.__Canon](System.Reflection.ICustomAttributeProvider):System.__Canon (Tier0)
        -162 (-31.89 % of base) : 2318.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)


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: 418846 (overridden on cmd)
Total bytes of diff: 414850 (overridden on cmd)
Total bytes of delta: -3996 (-0.95 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          68 : 4371.dasm (7.94 % of base)
          40 : 2906.dasm (14.49 % of base)
          34 : 67.dasm (17.00 % of base)
          12 : 2909.dasm (1.37 % of base)
           8 : 2315.dasm (3.92 % of base)
           4 : 5505.dasm (3.70 % of base)
           2 : 6685.dasm (1.01 % of base)
           2 : 1163.dasm (2.00 % of base)
           2 : 6115.dasm (3.12 % of base)

Top file improvements (bytes):
        -206 : 3065.dasm (-21.37 % of base)
        -200 : 1008.dasm (-19.88 % of base)
        -186 : 2986.dasm (-7.23 % of base)
        -124 : 12.dasm (-27.19 % of base)
        -124 : 9.dasm (-25.62 % of base)
        -108 : 480.dasm (-21.26 % of base)
        -108 : 765.dasm (-18.18 % of base)
        -106 : 3072.dasm (-15.96 % of base)
        -106 : 65.dasm (-17.97 % of base)
        -104 : 3313.dasm (-24.76 % of base)
         -86 : 2228.dasm (-28.10 % of base)
         -82 : 511.dasm (-17.67 % of base)
         -80 : 3420.dasm (-7.08 % of base)
         -76 : 493.dasm (-16.96 % of base)
         -64 : 635.dasm (-20.51 % of base)
         -62 : 2152.dasm (-21.83 % of base)
         -60 : 6111.dasm (-12.15 % of base)
         -54 : 865.dasm (-16.77 % of base)
         -54 : 6417.dasm (-19.85 % of base)
         -50 : 254.dasm (-13.30 % of base)

46 total files with Code Size differences (37 improved, 9 regressed), 31 unchanged.

Top method regressions (bytes):
          68 (7.94 % of base) : 4371.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)
          40 (14.49 % of base) : 2906.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (FullOpts)
          34 (17.00 % of base) : 67.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
          12 (1.37 % of base) : 2909.dasm - Microsoft.VisualStudio.Composition.DiscoveredParts:.ctor(System.Collections.Generic.IEnumerable`1[Microsoft.VisualStudio.Composition.ComposablePartDefinition],System.Collections.Generic.IEnumerable`1[Microsoft.VisualStudio.Composition.PartDiscoveryException]):this (FullOpts)
           8 (3.92 % of base) : 2315.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.ValueTuple`2[int,System.__Canon]](System.Collections.Generic.List`1[System.ValueTuple`2[int,System.__Canon]]):System.Span`1[System.ValueTuple`2[int,System.__Canon]] (FullOpts)
           4 (3.70 % of base) : 5505.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
           2 (1.01 % of base) : 6685.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:SingleValidResult[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]):ubyte (FullOpts)
           2 (3.12 % of base) : 6115.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
           2 (2.00 % of base) : 1163.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)

Top method improvements (bytes):
        -206 (-21.37 % of base) : 3065.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -200 (-19.88 % of base) : 1008.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -186 (-7.23 % of base) : 2986.dasm - Microsoft.VisualStudio.Composition.CompositionConfiguration:ComputeSharingBoundaryMetadata(System.Collections.Generic.IEnumerable`1[Microsoft.VisualStudio.Composition.CompositionConfiguration+PartBuilder]):System.Collections.Immutable.ImmutableDictionary`2[System.String,Microsoft.VisualStudio.Composition.CompositionConfiguration+SharingBoundaryMetadata] (FullOpts)
        -124 (-25.62 % of base) : 9.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -124 (-27.19 % of base) : 12.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -108 (-18.18 % of base) : 765.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
        -108 (-21.26 % of base) : 480.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -106 (-15.96 % of base) : 3072.dasm - Microsoft.VisualStudio.Composition.CompositionConfiguration:PathExistsBetween[System.__Canon](System.__Canon,System.__Canon,System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.HashSet`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (FullOpts)
        -106 (-17.97 % of base) : 65.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -104 (-24.76 % of base) : 3313.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
         -86 (-28.10 % of base) : 2228.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -82 (-17.67 % of base) : 511.dasm - System.Linq.Lookup`2[System.__Canon,System.__Canon]:Create[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Linq.Lookup`2[System.__Canon,System.__Canon] (FullOpts)
         -80 (-7.08 % of base) : 3420.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
         -76 (-16.96 % of base) : 493.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -64 (-20.51 % of base) : 635.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -62 (-21.83 % of base) : 2152.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
         -60 (-12.15 % of base) : 6111.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:GetTypesFromMemberMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.ReadOnlyMemory`1[ushort]]):System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
         -54 (-19.85 % of base) : 6417.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
         -54 (-16.77 % of base) : 865.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
         -50 (-13.30 % of base) : 254.dasm - DictionaryExtensions:ToDictionaryIgnoringDuplicateKeys[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)

Top method regressions (percentages):
          34 (17.00 % of base) : 67.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
          40 (14.49 % of base) : 2906.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (FullOpts)
          68 (7.94 % of base) : 4371.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)
           8 (3.92 % of base) : 2315.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.ValueTuple`2[int,System.__Canon]](System.Collections.Generic.List`1[System.ValueTuple`2[int,System.__Canon]]):System.Span`1[System.ValueTuple`2[int,System.__Canon]] (FullOpts)
           4 (3.70 % of base) : 5505.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
           2 (3.12 % of base) : 6115.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
           2 (2.00 % of base) : 1163.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
          12 (1.37 % of base) : 2909.dasm - Microsoft.VisualStudio.Composition.DiscoveredParts:.ctor(System.Collections.Generic.IEnumerable`1[Microsoft.VisualStudio.Composition.ComposablePartDefinition],System.Collections.Generic.IEnumerable`1[Microsoft.VisualStudio.Composition.PartDiscoveryException]):this (FullOpts)
           2 (1.01 % of base) : 6685.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:SingleValidResult[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]):ubyte (FullOpts)

Top method improvements (percentages):
         -26 (-38.24 % of base) : 5332.dasm - System.Linq.Enumerable:SingleOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
         -22 (-33.33 % of base) : 4609.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:AsImmutable[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
         -30 (-33.33 % of base) : 10.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
         -22 (-32.35 % of base) : 3644.dasm - System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -20 (-32.26 % of base) : 2171.dasm - System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -22 (-30.56 % of base) : 4684.dasm - System.Collections.Immutable.ImmutableDictionary:ToImmutableDictionary[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int] (FullOpts)
         -20 (-30.30 % of base) : 821.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]:Start[Xunit.Sdk.TestAssemblyRunner`1+<RunAsync>d__41[System.__Canon]](byref):this (FullOpts)
         -30 (-28.30 % of base) : 2409.dasm - System.Collections.Immutable.SecurePooledObject`1[System.__Canon]:TryUse[System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]](byref,byref):ubyte:this (FullOpts)
         -86 (-28.10 % of base) : 2228.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -22 (-27.50 % of base) : 273.dasm - <PrivateImplementationDetails>:InlineArrayAsReadOnlySpan[System.Collections.Generic.SegmentedArrayBuilder`1+Arrays[System.__Canon],System.__Canon](byref,int):System.ReadOnlySpan`1[System.__Canon] (FullOpts)
         -22 (-27.50 % of base) : 68.dasm - <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon] (FullOpts)
         -22 (-27.50 % of base) : 1007.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -124 (-27.19 % of base) : 12.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         -26 (-27.08 % of base) : 113.dasm - System.Linq.Enumerable:HashSetToArray[System.__Canon](System.Collections.Generic.HashSet`1[System.__Canon]):System.__Canon[] (FullOpts)
         -22 (-26.83 % of base) : 2372.dasm - System.Collections.Immutable.ImmutableDictionary:ToImmutableDictionary[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.__Canon,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Text.TextSpan]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.__Canon],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Text.TextSpan]]):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Text.TextSpan]] (FullOpts)
         -18 (-26.47 % of base) : 2151.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -22 (-26.19 % of base) : 3376.dasm - System.Collections.Immutable.ImmutableSortedDictionary:ToImmutableSortedDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):System.Collections.Immutable.ImmutableSortedDictionary`2[System.__Canon,System.__Canon] (FullOpts)
         -40 (-25.97 % of base) : 3151.dasm - Microsoft.VisualStudio.Composition.DelegateServices:AsFunc[System.__Canon](System.__Canon):System.Func`1[System.__Canon] (FullOpts)
         -18 (-25.71 % of base) : 4957.dasm - Microsoft.CodeAnalysis.Collections.RoslynImmutableInterlocked:InterlockedExchange[System.__Canon](byref,Microsoft.CodeAnalysis.Collections.ImmutableSegmentedHashSet`1[System.__Canon]):Microsoft.CodeAnalysis.Collections.ImmutableSegmentedHashSet`1[System.__Canon] (FullOpts)
        -124 (-25.62 % of base) : 9.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)


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: 1992442 (overridden on cmd)
Total bytes of diff: 1987742 (overridden on cmd)
Total bytes of delta: -4700 (-0.24 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         166 : 7264.dasm (27.30 % of base)
          64 : 6913.dasm (21.19 % of base)
          64 : 6924.dasm (21.19 % of base)
          64 : 6934.dasm (21.62 % of base)
          56 : 6937.dasm (18.54 % of base)
          12 : 5736.dasm (3.64 % of base)
          12 : 6860.dasm (10.00 % of base)
          12 : 3328.dasm (6.06 % of base)
           8 : 3300.dasm (5.00 % of base)
           8 : 4263.dasm (4.21 % of base)
           8 : 5572.dasm (4.12 % of base)
           6 : 6935.dasm (2.54 % of base)
           4 : 3089.dasm (3.23 % of base)

Top file improvements (bytes):
        -206 : 4286.dasm (-21.68 % of base)
        -124 : 821.dasm (-27.19 % of base)
        -124 : 252.dasm (-25.62 % of base)
        -116 : 7098.dasm (-17.06 % of base)
        -108 : 256.dasm (-21.26 % of base)
        -106 : 745.dasm (-17.97 % of base)
        -100 : 6278.dasm (-21.93 % of base)
         -98 : 5962.dasm (-15.71 % of base)
         -90 : 7058.dasm (-19.57 % of base)
         -84 : 7259.dasm (-18.10 % of base)
         -76 : 661.dasm (-16.96 % of base)
         -68 : 4150.dasm (-16.92 % of base)
         -68 : 3897.dasm (-16.50 % of base)
         -64 : 218.dasm (-20.13 % of base)
         -62 : 3890.dasm (-19.02 % of base)
         -62 : 7465.dasm (-21.83 % of base)
         -60 : 6168.dasm (-5.36 % of base)
         -58 : 6005.dasm (-21.80 % of base)
         -58 : 5754.dasm (-21.80 % of base)
         -54 : 5618.dasm (-14.84 % of base)

53 total files with Code Size differences (40 improved, 13 regressed), 27 unchanged.

Top method regressions (bytes):
         166 (27.30 % of base) : 7264.dasm - Internal.Utilities.Library.List:mapq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          64 (21.62 % of base) : 6934.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          64 (21.19 % of base) : 6924.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          64 (21.19 % of base) : 6913.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          56 (18.54 % of base) : 6937.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty3[System.__Canon,System.__Canon](System.__Canon,System.__Canon,System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          12 (10.00 % of base) : 6860.dasm - Internal.Utilities.Collections.QueueList:foldBack[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Internal.Utilities.Collections.QueueList`1[System.__Canon],System.__Canon):System.__Canon (FullOpts)
          12 (3.64 % of base) : 5736.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenContinue[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon,Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
          12 (6.06 % of base) : 3328.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
           8 (4.12 % of base) : 5572.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
           8 (5.00 % of base) : 3300.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
           8 (4.21 % of base) : 4263.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
           6 (2.54 % of base) : 6935.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
           4 (3.23 % of base) : 3089.dasm - Microsoft.FSharp.Collections.PrivateListHelpers:appendToFreshConsTail[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)

Top method improvements (bytes):
        -206 (-21.68 % of base) : 4286.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -124 (-25.62 % of base) : 252.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -124 (-27.19 % of base) : 821.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -116 (-17.06 % of base) : 7098.dasm - Microsoft.FSharp.Primitives.Basics.List:mapFold[System.__Canon,System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon,Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.Tuple`2[System.__Canon,System.__Canon] (FullOpts)
        -108 (-21.26 % of base) : 256.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -106 (-17.97 % of base) : 745.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -100 (-21.93 % of base) : 6278.dasm - Microsoft.FSharp.Primitives.Basics.List:unzip[System.__Canon,System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.Tuple`2[System.__Canon,System.__Canon] (FullOpts)
         -98 (-15.71 % of base) : 5962.dasm - Microsoft.FSharp.Primitives.Basics.List:partition[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.Tuple`2[System.__Canon,System.__Canon] (FullOpts)
         -90 (-19.57 % of base) : 7058.dasm - Microsoft.FSharp.Primitives.Basics.List:map2[System.__Canon,ubyte,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[ubyte]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -84 (-18.10 % of base) : 7259.dasm - Microsoft.FSharp.Primitives.Basics.List:zip[System.__Canon,System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -76 (-16.96 % of base) : 661.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -68 (-16.92 % of base) : 4150.dasm - Microsoft.FSharp.Primitives.Basics.List:indexed[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -68 (-16.50 % of base) : 3897.dasm - Microsoft.FSharp.Primitives.Basics.List:mapi[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -64 (-20.13 % of base) : 218.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (FullOpts)
         -62 (-19.02 % of base) : 3890.dasm - Internal.Utilities.Collections.AgedLookup`3[System.__Canon,System.__Canon,System.__Canon]:TryGetKeyValueImpl[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         -62 (-21.83 % of base) : 7465.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
         -60 (-5.36 % of base) : 6168.dasm - FSharp.Compiler.Import:multisetDiscriminateAndMap[System.__Canon,System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -58 (-21.80 % of base) : 5754.dasm - FSharp.Compiler.BuildGraph+NodeCodeBuilder:Bind[System.Threading.CancellationToken,System.__Canon](FSharp.Compiler.BuildGraph+NodeCode`1[System.Threading.CancellationToken],Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,System.__Canon]):FSharp.Compiler.BuildGraph+NodeCode`1[System.__Canon]:this (FullOpts)
         -58 (-21.80 % of base) : 6005.dasm - FSharp.Compiler.BuildGraph+NodeCodeBuilder:Combine[System.__Canon](FSharp.Compiler.BuildGraph+NodeCode`1[Microsoft.FSharp.Core.Unit],FSharp.Compiler.BuildGraph+NodeCode`1[System.__Canon]):FSharp.Compiler.BuildGraph+NodeCode`1[System.__Canon]:this (FullOpts)
         -54 (-14.84 % of base) : 5618.dasm - Microsoft.FSharp.Primitives.Basics.List:distinctWithComparer[System.__Canon](System.Collections.Generic.IEqualityComparer`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)

Top method regressions (percentages):
         166 (27.30 % of base) : 7264.dasm - Internal.Utilities.Library.List:mapq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          64 (21.62 % of base) : 6934.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          64 (21.19 % of base) : 6924.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          64 (21.19 % of base) : 6913.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          56 (18.54 % of base) : 6937.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty3[System.__Canon,System.__Canon](System.__Canon,System.__Canon,System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          12 (10.00 % of base) : 6860.dasm - Internal.Utilities.Collections.QueueList:foldBack[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Internal.Utilities.Collections.QueueList`1[System.__Canon],System.__Canon):System.__Canon (FullOpts)
          12 (6.06 % of base) : 3328.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
           8 (5.00 % of base) : 3300.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
           8 (4.21 % of base) : 4263.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
           8 (4.12 % of base) : 5572.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          12 (3.64 % of base) : 5736.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenContinue[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon,Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
           4 (3.23 % of base) : 3089.dasm - Microsoft.FSharp.Collections.PrivateListHelpers:appendToFreshConsTail[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
           6 (2.54 % of base) : 6935.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)

Top method improvements (percentages):
         -28 (-34.15 % of base) : 4173.dasm - Microsoft.FSharp.Collections.IEnumerator:mkSeq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -28 (-34.15 % of base) : 3330.dasm - Microsoft.FSharp.Control.AsyncPrimitives:MakeAsync[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
         -22 (-33.33 % of base) : 7277.dasm - Microsoft.FSharp.Collections.ArrayModule:OfList[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon[] (FullOpts)
         -22 (-33.33 % of base) : 5634.dasm - Microsoft.FSharp.Collections.ListModule:Reverse[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -22 (-33.33 % of base) : 6238.dasm - Microsoft.FSharp.Collections.MapModule:OfList[System.__Canon,System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.__Canon] (FullOpts)
         -22 (-33.33 % of base) : 6596.dasm - Microsoft.FSharp.Collections.MapModule:OfSeq[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.__Canon] (FullOpts)
         -22 (-33.33 % of base) : 3480.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:CreateDictionary[System.__Canon,System.Decimal](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IDictionary`2[System.__Canon,System.Decimal] (FullOpts)
         -30 (-33.33 % of base) : 253.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
         -40 (-27.78 % of base) : 3247.dasm - Microsoft.FSharp.Control.AsyncPrimitives:MakeAsyncWithCancelCheck[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
         -36 (-27.69 % of base) : 6595.dasm - Microsoft.FSharp.Collections.SeqModule:mkDelayedSeq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -36 (-27.69 % of base) : 7434.dasm - Microsoft.FSharp.Collections.SeqModule:Singleton[System.__Canon](System.__Canon):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -36 (-27.69 % of base) : 7039.dasm - Microsoft.FSharp.Control.FSharpAsync:AwaitTask[System.__Canon](System.Threading.Tasks.Task`1[System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
         -36 (-27.69 % of base) : 5672.dasm - Microsoft.FSharp.Control.FSharpAsync:FromContinuations[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
         -36 (-27.69 % of base) : 3246.dasm - Microsoft.FSharp.Control.FSharpAsyncBuilder:Delay[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon]:this (FullOpts)
         -36 (-27.69 % of base) : 6676.dasm - Microsoft.FSharp.Control.LazyExtensions:CreateFromValue[System.__Canon](System.__Canon):System.Lazy`1[System.__Canon] (FullOpts)
         -26 (-27.66 % of base) : 4057.dasm - Internal.Utilities.Collections.AgedLookup`3[System.__Canon,System.__Canon,System.__Canon]:Exists[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],System.__Canon):ubyte:this (FullOpts)
        -124 (-27.19 % of base) : 821.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         -26 (-27.08 % of base) : 840.dasm - System.Linq.Enumerable:HashSetToArray[System.__Canon](System.Collections.Generic.HashSet`1[System.__Canon]):System.__Canon[] (FullOpts)
         -18 (-26.47 % of base) : 3898.dasm - Microsoft.FSharp.Collections.ListModule:Filter[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -18 (-26.47 % of base) : 6526.dasm - Microsoft.FSharp.Collections.ListModule:Initialize[System.__Canon](int,Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)



windows x86

Diffs are based on 53,492 contexts (17,492 MinOpts, 36,000 FullOpts).

MISSED contexts: base: 3,510 (3.05%), diff: 58,094 (50.45%)

Overall (-52,308 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 298,081 -3,108
benchmarks.run_pgo.windows.x86.checked.mch 726,262 -8,964
benchmarks.run_tiered.windows.x86.checked.mch 706,843 -9,977
coreclr_tests.run.windows.x86.checked.mch 46,161 -42
libraries.pmi.windows.x86.checked.mch 1,461,078 -3,494
libraries_tests.run.windows.x86.Release.mch 510,379 -15,767
librariestestsnotieredcompilation.run.windows.x86.Release.mch 256,268 -5,307
realworld.run.windows.x86.checked.mch 481,011 -5,649

MinOpts (-27,508 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.windows.x86.checked.mch 414,129 -6,800
benchmarks.run_tiered.windows.x86.checked.mch 520,835 -7,704
libraries_tests.run.windows.x86.Release.mch 413,867 -13,004

FullOpts (-24,800 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x86.checked.mch 297,884 -3,108
benchmarks.run_pgo.windows.x86.checked.mch 312,133 -2,164
benchmarks.run_tiered.windows.x86.checked.mch 186,008 -2,273
coreclr_tests.run.windows.x86.checked.mch 46,161 -42
libraries.pmi.windows.x86.checked.mch 1,461,078 -3,494
libraries_tests.run.windows.x86.Release.mch 96,512 -2,763
librariestestsnotieredcompilation.run.windows.x86.Release.mch 256,268 -5,307
realworld.run.windows.x86.checked.mch 481,011 -5,649

Example diffs

benchmarks.run.windows.x86.checked.mch

-32 (-34.41%) : 3570.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumeratorSystem.__Canon:System.Collections.Generic.IEnumerator`1System.__Canon

@@ -7,13 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> esi single-def -; V01 loc0 [V01,T04] ( 3, 4 ) int -> edi "spilling helperCall"
+; V00 TypeCtx [V00,T00] ( 5, 5 ) int -> esi single-def +; V01 loc0 [V01,T01] ( 2, 4 ) int -> edi "spilling helperCall"
;* V02 tmp1 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V03 tmp2 [V03,T05] ( 3, 4 ) int -> ebx "VirtualCall with runtime lookup" -; V04 rat0 [V04,T01] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable" -; V05 rat1 [V05,T02] ( 3, 5.60) int -> ecx "spilling expr" -; V06 rat2 [V06,T03] ( 3, 4.48) int -> ebx "fgMakeTemp is creating a new local variable"
+; V03 tmp2 [V03,T02] ( 2, 4 ) int -> esi "VirtualCall with runtime lookup"
; ; Lcl frame size = 4 @@ -22,66 +19,38 @@ G_M57211_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebp, esp push edi push esi
- push ebx
push eax
- mov dword ptr [ebp-0x10], ecx
+ mov dword ptr [ebp-0x0C], ecx
mov esi, ecx
- ;; size=12 bbWeight=1 PerfScore 6.50 -G_M57211_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov edi, dword ptr [ecx+0x08] - test edi, edi - je SHORT G_M57211_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M57211_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M57211_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M57211_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=11 bbWeight=1 PerfScore 5.50 +G_M57211_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edi, eax
- ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M57211_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M57211_IG08 - ;; size=9 bbWeight=1 PerfScore 6.00 -G_M57211_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ebx, dword ptr [ecx+0x0C] - test ebx, ebx - je SHORT G_M57211_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M57211_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M57211_IG09 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M57211_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov ebx, eax - ;; size=14 bbWeight=0.36 PerfScore 0.63 -G_M57211_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ call CORINFO_HELP_MEMCPY + mov esi, eax
mov ecx, edi call [System.Array:Empty[System.__Canon]():System.__Canon[]] ; gcrRegs +[eax] mov ecx, eax ; gcrRegs +[ecx]
- mov eax, ebx
+ mov eax, esi
; gcrRegs -[eax] nop call [eax] ; gcrRegs -[ecx] +[eax]
- ;; size=17 bbWeight=1 PerfScore 7.00 -G_M57211_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=45 bbWeight=1 PerfScore 10.50 +G_M57211_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx
- pop ebx
pop esi pop edi pop ebp ret
- ;; size=6 bbWeight=1 PerfScore 3.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 93, prolog size 10, PerfScore 34.71, instruction count 40, allocated bytes for code 93 (MethodHash=f41c2084) for method System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (FullOpts)
+; Total bytes of code 61, prolog size 9, PerfScore 19.00, instruction count 26, allocated bytes for code 61 (MethodHash=f41c2084) for method System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (FullOpts)
; ============================================================

-32 (-32.00%) : 4688.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerSystem.__Canon:ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (FullOpts)

@@ -7,16 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T03] ( 3, 3 ) ref -> edi this class-hnd single-def <ProtoBuf.Meta.RuntimeTypeModel> -; V01 TypeCtx [V01,T00] ( 7, 5.56) int -> esi single-def -; V02 loc0 [V02,T05] ( 3, 4 ) int -> ebx "spilling helperCall"
+; V00 this [V00,T01] ( 3, 3 ) ref -> edi this class-hnd single-def <ProtoBuf.Meta.RuntimeTypeModel> +; V01 TypeCtx [V01,T00] ( 5, 5 ) int -> esi single-def +; V02 loc0 [V02,T03] ( 2, 4 ) int -> ebx "spilling helperCall"
;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V04 tmp2 [V04,T08] ( 2, 4 ) int -> esi "argument with side effect" -; V05 tmp3 [V05,T07] ( 2, 4 ) ref -> edx single-def "argument with side effect" -; V06 rat0 [V06,T01] ( 3, 5.60) int -> ebx "fgMakeTemp is creating a new local variable" -; V07 rat1 [V07,T06] ( 3, 4 ) int -> esi "runtime lookup" -; V08 rat2 [V08,T02] ( 3, 5.60) int -> ecx "spilling expr" -; V09 rat3 [V09,T04] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V04 tmp2 [V04,T04] ( 2, 4 ) int -> esi "argument with side effect" +; V05 tmp3 [V05,T02] ( 2, 4 ) ref -> edx single-def "argument with side effect"
; ; Lcl frame size = 4 @@ -32,42 +28,15 @@ G_M14728_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs +[edi] mov esi, edx ;; size=14 bbWeight=1 PerfScore 6.75
-G_M14728_IG02: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ebx, dword ptr [ecx+0x08] - test ebx, ebx - je SHORT G_M14728_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M14728_IG03: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M14728_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M14728_IG04: ; bbWeight=0.20, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M14728_IG02: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov ebx, eax
- ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M14728_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M14728_IG08 - ;; size=9 bbWeight=1 PerfScore 6.00 -G_M14728_IG06: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ecx+0x0C] - test eax, eax - je SHORT G_M14728_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M14728_IG07: ; bbWeight=0.64, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz - mov esi, eax - jmp SHORT G_M14728_IG09 - ;; size=4 bbWeight=0.64 PerfScore 1.44 -G_M14728_IG08: ; bbWeight=0.36, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov esi, eax
- ;; size=14 bbWeight=0.36 PerfScore 0.63 -G_M14728_IG09: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
push ebx mov ecx, edi ; gcrRegs +[ecx] @@ -77,10 +46,10 @@ G_M14728_IG09: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 mov edx, eax ; gcrRegs +[edx] mov ecx, esi
- call CORINFO_HELP_ISINSTANCEOFINTERFACE
+ call CORINFO_HELP_INITINSTCLASS
; gcrRegs -[edx]
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M14728_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=48 bbWeight=1 PerfScore 9.50 +G_M14728_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop ebx pop esi @@ -89,6 +58,6 @@ G_M14728_IG10: ; bbWeight=1, epilog, nogc, extend ret ;; size=6 bbWeight=1 PerfScore 3.50
-; Total bytes of code 100, prolog size 10, PerfScore 34.12, instruction count 43, allocated bytes for code 100 (MethodHash=42b4c677) for method ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (FullOpts)
+; Total bytes of code 68, prolog size 10, PerfScore 19.75, instruction count 30, allocated bytes for code 68 (MethodHash=42b4c677) for method ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (FullOpts)
; ============================================================

-30 (-28.57%) : 1506.dasm - System.Linq.Enumerable:SetCountAndGetSpanSystem.__Canon:System.Span`1System.__Canon

@@ -7,17 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T03] ( 3, 3 ) byref -> edi single-def
+; V00 RetBuf [V00,T01] ( 3, 3 ) byref -> edi single-def
; V01 arg0 [V01,T00] ( 4, 4 ) ref -> esi class-hnd single-def <System.Collections.Generic.List`1[System.__Canon]>
-; V02 arg1 [V02,T08] ( 1, 1 ) int -> [ebp+0x0C] single-def -; V03 TypeCtx [V03,T07] ( 5, 3.56) int -> ebx single-def
+; V02 arg1 [V02,T03] ( 1, 1 ) int -> [ebp+0x0C] single-def +; V03 TypeCtx [V03,T02] ( 3, 3 ) int -> ebx single-def
;* V04 loc0 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V06 rat0 [V06,T05] ( 3, 4 ) int -> eax "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable" -; V08 rat2 [V08,T06] ( 3, 4 ) int -> eax "runtime lookup" -; V09 rat3 [V09,T02] ( 3, 5.60) int -> ecx "spilling expr" -; V10 rat4 [V10,T04] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 4 @@ -36,45 +31,19 @@ G_M26687_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs +[esi] mov ebx, dword ptr [ebp+0x08] ;; size=20 bbWeight=1 PerfScore 9.75
-G_M26687_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz - mov ecx, dword ptr [ebx+0x20] - mov eax, dword ptr [ecx+0x08] - test eax, eax - je SHORT G_M26687_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M26687_IG03: ; bbWeight=0.80, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz - jmp SHORT G_M26687_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M26687_IG04: ; bbWeight=0.20, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
+G_M26687_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M26687_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz
+ call CORINFO_HELP_MEMCPY
push eax mov edx, dword ptr [ebp+0x0C] mov ecx, esi ; gcrRegs +[ecx] call [System.Runtime.InteropServices.CollectionsMarshal:SetCount[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int)] ; gcrRegs -[ecx]
- mov ecx, dword ptr [ebx+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M26687_IG08 - ;; size=21 bbWeight=1 PerfScore 11.25 -G_M26687_IG06: ; bbWeight=0.80, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz - mov eax, dword ptr [ecx+0x0C] - test eax, eax - je SHORT G_M26687_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M26687_IG07: ; bbWeight=0.64, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz - jmp SHORT G_M26687_IG09 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M26687_IG08: ; bbWeight=0.36, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=12 bbWeight=0.36 PerfScore 0.54 -G_M26687_IG09: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
+ call CORINFO_HELP_MEMCPY
push eax mov edx, esi ; gcrRegs +[edx] @@ -83,8 +52,8 @@ G_M26687_IG09: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 call [System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon]] ; gcrRegs -[edx esi] ; byrRegs -[ecx edi]
- ;; size=11 bbWeight=1 PerfScore 4.50 -G_M26687_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=47 bbWeight=1 PerfScore 12.75 +G_M26687_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop ebx pop esi @@ -93,6 +62,6 @@ G_M26687_IG10: ; bbWeight=1, epilog, nogc, extend ret 8 ;; size=8 bbWeight=1 PerfScore 4.50
-; Total bytes of code 105, prolog size 13, PerfScore 41.57, instruction count 43, allocated bytes for code 105 (MethodHash=8da497c0) for method System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (FullOpts)
+; Total bytes of code 75, prolog size 13, PerfScore 27.00, instruction count 31, allocated bytes for code 75 (MethodHash=8da497c0) for method System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (FullOpts)
; ============================================================

+0 (0.00%) : 6512.dasm - System.Numerics.Tests.Perf_VectorOf1[ubyte]:MultiplyOperatorBenchmark():System.Numerics.Vector1[ubyte]:this (FullOpts)

@@ -31,7 +31,7 @@ ;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V21 tmp19 [V21 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V22 tmp20 [V22 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V23 cse0 [V23,T07] ( 0, 0 ) int -> zero-ref "CSE - moderate"
+;* V23 cse0 [V23,T07] ( 0, 0 ) byref -> zero-ref "CSE - moderate"
; ; Lcl frame size = 96 @@ -49,7 +49,8 @@ G_M16640_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} G_M16640_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref mov ecx, 0xD1FFAB1E xor edx, edx
- call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[eax]
vmovups ymm0, ymmword ptr [D1FFAB1EH] ; static handle vmovups ymmword ptr [ebp-0x4C], ymm0 vmovups ymm0, ymmword ptr [D1FFAB1EH] ; static handle @@ -57,6 +58,7 @@ G_M16640_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {e xor edi, edi ;; size=40 bbWeight=1 PerfScore 13.75 G_M16640_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ ; byrRegs -[eax]
test edi, edi jl SHORT G_M16640_IG05 ;; size=4 bbWeight=4 PerfScore 5.00

+9 (+1.56%) : 6254.dasm - System.Collections.PerfFrozenDictionaryString:ToImmutableDictionary():System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]:this (FullOpts)

@@ -8,53 +8,54 @@ ; 0 inlinees with PGO data; 28 single block inlinees; 15 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T06] ( 3, 3 ) ref -> ecx this class-hnd single-def <System.Collections.Perf_FrozenDictionary_String> -; V01 tmp0 [V01,T01] ( 5, 8 ) ref -> esi class-hnd single-def "Inlining Arg" <<unknown class>> -; V02 tmp1 [V02,T15] ( 3, 2 ) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -; V04 tmp3 [V04,T08] ( 6, 3 ) ref -> esi class-hnd exact "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -; V05 tmp4 [V05,T12] ( 4, 2 ) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -; V06 tmp5 [V06,T09] ( 3, 3 ) ref -> ecx class-hnd "Inlining Arg" <<unknown class>> -; V07 tmp6 [V07,T04] ( 5, 5 ) ref -> edx class-hnd "Inlining Arg" <<unknown class>> -; V08 tmp7 [V08,T25] ( 2, 1 ) ref -> edi class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V09 tmp8 [V09,T00] ( 12, 12 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -;* V11 tmp10 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V12 tmp11 [V12,T03] ( 6, 6 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]>
+; V00 this [V00,T07] ( 3, 3 ) ref -> ecx this class-hnd single-def <System.Collections.Perf_FrozenDictionary_String> +; V01 tmp0 [V01,T02] ( 4, 7 ) ref -> esi class-hnd single-def "Inlining Arg" <<unknown class>> +; V02 tmp1 [V02,T17] ( 3, 2 ) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +; V03 tmp2 [V03,T08] ( 7, 4.50) ref -> edi class-hnd exact single-def "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +; V04 tmp3 [V04,T14] ( 4, 2 ) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +; V05 tmp4 [V05,T11] ( 3, 3 ) ref -> ecx class-hnd "Inlining Arg" <<unknown class>> +; V06 tmp5 [V06,T05] ( 5, 5 ) ref -> edx class-hnd "Inlining Arg" <<unknown class>> +; V07 tmp6 [V07,T27] ( 2, 1 ) ref -> esi class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V08 tmp7 [V08,T00] ( 12, 12 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +;* V09 tmp8 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +;* V10 tmp9 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V11 tmp10 [V11,T04] ( 6, 6 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +;* V12 tmp11 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]>
;* V13 tmp12 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]>
-;* V14 tmp13 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -; V15 tmp14 [V15,T21] ( 3, 1.50) ref -> edi class-hnd "Inline return value spill temp" <<unknown class>> -; V16 tmp15 [V16,T16] ( 2, 2 ) ref -> eax class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -; V17 tmp16 [V17,T07] ( 4, 4 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]> -; V18 tmp17 [V18,T19] ( 2, 2 ) int -> esi "Inlining Arg" -;* V19 tmp18 [V19 ] ( 0, 0 ) ref -> zero-ref single-def -; V20 tmp19 [V20,T26] ( 2, 1 ) ref -> edi -;* V21 tmp20 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V22 tmp21 [V22 ] ( 0, 0 ) ref -> zero-ref single-def -; V23 tmp22 [V23,T13] ( 4, 2 ) ref -> edi -;* V24 tmp23 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V25 tmp24 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -;* V26 tmp25 [V26 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> -; V27 tmp26 [V27 ] ( 3, 1.50) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationResult[System.String,System.String]> -;* V28 tmp27 [V28 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> -; V29 tmp28 [V29,T02] ( 7, 7 ) ref -> esi class-hnd exact single-def "impAppendStmt" <<unknown class>> -;* V30 tmp29 [V30 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V31 tmp30 [V31,T11] ( 5, 2.50) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -; V32 tmp31 [V32,T20] ( 2, 2 ) int -> edi "Inlining Arg" -; V33 tmp32 [V33,T05] ( 5, 5 ) ref -> [ebp-0x1C] class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -; V34 tmp33 [V34,T22] ( 3, 1.50) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> -; V35 tmp34 [V35,T10] ( 3, 3 ) ref -> edx class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> -;* V36 tmp35 [V36 ] ( 0, 0 ) ref -> zero-ref "field V26._root (fldOffset=0x0)" P-INDEP -;* V37 tmp36 [V37 ] ( 0, 0 ) ref -> zero-ref "field V26._comparers (fldOffset=0x4)" P-INDEP -; V38 tmp37 [V38 ] ( 2, 1 ) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V27._root (fldOffset=0x0)" P-DEP -; V39 tmp38 [V39 ] ( 2, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V27._countAdjustment (fldOffset=0x4)" P-DEP -; V40 tmp39 [V40,T27] ( 2, 1 ) ref -> ecx single-def "field V28._root (fldOffset=0x0)" P-INDEP -; V41 tmp40 [V41,T28] ( 2, 1 ) ref -> edx single-def "field V28._comparers (fldOffset=0x4)" P-INDEP -; V42 tmp41 [V42,T17] ( 2, 2 ) ref -> ecx single-def "argument with side effect" -; V43 tmp42 [V43,T18] ( 2, 2 ) ref -> ecx single-def "argument with side effect" -; V44 cse0 [V44,T23] ( 3, 1.50) ref -> edi "CSE - conservative" -; V45 cse1 [V45,T14] ( 4, 2 ) ref -> eax "CSE - conservative" -; V46 cse2 [V46,T24] ( 3, 1.50) int -> ecx "CSE - conservative"
+; V14 tmp13 [V14,T23] ( 3, 1.50) ref -> esi class-hnd "Inline return value spill temp" <<unknown class>> +; V15 tmp14 [V15,T18] ( 2, 2 ) ref -> eax class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> +; V16 tmp15 [V16,T09] ( 4, 4 ) ref -> [ebp-0x18] class-hnd exact spill-single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]> +; V17 tmp16 [V17,T21] ( 2, 2 ) int -> edi "Inlining Arg" +;* V18 tmp17 [V18 ] ( 0, 0 ) ref -> zero-ref single-def +; V19 tmp18 [V19,T28] ( 2, 1 ) ref -> esi +;* V20 tmp19 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V21 tmp20 [V21 ] ( 0, 0 ) ref -> zero-ref single-def +; V22 tmp21 [V22,T15] ( 4, 2 ) ref -> esi +;* V23 tmp22 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V24 tmp23 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +;* V25 tmp24 [V25 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> +; V26 tmp25 [V26 ] ( 3, 1.50) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inline stloc first use temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationResult[System.String,System.String]> +;* V27 tmp26 [V27 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+MutationInput[System.String,System.String]> +; V28 tmp27 [V28,T01] ( 7, 7 ) ref -> esi class-hnd exact single-def "impAppendStmt" <<unknown class>> +;* V29 tmp28 [V29 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V30 tmp29 [V30,T13] ( 5, 2.50) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +; V31 tmp30 [V31,T22] ( 2, 2 ) int -> edi "Inlining Arg" +; V32 tmp31 [V32,T06] ( 5, 5 ) ref -> [ebp-0x1C] class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +; V33 tmp32 [V33,T24] ( 3, 1.50) ref -> eax class-hnd "Inline return value spill temp" <System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]> +; V34 tmp33 [V34,T12] ( 3, 3 ) ref -> edx class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]> +;* V35 tmp34 [V35 ] ( 0, 0 ) ref -> zero-ref "field V25._root (fldOffset=0x0)" P-INDEP +;* V36 tmp35 [V36 ] ( 0, 0 ) ref -> zero-ref "field V25._comparers (fldOffset=0x4)" P-INDEP +; V37 tmp36 [V37 ] ( 2, 1 ) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V26._root (fldOffset=0x0)" P-DEP +; V38 tmp37 [V38 ] ( 2, 1 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V26._countAdjustment (fldOffset=0x4)" P-DEP +; V39 tmp38 [V39,T29] ( 2, 1 ) ref -> ecx single-def "field V27._root (fldOffset=0x0)" P-INDEP +; V40 tmp39 [V40,T30] ( 2, 1 ) ref -> edx single-def "field V27._comparers (fldOffset=0x4)" P-INDEP +; V41 tmp40 [V41,T19] ( 2, 2 ) ref -> ecx single-def "argument with side effect" +; V42 tmp41 [V42,T20] ( 2, 2 ) ref -> ecx single-def "argument with side effect" +; V43 cse0 [V43,T25] ( 3, 1.50) ref -> esi "CSE - conservative" +; V44 cse1 [V44,T16] ( 4, 2 ) ref -> eax "CSE - conservative" +; V45 cse2 [V45,T26] ( 3, 1.50) int -> ecx "CSE - conservative" +; V46 rat0 [V46,T03] ( 4, 6.50) ref -> edi "replacement local" +; V47 rat1 [V47,T10] ( 2, 4 ) int -> ecx "CSE for expectedClsNode"
; ; Lcl frame size = 16 @@ -68,59 +69,72 @@ G_M57422_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} xor eax, eax mov dword ptr [ebp-0x14], eax ;; size=14 bbWeight=1 PerfScore 5.75
-G_M57422_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
+G_M57422_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[ecx] mov esi, gword ptr [ecx+0x0C] ; gcrRegs +[esi] test esi, esi
- je G_M57422_IG15 - cmp dword ptr [esi], 0xD1FFAB1E - jne G_M57422_IG13 - ;; size=23 bbWeight=1 PerfScore 7.25 -G_M57422_IG03: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ je G_M57422_IG17 + mov edi, esi + ; gcrRegs +[edi] + mov ecx, 0xD1FFAB1E ; System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]
; gcrRegs -[ecx]
+ cmp dword ptr [edi], ecx + je SHORT G_M57422_IG04 + ;; size=22 bbWeight=1 PerfScore 7.75 +G_M57422_IG03: ; bbWeight=0.25, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[edi] + xor edi, edi + ; gcrRegs +[edi] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M57422_IG04: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref + test edi, edi + je G_M57422_IG15 + ;; size=8 bbWeight=1 PerfScore 1.25 +G_M57422_IG05: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[esi]
mov ecx, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[ecx] mov edx, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[edx]
- mov eax, gword ptr [esi+0x08]
+ mov eax, gword ptr [edi+0x08]
; gcrRegs +[eax]
- mov edi, gword ptr [eax+0x04] - ; gcrRegs +[edi] - cmp edi, ecx - jne G_M57422_IG05
+ mov esi, gword ptr [eax+0x04] + ; gcrRegs +[esi] + cmp esi, ecx + jne G_M57422_IG07
cmp gword ptr [eax+0x08], edx
- jne SHORT G_M57422_IG04 - mov eax, esi - jmp G_M57422_IG12
+ jne SHORT G_M57422_IG06 + mov eax, edi + jmp G_M57422_IG14
;; size=38 bbWeight=0.50 PerfScore 7.75
-G_M57422_IG04: ; bbWeight=0.50, gcrefRegs=000000C5 {eax edx esi edi}, byrefRegs=00000000 {}, byref
+G_M57422_IG06: ; bbWeight=0.50, gcrefRegs=000000C5 {eax edx esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[ecx] cmp byte ptr [eax], al test edx, edx
- je G_M57422_IG16 - mov ecx, edi
+ je G_M57422_IG18 + mov ecx, esi
; gcrRegs +[ecx] push 0xD1FFAB1E call [System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]:Get(System.Collections.Generic.IEqualityComparer`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]]
- ; gcrRegs -[ecx edx edi] - mov edi, eax - ; gcrRegs +[edi]
+ ; gcrRegs -[ecx edx esi] + mov esi, eax + ; gcrRegs +[esi]
mov ecx, 0xD1FFAB1E ; System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]
- call CORINFO_HELP_NEWSFAST
+ call CORINFO_HELP_NEWFAST_MAYBEFROZEN
mov ebx, eax ; gcrRegs +[ebx]
- mov eax, gword ptr [esi+0x04]
+ mov eax, gword ptr [edi+0x04]
mov gword ptr [ebp-0x18], eax
- ; GC ptr vars +{V17} - mov esi, dword ptr [esi+0x0C] - ; gcrRegs -[esi] - test edi, edi - je G_M57422_IG18
+ ; GC ptr vars +{V16} + mov edi, dword ptr [edi+0x0C] + ; gcrRegs -[edi] + test esi, esi + je G_M57422_IG20
lea edx, bword ptr [ebx+0x08] ; byrRegs +[edx]
- call CORINFO_HELP_ASSIGN_REF_EDI - ; gcrRegs -[edi]
+ call CORINFO_HELP_ASSIGN_REF_ESI + ; gcrRegs -[esi]
; byrRegs -[edx] mov ecx, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[ecx] @@ -130,7 +144,7 @@ G_M57422_IG04: ; bbWeight=0.50, gcrefRegs=000000C5 {eax edx esi edi}, byr ; gcrRegs -[ecx] ; byrRegs -[edx] test eax, eax
- je G_M57422_IG17
+ je G_M57422_IG19
mov edx, gword ptr [D1FFAB1EH] ; static handle ; gcrRegs +[edx] mov ecx, eax @@ -139,46 +153,46 @@ G_M57422_IG04: ; bbWeight=0.50, gcrefRegs=000000C5 {eax edx esi edi}, byr ; gcrRegs -[eax ecx edx] lea edx, bword ptr [ebx+0x04] ; byrRegs +[edx]
- mov edi, gword ptr [ebp-0x18] - ; gcrRegs +[edi] - ; GC ptr vars -{V17} - call CORINFO_HELP_ASSIGN_REF_EDI - ; gcrRegs -[edi]
+ mov esi, gword ptr [ebp-0x18] + ; gcrRegs +[esi] + ; GC ptr vars -{V16} + call CORINFO_HELP_ASSIGN_REF_ESI + ; gcrRegs -[esi]
; byrRegs -[edx]
- mov dword ptr [ebx+0x0C], esi
+ mov dword ptr [ebx+0x0C], edi
mov eax, ebx ; gcrRegs +[eax]
- jmp G_M57422_IG12
+ jmp G_M57422_IG14
;; size=119 bbWeight=0.50 PerfScore 16.88
-G_M57422_IG05: ; bbWeight=0.50, gcrefRegs=00000046 {ecx edx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax ebx] +[ecx edx esi]
+G_M57422_IG07: ; bbWeight=0.50, gcrefRegs=00000086 {ecx edx edi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[eax ebx] +[ecx edx edi]
push 0xD1FFAB1E call [System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]:Get(System.Collections.Generic.IEqualityComparer`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Immutable.ImmutableDictionary`2+Comparers[System.__Canon,System.__Canon]] ; gcrRegs -[ecx edx] +[eax]
- mov edi, eax - ; gcrRegs +[edi]
+ mov esi, eax + ; gcrRegs +[esi]
mov ecx, 0xD1FFAB1E ; System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]
- call CORINFO_HELP_NEWSFAST
+ call CORINFO_HELP_NEWFAST_MAYBEFROZEN
mov ebx, eax ; gcrRegs +[ebx] ...

+6 (+2.76%) : 6009.dasm - System.Linq.Enumerable:gEnumerableToArray|296_0[System.ValueTuple`2[System.Canon,System.Canon]](System.Collections.Generic.IEnumerable1[System.ValueTuple2[System.Canon,System.Canon]]):System.ValueTuple`2[System.Canon,System.__Canon]

@@ -8,12 +8,12 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T05] ( 3, 3 ) ref -> [ebp-0xE4] class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]> -; V01 TypeCtx [V01,T00] ( 7, 5.56) int -> ebx single-def
+; V00 arg0 [V00,T03] ( 3, 3 ) ref -> [ebp-0xE4] class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]> +; V01 TypeCtx [V01,T00] ( 8, 8 ) int -> ebx single-def
; V02 loc0 [V02 ] ( 1, 1 ) struct (64) [ebp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.ValueTuple`2[System.__Canon,System.__Canon]]> ; V03 loc1 [V03 ] ( 5, 5 ) struct (136) [ebp-0xD8] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1[System.ValueTuple`2[System.__Canon,System.__Canon]]>
-; V04 loc2 [V04,T12] ( 2, 2 ) ref -> edi class-hnd exact single-def <System.ValueTuple`2[System.__Canon,System.__Canon][]> -;* V05 loc3 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V04 loc2 [V04,T07] ( 2, 2 ) ref -> esi class-hnd exact single-def <System.ValueTuple`2[System.__Canon,System.__Canon][]> +; V05 loc3 [V05,T04] ( 2, 4 ) int -> edi "spilling helperCall"
;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V07 tmp2 [V07 ] ( 3, 6 ) struct ( 8) [ebp-0xE0] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" <System.Span`1[System.ValueTuple`2[System.__Canon,System.__Canon]]> ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -24,14 +24,8 @@ ; V13 tmp8 [V13,T02] ( 3, 6 ) int -> [ebp-0xDC] do-not-enreg[H] hidden-struct-arg "field V07._length (fldOffset=0x4)" P-DEP ;* V14 tmp9 [V14 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x4)" P-INDEP
-; V16 tmp11 [V16,T10] ( 2, 4 ) int -> edx "argument with side effect" -; V17 tmp12 [V17,T11] ( 2, 4 ) int -> edx "argument with side effect" -; V18 cse0 [V18,T07] ( 4, 4 ) int -> esi "CSE - aggressive" -; V19 rat0 [V19,T08] ( 3, 4 ) int -> eax "runtime lookup" -; V20 rat1 [V20,T03] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable" -; V21 rat2 [V21,T09] ( 3, 4 ) int -> esi "runtime lookup" -; V22 rat3 [V22,T04] ( 3, 5.60) int -> ecx "spilling expr" -; V23 rat4 [V23,T06] ( 3, 4.48) int -> esi "fgMakeTemp is creating a new local variable"
+; V16 tmp11 [V16,T05] ( 2, 4 ) int -> edx "argument with side effect" +; V17 tmp12 [V17,T06] ( 2, 4 ) int -> edx "argument with side effect"
; ; Lcl frame size = 216 @@ -52,25 +46,18 @@ G_M13440_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; GC ptr vars +{V00} mov ebx, edx ;; size=62 bbWeight=1 PerfScore 15.08
-G_M13440_IG02: ; bbWeight=1, gcVars=00000020 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - mov ecx, dword ptr [ebx+0x20] - mov eax, dword ptr [ecx+0x08] - test eax, eax - je SHORT G_M13440_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M13440_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M13440_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M13440_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13440_IG02: ; bbWeight=1, gcVars=00000008 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M13440_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ call CORINFO_HELP_MEMCPY + mov edi, eax + mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY
push 8
- push eax - lea edx, [ebp-0x50]
+ push edi
lea ecx, [ebp-0xE0]
+ lea edx, [ebp-0x50]
call [<PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.ValueTuple`2[System.__Canon,System.__Canon]],System.ValueTuple`2[System.__Canon,System.__Canon]](byref,int):System.Span`1[System.ValueTuple`2[System.__Canon,System.__Canon]]] lea edi, bword ptr [ebp-0x60] ; byrRegs +[edi] @@ -82,47 +69,37 @@ G_M13440_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea esi, bword ptr [ebp-0xE0] movsd movsd
- mov ecx, dword ptr [ebx+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M13440_IG08 - ;; size=49 bbWeight=1 PerfScore 18.00 -G_M13440_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - ; byrRegs -[esi edi] - mov esi, dword ptr [ecx+0x0C] - test esi, esi - je SHORT G_M13440_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M13440_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M13440_IG09 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M13440_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov esi, eax - ;; size=14 bbWeight=0.36 PerfScore 0.63 -G_M13440_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - push esi
+ call CORINFO_HELP_MEMCPY + ; byrRegs -[esi edi] + push eax
lea ecx, [ebp-0xD8] mov edx, gword ptr [ebp-0xE4] ; gcrRegs +[edx] ; GC ptr vars -{V00} call [<unknown method>] ; gcrRegs -[edx]
- mov edx, esi
+ mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov edx, eax
lea ecx, [ebp-0xD8] call [System.Collections.Generic.SegmentedArrayBuilder`1[System.ValueTuple`2[System.__Canon,System.__Canon]]:ToArray():System.ValueTuple`2[System.__Canon,System.__Canon][]:this] ; gcrRegs +[eax]
- mov edi, eax - ; gcrRegs +[edi] - mov edx, esi
+ mov esi, eax + ; gcrRegs +[esi] + mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax] + mov edx, eax
lea ecx, [ebp-0xD8] call [System.Collections.Generic.SegmentedArrayBuilder`1[System.ValueTuple`2[System.__Canon,System.__Canon]]:Dispose():this]
- ; gcrRegs -[eax] - mov eax, edi
+ mov eax, esi
; gcrRegs +[eax]
- ;; size=51 bbWeight=1 PerfScore 13.50 -G_M13440_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=153 bbWeight=1 PerfScore 33.25 +G_M13440_IG03: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -131,6 +108,6 @@ G_M13440_IG10: ; bbWeight=1, epilog, nogc, extend ret ;; size=8 bbWeight=1 PerfScore 3.50
-; Total bytes of code 217, prolog size 54, PerfScore 61.74, instruction count 64, allocated bytes for code 217 (MethodHash=1d88cb7f) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
+; Total bytes of code 223, prolog size 54, PerfScore 51.83, instruction count 61, allocated bytes for code 223 (MethodHash=1d88cb7f) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
; ============================================================

benchmarks.run_pgo.windows.x86.checked.mch

-26 (-34.67%) : 2373.dasm - System.Linq.Enumerable:DistinctSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -19,26 +19,11 @@ G_M34864_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov gword ptr [ebp-0x08], ecx mov dword ptr [ebp-0x0C], edx ;; size=15 bbWeight=1 PerfScore 4.50
-G_M34864_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x08], 0 - je SHORT G_M34864_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M34864_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x08] - mov dword ptr [ebp-0x10], eax - jmp SHORT G_M34864_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M34864_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M34864_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x0C] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x10], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M34864_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
push dword ptr [ebp-0x10] mov ecx, gword ptr [ebp-0x08] ; gcrRegs +[ecx] @@ -46,13 +31,13 @@ G_M34864_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx] +[eax]
- ;; size=14 bbWeight=1 PerfScore 5.25 -G_M34864_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=30 bbWeight=1 PerfScore 8.50 +G_M34864_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 75, prolog size 9, PerfScore 25.55, instruction count 26, allocated bytes for code 75 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Instrumented Tier0)
+; Total bytes of code 49, prolog size 9, PerfScore 14.75, instruction count 17, allocated bytes for code 49 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Instrumented Tier0)
; ============================================================

-26 (-34.67%) : 1624.dasm - System.Linq.Enumerable:DistinctSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -19,26 +19,11 @@ G_M34864_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov gword ptr [ebp-0x08], ecx mov dword ptr [ebp-0x0C], edx ;; size=15 bbWeight=1 PerfScore 4.50
-G_M34864_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x08], 0 - je SHORT G_M34864_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M34864_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x08] - mov dword ptr [ebp-0x10], eax - jmp SHORT G_M34864_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M34864_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M34864_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x0C] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x10], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M34864_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
push dword ptr [ebp-0x10] mov ecx, gword ptr [ebp-0x08] ; gcrRegs +[ecx] @@ -46,13 +31,13 @@ G_M34864_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx] +[eax]
- ;; size=14 bbWeight=1 PerfScore 5.25 -G_M34864_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=30 bbWeight=1 PerfScore 8.50 +G_M34864_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 75, prolog size 9, PerfScore 25.55, instruction count 26, allocated bytes for code 75 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
+; Total bytes of code 49, prolog size 9, PerfScore 14.75, instruction count 17, allocated bytes for code 49 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
; ============================================================

-26 (-34.21%) : 598.dasm - System.Linq.Enumerable:FirstOrDefaultSystem.__Canon:System.__Canon (Tier0)

@@ -20,39 +20,24 @@ G_M56297_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov gword ptr [ebp-0x08], ecx mov dword ptr [ebp-0x0C], edx ;; size=15 bbWeight=1 PerfScore 4.50
-G_M56297_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x08], 0 - je SHORT G_M56297_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M56297_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x08] - mov dword ptr [ebp-0x14], eax - jmp SHORT G_M56297_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M56297_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M56297_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x0C] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x14], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M56297_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
push dword ptr [ebp-0x14] lea edx, [ebp-0x10] mov ecx, gword ptr [ebp-0x08] ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] +[eax]
- ;; size=15 bbWeight=1 PerfScore 5.50 -G_M56297_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=31 bbWeight=1 PerfScore 8.75 +G_M56297_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 76, prolog size 9, PerfScore 25.80, instruction count 26, allocated bytes for code 76 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier0)
+; Total bytes of code 50, prolog size 9, PerfScore 15.00, instruction count 17, allocated bytes for code 50 (MethodHash=51852416) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier0)
; ============================================================

-2 (-0.62%) : 13452.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,26 +9,26 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 10, 4 ) ref -> esi this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T04] ( 3, 2.07) int -> edx single-def
+; V00 this [V00,T00] ( 10, 4 ) ref -> esi this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T03] ( 3, 2.07) int -> edx single-def
; V02 arg2 [V02,T11] ( 2, 1.07) int -> ecx single-def ; V03 arg3 [V03,T12] ( 2, 1.07) int -> ebx single-def ; V04 arg4 [V04,T13] ( 2, 1.07) int -> [ebp+0x10] single-def ; V05 arg5 [V05,T14] ( 1, 1 ) int -> [ebp+0x0C] single-def ; V06 arg6 [V06,T08] ( 2, 2 ) int -> edi single-def
-; V07 loc0 [V07,T05] ( 10, 4 ) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> -; V08 loc1 [V08,T07] ( 10, 3.25) ref -> ebx class-hnd <<unknown class>> -; V09 tmp0 [V09,T06] ( 4, 3.50) int -> edx "spilling helperCall" -;* V10 tmp1 [V10 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V11 tmp2 [V11,T00] ( 5, 7.50) ref -> eax class-hnd "spilling QMark2" <System.__Canon[]> -; V12 tmp3 [V12,T15] ( 2, 0.27) ref -> eax class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V13 tmp4 [V13 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V15 tmp6 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V16 tmp7 [V16,T09] ( 2, 2 ) int -> ebx "field V15.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V17 tmp8 [V17,T10] ( 2, 2 ) int -> eax "field V15.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V18 rat0 [V18,T03] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" -; V19 rat1 [V19,T02] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 loc0 [V07,T04] ( 10, 4 ) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T07] ( 9, 3.00) ref -> ebx class-hnd <<unknown class>> +;* V09 tmp0 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V10 tmp1 [V10,T15] ( 2, 0.27) ref -> eax class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V12 tmp3 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V13 tmp4 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V14 tmp5 [V14,T09] ( 2, 2 ) int -> ebx "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V15 tmp6 [V15,T10] ( 2, 2 ) int -> eax "field V13.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V16 tmp7 [V16,T06] ( 2, 4 ) int -> ecx "argument with side effect" +; V17 rat0 [V17,T02] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" +; V18 rat1 [V18,T05] ( 3, 4 ) int -> ecx "runtime lookup" +; V19 rat2 [V19,T01] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 12 @@ -45,10 +45,10 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, dword ptr [ebp+0x14] mov edi, dword ptr [ebp+0x08] ;; size=20 bbWeight=1 PerfScore 7.75
-G_M33863_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
test ecx, ecx
- jne SHORT G_M33863_IG07 - ;; size=4 bbWeight=1 PerfScore 1.25
+ jne G_M33863_IG11 + ;; size=8 bbWeight=1 PerfScore 1.25
G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref mov eax, dword ptr [ebp+0x10] mov dword ptr [ebp-0x18], ebx @@ -58,7 +58,7 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 xor ebx, ebx ; gcrRegs +[ebx] cmp edi, 6
- ja G_M33863_IG19
+ ja G_M33863_IG16
lea ecx, [@RWD00] mov ecx, dword ptr [ecx+4*edi] lea eax, G_M33863_IG02 @@ -67,45 +67,16 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ;; size=45 bbWeight=1 PerfScore 12.25 G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov edx, eax - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M33863_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz - mov eax, ebx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M33863_IG10 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 1.00 -G_M33863_IG07: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax ebx] - mov eax, gword ptr [D1FFAB1EH] ; static handle - ; gcrRegs +[eax] - push ecx - push ebx - push dword ptr [ebp+0x10]
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
mov ecx, eax
- ; gcrRegs +[ecx] - call [System.Text.UTF8Encoding:GetBytes(uint,int,uint,int):int:this] - ; gcrRegs -[eax ecx] - jmp SHORT G_M33863_IG03 - ;; size=20 bbWeight=0.07 PerfScore 0.68 -G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[eax ebx] - cmp dword ptr [eax], edx - je SHORT G_M33863_IG10 - ;; size=4 bbWeight=0.50 PerfScore 2.00 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov ecx, edx
+ ;; size=12 bbWeight=0.20 PerfScore 0.30 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
mov edx, ebx ; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx ebx] +[eax]
- ;; size=9 bbWeight=0.25 PerfScore 0.38 -G_M33863_IG10: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=7 bbWeight=1 PerfScore 1.25 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -113,19 +84,20 @@ G_M33863_IG10: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=0000 pop ebp ret 20 ;; size=10 bbWeight=1 PerfScore 4.50
-G_M33863_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[ebx] mov ecx, dword ptr [esi] mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx]
- mov edx, dword ptr [edx+0x0C] - test edx, edx
+ mov eax, dword ptr [edx+0x0C] + test eax, eax
je SHORT G_M33863_IG04 ;; size=14 bbWeight=1 PerfScore 9.25
-G_M33863_IG12: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz + mov ecx, eax
jmp SHORT G_M33863_IG05
- ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M33863_IG13: ; bbWeight=0.53, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=4 bbWeight=0.80 PerfScore 1.80 +G_M33863_IG09: ; bbWeight=0.53, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -136,9 +108,9 @@ G_M33863_IG13: ; bbWeight=0.53, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0.53 PerfScore 4.53
-G_M33863_IG14: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG10: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -149,10 +121,22 @@ G_M33863_IG14: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0.40 PerfScore 3.40
-G_M33863_IG15: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG11: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax ebx]
+ mov eax, gword ptr [D1FFAB1EH] ; static handle + ; gcrRegs +[eax] + push ecx + push ebx + push dword ptr [ebp+0x10] + mov ecx, eax + ; gcrRegs +[ecx] + call [System.Text.UTF8Encoding:GetBytes(uint,int,uint,int):int:this] + ; gcrRegs -[eax ecx] + jmp G_M33863_IG03 + ;; size=23 bbWeight=0.07 PerfScore 0.68 +G_M33863_IG12: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] push dword ptr [ebp-0x18] @@ -162,9 +146,9 @@ G_M33863_IG15: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0.07 PerfScore 0.57
-G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -175,9 +159,9 @@ G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0 PerfScore 0.00
-G_M33863_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG14: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -188,22 +172,22 @@ G_M33863_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11 - ;; size=21 bbWeight=0 PerfScore 0.00 -G_M33863_IG18: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax ebx] - push dword ptr [ebp-0x10] - push dword ptr [ebp-0x14] - push dword ptr [ebp-0x18] - mov ecx, esi - ; gcrRegs +[ecx] - call [<unknown method>] - ; gcrRegs -[ecx] +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - jmp G_M33863_IG11
+ jmp G_M33863_IG07
;; size=24 bbWeight=0 PerfScore 0.00
-G_M33863_IG19: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+G_M33863_IG15: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax ebx] + push dword ptr [ebp-0x10] + push dword ptr [ebp-0x14] + push dword ptr [ebp-0x18] + mov ecx, esi + ; gcrRegs +[ecx] + call [<unknown method>] + ; gcrRegs -[ecx] +[eax] + mov ebx, eax + ; gcrRegs +[ebx] + jmp G_M33863_IG07 + ;; size=24 bbWeight=0 PerfScore 0.00 +G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] @@ -211,9 +195,9 @@ G_M33863_IG19: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=0000 ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx]
- jmp G_M33863_IG11
+ jmp G_M33863_IG07
;; size=21 bbWeight=0 PerfScore 0.00 ...

-2 (-0.62%) : 14308.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,26 +9,26 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 10, 4 ) ref -> esi this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T04] ( 3, 2.07) int -> edx single-def
+; V00 this [V00,T00] ( 10, 4 ) ref -> esi this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T03] ( 3, 2.07) int -> edx single-def
; V02 arg2 [V02,T11] ( 2, 1.07) int -> ecx single-def ; V03 arg3 [V03,T12] ( 2, 1.07) int -> ebx single-def ; V04 arg4 [V04,T13] ( 2, 1.07) int -> [ebp+0x10] single-def ; V05 arg5 [V05,T14] ( 1, 1 ) int -> [ebp+0x0C] single-def ; V06 arg6 [V06,T08] ( 2, 2 ) int -> edi single-def
-; V07 loc0 [V07,T05] ( 10, 4 ) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> -; V08 loc1 [V08,T07] ( 10, 3.25) ref -> ebx class-hnd <<unknown class>> -; V09 tmp0 [V09,T06] ( 4, 3.50) int -> edx "spilling helperCall" -;* V10 tmp1 [V10 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V11 tmp2 [V11,T00] ( 5, 7.50) ref -> eax class-hnd "spilling QMark2" <System.__Canon[]> -; V12 tmp3 [V12,T15] ( 2, 0.27) ref -> eax class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V13 tmp4 [V13 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V15 tmp6 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V16 tmp7 [V16,T09] ( 2, 2 ) int -> ebx "field V15.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V17 tmp8 [V17,T10] ( 2, 2 ) int -> eax "field V15.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V18 rat0 [V18,T03] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" -; V19 rat1 [V19,T02] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 loc0 [V07,T04] ( 10, 4 ) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T07] ( 9, 3.00) ref -> ebx class-hnd <<unknown class>> +;* V09 tmp0 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +; V10 tmp1 [V10,T15] ( 2, 0.27) ref -> eax class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V12 tmp3 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V13 tmp4 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V14 tmp5 [V14,T09] ( 2, 2 ) int -> ebx "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V15 tmp6 [V15,T10] ( 2, 2 ) int -> eax "field V13.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V16 tmp7 [V16,T06] ( 2, 4 ) int -> ecx "argument with side effect" +; V17 rat0 [V17,T02] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" +; V18 rat1 [V18,T05] ( 3, 4 ) int -> ecx "runtime lookup" +; V19 rat2 [V19,T01] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 12 @@ -45,10 +45,10 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebx, dword ptr [ebp+0x14] mov edi, dword ptr [ebp+0x08] ;; size=20 bbWeight=1 PerfScore 7.75
-G_M33863_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
test ecx, ecx
- jne SHORT G_M33863_IG07 - ;; size=4 bbWeight=1 PerfScore 1.25
+ jne G_M33863_IG11 + ;; size=8 bbWeight=1 PerfScore 1.25
G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref mov eax, dword ptr [ebp+0x10] mov dword ptr [ebp-0x18], ebx @@ -58,7 +58,7 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 xor ebx, ebx ; gcrRegs +[ebx] cmp edi, 6
- ja G_M33863_IG19
+ ja G_M33863_IG16
lea ecx, [@RWD00] mov ecx, dword ptr [ecx+4*edi] lea eax, G_M33863_IG02 @@ -67,45 +67,16 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ;; size=45 bbWeight=1 PerfScore 12.25 G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov edx, eax - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M33863_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz - mov eax, ebx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M33863_IG10 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 1.00 -G_M33863_IG07: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax ebx] - mov eax, gword ptr [D1FFAB1EH] ; static handle - ; gcrRegs +[eax] - push ecx - push ebx - push dword ptr [ebp+0x10]
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
mov ecx, eax
- ; gcrRegs +[ecx] - call [System.Text.UTF8Encoding:GetBytes(uint,int,uint,int):int:this] - ; gcrRegs -[eax ecx] - jmp SHORT G_M33863_IG03 - ;; size=20 bbWeight=0.07 PerfScore 0.68 -G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[eax ebx] - cmp dword ptr [eax], edx - je SHORT G_M33863_IG10 - ;; size=4 bbWeight=0.50 PerfScore 2.00 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov ecx, edx
+ ;; size=12 bbWeight=0.20 PerfScore 0.30 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
mov edx, ebx ; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx ebx] +[eax]
- ;; size=9 bbWeight=0.25 PerfScore 0.38 -G_M33863_IG10: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=7 bbWeight=1 PerfScore 1.25 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -113,19 +84,20 @@ G_M33863_IG10: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=0000 pop ebp ret 20 ;; size=10 bbWeight=1 PerfScore 4.50
-G_M33863_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[ebx] mov ecx, dword ptr [esi] mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx]
- mov edx, dword ptr [edx+0x0C] - test edx, edx
+ mov eax, dword ptr [edx+0x0C] + test eax, eax
je SHORT G_M33863_IG04 ;; size=14 bbWeight=1 PerfScore 9.25
-G_M33863_IG12: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz + mov ecx, eax
jmp SHORT G_M33863_IG05
- ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M33863_IG13: ; bbWeight=0.53, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ;; size=4 bbWeight=0.80 PerfScore 1.80 +G_M33863_IG09: ; bbWeight=0.53, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -136,9 +108,9 @@ G_M33863_IG13: ; bbWeight=0.53, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0.53 PerfScore 4.53
-G_M33863_IG14: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG10: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -149,10 +121,22 @@ G_M33863_IG14: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0.40 PerfScore 3.40
-G_M33863_IG15: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG11: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax ebx]
+ mov eax, gword ptr [D1FFAB1EH] ; static handle + ; gcrRegs +[eax] + push ecx + push ebx + push dword ptr [ebp+0x10] + mov ecx, eax + ; gcrRegs +[ecx] + call [System.Text.UTF8Encoding:GetBytes(uint,int,uint,int):int:this] + ; gcrRegs -[eax ecx] + jmp G_M33863_IG03 + ;; size=23 bbWeight=0.07 PerfScore 0.68 +G_M33863_IG12: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] push dword ptr [ebp-0x18] @@ -162,9 +146,9 @@ G_M33863_IG15: ; bbWeight=0.07, gcrefRegs=00000040 {esi}, byrefRegs=00000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0.07 PerfScore 0.57
-G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -175,9 +159,9 @@ G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11
+ jmp SHORT G_M33863_IG07
;; size=21 bbWeight=0 PerfScore 0.00
-G_M33863_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M33863_IG14: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax ebx] push dword ptr [ebp-0x10] push dword ptr [ebp-0x14] @@ -188,22 +172,22 @@ G_M33863_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 ; gcrRegs -[ecx] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp SHORT G_M33863_IG11 - ;; size=21 bbWeight=0 PerfScore 0.00 -G_M33863_IG18: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax ebx] - push dword ptr [ebp-0x10] - push dword ptr [ebp-0x14] - push dword ptr [ebp-0x18] - mov ecx, esi - ; gcrRegs +[ecx] - call [<unknown method>] - ; gcrRegs -[ecx] +[eax] - mov ebx, eax - ; gcrRegs +[ebx] - jmp G_M33863_IG11
+ jmp G_M33863_IG07
;; size=24 bbWeight=0 PerfScore 0.00
-G_M33863_IG19: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+G_M33863_IG15: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax ebx] + push dword ptr [ebp-0x10] + push dword ptr [ebp-0x14] + push dword ptr [ebp-0x18] + mov ecx, esi + ; gcrRegs +[ecx] + call [<unknown method>] + ; gcrRegs -[ecx] +[eax] + mov ebx, eax + ; gcrRegs +[ebx] + jmp G_M33863_IG07 + ;; size=24 bbWeight=0 PerfScore 0.00 +G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] @@ -211,9 +195,9 @@ G_M33863_IG19: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=0000 ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx]
- jmp G_M33863_IG11
+ jmp G_M33863_IG07
;; size=21 bbWeight=0 PerfScore 0.00 ...

+9 (+2.82%) : 4813.dasm - Jil.Common.ExtensionMethods+<>cDisplayClass65_0:b0(System.Type):ubyte:this (Tier1)

@@ -5,36 +5,37 @@ ; optimized using Dynamic PGO ; ebp based frame ; partially interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 50
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 50
; 7 inlinees with PGO data; 7 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T01] ( 3, 2.34) ref -> edi this class-hnd single-def <Jil.Common.ExtensionMethods+<>c__DisplayClass65_0> ; V01 arg1 [V01,T00] ( 9, 4.68) ref -> esi class-hnd single-def <System.Type>
-; V02 tmp0 [V02,T13] ( 7, 1.35) ref -> ebx "guarded devirt return temp"
+; V02 tmp0 [V02,T14] ( 7, 1.35) ref -> ebx "guarded devirt return temp"
;* V03 tmp1 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> ;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Reflection.TypeInfo>
-; V05 tmp3 [V05,T09] ( 3, 2 ) int -> eax "guarded devirt return temp"
+; V05 tmp3 [V05,T10] ( 3, 2 ) int -> eax "guarded devirt return temp"
;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> ; V07 tmp5 [V07,T02] ( 7, 4 ) ref -> ecx class-hnd "Inline return value spill temp" <System.Reflection.TypeInfo> ; V08 tmp6 [V08,T03] ( 5, 4 ) ref -> ecx class-hnd single-def "Inline stloc first use temp" <System.Reflection.IReflectableType>
-; V09 tmp7 [V09,T16] ( 3, 0 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator> -; V10 tmp8 [V10,T08] ( 3, 2 ) ref -> ecx "guarded devirt return temp"
+; V09 tmp7 [V09,T17] ( 3, 0 ) ref -> ebx class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator> +; V10 tmp8 [V10,T09] ( 3, 2 ) ref -> ecx "guarded devirt return temp"
;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> ;* V12 tmp10 [V12 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle>
-; V13 tmp11 [V13,T10] ( 3, 2 ) int -> ebx -; V14 tmp12 [V14,T12] ( 2, 2 ) ubyte -> eax "Inline stloc first use temp"
+; V13 tmp11 [V13,T11] ( 3, 2 ) int -> ebx +; V14 tmp12 [V14,T13] ( 2, 2 ) ubyte -> eax "Inline stloc first use temp"
;* V15 tmp13 [V15 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> ;* V16 tmp14 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V17 tmp15 [V17 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V18 tmp16 [V18,T11] ( 3, 2 ) ubyte -> ebx "Inline return value spill temp"
+; V18 tmp16 [V18,T12] ( 3, 2 ) ubyte -> ebx "Inline return value spill temp"
; V19 tmp17 [V19,T04] ( 2, 4 ) byref -> eax single-def "Inlining Arg"
-; V20 tmp18 [V20,T15] ( 4, 0.68) ubyte -> eax "Inline return value spill temp" -; V21 tmp19 [V21,T07] ( 5, 2.03) ref -> edi class-hnd single-def "Inlining Arg" <System.Type> -;* V22 tmp20 [V22,T14] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "field V12.m_asTAddr (fldOffset=0x0)" P-INDEP -; V24 tmp22 [V24,T05] ( 3, 3 ) int -> eax "field V15.m_asTAddr (fldOffset=0x0)" P-INDEP -; V25 cse0 [V25,T06] ( 3, 3 ) int -> eax "CSE - moderate"
+; V20 tmp18 [V20,T16] ( 4, 0.68) ubyte -> eax "Inline return value spill temp" +; V21 tmp19 [V21,T08] ( 5, 2.03) ref -> edi class-hnd single-def "Inlining Arg" <System.Type> +;* V22 tmp20 [V22 ] ( 0, 0 ) int -> zero-ref "field V12.m_asTAddr (fldOffset=0x0)" P-INDEP +; V23 tmp21 [V23,T05] ( 3, 3 ) int -> eax "field V15.m_asTAddr (fldOffset=0x0)" P-INDEP +; V24 cse0 [V24,T06] ( 3, 3 ) int -> eax "CSE - moderate" +; V25 rat0 [V25,T07] ( 4, 2.19) ref -> eax "replacement local" +; V26 rat1 [V26,T15] ( 2, 1.35) int -> ecx "CSE for expectedClsNode"
; ; Lcl frame size = 0 @@ -51,29 +52,29 @@ G_M39562_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ;; size=10 bbWeight=1 PerfScore 4.75 G_M39562_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref test esi, esi
- je G_M39562_IG14
+ je G_M39562_IG16
mov edx, esi ; gcrRegs +[edx] mov ecx, 0xD1FFAB1E ; System.Reflection.IReflectableType
- call CORINFO_HELP_ISINSTANCEOFINTERFACE
+ call CORINFO_HELP_INITINSTCLASS
; gcrRegs -[edx] +[eax] mov ecx, eax ; gcrRegs +[ecx] test ecx, ecx
- je G_M39562_IG16
+ je G_M39562_IG18
cmp dword ptr [ecx], 0xD1FFAB1E
- jne G_M39562_IG15
+ jne G_M39562_IG17
;; size=42 bbWeight=1 PerfScore 8.25 G_M39562_IG03: ; bbWeight=1, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref ; gcrRegs -[eax] cmp dword ptr [ecx], 0xD1FFAB1E
- jne G_M39562_IG19
+ jne G_M39562_IG21
mov eax, dword ptr [ecx+0x0C] test al, 2
- jne G_M39562_IG18
+ jne G_M39562_IG20
mov eax, dword ptr [eax] test eax, 0xD1FFAB1E
- jne G_M39562_IG17
+ jne G_M39562_IG19
xor ebx, ebx test al, 48 setne bl @@ -84,11 +85,23 @@ G_M39562_IG04: ; bbWeight=1, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs= G_M39562_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[ecx] test eax, eax
- je SHORT G_M39562_IG11
+ jne SHORT G_M39562_IG08
;; size=4 bbWeight=1 PerfScore 1.25
-G_M39562_IG06: ; bbWeight=0.34, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+G_M39562_IG06: ; bbWeight=0.66, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[esi edi] + xor eax, eax + ;; size=2 bbWeight=0.66 PerfScore 0.17 +G_M39562_IG07: ; bbWeight=0.66, epilog, nogc, extend + pop ebx + pop esi + pop edi + pop ebp + ret + ;; size=5 bbWeight=0.66 PerfScore 1.98 +G_M39562_IG08: ; bbWeight=0.34, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs +[esi edi]
cmp dword ptr [esi], 0xD1FFAB1E
- jne G_M39562_IG20
+ jne G_M39562_IG22
mov ecx, esi ; gcrRegs +[ecx] call [System.RuntimeType:GetGenericTypeDefinition():System.Type:this] @@ -96,49 +109,51 @@ G_M39562_IG06: ; bbWeight=0.34, gcrefRegs=000000C0 {esi edi}, byrefRegs=0 mov ebx, eax ; gcrRegs +[ebx] ;; size=22 bbWeight=0.34 PerfScore 2.55
-G_M39562_IG07: ; bbWeight=0.34, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+G_M39562_IG09: ; bbWeight=0.34, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] mov edi, gword ptr [edi+0x04] cmp ebx, edi
- je SHORT G_M39562_IG13
+ je SHORT G_M39562_IG15
;; size=7 bbWeight=0.34 PerfScore 1.10
-G_M39562_IG08: ; bbWeight=0.34, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+G_M39562_IG10: ; bbWeight=0.34, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
test ebx, ebx
- je SHORT G_M39562_IG09
+ je SHORT G_M39562_IG13
test edi, edi
- je SHORT G_M39562_IG09 - cmp dword ptr [ebx], 0xD1FFAB1E - jne G_M39562_IG21 - ;; size=20 bbWeight=0.34 PerfScore 2.19 -G_M39562_IG09: ; bbWeight=0.34, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx edi]
+ je SHORT G_M39562_IG13 + mov eax, ebx + ; gcrRegs +[eax] + mov ecx, 0xD1FFAB1E ; System.RuntimeType + cmp dword ptr [eax], ecx + je SHORT G_M39562_IG12 + ;; size=19 bbWeight=0.34 PerfScore 2.36 +G_M39562_IG11: ; bbWeight=0.08, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax] + xor eax, eax + ; gcrRegs +[eax] + ;; size=2 bbWeight=0.08 PerfScore 0.02 +G_M39562_IG12: ; bbWeight=0.34, gcrefRegs=00000089 {eax ebx edi}, byrefRegs=00000000 {}, byref + test eax, eax + je G_M39562_IG23 + ;; size=8 bbWeight=0.34 PerfScore 0.42 +G_M39562_IG13: ; bbWeight=0.34, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[eax ebx edi]
xor eax, eax ;; size=2 bbWeight=0.34 PerfScore 0.08
-G_M39562_IG10: ; bbWeight=0.34, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M39562_IG14: ; bbWeight=0.34, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ebx pop esi pop edi pop ebp ret ;; size=5 bbWeight=0.34 PerfScore 1.02
-G_M39562_IG11: ; bbWeight=0.66, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref - xor eax, eax - ;; size=2 bbWeight=0.66 PerfScore 0.17 -G_M39562_IG12: ; bbWeight=0.66, epilog, nogc, extend - pop ebx - pop esi - pop edi - pop ebp - ret - ;; size=5 bbWeight=0.66 PerfScore 1.98 -G_M39562_IG13: ; bbWeight=0.00, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M39562_IG15: ; bbWeight=0.00, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
mov eax, 1
- jmp SHORT G_M39562_IG10
+ jmp SHORT G_M39562_IG14
;; size=7 bbWeight=0.00 PerfScore 0.01
-G_M39562_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M39562_IG16: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 0xC40 mov edx, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
+ call CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[eax] mov ecx, eax ; gcrRegs +[ecx] @@ -146,7 +161,7 @@ G_M39562_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs -[eax ecx] int3 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M39562_IG15: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
+G_M39562_IG17: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs +[ecx esi edi] call [<unknown method>] ; gcrRegs -[ecx] +[eax] @@ -154,10 +169,10 @@ G_M39562_IG15: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs= ; gcrRegs +[ecx] jmp G_M39562_IG03 ;; size=13 bbWeight=0 PerfScore 0.00
-G_M39562_IG16: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+G_M39562_IG18: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax ecx] mov ecx, 0xD1FFAB1E ; System.Reflection.TypeDelegator
- call CORINFO_HELP_NEWSFAST
+ call CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[eax] mov ebx, eax ; gcrRegs +[ebx] @@ -171,23 +186,23 @@ G_M39562_IG16: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 ; gcrRegs +[ecx] jmp G_M39562_IG03 ;; size=29 bbWeight=0 PerfScore 0.00
-G_M39562_IG17: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
+G_M39562_IG19: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[ebx] xor ebx, ebx jmp G_M39562_IG04 ;; size=7 bbWeight=0 PerfScore 0.00
-G_M39562_IG18: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
+G_M39562_IG20: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
xor ebx, ebx jmp G_M39562_IG04 ;; size=7 bbWeight=0 PerfScore 0.00
-G_M39562_IG19: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
+G_M39562_IG21: ; bbWeight=0, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref
mov eax, dword ptr [ecx] mov eax, dword ptr [eax+0x3C] call [eax+0x04]<unknown method> ; gcrRegs -[ecx] jmp G_M39562_IG05 ;; size=13 bbWeight=0 PerfScore 0.00
-G_M39562_IG20: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+G_M39562_IG22: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov ecx, esi ; gcrRegs +[ecx] mov eax, dword ptr [esi] @@ -196,17 +211,17 @@ G_M39562_IG20: ; bbWeight=0, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 ; gcrRegs -[ecx esi] +[eax] mov ebx, eax ; gcrRegs +[ebx]
- jmp G_M39562_IG07
+ jmp G_M39562_IG09
;; size=17 bbWeight=0 PerfScore 0.00 ...

benchmarks.run_tiered.windows.x86.checked.mch

-26 (-36.62%) : 7473.dasm - Microsoft.Extensions.DependencyInjection.ServiceDescriptor:SingletonSystem.Canon,System.Canon:Microsoft.Extensions.DependencyInjection.ServiceDescriptor (Tier0)

@@ -17,39 +17,24 @@ G_M34046_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x04], ecx mov dword ptr [ebp-0x08], ecx ;; size=12 bbWeight=1 PerfScore 3.50
-G_M34046_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x0C], 0 - je SHORT G_M34046_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M34046_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x0C] - mov dword ptr [ebp-0x0C], eax - jmp SHORT G_M34046_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M34046_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M34046_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x08] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x0C], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M34046_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
push dword ptr [ebp-0x0C] xor ecx, ecx ; gcrRegs +[ecx] xor edx, edx call [<unknown method>] ; gcrRegs -[ecx] +[eax]
- ;; size=13 bbWeight=1 PerfScore 4.50 -G_M34046_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=29 bbWeight=1 PerfScore 7.75 +G_M34046_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 71, prolog size 9, PerfScore 23.80, instruction count 25, allocated bytes for code 71 (MethodHash=bcfc7b01) for method Microsoft.Extensions.DependencyInjection.ServiceDescriptor:Singleton[System.__Canon,System.__Canon]():Microsoft.Extensions.DependencyInjection.ServiceDescriptor (Tier0)
+; Total bytes of code 45, prolog size 9, PerfScore 13.00, instruction count 16, allocated bytes for code 45 (MethodHash=bcfc7b01) for method Microsoft.Extensions.DependencyInjection.ServiceDescriptor:Singleton[System.__Canon,System.__Canon]():Microsoft.Extensions.DependencyInjection.ServiceDescriptor (Tier0)
; ============================================================

-26 (-34.67%) : 1452.dasm - System.Linq.Enumerable:DistinctSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -19,26 +19,11 @@ G_M34864_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov gword ptr [ebp-0x08], ecx mov dword ptr [ebp-0x0C], edx ;; size=15 bbWeight=1 PerfScore 4.50
-G_M34864_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x08], 0 - je SHORT G_M34864_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M34864_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x0C] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x08] - mov dword ptr [ebp-0x10], eax - jmp SHORT G_M34864_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M34864_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M34864_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x0C] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x10], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M34864_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
push dword ptr [ebp-0x10] mov ecx, gword ptr [ebp-0x08] ; gcrRegs +[ecx] @@ -46,13 +31,13 @@ G_M34864_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; gcrRegs +[edx] call [<unknown method>] ; gcrRegs -[ecx edx] +[eax]
- ;; size=14 bbWeight=1 PerfScore 5.25 -G_M34864_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=30 bbWeight=1 PerfScore 8.50 +G_M34864_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 75, prolog size 9, PerfScore 25.55, instruction count 26, allocated bytes for code 75 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
+; Total bytes of code 49, prolog size 9, PerfScore 14.75, instruction count 17, allocated bytes for code 49 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
; ============================================================

-32 (-34.41%) : 15403.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumeratorSystem.__Canon:System.Collections.Generic.IEnumerator`1System.__Canon

@@ -7,13 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> esi single-def -; V01 loc0 [V01,T04] ( 3, 4 ) int -> edi "spilling helperCall"
+; V00 TypeCtx [V00,T00] ( 5, 5 ) int -> esi single-def +; V01 loc0 [V01,T01] ( 2, 4 ) int -> edi "spilling helperCall"
;* V02 tmp1 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V03 tmp2 [V03,T05] ( 3, 4 ) int -> ebx "VirtualCall with runtime lookup" -; V04 rat0 [V04,T01] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable" -; V05 rat1 [V05,T02] ( 3, 5.60) int -> ecx "spilling expr" -; V06 rat2 [V06,T03] ( 3, 4.48) int -> ebx "fgMakeTemp is creating a new local variable"
+; V03 tmp2 [V03,T02] ( 2, 4 ) int -> esi "VirtualCall with runtime lookup"
; ; Lcl frame size = 4 @@ -22,66 +19,38 @@ G_M57211_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov ebp, esp push edi push esi
- push ebx
push eax
- mov dword ptr [ebp-0x10], ecx
+ mov dword ptr [ebp-0x0C], ecx
mov esi, ecx
- ;; size=12 bbWeight=1 PerfScore 6.50 -G_M57211_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov edi, dword ptr [ecx+0x08] - test edi, edi - je SHORT G_M57211_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M57211_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M57211_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M57211_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=11 bbWeight=1 PerfScore 5.50 +G_M57211_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edi, eax
- ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M57211_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M57211_IG08 - ;; size=9 bbWeight=1 PerfScore 6.00 -G_M57211_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ebx, dword ptr [ecx+0x0C] - test ebx, ebx - je SHORT G_M57211_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M57211_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M57211_IG09 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M57211_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov ebx, eax - ;; size=14 bbWeight=0.36 PerfScore 0.63 -G_M57211_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ call CORINFO_HELP_MEMCPY + mov esi, eax
mov ecx, edi call [System.Array:Empty[System.__Canon]():System.__Canon[]] ; gcrRegs +[eax] mov ecx, eax ; gcrRegs +[ecx]
- mov eax, ebx
+ mov eax, esi
; gcrRegs -[eax] nop call [eax] ; gcrRegs -[ecx] +[eax]
- ;; size=17 bbWeight=1 PerfScore 7.00 -G_M57211_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=45 bbWeight=1 PerfScore 10.50 +G_M57211_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx
- pop ebx
pop esi pop edi pop ebp ret
- ;; size=6 bbWeight=1 PerfScore 3.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 93, prolog size 10, PerfScore 34.71, instruction count 40, allocated bytes for code 93 (MethodHash=f41c2084) for method System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (Tier1)
+; Total bytes of code 61, prolog size 9, PerfScore 19.00, instruction count 26, allocated bytes for code 61 (MethodHash=f41c2084) for method System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (Tier1)
; ============================================================

-10 (-3.19%) : 1405.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,22 +9,22 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 6.50) ref -> esi this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T05] ( 3, 2.50) int -> edx single-def
+; V01 arg1 [V01,T04] ( 3, 2.50) int -> edx single-def
; V02 arg2 [V02,T11] ( 2, 1.50) int -> ecx single-def ; V03 arg3 [V03,T12] ( 2, 1.50) int -> ebx single-def ; V04 arg4 [V04,T13] ( 2, 1.50) int -> [ebp+0x10] single-def ; V05 arg5 [V05,T14] ( 1, 1 ) int -> [ebp+0x0C] single-def ; V06 arg6 [V06,T08] ( 2, 2 ) int -> edi single-def
-; V07 loc0 [V07,T02] ( 10, 6.50) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> -; V08 loc1 [V08,T03] ( 10, 5.62) ref -> ebx class-hnd <<unknown class>> -; V09 tmp0 [V09,T07] ( 4, 2.75) int -> edx "spilling helperCall" -;* V10 tmp1 [V10 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable" -; V11 tmp2 [V11,T01] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon[]> -;* V12 tmp3 [V12 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V13 tmp4 [V13,T09] ( 2, 2 ) int -> ebx "field V12.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V14 tmp5 [V14,T10] ( 2, 2 ) int -> eax "field V12.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V15 rat0 [V15,T06] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" -; V16 rat1 [V16,T04] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 loc0 [V07,T01] ( 10, 6.50) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T03] ( 9, 5.50) ref -> ebx class-hnd <<unknown class>> +;* V09 tmp0 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" +;* V10 tmp1 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V11 tmp2 [V11,T09] ( 2, 2 ) int -> ebx "field V10.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V12 tmp3 [V12,T10] ( 2, 2 ) int -> eax "field V10.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V13 tmp4 [V13,T07] ( 2, 4 ) int -> ecx "argument with side effect" +; V14 rat0 [V14,T05] ( 3, 4.40) int -> ecx "Spilling to split statement for tree" +; V15 rat1 [V15,T06] ( 3, 4 ) int -> ecx "runtime lookup" +; V16 rat2 [V16,T02] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 12 @@ -176,37 +176,26 @@ G_M33863_IG13: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=0000 mov ecx, dword ptr [esi] mov edx, dword ptr [ecx+0x24] mov edx, dword ptr [edx]
- mov edx, dword ptr [edx+0x0C] - test edx, edx
+ mov eax, dword ptr [edx+0x0C] + test eax, eax
je SHORT G_M33863_IG15 ;; size=14 bbWeight=1 PerfScore 9.25 G_M33863_IG14: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, eax
jmp SHORT G_M33863_IG16
- ;; size=2 bbWeight=0.80 PerfScore 1.60
+ ;; size=4 bbWeight=0.80 PerfScore 1.80
G_M33863_IG15: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov edx, eax
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + mov ecx, eax
;; size=12 bbWeight=0.20 PerfScore 0.30
-G_M33863_IG16: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz - mov eax, ebx - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M33863_IG19 - ;; size=6 bbWeight=1 PerfScore 1.50 -G_M33863_IG17: ; bbWeight=0.25, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, byref, isz - cmp dword ptr [eax], edx - je SHORT G_M33863_IG19 - ;; size=4 bbWeight=0.25 PerfScore 1.00 -G_M33863_IG18: ; bbWeight=0.12, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov ecx, edx
+G_M33863_IG16: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
mov edx, ebx ; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx ebx] +[eax]
- ;; size=9 bbWeight=0.12 PerfScore 0.19 -G_M33863_IG19: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=7 bbWeight=1 PerfScore 1.25 +G_M33863_IG17: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -223,6 +212,6 @@ RWD00 dd G_M33863_IG05 - G_M33863_IG02 dd G_M33863_IG10 - G_M33863_IG02
-; Total bytes of code 313, prolog size 9, PerfScore 76.09, instruction count 108, allocated bytes for code 313 (MethodHash=14bb7bb8) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
+; Total bytes of code 303, prolog size 9, PerfScore 74.85, instruction count 103, allocated bytes for code 303 (MethodHash=14bb7bb8) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
; ============================================================

-12 (-2.86%) : 1074.dasm - System.Runtime.CompilerServices.DefaultInterpolatedStringHandler:AppendFormattedSystem.__Canon:this (Tier0-FullOpts)

@@ -10,17 +10,17 @@ ; ; V00 this [V00,T03] ( 16, 21.50) byref -> esi this single-def ; V01 arg1 [V01 ] ( 8, 8.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed ld-addr-op class-hnd single-def <System.__Canon>
-; V02 TypeCtx [V02,T23] ( 3, 1.60) int -> ecx single-def
+; V02 TypeCtx [V02,T24] ( 2, 1.50) int -> ecx single-def
; V03 loc0 [V03,T10] ( 8, 4 ) ref -> edi class-hnd <System.String> ;* V04 loc1 [V04 ] ( 0, 0 ) int -> zero-ref ld-addr-op ;* V05 loc2 [V05 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.ReadOnlySpan`1[ushort]> ; V06 loc3 [V06 ] ( 2, 4.50) int -> [ebp-0x18] do-not-enreg[X] addr-exposed ld-addr-op ; V07 loc4 [V07 ] ( 5, 2.50) ref -> [ebp-0x1C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V08 loc5 [V08,T17] ( 4, 2 ) byref -> ecx -; V09 tmp1 [V09,T24] ( 3, 1.50) ref -> edi
+; V08 loc5 [V08,T16] ( 4, 2 ) byref -> ecx +; V09 tmp1 [V09,T22] ( 3, 1.50) ref -> edi
; V10 tmp2 [V10,T04] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" <System.__Canon> ;* V11 tmp3 [V11 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Span`1[ushort]>
-; V12 tmp4 [V12,T18] ( 3, 2 ) int -> eax "spilling helperCall"
+; V12 tmp4 [V12,T20] ( 2, 2 ) int -> eax "spilling helperCall"
; V13 tmp5 [V13,T00] ( 4, 32 ) int -> edx "Inlining Arg" ; V14 tmp6 [V14,T01] ( 3, 24 ) byref -> ecx "Inlining Arg" ;* V15 tmp7 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> @@ -33,14 +33,14 @@ ; V22 tmp14 [V22,T13] ( 3, 3 ) byref -> ecx single-def "Inlining Arg" ;* V23 tmp15 [V23 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]> ; V24 tmp16 [V24,T15] ( 3, 3 ) int -> ebx "Inlining Arg"
-; V25 tmp17 [V25,T19] ( 2, 2 ) byref -> [ebp-0x24] spill-single-def "Inlining Arg"
+; V25 tmp17 [V25,T17] ( 2, 2 ) byref -> [ebp-0x24] spill-single-def "Inlining Arg"
;* V26 tmp18 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V27 tmp19 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V28 tmp20 [V28,T26] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp"
+;* V28 tmp20 [V28,T25] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp"
;* V29 tmp21 [V29 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]> ;* V30 tmp22 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
-; V31 tmp23 [V31,T20] ( 2, 2 ) byref -> edx single-def "Inlining Arg" -; V32 tmp24 [V32,T22] ( 2, 2 ) int -> ecx "Inlining Arg"
+; V31 tmp23 [V31,T18] ( 2, 2 ) byref -> edx single-def "Inlining Arg" +; V32 tmp24 [V32,T21] ( 2, 2 ) int -> ecx "Inlining Arg"
;* V33 tmp25 [V33 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ; V34 tmp26 [V34,T07] ( 2, 8 ) byref -> edx "field V05._reference (fldOffset=0x0)" P-INDEP ;* V35 tmp27 [V35,T12] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x4)" P-INDEP @@ -55,10 +55,9 @@ ;* V44 tmp36 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V29._reference (fldOffset=0x0)" P-INDEP ;* V45 tmp37 [V45 ] ( 0, 0 ) int -> zero-ref "field V29._length (fldOffset=0x4)" P-INDEP ; V46 tmp38 [V46,T14] ( 3, 3 ) ref -> ecx single-def "argument with side effect"
-; V47 tmp39 [V47,T21] ( 2, 2 ) ref -> ecx single-def "argument with side effect"
+; V47 tmp39 [V47,T19] ( 2, 2 ) ref -> ecx single-def "argument with side effect"
; V48 cse0 [V48,T06] ( 3, 12 ) int -> ebx "CSE - moderate"
-; V49 cse1 [V49,T25] ( 3, 1.50) int -> ebx "CSE - conservative" -; V50 rat0 [V50,T16] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V49 cse1 [V49,T23] ( 3, 1.50) int -> ebx "CSE - conservative"
; ; Lcl frame size = 24 @@ -80,22 +79,11 @@ G_M12060_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ;; size=28 bbWeight=1 PerfScore 11.00 G_M12060_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz cmp byte ptr [esi+0x0C], 0
- je SHORT G_M12060_IG08 - ;; size=6 bbWeight=1 PerfScore 4.00 -G_M12060_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz - mov edx, dword ptr [ecx+0x20] - mov eax, dword ptr [edx+0x08] - test eax, eax
je SHORT G_M12060_IG05
- ;; size=10 bbWeight=0.50 PerfScore 2.62 -G_M12060_IG04: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz - jmp SHORT G_M12060_IG06 - ;; size=2 bbWeight=0.40 PerfScore 0.80 -G_M12060_IG05: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ ;; size=6 bbWeight=1 PerfScore 4.00 +G_M12060_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=10 bbWeight=0.10 PerfScore 0.12 -G_M12060_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ call CORINFO_HELP_MEMCPY
push 0 push eax mov ecx, esi @@ -105,8 +93,8 @@ G_M12060_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 call [<unknown method>] ; gcrRegs -[edx] ; byrRegs -[ecx esi]
- ;; size=14 bbWeight=0.50 PerfScore 3.12 -G_M12060_IG07: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=24 bbWeight=0.50 PerfScore 3.75 +G_M12060_IG04: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -114,26 +102,26 @@ G_M12060_IG07: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 4 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M12060_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, gcvars, byref, isz
+G_M12060_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, gcvars, byref, isz
; byrRegs +[esi] mov edx, gword ptr [ebp-0x14] ; gcrRegs +[edx] mov ecx, 0xD1FFAB1E ; <unknown class>
- call [CORINFO_HELP_ISINSTANCEOFINTERFACE]
+ call [CORINFO_HELP_INITINSTCLASS]
; gcrRegs -[edx] +[eax] test eax, eax
- je G_M12060_IG15
+ je G_M12060_IG12
mov edx, gword ptr [ebp-0x14] ; gcrRegs +[edx] mov ecx, 0xD1FFAB1E ; <unknown class>
- call [CORINFO_HELP_ISINSTANCEOFINTERFACE]
+ call [CORINFO_HELP_INITINSTCLASS]
; gcrRegs -[edx] test eax, eax
- jne SHORT G_M12060_IG10
+ jne SHORT G_M12060_IG07
mov edx, gword ptr [ebp-0x14] ; gcrRegs +[edx] mov ecx, 0xD1FFAB1E ; <unknown class>
- call [CORINFO_HELP_CHKCASTINTERFACE]
+ call [CORINFO_HELP_ISINSTANCEOFANY]
; gcrRegs -[edx] mov ecx, eax ; gcrRegs +[ecx] @@ -144,20 +132,20 @@ G_M12060_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {} ; gcrRegs -[ecx edx] mov edi, eax ; gcrRegs +[edi]
- jmp G_M12060_IG17
+ jmp G_M12060_IG14
;; size=73 bbWeight=0.50 PerfScore 11.50
-G_M12060_IG09: ; bbWeight=2, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M12060_IG06: ; bbWeight=2, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
; gcrRegs -[eax edi] mov ecx, esi ; byrRegs +[ecx] call [<unknown method>] ; byrRegs -[ecx] ;; size=8 bbWeight=2 PerfScore 6.50
-G_M12060_IG10: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+G_M12060_IG07: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
mov edx, gword ptr [ebp-0x14] ; gcrRegs +[edx] mov ecx, 0xD1FFAB1E ; <unknown class>
- call [CORINFO_HELP_CHKCASTINTERFACE]
+ call [CORINFO_HELP_ISINSTANCEOFANY]
; gcrRegs -[edx] +[eax] mov edi, eax ; gcrRegs +[edi] @@ -166,7 +154,7 @@ G_M12060_IG10: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {e mov edx, dword ptr [esi+0x08] mov ebx, dword ptr [ecx+0x04] cmp edx, ebx
- ja G_M12060_IG22
+ ja G_M12060_IG19
mov ecx, bword ptr [ecx] lea eax, bword ptr [ecx+2*edx] ; gcrRegs -[eax] @@ -174,9 +162,9 @@ G_M12060_IG10: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {e mov bword ptr [ebp-0x20], eax ; GC ptr vars +{V17} sub ebx, edx
- jns SHORT G_M12060_IG12
+ jns SHORT G_M12060_IG09
;; size=45 bbWeight=4 PerfScore 60.00
-G_M12060_IG11: ; bbWeight=2, gcVars=00000020 {V17}, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, gcvars, byref
+G_M12060_IG08: ; bbWeight=2, gcVars=00000020 {V17}, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, gcvars, byref
; byrRegs -[eax ecx] mov ecx, 0xD1FFAB1E ; gcrRegs +[ecx] @@ -185,7 +173,7 @@ G_M12060_IG11: ; bbWeight=2, gcVars=00000020 {V17}, gcrefRegs=00000080 {e call [<unknown method>] ; gcrRegs -[ecx edx] ;; size=16 bbWeight=2 PerfScore 7.00
-G_M12060_IG12: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz
+G_M12060_IG09: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz
mov eax, bword ptr [ebp-0x20] ; byrRegs +[eax] xor edx, edx @@ -204,13 +192,13 @@ G_M12060_IG12: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000040 ; gcrRegs -[ecx edi] ; byrRegs -[eax] test eax, eax
- je SHORT G_M12060_IG09
+ je SHORT G_M12060_IG06
;; size=27 bbWeight=4 PerfScore 49.00
-G_M12060_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M12060_IG10: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov ecx, dword ptr [ebp-0x18] add dword ptr [esi+0x08], ecx ;; size=6 bbWeight=0.50 PerfScore 2.00
-G_M12060_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M12060_IG11: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -218,7 +206,7 @@ G_M12060_IG14: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 4 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M12060_IG15: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, gcvars, byref, isz
+G_M12060_IG12: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, gcvars, byref, isz
xor ecx, ecx ; gcrRegs +[ecx] mov gword ptr [ebp-0x1C], ecx @@ -226,7 +214,7 @@ G_M12060_IG15: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {} ; gcrRegs -[ecx] ; byrRegs +[ecx] cmp gword ptr [ebp-0x1C], 0
- jne SHORT G_M12060_IG16
+ jne SHORT G_M12060_IG13
mov ecx, gword ptr [ecx] ; gcrRegs +[ecx] ; byrRegs -[ecx] @@ -235,12 +223,12 @@ G_M12060_IG15: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {} ; gcrRegs -[ecx] ; byrRegs +[ecx] cmp gword ptr [ebp-0x1C], 0
- jne SHORT G_M12060_IG16
+ jne SHORT G_M12060_IG13
xor edi, edi ; gcrRegs +[edi]
- jmp SHORT G_M12060_IG17
+ jmp SHORT G_M12060_IG14
;; size=32 bbWeight=0.50 PerfScore 6.75
-G_M12060_IG16: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000042 {ecx esi}, byref
+G_M12060_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000042 {ecx esi}, byref
; gcrRegs -[edi] mov ecx, gword ptr [ecx] ; gcrRegs +[ecx] @@ -252,23 +240,23 @@ G_M12060_IG16: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000042 mov edi, eax ; gcrRegs +[edi] ;; size=12 bbWeight=0.50 PerfScore 4.62
-G_M12060_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz
+G_M12060_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz
; gcrRegs -[eax] test edi, edi
- je SHORT G_M12060_IG21
+ je SHORT G_M12060_IG18
lea ecx, bword ptr [esi+0x10] ; byrRegs +[ecx] mov edx, dword ptr [esi+0x08] mov ebx, dword ptr [ecx+0x04] cmp edx, ebx
- ja SHORT G_M12060_IG22
+ ja SHORT G_M12060_IG19
mov ecx, bword ptr [ecx] lea eax, bword ptr [ecx+2*edx] ; byrRegs +[eax] ...

-2 (-1.49%) : 3344.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -9,10 +9,10 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 5, 5 ) ref -> esi class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T03] ( 3, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon> -; V02 arg2 [V02,T06] ( 3, 3 ) int -> ebx single-def -; V03 arg3 [V03,T09] ( 2, 2 ) int -> [ebp+0x0C] single-def -; V04 TypeCtx [V04,T08] ( 3, 2.36) int -> ecx single-def
+; V01 arg1 [V01,T02] ( 3, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon> +; V02 arg2 [V02,T03] ( 3, 3 ) int -> ebx single-def +; V03 arg3 [V03,T06] ( 2, 2 ) int -> [ebp+0x0C] single-def +; V04 TypeCtx [V04,T04] ( 3, 3 ) int -> [ebp+0x08] single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -25,10 +25,7 @@ ;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" ;* V15 tmp6 [V15 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inlining Arg" ; V16 tmp7 [V16,T01] ( 3, 6 ) ref -> eax single-def "argument with side effect"
-; V17 cse0 [V17,T07] ( 3, 3 ) int -> edx "CSE - aggressive" -; V18 rat0 [V18,T05] ( 3, 4 ) int -> edx "runtime lookup" -; V19 rat1 [V19,T02] ( 3, 5.60) int -> edx "spilling expr" -; V20 rat2 [V20,T04] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
+; V17 cse0 [V17,T05] ( 3, 3 ) int -> ecx "CSE - aggressive"
; ; Lcl frame size = 4 @@ -46,38 +43,27 @@ G_M13831_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov edi, edx ; gcrRegs +[edi] mov ebx, dword ptr [ebp+0x10]
- mov eax, dword ptr [ebp+0x0C] - mov ecx, dword ptr [ebp+0x08]
+ mov edx, dword ptr [ebp+0x0C] + mov eax, dword ptr [ebp+0x08]
;; size=26 bbWeight=1 PerfScore 11.75 G_M13831_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz test esi, esi
- je SHORT G_M13831_IG08 - mov edx, dword ptr [esi+0x04] - cmp edx, ebx - jb SHORT G_M13831_IG09 - sub edx, ebx - mov dword ptr [ebp+0x0C], eax - cmp edx, eax - jb SHORT G_M13831_IG10 - mov edx, dword ptr [ecx+0x20] - cmp dword ptr [edx+0x04], 12 - jle SHORT G_M13831_IG05 - ;; size=29 bbWeight=1 PerfScore 13.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x0C] - test edx, edx - je SHORT G_M13831_IG05 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M13831_IG04 + mov ecx, dword ptr [esi+0x04] + cmp ecx, ebx + jb SHORT G_M13831_IG05 + sub ecx, ebx + mov dword ptr [ebp+0x0C], edx + cmp ecx, edx + jb SHORT G_M13831_IG06 + mov dword ptr [ebp+0x08], eax + mov ecx, eax
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edx, eax - ;; size=12 bbWeight=0.36 PerfScore 0.54 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, edx
+ call CORINFO_HELP_MEMCPY + mov ecx, dword ptr [ebp+0x08] + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov ecx, eax
call [System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]] ; gcrRegs +[eax] push edi @@ -92,8 +78,8 @@ G_M13831_IG06: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 mov eax, dword ptr [eax+0x30] call [eax]<unknown method> ; gcrRegs -[ecx edx esi edi]
- ;; size=24 bbWeight=1 PerfScore 13.75 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend
+ ;; size=72 bbWeight=1 PerfScore 25.50 +G_M13831_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop ebx pop esi @@ -101,20 +87,20 @@ G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend pop ebp ret 12 ;; size=8 bbWeight=1 PerfScore 4.50
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov ecx, 2 call [System.ThrowHelper:ThrowArgumentNullException(int)] int3 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 134, prolog size 13, PerfScore 47.42, instruction count 55, allocated bytes for code 134 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 132, prolog size 13, PerfScore 41.75, instruction count 52, allocated bytes for code 132 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================

coreclr_tests.run.windows.x86.checked.mch

-42 (-14.14%) : 480.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)

@@ -7,24 +7,19 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T05] ( 4, 4 ) ref -> edi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V00 arg0 [V00,T05] ( 4, 4 ) ref -> ebx class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T01] ( 5, 19 ) ref -> esi class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
-; V02 arg2 [V02,T12] ( 2, 2 ) byref -> [ebp+0x0C] single-def -; V03 TypeCtx [V03,T08] ( 5, 2.88) int -> ebx single-def
+; V02 arg2 [V02,T07] ( 2, 2 ) byref -> [ebp+0x0C] single-def +; V03 TypeCtx [V03,T04] ( 3, 10 ) int -> edi single-def
; V04 loc0 [V04,T02] ( 7, 20 ) ref -> [ebp-0x24] class-hnd EH-live single-def <<unknown class>> ; V05 loc1 [V05,T03] ( 3, 17 ) ref -> [ebp-0x28] class-hnd spill-single-def <System.__Canon>
-; V06 loc2 [V06,T13] ( 2, 2 ) ref -> [ebp-0x2C] do-not-enreg[Z] must-init class-hnd EH-live <System.__Canon>
+; V06 loc2 [V06,T08] ( 2, 2 ) ref -> [ebp-0x2C] do-not-enreg[Z] must-init class-hnd EH-live <System.__Canon>
;* V07 loc3 [V07 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;* V08 loc4 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V09 tmp1 [V09,T07] ( 3, 4 ) int -> registers "VirtualCall with runtime lookup"
+; V09 tmp1 [V09,T06] ( 2, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V10 tmp2 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V11 tmp3 [V11,T00] ( 2, 32 ) int -> eax "VirtualCall with runtime lookup" ; V12 EHSlots [V12 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V13 cse0 [V13,T04] ( 2, 8.50) int -> ebx hoist "CSE - moderate" -; V14 rat0 [V14,T06] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable" -; V15 rat1 [V15,T11] ( 3, 2 ) int -> ebx "runtime lookup" -; V16 rat2 [V16,T09] ( 3, 2.80) int -> ecx "spilling expr" -; V17 rat3 [V17,T10] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 32 @@ -40,78 +35,45 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x18], eax mov eax, dword ptr [ebp+0x08] mov dword ptr [ebp-0x10], eax
- mov edi, ecx - ; gcrRegs +[edi]
+ mov ebx, ecx + ; gcrRegs +[ebx]
mov esi, edx ; gcrRegs +[esi]
- mov ebx, dword ptr [ebp+0x08]
+ mov edi, dword ptr [ebp+0x08]
;; size=30 bbWeight=1 PerfScore 11.25
-G_M62024_IG02: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars +{V06 V13} - test edi, edi - je G_M62024_IG22
+G_M62024_IG02: ; bbWeight=1, gcVars=00000100 {V06}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref + ; GC ptr vars +{V06} + test ebx, ebx + je G_M62024_IG15
test esi, esi
- je G_M62024_IG23 - mov ecx, dword ptr [ebx+0x20] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - je SHORT G_M62024_IG04 - ;; size=26 bbWeight=1 PerfScore 7.75 -G_M62024_IG03: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov edx, ecx - jmp SHORT G_M62024_IG05 - ;; size=4 bbWeight=0.80 PerfScore 1.80 -G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, ebx - mov edx, 0xD1FFAB1E ; global ptr - call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edx, eax - ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M62024_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je G_M62024_IG16
mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov ecx, ebx
; gcrRegs +[ecx]
- mov eax, edx
nop call [eax]
- ; gcrRegs -[ecx edi] +[eax] - mov edi, eax - ; gcrRegs +[edi] - mov gword ptr [ebp-0x24], edi
+ ; gcrRegs -[ecx ebx] +[eax] + mov ebx, eax + ; gcrRegs +[ebx] + mov gword ptr [ebp-0x24], ebx
; GC ptr vars +{V04}
- ;; size=14 bbWeight=1 PerfScore 5.00 -G_M62024_IG06: ; bbWeight=1, gcVars=00002004 {V04 V06}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=40 bbWeight=1 PerfScore 8.75 +G_M62024_IG03: ; bbWeight=1, gcVars=00000104 {V04 V06}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- ; GC ptr vars -{V13} - mov ecx, edi
+ mov ecx, ebx
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] test eax, eax
- je SHORT G_M62024_IG14
+ je SHORT G_M62024_IG07
;; size=12 bbWeight=1 PerfScore 4.50
-G_M62024_IG07: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [ebx+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M62024_IG10 - ;; size=9 bbWeight=0.50 PerfScore 3.00 -G_M62024_IG08: ; bbWeight=0.40, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ecx+0x0C] - test eax, eax - je SHORT G_M62024_IG10 - ;; size=7 bbWeight=0.40 PerfScore 1.30 -G_M62024_IG09: ; bbWeight=0.32, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov ebx, eax - jmp SHORT G_M62024_IG11 - ;; size=4 bbWeight=0.32 PerfScore 0.72 -G_M62024_IG10: ; bbWeight=0.18, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, ebx - mov edx, 0xD1FFAB1E ; global ptr - call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov ebx, eax - ;; size=14 bbWeight=0.18 PerfScore 0.32 -G_M62024_IG11: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov eax, ebx
+G_M62024_IG04: ; bbWeight=8, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov ecx, ebx
; gcrRegs +[ecx] nop call [eax] @@ -125,20 +87,20 @@ G_M62024_IG11: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 call [esi+0x0C]<unknown method> ; gcrRegs -[eax ecx edx] test eax, eax
- jne SHORT G_M62024_IG13 - mov ecx, edi
+ jne SHORT G_M62024_IG06 + mov ecx, ebx
; gcrRegs +[ecx] ; GC ptr vars -{V05} call [<unknown method>] ; gcrRegs -[ecx] test eax, eax
- jne SHORT G_M62024_IG11 - ;; size=36 bbWeight=8 PerfScore 126.00 -G_M62024_IG12: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M62024_IG04 + ;; size=46 bbWeight=8 PerfScore 136.00 +G_M62024_IG05: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
- jmp SHORT G_M62024_IG14
+ jmp SHORT G_M62024_IG07
;; size=2 bbWeight=1 PerfScore 2.00
-G_M62024_IG13: ; bbWeight=1, gcVars=0000200C {V04 V05 V06}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M62024_IG06: ; bbWeight=1, gcVars=0000010C {V04 V05 V06}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars +{V03 V05} mov esi, bword ptr [ebp+0x0C] ; byrRegs +[esi] @@ -149,41 +111,41 @@ G_M62024_IG13: ; bbWeight=1, gcVars=0000200C {V04 V05 V06}, gcrefRegs=000 mov gword ptr [ebp-0x2C], esi mov dword ptr [ebp-0x1C], 0 mov dword ptr [ebp-0x18], 252
- push G_M62024_IG15 - jmp SHORT G_M62024_IG16
+ push G_M62024_IG08 + jmp SHORT G_M62024_IG09
;; size=33 bbWeight=1 PerfScore 9.00
-G_M62024_IG14: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M62024_IG07: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[esi] ; GC ptr vars -{V03 V05 V06}
- mov ecx, edi
+ mov ecx, ebx
; gcrRegs +[ecx] ; GC ptr vars -{V04} call [<unknown method>]
- ; gcrRegs -[ecx edi] - jmp SHORT G_M62024_IG18
+ ; gcrRegs -[ecx ebx] + jmp SHORT G_M62024_IG11
;; size=10 bbWeight=1 PerfScore 5.25
-G_M62024_IG15: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars +{V06 V13}
+G_M62024_IG08: ; bbWeight=1, gcVars=00000100 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz + ; GC ptr vars +{V06}
mov dword ptr [ebp-0x18], 0
- jmp SHORT G_M62024_IG20
+ jmp SHORT G_M62024_IG13
;; size=9 bbWeight=1 PerfScore 3.00
-G_M62024_IG16: ; bbWeight=1, gcVars=00002004 {V04 V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - ; GC ptr vars -{V13} +{V02 V04} - mov edi, gword ptr [ebp-0x24] - ; gcrRegs +[edi] - test edi, edi - je SHORT G_M62024_IG17 - mov ecx, edi
+G_M62024_IG09: ; bbWeight=1, gcVars=00000104 {V04 V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz + ; GC ptr vars +{V02 V04} + mov ebx, gword ptr [ebp-0x24] + ; gcrRegs +[ebx] + test ebx, ebx + je SHORT G_M62024_IG10 + mov ecx, ebx
; gcrRegs +[ecx] ; GC ptr vars -{V02 V04} call [<unknown method>]
- ; gcrRegs -[ecx edi]
+ ; gcrRegs -[ecx ebx]
;; size=15 bbWeight=1 PerfScore 5.50
-G_M62024_IG17: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M62024_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
pop eax jmp eax ;; size=3 bbWeight=1 PerfScore 2.50
-G_M62024_IG18: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M62024_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; GC ptr vars -{V06} mov esi, bword ptr [ebp+0x0C] ; byrRegs +[esi] @@ -191,7 +153,7 @@ G_M62024_IG18: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, b xor eax, eax ; gcrRegs +[eax] ;; size=8 bbWeight=1 PerfScore 2.25
-G_M62024_IG19: ; bbWeight=1, epilog, nogc, extend
+G_M62024_IG12: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -199,14 +161,14 @@ G_M62024_IG19: ; bbWeight=1, epilog, nogc, extend pop ebp ret 8 ;; size=10 bbWeight=1 PerfScore 4.50
-G_M62024_IG20: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M62024_IG13: ; bbWeight=1, gcVars=00000100 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] ; byrRegs -[esi]
- ; GC ptr vars +{V06 V13}
+ ; GC ptr vars +{V06}
mov eax, gword ptr [ebp-0x2C] ; gcrRegs +[eax] ;; size=3 bbWeight=1 PerfScore 1.00
-G_M62024_IG21: ; bbWeight=1, epilog, nogc, extend
+G_M62024_IG14: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -214,22 +176,22 @@ G_M62024_IG21: ; bbWeight=1, epilog, nogc, extend pop ebp ...

libraries.pmi.windows.x86.checked.mch

-32 (-57.14%) : 4146.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector1[long]):System.Numerics.Vector1double

@@ -5,41 +5,27 @@ ; esp based frame ; partially interruptible ; No matching PGO data
-; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments ; ; V00 RetBuf [V00,T00] ( 3, 3 ) byref -> ecx single-def
-; V01 arg0 [V01,T01] ( 2, 2 ) simd32 -> mm0 single-def <System.Numerics.Vector`1[long]> -;* V02 loc0 [V02 ] ( 0, 0 ) simd32 -> zero-ref "spilled call-like call argument" -;* V03 tmp1 [V03 ] ( 0, 0 ) simd32 -> zero-ref "Inline return value spill temp" <System.Runtime.Intrinsics.Vector256`1[double]> -;* V04 tmp2 [V04 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[int]> -;* V05 tmp3 [V05 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[long]> -;* V06 tmp4 [V06 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[double]>
+; V01 arg0 [V01,T01] ( 1, 1 ) simd32 -> [esp+0x04] single-def <System.Numerics.Vector`1[long]>
; ; Lcl frame size = 0 G_M18713_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG vzeroupper
- vmovups ymm0, ymmword ptr [esp+0x04] - ;; size=9 bbWeight=1 PerfScore 5.00
+ ;; size=3 bbWeight=1 PerfScore 1.00
G_M18713_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref ; byrRegs +[ecx]
- vpblendd ymm1, ymm0, ymmword ptr [@RWD00], -86 - vpsrlq ymm0, ymm0, 32 - vpxor ymm0, ymm0, ymmword ptr [@RWD32] - vsubpd ymm0, ymm0, qword ptr [@RWD64] {1to4} - vaddpd ymm0, ymm1, ymm0
+ vcvtqq2pd ymm0, ymmword ptr [esp+0x04]
vmovups ymmword ptr [ecx], ymm0
- ;; size=41 bbWeight=1 PerfScore 17.00
+ ;; size=15 bbWeight=1 PerfScore 7.00
G_M18713_IG03: ; bbWeight=1, epilog, nogc, extend vzeroupper ret 32 ;; size=6 bbWeight=1 PerfScore 3.00
-RWD00 dq 4330000000000000h, 4330000000000000h, 4330000000000000h, 4330000000000000h -RWD32 dq 4530000080000000h, 4530000080000000h, 4530000080000000h, 4530000080000000h -RWD64 dq 4530000080100000h ; 1.93428223e+25
- -; Total bytes of code 56, prolog size 3, PerfScore 25.00, instruction count 10, allocated bytes for code 56 (MethodHash=94cdb6e6) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[long]):System.Numerics.Vector`1[double] (FullOpts)
+; Total bytes of code 24, prolog size 3, PerfScore 11.00, instruction count 5, allocated bytes for code 24 (MethodHash=94cdb6e6) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[long]):System.Numerics.Vector`1[double] (FullOpts)
; ============================================================

-32 (-57.14%) : 4147.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector1[ulong]):System.Numerics.Vector1double

@@ -5,41 +5,27 @@ ; esp based frame ; partially interruptible ; No matching PGO data
-; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments ; ; V00 RetBuf [V00,T00] ( 3, 3 ) byref -> ecx single-def
-; V01 arg0 [V01,T01] ( 2, 2 ) simd32 -> mm0 single-def <System.Numerics.Vector`1[ulong]> -;* V02 loc0 [V02 ] ( 0, 0 ) simd32 -> zero-ref "spilled call-like call argument" -;* V03 tmp1 [V03 ] ( 0, 0 ) simd32 -> zero-ref "Inline return value spill temp" <System.Runtime.Intrinsics.Vector256`1[double]> -;* V04 tmp2 [V04 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[uint]> -;* V05 tmp3 [V05 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[ulong]> -;* V06 tmp4 [V06 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[double]>
+; V01 arg0 [V01,T01] ( 1, 1 ) simd32 -> [esp+0x04] single-def <System.Numerics.Vector`1[ulong]>
; ; Lcl frame size = 0 G_M56524_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG vzeroupper
- vmovups ymm0, ymmword ptr [esp+0x04] - ;; size=9 bbWeight=1 PerfScore 5.00
+ ;; size=3 bbWeight=1 PerfScore 1.00
G_M56524_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref ; byrRegs +[ecx]
- vpblendd ymm1, ymm0, ymmword ptr [@RWD00], -86 - vpsrlq ymm0, ymm0, 32 - vpxor ymm0, ymm0, ymmword ptr [@RWD32] - vsubpd ymm0, ymm0, qword ptr [@RWD64] {1to4} - vaddpd ymm0, ymm1, ymm0
+ vcvtuqq2pd ymm0, ymmword ptr [esp+0x04]
vmovups ymmword ptr [ecx], ymm0
- ;; size=41 bbWeight=1 PerfScore 17.00
+ ;; size=15 bbWeight=1 PerfScore 7.00
G_M56524_IG03: ; bbWeight=1, epilog, nogc, extend vzeroupper ret 32 ;; size=6 bbWeight=1 PerfScore 3.00
-RWD00 dq 4330000000000000h, 4330000000000000h, 4330000000000000h, 4330000000000000h -RWD32 dq 4530000000000000h, 4530000000000000h, 4530000000000000h, 4530000000000000h -RWD64 dq 4530000000100000h ; 1.93428131e+25
- -; Total bytes of code 56, prolog size 3, PerfScore 25.00, instruction count 10, allocated bytes for code 56 (MethodHash=23b22333) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[ulong]):System.Numerics.Vector`1[double] (FullOpts)
+; Total bytes of code 24, prolog size 3, PerfScore 11.00, instruction count 5, allocated bytes for code 24 (MethodHash=23b22333) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[ulong]):System.Numerics.Vector`1[double] (FullOpts)
; ============================================================

-26 (-39.39%) : 3563.dasm - System.TupleExtensions:ToTuple[System.Canon,System.Nullable1[int]](System.ValueTuple2[System.Canon,System.Nullable1[int]]):System.Tuple2[System.__Canon,System.Nullable`1[int]] (FullOpts)

@@ -7,54 +7,36 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T05] ( 2, 2 ) struct (12) [ebp+0x08] do-not-enreg[SF] single-def <System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]> -; V01 TypeCtx [V01,T00] ( 5, 4.20) int -> ecx single-def
+; V00 arg0 [V00,T02] ( 2, 2 ) struct (12) [ebp+0x08] do-not-enreg[SF] single-def <System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]> +; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> ecx single-def
;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V03 tmp1 [V03,T03] ( 2, 4 ) int -> edx "argument with side effect" -; V04 rat0 [V04,T04] ( 2, 4 ) struct ( 8) [ebp-0x0C] do-not-enreg[SB] "Spilling to split statement for tree" <System.Nullable`1[int]> -; V05 rat1 [V05,T02] ( 3, 4 ) int -> edx "runtime lookup" -; V06 rat2 [V06,T01] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
+; V03 tmp1 [V03,T01] ( 2, 4 ) int -> edx "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 4
G_M8952_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp mov ebp, esp
- sub esp, 12
+ push eax
mov dword ptr [ebp-0x04], ecx
- ;; size=9 bbWeight=1 PerfScore 2.50 -G_M8952_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [ebp+0x0C] - mov dword ptr [ebp-0x0C], edx - mov edx, dword ptr [ebp+0x10] - mov dword ptr [ebp-0x08], edx - mov edx, dword ptr [ecx+0x20] - mov edx, dword ptr [edx+0x0C] - test edx, edx - je SHORT G_M8952_IG04 - ;; size=22 bbWeight=1 PerfScore 9.25 -G_M8952_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M8952_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M8952_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=7 bbWeight=1 PerfScore 3.25 +G_M8952_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + push dword ptr [ebp+0x10] + push dword ptr [ebp+0x0C]
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
- ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M8952_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - push dword ptr [ebp-0x08] - push dword ptr [ebp-0x0C]
mov ecx, gword ptr [ebp+0x08] ; gcrRegs +[ecx] call [System.Tuple:Create[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):System.Tuple`2[System.__Canon,System.Nullable`1[int]]] ; gcrRegs -[ecx] +[eax]
- ;; size=15 bbWeight=1 PerfScore 6.00 -G_M8952_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=27 bbWeight=1 PerfScore 7.50 +G_M8952_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret 12 ;; size=6 bbWeight=1 PerfScore 2.75
-; Total bytes of code 66, prolog size 9, PerfScore 22.40, instruction count 23, allocated bytes for code 66 (MethodHash=0017dd07) for method System.TupleExtensions:ToTuple[System.__Canon,System.Nullable`1[int]](System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]):System.Tuple`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
+; Total bytes of code 40, prolog size 7, PerfScore 13.50, instruction count 14, allocated bytes for code 40 (MethodHash=0017dd07) for method System.TupleExtensions:ToTuple[System.__Canon,System.Nullable`1[int]](System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]):System.Tuple`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
; ============================================================

+24 (+9.52%) : 22172.dasm - .$Map:loop@860-43[System.Canon,System.Nullable1[int]](System.Collections.Generic.IEnumerator1[System.Collections.Generic.KeyValuePair`2[System.Canon,System.Nullable1[int]]],System.Collections.Generic.IEnumerator1[System.Collections.Generic.KeyValuePair2[System.__Canon,System.Nullable1[int]]],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)

@@ -8,39 +8,32 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T04] ( 4, 14 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]> -; V01 arg1 [V01,T05] ( 4, 14 ) ref -> edi class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]>
+; V00 arg0 [V00,T02] ( 4, 14 ) ref -> edi class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]> +; V01 arg1 [V01,T03] ( 4, 14 ) ref -> ebx class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]>
;* V02 arg2 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <Microsoft.FSharp.Core.Unit>
-; V03 TypeCtx [V03,T13] ( 5, 11.24) int -> ebx single-def -; V04 loc0 [V04,T02] ( 3, 20 ) ubyte -> [ebp-0x14] spill-single-def
+; V03 TypeCtx [V03,T00] ( 8, 29 ) int -> esi single-def +; V04 loc0 [V04,T01] ( 3, 20 ) ubyte -> [ebp-0x14] spill-single-def
;* V05 loc1 [V05 ] ( 0, 0 ) ubyte -> zero-ref
-; V06 loc2 [V06 ] ( 3, 12 ) struct (12) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]>
+; V06 loc2 [V06 ] ( 4, 16 ) struct (12) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]>
; V07 loc3 [V07 ] ( 3, 12 ) struct (12) [ebp-0x2C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]>
-;* V08 loc4 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
+; V08 loc4 [V08,T07] ( 2, 8 ) ref -> [ebp-0x38] class-hnd spill-single-def <System.__Canon>
;* V09 loc5 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ;* V10 loc6 [V10 ] ( 0, 0 ) struct ( 8) zero-ref <System.Nullable`1[int]> ;* V11 loc7 [V11 ] ( 0, 0 ) struct ( 8) zero-ref <System.Nullable`1[int]> ;* V12 loc8 [V12 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V13 tmp1 [V13,T10] ( 2, 16 ) int -> [ebp-0x30] spill-single-def "VirtualCall with runtime lookup"
+; V13 tmp1 [V13,T05] ( 2, 16 ) int -> eax "VirtualCall with runtime lookup"
;* V14 tmp2 [V14 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V15 tmp3 [V15,T11] ( 2, 16 ) int -> eax "VirtualCall with runtime lookup"
+; V15 tmp3 [V15,T06] ( 2, 16 ) int -> eax "VirtualCall with runtime lookup"
;* V16 tmp4 [V16 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V17 tmp5 [V17 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V18 tmp6 [V18 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V19 tmp7 [V19 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V20 tmp8 [V20 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-;* V21 tmp9 [V21 ] ( 0, 0 ) ubyte -> zero-ref "field V10.hasValue (fldOffset=0x0)" P-INDEP -;* V22 tmp10 [V22 ] ( 0, 0 ) int -> zero-ref "field V10.value (fldOffset=0x4)" P-INDEP
+; V21 tmp9 [V21,T08] ( 2, 8 ) ubyte -> [ebp-0x30] spill-single-def "field V10.hasValue (fldOffset=0x0)" P-INDEP +; V22 tmp10 [V22,T09] ( 2, 8 ) int -> [ebp-0x34] spill-single-def "field V10.value (fldOffset=0x4)" P-INDEP
;* V23 tmp11 [V23 ] ( 0, 0 ) ubyte -> zero-ref "field V11.hasValue (fldOffset=0x0)" P-INDEP ;* V24 tmp12 [V24 ] ( 0, 0 ) int -> zero-ref "field V11.value (fldOffset=0x4)" P-INDEP
-; V25 tmp13 [V25,T08] ( 2, 16 ) ref -> [ebp-0x38] spill-single-def "argument with side effect" -; V26 tmp14 [V26,T09] ( 2, 16 ) ref -> [ebp-0x3C] spill-single-def "argument with side effect" -; V27 cse0 [V27,T12] ( 3, 12 ) int -> [ebp-0x34] spill-single-def "CSE - moderate" -; V28 rat0 [V28,T06] ( 3, 16 ) int -> eax "runtime lookup" -; V29 rat1 [V29,T00] ( 3, 22.40) int -> eax "fgMakeTemp is creating a new local variable" -; V30 rat2 [V30,T07] ( 3, 16 ) int -> ecx "runtime lookup" -; V31 rat3 [V31,T01] ( 3, 22.40) int -> ecx "spilling expr" -; V32 rat4 [V32,T03] ( 3, 17.92) int -> ecx "fgMakeTemp is creating a new local variable"
+; V25 tmp13 [V25,T04] ( 2, 16 ) ref -> [ebp-0x3C] spill-single-def "argument with side effect"
; ; Lcl frame size = 48 @@ -58,115 +51,99 @@ G_M23959_IG01: ; bbWeight=8, gcVars=00000000 {}, gcrefRegs=00000000 {}, b mov dword ptr [ebp-0x18], eax mov eax, dword ptr [ebp+0x08] mov dword ptr [ebp-0x10], eax
- mov esi, ecx - ; gcrRegs +[esi] - mov edi, edx
+ mov edi, ecx
; gcrRegs +[edi]
- mov ebx, dword ptr [ebp+0x08]
+ mov ebx, edx + ; gcrRegs +[ebx] + mov esi, dword ptr [ebp+0x08]
;; size=39 bbWeight=8 PerfScore 108.67
-G_M23959_IG02: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, esi
+G_M23959_IG02: ; bbWeight=8, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref + mov ecx, edi
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] mov dword ptr [ebp-0x14], eax
- mov ecx, edi
+ mov ecx, ebx
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] mov ecx, dword ptr [ebp-0x14] cmp eax, ecx
- jne G_M23959_IG11
+ jne G_M23959_IG04
;; size=30 bbWeight=8 PerfScore 78.00
-G_M23959_IG03: ; bbWeight=4, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M23959_IG03: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
test ecx, ecx
- je G_M23959_IG13 - mov ecx, dword ptr [ebx+0x20] - mov eax, dword ptr [ecx+0x0C] - test eax, eax - je SHORT G_M23959_IG05 - ;; size=18 bbWeight=4 PerfScore 26.00 -G_M23959_IG04: ; bbWeight=3.20, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M23959_IG06 - ;; size=2 bbWeight=3.20 PerfScore 6.40 -G_M23959_IG05: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, ebx - mov edx, 0xD1FFAB1E ; global ptr - call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=12 bbWeight=0.80 PerfScore 1.20 -G_M23959_IG06: ; bbWeight=4, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov dword ptr [ebp-0x34], eax - mov dword ptr [ebp-0x30], eax - lea edx, [ebp-0x20]
+ je G_M23959_IG06
mov ecx, esi
- ; gcrRegs +[ecx] - mov eax, dword ptr [ebp-0x30] - nop - call [eax] - ; gcrRegs -[ecx] - mov eax, dword ptr [ebp-0x34] - lea edx, [ebp-0x2C]
+ mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + lea edx, [ebp-0x20]
mov ecx, edi ; gcrRegs +[ecx] nop call [eax] ; gcrRegs -[ecx]
+ mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + lea edx, [ebp-0x2C] + mov ecx, ebx + ; gcrRegs +[ecx] + nop + call [eax] + ; gcrRegs -[ecx] + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY
mov eax, gword ptr [ebp-0x20] ; gcrRegs +[eax]
- mov gword ptr [ebp-0x3C], eax - ; GC ptr vars +{V26} - mov edx, gword ptr [ebp-0x2C] - ; gcrRegs +[edx] - mov gword ptr [ebp-0x38], edx - ; GC ptr vars +{V25} - mov ecx, dword ptr [ebx+0x20] - cmp dword ptr [ecx+0x08], 20 - jle SHORT G_M23959_IG09 - ;; size=53 bbWeight=4 PerfScore 88.00 -G_M23959_IG07: ; bbWeight=3.20, gcVars=00000300 {V25 V26}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[eax edx] - mov eax, gword ptr [ebp-0x3C] - ; gcrRegs +[eax] - mov ecx, dword ptr [ecx+0x14] - test ecx, ecx - je SHORT G_M23959_IG09 - ;; size=10 bbWeight=3.20 PerfScore 13.60 -G_M23959_IG08: ; bbWeight=2.56, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M23959_IG10 - ;; size=2 bbWeight=2.56 PerfScore 5.12 -G_M23959_IG09: ; bbWeight=1.44, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - ; gcrRegs -[eax] - mov ecx, ebx
+ mov gword ptr [ebp-0x38], eax + ; GC ptr vars +{V08} + mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov ecx, eax - mov eax, gword ptr [ebp-0x3C]
+ call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax] + mov eax, gword ptr [ebp-0x2C]
; gcrRegs +[eax]
- ;; size=17 bbWeight=1.44 PerfScore 3.96 -G_M23959_IG10: ; bbWeight=4, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, byref, isz - push ecx - mov edx, gword ptr [ebp-0x38]
+ mov gword ptr [ebp-0x3C], eax + ; GC ptr vars +{V25} + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax] + push eax + mov edx, gword ptr [ebp-0x3C]
; gcrRegs +[edx]
- mov ecx, eax
+ mov ecx, gword ptr [ebp-0x38]
; gcrRegs +[ecx]
- ; GC ptr vars -{V25 V26}
+ ; GC ptr vars -{V08 V25}
call [<unknown method>]
- ; gcrRegs -[eax ecx edx]
+ ; gcrRegs -[ecx edx]
test eax, eax
- je SHORT G_M23959_IG11 - push dword ptr [ebp-0x18] - push dword ptr [ebp-0x1C]
+ je SHORT G_M23959_IG04 + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + movzx eax, byte ptr [ebp-0x1C] + mov byte ptr [ebp-0x30], al + mov edx, dword ptr [ebp-0x18] + mov dword ptr [ebp-0x34], edx + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + push dword ptr [ebp-0x34] + push dword ptr [ebp-0x30]
push dword ptr [ebp-0x24] push dword ptr [ebp-0x28] call [<unknown method>] test eax, eax jne G_M23959_IG02
- ;; size=42 bbWeight=4 PerfScore 59.00 -G_M23959_IG11: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; gcrRegs -[esi edi]
+ ;; size=180 bbWeight=4 PerfScore 173.00 +G_M23959_IG04: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ebx edi]
xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M23959_IG12: ; bbWeight=0.50, epilog, nogc, extend
+G_M23959_IG05: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -174,10 +151,10 @@ G_M23959_IG12: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 8 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M23959_IG13: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M23959_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov eax, 1 ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M23959_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M23959_IG07: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -186,6 +163,6 @@ G_M23959_IG14: ; bbWeight=0.50, epilog, nogc, extend ret 8 ;; size=10 bbWeight=0.50 PerfScore 2.25
-; Total bytes of code 252, prolog size 32, PerfScore 394.70, instruction count 90, allocated bytes for code 252 (MethodHash=2ed0a268) for method <StartupCode$FSharp-Core>.$Map:loop@860-43[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
+; Total bytes of code 276, prolog size 32, PerfScore 364.42, instruction count 90, allocated bytes for code 276 (MethodHash=2ed0a268) for method <StartupCode$FSharp-Core>.$Map:loop@860-43[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
; ============================================================

+36 (+13.74%) : 4142.dasm - System.Numerics.Vector:ConditionalSelectSystem.__Canon:System.Numerics.Vector`1System.__Canon

@@ -7,58 +7,49 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T04] ( 3, 3 ) byref -> esi single-def -; V01 arg0 [V01,T14] ( 2, 2 ) struct (32) [ebp+0x48] do-not-enreg[S] single-def <System.Numerics.Vector`1[System.__Canon]> -; V02 arg1 [V02,T16] ( 1, 1 ) struct (32) [ebp+0x28] do-not-enreg[S] single-def <System.Numerics.Vector`1[System.__Canon]> -; V03 arg2 [V03,T17] ( 1, 1 ) struct (32) [ebp+0x08] do-not-enreg[S] single-def <System.Numerics.Vector`1[System.__Canon]> -; V04 TypeCtx [V04,T00] ( 5, 4.20) int -> edx single-def -;* V05 loc0 [V05,T15] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V06 loc1 [V06,T06] ( 2, 4 ) int -> edx "spilling helperCall" -; V07 tmp2 [V07 ] ( 2, 4 ) struct (32) [ebp-0x2C] do-not-enreg[HS] hidden-struct-arg "impAppendStmt" <System.Numerics.Vector`1[System.__Canon]> -; V08 tmp3 [V08,T07] ( 2, 4 ) int -> edx "spilling helperCall" -; V09 tmp4 [V09 ] ( 2, 4 ) struct (32) [ebp-0x4C] do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument" <System.Numerics.Vector`1[System.__Canon]> -; V10 tmp5 [V10,T01] ( 3, 6 ) int -> edi "spilling helperCall" -; V11 tmp6 [V11 ] ( 2, 4 ) struct (32) [ebp-0x6C] do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument" <System.Numerics.Vector`1[System.__Canon]> -; V12 tmp7 [V12,T08] ( 2, 4 ) long -> [ebp-0x2C] do-not-enreg[H] hidden-struct-arg "field V07._00 (fldOffset=0x0)" P-DEP -; V13 tmp8 [V13,T09] ( 2, 4 ) long -> [ebp-0x24] do-not-enreg[H] hidden-struct-arg "field V07._01 (fldOffset=0x8)" P-DEP -; V14 tmp9 [V14,T10] ( 2, 4 ) long -> [ebp-0x4C] do-not-enreg[H] hidden-struct-arg "field V09._00 (fldOffset=0x0)" P-DEP -; V15 tmp10 [V15,T11] ( 2, 4 ) long -> [ebp-0x44] do-not-enreg[H] hidden-struct-arg "field V09._01 (fldOffset=0x8)" P-DEP -; V16 tmp11 [V16,T12] ( 2, 4 ) long -> [ebp-0x6C] do-not-enreg[H] hidden-struct-arg "field V11._00 (fldOffset=0x0)" P-DEP -; V17 tmp12 [V17,T13] ( 2, 4 ) long -> [ebp-0x64] do-not-enreg[H] hidden-struct-arg "field V11._01 (fldOffset=0x8)" P-DEP -; V18 cse0 [V18,T03] ( 4, 4 ) int -> edi "CSE - aggressive" -; V19 rat0 [V19,T05] ( 3, 4 ) int -> edi "runtime lookup" -; V20 rat1 [V20,T02] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable"
+; V00 RetBuf [V00,T01] ( 3, 3 ) byref -> edi single-def +; V01 arg0 [V01,T12] ( 2, 2 ) struct (32) [ebp+0x48] do-not-enreg[S] single-def <System.Numerics.Vector`1[System.__Canon]> +; V02 arg1 [V02,T13] ( 1, 1 ) struct (32) [ebp+0x28] do-not-enreg[S] single-def <System.Numerics.Vector`1[System.__Canon]> +; V03 arg2 [V03,T14] ( 1, 1 ) struct (32) [ebp+0x08] do-not-enreg[S] single-def <System.Numerics.Vector`1[System.__Canon]> +; V04 TypeCtx [V04,T00] ( 7, 7 ) int -> esi single-def +; V05 loc0 [V05,T02] ( 2, 4 ) int -> ebx "spilling helperCall" +; V06 loc1 [V06,T03] ( 2, 4 ) int -> [ebp-0x14] spill-single-def "spilling helperCall" +; V07 tmp2 [V07 ] ( 2, 4 ) struct (32) [ebp-0x34] do-not-enreg[HS] hidden-struct-arg "impAppendStmt" <System.Numerics.Vector`1[System.__Canon]> +; V08 tmp3 [V08,T04] ( 2, 4 ) int -> ebx "spilling helperCall" +; V09 tmp4 [V09 ] ( 2, 4 ) struct (32) [ebp-0x54] do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument" <System.Numerics.Vector`1[System.__Canon]> +; V10 tmp5 [V10,T05] ( 2, 4 ) int -> esi "spilling helperCall" +; V11 tmp6 [V11 ] ( 2, 4 ) struct (32) [ebp-0x74] do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument" <System.Numerics.Vector`1[System.__Canon]> +; V12 tmp7 [V12,T06] ( 2, 4 ) long -> [ebp-0x34] do-not-enreg[H] hidden-struct-arg "field V07._00 (fldOffset=0x0)" P-DEP +; V13 tmp8 [V13,T07] ( 2, 4 ) long -> [ebp-0x2C] do-not-enreg[H] hidden-struct-arg "field V07._01 (fldOffset=0x8)" P-DEP +; V14 tmp9 [V14,T08] ( 2, 4 ) long -> [ebp-0x54] do-not-enreg[H] hidden-struct-arg "field V09._00 (fldOffset=0x0)" P-DEP +; V15 tmp10 [V15,T09] ( 2, 4 ) long -> [ebp-0x4C] do-not-enreg[H] hidden-struct-arg "field V09._01 (fldOffset=0x8)" P-DEP +; V16 tmp11 [V16,T10] ( 2, 4 ) long -> [ebp-0x74] do-not-enreg[H] hidden-struct-arg "field V11._00 (fldOffset=0x0)" P-DEP +; V17 tmp12 [V17,T11] ( 2, 4 ) long -> [ebp-0x6C] do-not-enreg[H] hidden-struct-arg "field V11._01 (fldOffset=0x8)" P-DEP
;
-; Lcl frame size = 100
+; Lcl frame size = 104
G_M60713_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp mov ebp, esp push edi push esi
- sub esp, 100
+ push ebx + sub esp, 104
vzeroupper
- mov dword ptr [ebp-0x0C], edx - mov esi, ecx - ; byrRegs +[esi] - ;; size=16 bbWeight=1 PerfScore 5.75 -G_M60713_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz - mov ecx, dword ptr [edx+0x20] - mov edi, dword ptr [ecx+0x08] - test edi, edi - je SHORT G_M60713_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M60713_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz - jmp SHORT G_M60713_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M60713_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref - mov ecx, edx
+ mov dword ptr [ebp-0x10], edx + mov edi, ecx + ; byrRegs +[edi] + mov esi, edx + ;; size=19 bbWeight=1 PerfScore 7.00 +G_M60713_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref + mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edi, eax - ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M60713_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref - mov edx, edi
+ call CORINFO_HELP_MEMCPY + mov ebx, eax + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x14], eax
sub esp, 32 vmovdqu xmm0, xmmword ptr [ebp+0x28] vmovdqu xmmword ptr [esp], xmm0 @@ -69,53 +60,65 @@ G_M60713_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {e vmovdqu xmmword ptr [esp], xmm0 vmovdqu xmm0, xmmword ptr [ebp+0x58] vmovdqu xmmword ptr [esp+0x10], xmm0
- lea ecx, [ebp-0x2C]
+ lea ecx, [ebp-0x34] + mov edx, ebx
call [System.Numerics.Vector`1[System.__Canon]:op_BitwiseAnd(System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon]]
- mov edx, edi
+ mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov ebx, eax
sub esp, 32 vmovdqu xmm0, xmmword ptr [ebp+0x48] vmovdqu xmmword ptr [esp], xmm0 vmovdqu xmm0, xmmword ptr [ebp+0x58] vmovdqu xmmword ptr [esp+0x10], xmm0
- lea ecx, [ebp-0x4C]
+ lea ecx, [ebp-0x54] + mov edx, dword ptr [ebp-0x14]
call [System.Numerics.Vector`1[System.__Canon]:op_OnesComplement(System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon]]
+ mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov esi, eax
sub esp, 32 vmovdqu xmm0, xmmword ptr [ebp+0x08] vmovdqu xmmword ptr [esp], xmm0 vmovdqu xmm0, xmmword ptr [ebp+0x18] vmovdqu xmmword ptr [esp+0x10], xmm0 sub esp, 32
- vmovdqu xmm0, xmmword ptr [ebp-0x4C]
+ vmovdqu xmm0, xmmword ptr [ebp-0x54]
vmovdqu xmmword ptr [esp], xmm0
- vmovdqu xmm0, xmmword ptr [ebp-0x3C]
+ vmovdqu xmm0, xmmword ptr [ebp-0x44]
vmovdqu xmmword ptr [esp+0x10], xmm0
- lea ecx, [ebp-0x6C] - mov edx, edi
+ lea ecx, [ebp-0x74] + mov edx, ebx
call [System.Numerics.Vector`1[System.__Canon]:op_BitwiseAnd(System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon]] sub esp, 32
- vmovdqu xmm0, xmmword ptr [ebp-0x2C]
+ vmovdqu xmm0, xmmword ptr [ebp-0x34]
vmovdqu xmmword ptr [esp], xmm0
- vmovdqu xmm0, xmmword ptr [ebp-0x1C]
+ vmovdqu xmm0, xmmword ptr [ebp-0x24] + ;; size=229 bbWeight=1 PerfScore 79.25 +G_M60713_IG03: ; bbWeight=1, extend
vmovdqu xmmword ptr [esp+0x10], xmm0 sub esp, 32
- vmovdqu xmm0, xmmword ptr [ebp-0x6C]
+ vmovdqu xmm0, xmmword ptr [ebp-0x74]
vmovdqu xmmword ptr [esp], xmm0
- vmovdqu xmm0, xmmword ptr [ebp-0x5C]
+ vmovdqu xmm0, xmmword ptr [ebp-0x64]
vmovdqu xmmword ptr [esp+0x10], xmm0
- mov ecx, esi
+ mov ecx, edi
; byrRegs +[ecx]
- mov edx, edi
+ mov edx, esi
call [System.Numerics.Vector`1[System.__Canon]:op_BitwiseOr(System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon]]
- ; byrRegs -[ecx esi] - ;; size=211 bbWeight=1 PerfScore 86.50 -G_M60713_IG06: ; bbWeight=1, epilog, nogc, extend - lea esp, [ebp-0x08]
+ ; byrRegs -[ecx edi] + ;; size=40 bbWeight=1 PerfScore 15.75 +G_M60713_IG04: ; bbWeight=1, epilog, nogc, extend + lea esp, [ebp-0x0C] + pop ebx
pop esi pop edi pop ebp ret 96
- ;; size=9 bbWeight=1 PerfScore 4.00
+ ;; size=10 bbWeight=1 PerfScore 4.50
-; Total bytes of code 262, prolog size 14, PerfScore 103.45, instruction count 69, allocated bytes for code 262 (MethodHash=badf12d6) for method System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
+; Total bytes of code 298, prolog size 15, PerfScore 106.50, instruction count 79, allocated bytes for code 298 (MethodHash=badf12d6) for method System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
; ============================================================

+31 (+16.06%) : 4154.dasm - System.Numerics.Vector:CreateSequenceSystem.__Canon:System.Numerics.Vector`1System.__Canon

@@ -7,28 +7,25 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T03] ( 3, 3 ) byref -> esi single-def -; V01 arg0 [V01,T04] ( 3, 3 ) ref -> edi class-hnd single-def <System.__Canon> -; V02 arg1 [V02,T14] ( 1, 1 ) ref -> [ebp+0x0C] class-hnd single-def <System.__Canon> -; V03 TypeCtx [V03,T12] ( 3, 2.20) int -> ecx single-def -;* V04 loc0 [V04,T13] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V05 loc1 [V05,T06] ( 2, 4 ) int -> edx "spilling helperCall" -; V06 tmp2 [V06 ] ( 2, 4 ) struct (32) [ebp-0x30] do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument" <System.Numerics.Vector`1[System.__Canon]> -; V07 tmp3 [V07 ] ( 3, 6 ) struct (32) [ebp-0x50] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Vector`1[System.__Canon]> -; V08 tmp4 [V08,T00] ( 3, 6 ) int -> [ebp-0x54] spill-single-def "spilling helperCall" -; V09 tmp5 [V09 ] ( 2, 4 ) struct (32) [ebp-0x74] do-not-enreg[HS] hidden-struct-arg "impAppendStmt" <System.Numerics.Vector`1[System.__Canon]> -; V10 tmp6 [V10,T07] ( 2, 4 ) int -> edx "spilling helperCall" -; V11 tmp7 [V11,T08] ( 2, 4 ) long -> [ebp-0x30] do-not-enreg[H] hidden-struct-arg "field V06._00 (fldOffset=0x0)" P-DEP -; V12 tmp8 [V12,T09] ( 2, 4 ) long -> [ebp-0x28] do-not-enreg[H] hidden-struct-arg "field V06._01 (fldOffset=0x8)" P-DEP -; V13 tmp9 [V13 ] ( 3, 6 ) long -> [ebp-0x50] do-not-enreg[X] addr-exposed "field V07._00 (fldOffset=0x0)" P-DEP -; V14 tmp10 [V14 ] ( 3, 6 ) long -> [ebp-0x48] do-not-enreg[X] addr-exposed "field V07._01 (fldOffset=0x8)" P-DEP -; V15 tmp11 [V15,T10] ( 2, 4 ) long -> [ebp-0x74] do-not-enreg[H] hidden-struct-arg "field V09._00 (fldOffset=0x0)" P-DEP -; V16 tmp12 [V16,T11] ( 2, 4 ) long -> [ebp-0x6C] do-not-enreg[H] hidden-struct-arg "field V09._01 (fldOffset=0x8)" P-DEP -; V17 cse0 [V17,T02] ( 4, 4 ) int -> ebx "CSE - aggressive" -; V18 rat0 [V18,T05] ( 3, 4 ) int -> ebx "runtime lookup" -; V19 rat1 [V19,T01] ( 3, 5.60) int -> ebx "fgMakeTemp is creating a new local variable"
+; V00 RetBuf [V00,T01] ( 3, 3 ) byref -> edi single-def +; V01 arg0 [V01,T02] ( 3, 3 ) ref -> ebx class-hnd single-def <System.__Canon> +; V02 arg1 [V02,T11] ( 1, 1 ) ref -> [ebp+0x0C] class-hnd single-def <System.__Canon> +; V03 TypeCtx [V03,T00] ( 5, 5 ) int -> esi single-def +; V04 loc0 [V04,T03] ( 2, 4 ) int -> [ebp-0x14] spill-single-def "spilling helperCall" +; V05 loc1 [V05,T04] ( 2, 4 ) int -> [ebp-0x18] spill-single-def "spilling helperCall" +; V06 tmp2 [V06 ] ( 2, 4 ) struct (32) [ebp-0x38] do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument" <System.Numerics.Vector`1[System.__Canon]> +; V07 tmp3 [V07 ] ( 3, 6 ) struct (32) [ebp-0x58] do-not-enreg[XS] addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Vector`1[System.__Canon]> +; V08 tmp4 [V08,T05] ( 2, 4 ) int -> [ebp-0x5C] spill-single-def "spilling helperCall" +; V09 tmp5 [V09 ] ( 2, 4 ) struct (32) [ebp-0x7C] do-not-enreg[HS] hidden-struct-arg "impAppendStmt" <System.Numerics.Vector`1[System.__Canon]> +; V10 tmp6 [V10,T06] ( 2, 4 ) int -> edx "spilling helperCall" +; V11 tmp7 [V11,T07] ( 2, 4 ) long -> [ebp-0x38] do-not-enreg[H] hidden-struct-arg "field V06._00 (fldOffset=0x0)" P-DEP +; V12 tmp8 [V12,T08] ( 2, 4 ) long -> [ebp-0x30] do-not-enreg[H] hidden-struct-arg "field V06._01 (fldOffset=0x8)" P-DEP +; V13 tmp9 [V13 ] ( 3, 6 ) long -> [ebp-0x58] do-not-enreg[X] addr-exposed "field V07._00 (fldOffset=0x0)" P-DEP +; V14 tmp10 [V14 ] ( 3, 6 ) long -> [ebp-0x50] do-not-enreg[X] addr-exposed "field V07._01 (fldOffset=0x8)" P-DEP +; V15 tmp11 [V15,T09] ( 2, 4 ) long -> [ebp-0x7C] do-not-enreg[H] hidden-struct-arg "field V09._00 (fldOffset=0x0)" P-DEP +; V16 tmp12 [V16,T10] ( 2, 4 ) long -> [ebp-0x74] do-not-enreg[H] hidden-struct-arg "field V09._01 (fldOffset=0x8)" P-DEP
;
-; Lcl frame size = 104
+; Lcl frame size = 112
G_M12893_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -36,72 +33,71 @@ G_M12893_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 104
+ sub esp, 112
vzeroupper mov eax, dword ptr [ebp+0x08] mov dword ptr [ebp-0x10], eax
- mov esi, ecx - ; byrRegs +[esi] - mov edi, edx - ; gcrRegs +[edi] - mov ecx, dword ptr [ebp+0x08]
+ mov edi, ecx + ; byrRegs +[edi] + mov ebx, edx + ; gcrRegs +[ebx] + mov esi, dword ptr [ebp+0x08]
;; size=25 bbWeight=1 PerfScore 10.00
-G_M12893_IG02: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - mov edx, dword ptr [ecx+0x20] - mov ebx, dword ptr [edx+0x08] - test ebx, ebx - je SHORT G_M12893_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M12893_IG03: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - jmp SHORT G_M12893_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M12893_IG04: ; bbWeight=0.20, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref
+G_M12893_IG02: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000080 {edi}, byref + mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov ebx, eax - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M12893_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref - mov edx, ebx - lea ecx, [ebp-0x30]
+ call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x14], eax + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x18], eax + lea ecx, [ebp-0x38] + mov edx, dword ptr [ebp-0x14]
call [System.Numerics.Vector`1[System.__Canon]:get_Indices():System.Numerics.Vector`1[System.__Canon]] vxorps ymm0, ymm0, ymm0
- vmovdqu ymmword ptr [ebp-0x50], ymm0 - mov eax, ebx - mov dword ptr [ebp-0x54], eax
+ vmovdqu ymmword ptr [ebp-0x58], ymm0 + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x5C], eax
sub esp, 32
- vmovdqu xmm0, xmmword ptr [ebp-0x30]
+ vmovdqu xmm0, xmmword ptr [ebp-0x38]
vmovdqu xmmword ptr [esp], xmm0
- vmovdqu xmm0, xmmword ptr [ebp-0x20]
+ vmovdqu xmm0, xmmword ptr [ebp-0x28]
vmovdqu xmmword ptr [esp+0x10], xmm0
- push eax - lea ecx, [ebp-0x74]
+ push dword ptr [ebp-0x18] + lea ecx, [ebp-0x7C]
mov edx, gword ptr [ebp+0x0C] ; gcrRegs +[edx] call [System.Numerics.Vector`1[System.__Canon]:op_Multiply(System.Numerics.Vector`1[System.__Canon],System.__Canon):System.Numerics.Vector`1[System.__Canon]] ; gcrRegs -[edx]
- push dword ptr [ebp-0x54] - lea ecx, [ebp-0x50] - mov edx, edi
+ push dword ptr [ebp-0x5C] + lea ecx, [ebp-0x58] + mov edx, ebx
; gcrRegs +[edx] call [System.Numerics.Vector`1[System.__Canon]:.ctor(System.__Canon):this]
- ; gcrRegs -[edx edi] - mov edx, ebx - sub esp, 32 - vmovdqu xmm0, xmmword ptr [ebp-0x74] - vmovdqu xmmword ptr [esp], xmm0 - vmovdqu xmm0, xmmword ptr [ebp-0x64] - vmovdqu xmmword ptr [esp+0x10], xmm0 - sub esp, 32 - vmovdqu xmm0, xmmword ptr [ebp-0x50] - vmovdqu xmmword ptr [esp], xmm0 - vmovdqu xmm0, xmmword ptr [ebp-0x40] - vmovdqu xmmword ptr [esp+0x10], xmm0
+ ; gcrRegs -[edx ebx]
mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov edx, eax + sub esp, 32 + vmovdqu xmm0, xmmword ptr [ebp-0x7C] + vmovdqu xmmword ptr [esp], xmm0 + vmovdqu xmm0, xmmword ptr [ebp-0x6C] + vmovdqu xmmword ptr [esp+0x10], xmm0 + sub esp, 32 + vmovdqu xmm0, xmmword ptr [ebp-0x58] + vmovdqu xmmword ptr [esp], xmm0 + vmovdqu xmm0, xmmword ptr [ebp-0x48] + vmovdqu xmmword ptr [esp+0x10], xmm0 + mov ecx, edi
; byrRegs +[ecx] call [System.Numerics.Vector`1[System.__Canon]:op_Addition(System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon]]
- ; byrRegs -[ecx esi] - ;; size=134 bbWeight=1 PerfScore 50.83 -G_M12893_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; byrRegs -[ecx edi] + ;; size=189 bbWeight=1 PerfScore 59.33 +G_M12893_IG03: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -110,6 +106,6 @@ G_M12893_IG06: ; bbWeight=1, epilog, nogc, extend ret 8 ;; size=10 bbWeight=1 PerfScore 4.50
-; Total bytes of code 193, prolog size 18, PerfScore 72.48, instruction count 59, allocated bytes for code 193 (MethodHash=fae6cda2) for method System.Numerics.Vector:CreateSequence[System.__Canon](System.__Canon,System.__Canon):System.Numerics.Vector`1[System.__Canon] (FullOpts)
+; Total bytes of code 224, prolog size 18, PerfScore 73.83, instruction count 64, allocated bytes for code 224 (MethodHash=fae6cda2) for method System.Numerics.Vector:CreateSequence[System.__Canon](System.__Canon,System.__Canon):System.Numerics.Vector`1[System.__Canon] (FullOpts)
; ============================================================

libraries_tests.run.windows.x86.Release.mch

-26 (-38.81%) : 11613.dasm - System.Linq.Enumerable:EmptySystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -17,36 +17,21 @@ G_M41558_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x04], ecx mov dword ptr [ebp-0x08], ecx ;; size=12 bbWeight=1 PerfScore 3.50
-G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x08], 0 - je SHORT G_M41558_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M41558_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x08] - mov dword ptr [ebp-0x0C], eax - jmp SHORT G_M41558_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M41558_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x08] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x0C], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M41558_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x0C] call [<unknown method>] ; gcrRegs +[eax]
- ;; size=9 bbWeight=1 PerfScore 4.00 -G_M41558_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=25 bbWeight=1 PerfScore 7.25 +G_M41558_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 67, prolog size 9, PerfScore 23.30, instruction count 23, allocated bytes for code 67 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (Instrumented Tier0)
+; Total bytes of code 41, prolog size 9, PerfScore 12.50, instruction count 14, allocated bytes for code 41 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (Instrumented Tier0)
; ============================================================

-26 (-38.81%) : 6678.dasm - System.Linq.Enumerable:EmptySystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -17,36 +17,21 @@ G_M41558_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x04], ecx mov dword ptr [ebp-0x08], ecx ;; size=12 bbWeight=1 PerfScore 3.50
-G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x08], 0 - je SHORT G_M41558_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M41558_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x08] - mov dword ptr [ebp-0x0C], eax - jmp SHORT G_M41558_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M41558_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x08] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x0C], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M41558_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x0C] call [<unknown method>] ; gcrRegs +[eax]
- ;; size=9 bbWeight=1 PerfScore 4.00 -G_M41558_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=25 bbWeight=1 PerfScore 7.25 +G_M41558_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 67, prolog size 9, PerfScore 23.30, instruction count 23, allocated bytes for code 67 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
+; Total bytes of code 41, prolog size 9, PerfScore 12.50, instruction count 14, allocated bytes for code 41 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
; ============================================================

-26 (-38.81%) : 2383.dasm - System.Linq.Enumerable:EmptySystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -17,36 +17,21 @@ G_M41558_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x04], ecx mov dword ptr [ebp-0x08], ecx ;; size=12 bbWeight=1 PerfScore 3.50
-G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - cmp dword ptr [eax+0x08], 0 - je SHORT G_M41558_IG04 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M41558_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov eax, dword ptr [ebp-0x08] - mov eax, dword ptr [eax+0x20] - mov eax, dword ptr [eax+0x08] - mov dword ptr [ebp-0x0C], eax - jmp SHORT G_M41558_IG05 - ;; size=14 bbWeight=0.80 PerfScore 6.40 -G_M41558_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x08] mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x0C], eax
- ;; size=16 bbWeight=0.20 PerfScore 0.65 -G_M41558_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x0C] call [<unknown method>] ; gcrRegs +[eax]
- ;; size=9 bbWeight=1 PerfScore 4.00 -G_M41558_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=25 bbWeight=1 PerfScore 7.25 +G_M41558_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 67, prolog size 9, PerfScore 23.30, instruction count 23, allocated bytes for code 67 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
+; Total bytes of code 41, prolog size 9, PerfScore 12.50, instruction count 14, allocated bytes for code 41 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
; ============================================================

+6 (+2.84%) : 3549.dasm - System.Linq.Enumerable:gEnumerableToArray|296_0System.__Canon:System.Canon

@@ -8,12 +8,12 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T05] ( 3, 3 ) ref -> [ebp-0xC4] class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V01 TypeCtx [V01,T00] ( 7, 5.56) int -> ebx single-def
+; V00 arg0 [V00,T03] ( 3, 3 ) ref -> [ebp-0xC4] class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V01 TypeCtx [V01,T00] ( 8, 8 ) int -> ebx single-def
; V02 loc0 [V02 ] ( 1, 1 ) struct (32) [ebp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon]> ; V03 loc1 [V03 ] ( 5, 5 ) struct (136) [ebp-0xB8] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]>
-; V04 loc2 [V04,T12] ( 2, 2 ) ref -> edi class-hnd single-def <System.__Canon[]> -;* V05 loc3 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V04 loc2 [V04,T07] ( 2, 2 ) ref -> esi class-hnd single-def <System.__Canon[]> +; V05 loc3 [V05,T04] ( 2, 4 ) int -> edi "spilling helperCall"
;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V07 tmp2 [V07 ] ( 3, 6 ) struct ( 8) [ebp-0xC0] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" <System.Span`1[System.__Canon]> ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" @@ -24,14 +24,8 @@ ; V13 tmp8 [V13,T02] ( 3, 6 ) int -> [ebp-0xBC] do-not-enreg[H] hidden-struct-arg "field V07._length (fldOffset=0x4)" P-DEP ;* V14 tmp9 [V14 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x4)" P-INDEP
-; V16 tmp11 [V16,T10] ( 2, 4 ) int -> edx "argument with side effect" -; V17 tmp12 [V17,T11] ( 2, 4 ) int -> edx "argument with side effect" -; V18 cse0 [V18,T07] ( 4, 4 ) int -> esi "CSE - aggressive" -; V19 rat0 [V19,T08] ( 3, 4 ) int -> eax "runtime lookup" -; V20 rat1 [V20,T03] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable" -; V21 rat2 [V21,T09] ( 3, 4 ) int -> esi "runtime lookup" -; V22 rat3 [V22,T04] ( 3, 5.60) int -> ecx "spilling expr" -; V23 rat4 [V23,T06] ( 3, 4.48) int -> esi "fgMakeTemp is creating a new local variable"
+; V16 tmp11 [V16,T05] ( 2, 4 ) int -> edx "argument with side effect" +; V17 tmp12 [V17,T06] ( 2, 4 ) int -> edx "argument with side effect"
; ; Lcl frame size = 184 @@ -53,25 +47,18 @@ G_M19942_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; GC ptr vars +{V00} mov ebx, edx ;; size=56 bbWeight=1 PerfScore 17.08
-G_M19942_IG02: ; bbWeight=1, gcVars=00000020 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - mov ecx, dword ptr [ebx+0x20] - mov eax, dword ptr [ecx+0x08] - test eax, eax - je SHORT G_M19942_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M19942_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M19942_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M19942_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M19942_IG02: ; bbWeight=1, gcVars=00000008 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M19942_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ call CORINFO_HELP_MEMCPY + mov edi, eax + mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY
push 8
- push eax - lea edx, [ebp-0x30]
+ push edi
lea ecx, [ebp-0xC0]
+ lea edx, [ebp-0x30]
call [<PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon]] lea edi, bword ptr [ebp-0x40] ; byrRegs +[edi] @@ -83,47 +70,37 @@ G_M19942_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} lea esi, bword ptr [ebp-0xC0] movsd movsd
- mov ecx, dword ptr [ebx+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M19942_IG08 - ;; size=49 bbWeight=1 PerfScore 18.00 -G_M19942_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - ; byrRegs -[esi edi] - mov esi, dword ptr [ecx+0x0C] - test esi, esi - je SHORT G_M19942_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M19942_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M19942_IG09 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M19942_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov esi, eax - ;; size=14 bbWeight=0.36 PerfScore 0.63 -G_M19942_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - push esi
+ call CORINFO_HELP_MEMCPY + ; byrRegs -[esi edi] + push eax
lea ecx, [ebp-0xB8] mov edx, gword ptr [ebp-0xC4] ; gcrRegs +[edx] ; GC ptr vars -{V00} call [<unknown method>] ; gcrRegs -[edx]
- mov edx, esi
+ mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov edx, eax
lea ecx, [ebp-0xB8] call [System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:ToArray():System.__Canon[]:this] ; gcrRegs +[eax]
- mov edi, eax - ; gcrRegs +[edi] - mov edx, esi
+ mov esi, eax + ; gcrRegs +[esi] + mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax] + mov edx, eax
lea ecx, [ebp-0xB8] call [System.Collections.Generic.SegmentedArrayBuilder`1[System.__Canon]:Dispose():this]
- ; gcrRegs -[eax] - mov eax, edi
+ mov eax, esi
; gcrRegs +[eax]
- ;; size=51 bbWeight=1 PerfScore 13.50 -G_M19942_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=153 bbWeight=1 PerfScore 33.25 +G_M19942_IG03: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -132,6 +109,6 @@ G_M19942_IG10: ; bbWeight=1, epilog, nogc, extend ret ;; size=8 bbWeight=1 PerfScore 3.50
-; Total bytes of code 211, prolog size 48, PerfScore 63.74, instruction count 65, allocated bytes for code 211 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
+; Total bytes of code 217, prolog size 48, PerfScore 53.83, instruction count 62, allocated bytes for code 217 (MethodHash=008eb219) for method System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
; ============================================================

+11 (+5.24%) : 8479.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)

@@ -5,22 +5,23 @@ ; optimized using Dynamic PGO ; ebp based frame ; partially interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 8
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 8
; 2 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T01] ( 5, 3.25) ref -> edi this class-hnd single-def <System.Collections.Hashtable> ; V01 arg1 [V01,T00] ( 13, 5.06) ref -> esi class-hnd single-def <System.Object> ; V02 arg2 [V02,T02] ( 5, 2.25) ref -> ebx class-hnd single-def <System.Object>
-; V03 tmp0 [V03,T06] ( 4, 0.42) int -> eax "guarded devirt return temp"
+; V03 tmp0 [V03,T08] ( 4, 0.38) int -> eax "guarded devirt return temp"
;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.String> ;* V05 tmp2 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V06 tmp3 [V06 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V08 tmp5 [V08,T03] ( 6, 1.02) ref -> ebx class-hnd exact "Inline stloc first use temp" <System.String> -; V09 tmp6 [V09,T05] ( 2, 0.51) byref -> ecx single-def "impAppendStmt" -; V10 tmp7 [V10,T04] ( 3, 1 ) int -> ebx "Single return block return value" -; V11 tmp8 [V11,T07] ( 2, 0 ) ref -> ecx single-def "argument with side effect"
+; V07 tmp4 [V07,T05] ( 5, 0.93) ref -> ebx class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V08 tmp5 [V08,T06] ( 2, 0.51) byref -> ecx single-def "impAppendStmt" +; V09 tmp6 [V09,T04] ( 3, 1 ) int -> ebx "Single return block return value" +; V10 tmp7 [V10,T09] ( 2, 0 ) ref -> ecx single-def "argument with side effect" +; V11 rat0 [V11,T03] ( 5, 1.88) ref -> ebx "replacement local" +; V12 rat1 [V12,T07] ( 2, 0.50) int -> ecx "CSE for expectedClsNode"
; ; Lcl frame size = 0 @@ -49,7 +50,7 @@ G_M51920_IG02: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs= ;; size=20 bbWeight=1 PerfScore 4.75 G_M51920_IG03: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz cmp gword ptr [edi+0x04], esi
- je G_M51920_IG14
+ je G_M51920_IG18
cmp esi, ebx jne SHORT G_M51920_IG06 ;; size=13 bbWeight=1 PerfScore 5.25 @@ -67,25 +68,35 @@ G_M51920_IG05: ; bbWeight=0.75, epilog, nogc, extend G_M51920_IG06: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs +[ebx esi edi] cmp gword ptr [edi+0x10], 0
- jne SHORT G_M51920_IG16
+ jne SHORT G_M51920_IG15
test esi, esi
- je SHORT G_M51920_IG14
+ je G_M51920_IG18
cmp dword ptr [esi], 0xD1FFAB1E jne SHORT G_M51920_IG17 test ebx, ebx
- je SHORT G_M51920_IG13 - ;; size=22 bbWeight=0.25 PerfScore 2.62 -G_M51920_IG07: ; bbWeight=0.09, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+ je SHORT G_M51920_IG09 + ;; size=26 bbWeight=0.25 PerfScore 2.62 +G_M51920_IG07: ; bbWeight=0.12, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[edi]
- cmp dword ptr [ebx], 0xD1FFAB1E - jne SHORT G_M51920_IG13 - ;; size=8 bbWeight=0.09 PerfScore 0.35 -G_M51920_IG08: ; bbWeight=0.17, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, 0xD1FFAB1E ; System.String + cmp dword ptr [ebx], ecx + je SHORT G_M51920_IG09 + ;; size=9 bbWeight=0.12 PerfScore 0.53 +G_M51920_IG08: ; bbWeight=0.06, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[ebx] + xor ebx, ebx + ; gcrRegs +[ebx] + ;; size=2 bbWeight=0.06 PerfScore 0.02 +G_M51920_IG09: ; bbWeight=0.25, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz + test ebx, ebx + je SHORT G_M51920_IG16 + ;; size=4 bbWeight=0.25 PerfScore 0.31 +G_M51920_IG10: ; bbWeight=0.17, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi+0x04] cmp ecx, dword ptr [ebx+0x04]
- jne SHORT G_M51920_IG13
+ jne SHORT G_M51920_IG16
;; size=8 bbWeight=0.17 PerfScore 1.05
-G_M51920_IG09: ; bbWeight=0.13, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+G_M51920_IG11: ; bbWeight=0.13, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
mov ecx, 1 call [System.Diagnostics.Debug:Assert(ubyte)] mov ecx, 1 @@ -106,34 +117,20 @@ G_M51920_IG09: ; bbWeight=0.13, gcrefRegs=00000048 {ebx esi}, byrefRegs=0 ; gcrRegs -[ebx esi] ; byrRegs -[ecx edx] ;; size=58 bbWeight=0.13 PerfScore 2.95
-G_M51920_IG10: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M51920_IG12: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
movzx ebx, al ;; size=3 bbWeight=0.25 PerfScore 0.06
-G_M51920_IG11: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M51920_IG13: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
movzx eax, bl ;; size=3 bbWeight=0.25 PerfScore 0.06
-G_M51920_IG12: ; bbWeight=0.25, epilog, nogc, extend
+G_M51920_IG14: ; bbWeight=0.25, epilog, nogc, extend
pop ebx pop esi pop edi pop ebp ret 4 ;; size=7 bbWeight=0.25 PerfScore 1.00
-G_M51920_IG13: ; bbWeight=0.04, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - xor eax, eax - jmp SHORT G_M51920_IG10 - ;; size=4 bbWeight=0.04 PerfScore 0.10 -G_M51920_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - xor eax, eax - ;; size=2 bbWeight=0 PerfScore 0.00 -G_M51920_IG15: ; bbWeight=0, epilog, nogc, extend - pop ebx - pop esi - pop edi - pop ebp - ret 4 - ;; size=7 bbWeight=0 PerfScore 0.00 -G_M51920_IG16: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M51920_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ebx esi edi] mov ecx, gword ptr [edi+0x10] ; gcrRegs +[ecx] @@ -143,8 +140,12 @@ G_M51920_IG16: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx call [<unknown method>] ; gcrRegs -[ecx edx ebx esi edi] mov ebx, eax
- jmp SHORT G_M51920_IG11
+ jmp SHORT G_M51920_IG13
;; size=16 bbWeight=0 PerfScore 0.00
+G_M51920_IG16: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz + xor eax, eax + jmp SHORT G_M51920_IG12 + ;; size=4 bbWeight=0 PerfScore 0.00
G_M51920_IG17: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs +[ebx esi] mov ecx, esi @@ -155,9 +156,19 @@ G_M51920_IG17: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=0000 mov eax, dword ptr [eax+0x2C] call [eax+0x08]<unknown method> ; gcrRegs -[ecx edx ebx esi]
- jmp SHORT G_M51920_IG10
+ jmp SHORT G_M51920_IG12
;; size=14 bbWeight=0 PerfScore 0.00
+G_M51920_IG18: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref + xor eax, eax + ;; size=2 bbWeight=0 PerfScore 0.00 +G_M51920_IG19: ; bbWeight=0, epilog, nogc, extend + pop ebx + pop esi + pop edi + pop ebp + ret 4 + ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 210, prolog size 6, PerfScore 27.13, instruction count 78, allocated bytes for code 210 (MethodHash=350c352f) for method System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
+; Total bytes of code 221, prolog size 6, PerfScore 27.54, instruction count 82, allocated bytes for code 221 (MethodHash=350c352f) for method System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
; ============================================================

+17 (+7.94%) : 3931.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)

@@ -12,15 +12,16 @@ ; V00 this [V00,T01] ( 5, 3.25) ref -> edi this class-hnd single-def <System.Collections.Hashtable> ; V01 arg1 [V01,T00] ( 13, 4.87) ref -> esi class-hnd single-def <System.Object> ; V02 arg2 [V02,T02] ( 5, 2.25) ref -> ebx class-hnd single-def <System.Object>
-; V03 tmp0 [V03,T06] ( 4, 0.34) int -> eax "guarded devirt return temp"
+; V03 tmp0 [V03,T08] ( 4, 0.34) int -> eax "guarded devirt return temp"
;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.String> ;* V05 tmp2 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V06 tmp3 [V06 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -; V08 tmp5 [V08,T04] ( 6, 0.85) ref -> ebx class-hnd exact "Inline stloc first use temp" <System.String> -; V09 tmp6 [V09,T05] ( 2, 0.34) byref -> ecx single-def "impAppendStmt" -; V10 tmp7 [V10,T03] ( 3, 1 ) int -> ebx "Single return block return value" -; V11 tmp8 [V11,T07] ( 2, 0 ) ref -> ecx single-def "argument with side effect"
+; V07 tmp4 [V07,T05] ( 5, 0.79) ref -> ebx class-hnd exact single-def "Inline stloc first use temp" <System.String> +; V08 tmp5 [V08,T07] ( 2, 0.34) byref -> ecx single-def "impAppendStmt" +; V09 tmp6 [V09,T04] ( 3, 1 ) int -> ebx "Single return block return value" +; V10 tmp7 [V10,T09] ( 2, 0 ) ref -> ecx single-def "argument with side effect" +; V11 rat0 [V11,T03] ( 5, 1.88) ref -> ebx "replacement local" +; V12 rat1 [V12,T06] ( 2, 0.50) int -> ecx "CSE for expectedClsNode"
; ; Lcl frame size = 0 @@ -49,7 +50,7 @@ G_M51920_IG02: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs= ;; size=20 bbWeight=1 PerfScore 4.75 G_M51920_IG03: ; bbWeight=1, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz cmp gword ptr [edi+0x04], esi
- je G_M51920_IG15
+ je G_M51920_IG16
cmp esi, ebx jne SHORT G_M51920_IG06 ;; size=13 bbWeight=1 PerfScore 5.25 @@ -67,30 +68,25 @@ G_M51920_IG05: ; bbWeight=0.75, epilog, nogc, extend G_M51920_IG06: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs +[ebx esi edi] cmp gword ptr [edi+0x10], 0
- jne G_M51920_IG17
+ jne G_M51920_IG18
test esi, esi
- je SHORT G_M51920_IG15
+ je G_M51920_IG16
cmp dword ptr [esi], 0xD1FFAB1E
- jne SHORT G_M51920_IG14
+ jne SHORT G_M51920_IG15
test ebx, ebx
- jne SHORT G_M51920_IG08 - ;; size=26 bbWeight=0.25 PerfScore 2.62 -G_M51920_IG07: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[ebx esi edi] - xor eax, eax - jmp SHORT G_M51920_IG11 - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M51920_IG08: ; bbWeight=0.06, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs +[ebx esi] - cmp dword ptr [ebx], 0xD1FFAB1E - jne SHORT G_M51920_IG07 - ;; size=8 bbWeight=0.06 PerfScore 0.23 -G_M51920_IG09: ; bbWeight=0.12, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M51920_IG13 + ;; size=30 bbWeight=0.25 PerfScore 2.62 +G_M51920_IG07: ; bbWeight=0.25, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref + ; gcrRegs -[edi] + test ebx, ebx + je G_M51920_IG19 + ;; size=8 bbWeight=0.25 PerfScore 0.31 +G_M51920_IG08: ; bbWeight=0.12, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi+0x04] cmp ecx, dword ptr [ebx+0x04]
- jne SHORT G_M51920_IG07
+ jne SHORT G_M51920_IG19
;; size=8 bbWeight=0.12 PerfScore 0.70
-G_M51920_IG10: ; bbWeight=0.09, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+G_M51920_IG09: ; bbWeight=0.09, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
mov ecx, 1 call [System.Diagnostics.Debug:Assert(ubyte)] mov ecx, 1 @@ -111,21 +107,32 @@ G_M51920_IG10: ; bbWeight=0.09, gcrefRegs=00000048 {ebx esi}, byrefRegs=0 ; gcrRegs -[ebx esi] ; byrRegs -[ecx edx] ;; size=58 bbWeight=0.09 PerfScore 1.96
-G_M51920_IG11: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M51920_IG10: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
movzx ebx, al ;; size=3 bbWeight=0.25 PerfScore 0.06
-G_M51920_IG12: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M51920_IG11: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
movzx eax, bl ;; size=3 bbWeight=0.25 PerfScore 0.06
-G_M51920_IG13: ; bbWeight=0.25, epilog, nogc, extend
+G_M51920_IG12: ; bbWeight=0.25, epilog, nogc, extend
pop ebx pop esi pop edi pop ebp ret 4 ;; size=7 bbWeight=0.25 PerfScore 1.00
-G_M51920_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M51920_IG13: ; bbWeight=0.12, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ebx esi]
+ mov ecx, 0xD1FFAB1E ; System.String + cmp dword ptr [ebx], ecx + je SHORT G_M51920_IG07 + ;; size=9 bbWeight=0.12 PerfScore 0.53 +G_M51920_IG14: ; bbWeight=0.06, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz + ; gcrRegs -[ebx] + xor ebx, ebx + ; gcrRegs +[ebx] + jmp SHORT G_M51920_IG07 + ;; size=4 bbWeight=0.06 PerfScore 0.14 +G_M51920_IG15: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
mov ecx, esi ; gcrRegs +[ecx] mov edx, ebx @@ -134,19 +141,19 @@ G_M51920_IG14: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000048 {ebx mov eax, dword ptr [eax+0x2C] call [eax+0x08]<unknown method> ; gcrRegs -[ecx edx ebx esi]
- jmp SHORT G_M51920_IG11
+ jmp SHORT G_M51920_IG10
;; size=14 bbWeight=0 PerfScore 0.00
-G_M51920_IG15: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M51920_IG16: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor eax, eax ;; size=2 bbWeight=0 PerfScore 0.00
-G_M51920_IG16: ; bbWeight=0, epilog, nogc, extend
+G_M51920_IG17: ; bbWeight=0, epilog, nogc, extend
pop ebx pop esi pop edi pop ebp ret 4 ;; size=7 bbWeight=0 PerfScore 0.00
-G_M51920_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M51920_IG18: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[ebx esi edi] mov ecx, gword ptr [edi+0x10] ; gcrRegs +[ecx] @@ -156,9 +163,13 @@ G_M51920_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=000000C8 {ebx call [<unknown method>] ; gcrRegs -[ecx edx ebx esi edi] mov ebx, eax
- jmp SHORT G_M51920_IG12
+ jmp SHORT G_M51920_IG11
;; size=16 bbWeight=0 PerfScore 0.00
+G_M51920_IG19: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz + xor eax, eax + jmp SHORT G_M51920_IG10 + ;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 214, prolog size 6, PerfScore 25.59, instruction count 78, allocated bytes for code 214 (MethodHash=350c352f) for method System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
+; Total bytes of code 231, prolog size 6, PerfScore 26.34, instruction count 83, allocated bytes for code 231 (MethodHash=350c352f) for method System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
; ============================================================

librariestestsnotieredcompilation.run.windows.x86.Release.mch

-14 (-32.56%) : 3256.dasm - System.Linq.Enumerable:EmptySystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -7,10 +7,8 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> ecx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> ecx single-def
;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V02 rat0 [V02,T02] ( 3, 4 ) int -> edx "runtime lookup" -; V03 rat1 [V03,T01] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 4 @@ -20,31 +18,19 @@ G_M41558_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push eax mov dword ptr [ebp-0x04], ecx ;; size=7 bbWeight=1 PerfScore 3.25
-G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [ecx+0x20] - mov edx, dword ptr [edx+0x08] - test edx, edx - je SHORT G_M41558_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M41558_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M41558_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M41558_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M41558_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edx, eax - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M41558_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - mov ecx, edx
+ call CORINFO_HELP_MEMCPY + mov ecx, eax
call [System.Array:Empty[System.__Canon]():System.__Canon[]] ; gcrRegs +[eax]
- ;; size=8 bbWeight=1 PerfScore 3.25 -G_M41558_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=18 bbWeight=1 PerfScore 4.50 +G_M41558_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 43, prolog size 7, PerfScore 15.40, instruction count 17, allocated bytes for code 43 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 29, prolog size 7, PerfScore 9.50, instruction count 11, allocated bytes for code 29 (MethodHash=4b205da9) for method System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================

-42 (-32.06%) : 5298.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListPool:ToListAndFreeSystem.__Canon:Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)

@@ -7,16 +7,13 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T03] ( 3, 3 ) ref -> edi this class-hnd single-def <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListPool>
+; V00 this [V00,T01] ( 3, 3 ) ref -> edi this class-hnd single-def <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListPool>
; V01 arg1 [V01,T00] ( 4, 4 ) byref -> esi single-def
-; V02 TypeCtx [V02,T07] ( 5, 3.56) int -> ebx single-def -; V03 loc0 [V03,T05] ( 3, 4 ) int -> [ebp-0x14] "spilling helperCall" -; V04 tmp1 [V04,T06] ( 3, 4 ) int -> ebx "spilling helperCall"
+; V02 TypeCtx [V02,T04] ( 3, 3 ) int -> ebx single-def +; V03 loc0 [V03,T02] ( 2, 4 ) int -> [ebp-0x14] spill-single-def "spilling helperCall" +; V04 tmp1 [V04,T03] ( 2, 4 ) int -> ebx "spilling helperCall"
;* V05 tmp2 [V05 ] ( 0, 0 ) struct ( 4) zero-ref single-def "impAppendStmt" <Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]>
-; V06 tmp3 [V06,T08] ( 2, 2 ) ref -> [ebp-0x18] spill-single-def "field V05._list (fldOffset=0x0)" P-INDEP -; V07 rat0 [V07,T01] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable" -; V08 rat1 [V08,T02] ( 3, 5.60) int -> ecx "spilling expr" -; V09 rat2 [V09,T04] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T05] ( 2, 2 ) ref -> [ebp-0x18] spill-single-def "field V05._list (fldOffset=0x0)" P-INDEP
; ; Lcl frame size = 12 @@ -35,53 +32,18 @@ G_M15751_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; byrRegs +[esi] mov ebx, dword ptr [ebp+0x08] ;; size=22 bbWeight=1 PerfScore 9.00
-G_M15751_IG02: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - mov ecx, dword ptr [ebx+0x20] - mov eax, dword ptr [ecx+0x08] - test eax, eax - je SHORT G_M15751_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M15751_IG03: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - jmp SHORT G_M15751_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M15751_IG04: ; bbWeight=0.20, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref
+G_M15751_IG02: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov dword ptr [ebp-0x14], eax
- ;; size=15 bbWeight=0.20 PerfScore 0.50 -G_M15751_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - mov ecx, dword ptr [ebx+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M15751_IG09 - ;; size=9 bbWeight=1 PerfScore 6.00 -G_M15751_IG06: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - mov edx, dword ptr [ecx+0x0C] - test edx, edx - je SHORT G_M15751_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M15751_IG07: ; bbWeight=0.64, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - mov ebx, edx - jmp SHORT G_M15751_IG11 - ;; size=4 bbWeight=0.64 PerfScore 1.44 -G_M15751_IG08: ; bbWeight=0.40, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz - mov dword ptr [ebp-0x14], eax - jmp SHORT G_M15751_IG10 - ;; size=5 bbWeight=0.40 PerfScore 1.20 -G_M15751_IG09: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref - mov dword ptr [ebp-0x14], eax - ;; size=3 bbWeight=0.50 PerfScore 0.50 -G_M15751_IG10: ; bbWeight=0.36, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov ebx, eax
- mov eax, dword ptr [ebp-0x14] - ;; size=17 bbWeight=0.36 PerfScore 0.99 -G_M15751_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref
mov ecx, esi ; byrRegs +[ecx]
- mov edx, eax
+ mov edx, dword ptr [ebp-0x14]
call [Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxListBuilder`1[System.__Canon]:ToList():Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this] ; gcrRegs +[eax] ; byrRegs -[ecx] @@ -97,8 +59,8 @@ G_M15751_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 ; byrRegs -[edx esi] mov eax, gword ptr [ebp-0x18] ; gcrRegs +[eax]
- ;; size=27 bbWeight=1 PerfScore 10.00 -G_M15751_IG12: ; bbWeight=1, epilog, nogc, extend
+ ;; size=57 bbWeight=1 PerfScore 15.00 +G_M15751_IG03: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -107,6 +69,6 @@ G_M15751_IG12: ; bbWeight=1, epilog, nogc, extend ret 4 ;; size=10 bbWeight=1 PerfScore 4.50
-; Total bytes of code 131, prolog size 15, PerfScore 43.58, instruction count 51, allocated bytes for code 131 (MethodHash=a516c278) for method Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListPool:ToListAndFree[System.__Canon](byref):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)
+; Total bytes of code 89, prolog size 15, PerfScore 28.50, instruction count 34, allocated bytes for code 89 (MethodHash=a516c278) for method Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListPool:ToListAndFree[System.__Canon](byref):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)
; ============================================================

-30 (-30.30%) : 3364.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilderSystem.ValueTuple3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray1+Builder[System.ValueTuple`3[int,int,System.__Canon]

@@ -7,17 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> esi single-def
+; V00 TypeCtx [V00,T00] ( 5, 5 ) int -> esi single-def
; V01 loc0 [V01 ] ( 2, 2 ) struct ( 4) [ebp-0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`3[int,int,System.__Canon]]> ;* V02 loc1 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V04 tmp2 [V04 ] ( 2, 2 ) ref -> [ebp-0x0C] do-not-enreg[X] addr-exposed "field V01.array (fldOffset=0x0)" P-DEP
-; V05 tmp3 [V05,T06] ( 2, 4 ) int -> edx "argument with side effect" -; V06 rat0 [V06,T04] ( 3, 4 ) int -> ecx "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable" -; V08 rat2 [V08,T05] ( 3, 4 ) int -> edx "runtime lookup" -; V09 rat3 [V09,T02] ( 3, 5.60) int -> ecx "spilling expr" -; V10 rat4 [V10,T03] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
+; V05 tmp3 [V05,T01] ( 2, 4 ) int -> edx "argument with side effect"
; ; Lcl frame size = 8 @@ -31,56 +26,30 @@ G_M7461_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, mov dword ptr [ebp-0x08], ecx mov esi, ecx ;; size=17 bbWeight=1 PerfScore 5.00
-G_M7461_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - je SHORT G_M7461_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M7461_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M7461_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M7461_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M7461_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
- ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M7461_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
call [System.Collections.Immutable.ImmutableArray:Create[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`3[int,int,System.__Canon]]] ; gcrRegs +[eax] mov gword ptr [ebp-0x0C], eax
- mov ecx, dword ptr [esi+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M7461_IG08 - ;; size=18 bbWeight=1 PerfScore 10.00 -G_M7461_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax] - mov edx, dword ptr [ecx+0x0C] - test edx, edx - je SHORT G_M7461_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M7461_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M7461_IG09 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M7461_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax]
mov edx, eax
- ;; size=14 bbWeight=0.36 PerfScore 0.63 -G_M7461_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
lea ecx, [ebp-0x0C] call [System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`3[int,int,System.__Canon]]:ToBuilder():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]]:this] ; gcrRegs +[eax]
- ;; size=9 bbWeight=1 PerfScore 3.50 -G_M7461_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=46 bbWeight=1 PerfScore 11.00 +G_M7461_IG03: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x04] pop esi pop ebp ret ;; size=6 bbWeight=1 PerfScore 2.50
-; Total bytes of code 99, prolog size 15, PerfScore 32.71, instruction count 36, allocated bytes for code 99 (MethodHash=7a1ee2da) for method System.Collections.Immutable.ImmutableArray:CreateBuilder[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]] (FullOpts)
+; Total bytes of code 69, prolog size 15, PerfScore 18.50, instruction count 24, allocated bytes for code 69 (MethodHash=7a1ee2da) for method System.Collections.Immutable.ImmutableArray:CreateBuilder[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]] (FullOpts)
; ============================================================

+14 (+7.69%) : 4394.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAddSystem.Canon,System.Canon:System.__Canon (FullOpts)

@@ -10,17 +10,15 @@ ; ; V00 arg0 [V00,T01] ( 4, 3.50) byref -> edi single-def ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> esi class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T05] ( 3, 2 ) ref -> ebx class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]> -; V03 TypeCtx [V03,T07] ( 3, 1.68) int -> [ebp+0x08] single-def -; V04 loc0 [V04,T02] ( 3, 3 ) ref -> ecx class-hnd single-def <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.__Canon]>
+; V02 arg2 [V02,T04] ( 3, 2 ) ref -> [ebp+0x0C] class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]> +; V03 TypeCtx [V03,T02] ( 4, 3.50) int -> ebx single-def +; V04 loc0 [V04,T03] ( 3, 3 ) ref -> [ebp-0x18] class-hnd spill-single-def <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.__Canon]>
; V05 loc1 [V05 ] ( 4, 2.50) ref -> [ebp-0x14] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> ;* V06 loc2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp2 [V08,T06] ( 3, 2 ) int -> eax "spilling helperCall" -; V09 rat0 [V09,T03] ( 3, 2.80) int -> ecx "spilling expr" -; V10 rat1 [V10,T04] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
+; V08 tmp2 [V08,T05] ( 2, 2 ) int -> eax "spilling helperCall"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M19900_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp @@ -28,7 +26,7 @@ G_M19900_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push edi push esi push ebx
- sub esp, 8
+ sub esp, 12
xor eax, eax mov dword ptr [ebp-0x14], eax mov eax, dword ptr [ebp+0x08] @@ -37,27 +35,38 @@ G_M19900_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ; byrRegs +[edi] mov esi, edx ; gcrRegs +[esi]
- mov ebx, gword ptr [ebp+0x0C] - ; gcrRegs +[ebx]
+ mov ebx, dword ptr [ebp+0x08]
;; size=27 bbWeight=1 PerfScore 10.25
-G_M19900_IG02: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000080 {edi}, byref, isz - test ebx, ebx - je SHORT G_M19900_IG11 - mov ecx, gword ptr [edi]
+G_M19900_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz + mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + cmp gword ptr [ebp+0x0C], 0 + je SHORT G_M19900_IG07 + mov edx, gword ptr [edi] + ; gcrRegs +[edx] + mov gword ptr [ebp-0x18], edx + ; GC ptr vars +{V04} + mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + ; gcrRegs -[edx] + call CORINFO_HELP_MEMCPY + mov ecx, gword ptr [ebp-0x18]
; gcrRegs +[ecx] test ecx, ecx
- je SHORT G_M19900_IG12
+ je SHORT G_M19900_IG08
lea edx, [ebp-0x14] push edx mov edx, esi ; gcrRegs +[edx]
+ ; GC ptr vars -{V04}
call [System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.__Canon]:TryGetValue(System.__Canon,byref):ubyte:this] ; gcrRegs -[ecx edx] test eax, eax je SHORT G_M19900_IG05
- ;; size=26 bbWeight=1 PerfScore 10.50
+ ;; size=58 bbWeight=1 PerfScore 17.25
G_M19900_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[ebx esi]
+ ; gcrRegs -[esi]
; byrRegs -[edi] mov eax, gword ptr [ebp-0x14] ; gcrRegs +[eax] @@ -70,36 +79,22 @@ G_M19900_IG04: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 8 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M19900_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000080 {edi}, gcvars, byref, isz - ; gcrRegs -[eax] +[ebx esi]
+G_M19900_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, gcvars, byref + ; gcrRegs -[eax] +[esi]
; byrRegs +[edi] mov edx, esi ; gcrRegs +[edx]
- mov ecx, gword ptr [ebx+0x04]
+ mov eax, gword ptr [ebp+0x0C] + ; gcrRegs +[eax] + mov ecx, gword ptr [eax+0x04]
; gcrRegs +[ecx]
- call [ebx+0x0C]<unknown method> - ; gcrRegs -[ecx edx ebx] +[eax]
+ call [eax+0x0C]<unknown method> + ; gcrRegs -[ecx edx]
mov gword ptr [ebp-0x14], eax
- mov ebx, dword ptr [ebp+0x08] - mov ecx, dword ptr [ebx+0x20] - cmp dword ptr [ecx+0x08], 20 - jle SHORT G_M19900_IG08 - ;; size=23 bbWeight=0.50 PerfScore 6.62 -G_M19900_IG06: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz - ; gcrRegs -[eax] - mov eax, dword ptr [ecx+0x14] - test eax, eax - je SHORT G_M19900_IG08 - ;; size=7 bbWeight=0.40 PerfScore 1.30 -G_M19900_IG07: ; bbWeight=0.32, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz - jmp SHORT G_M19900_IG09 - ;; size=2 bbWeight=0.32 PerfScore 0.64 -G_M19900_IG08: ; bbWeight=0.18, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
mov ecx, ebx mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=12 bbWeight=0.18 PerfScore 0.27 -G_M19900_IG09: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
+ call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax]
push gword ptr [ebp-0x14] push eax mov ecx, edi @@ -109,8 +104,8 @@ G_M19900_IG09: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000 call [System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.__Canon):System.__Canon] ; gcrRegs -[edx esi] +[eax] ; byrRegs -[ecx edi]
- ;; size=14 bbWeight=0.50 PerfScore 2.75 -G_M19900_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=40 bbWeight=0.50 PerfScore 7.12 +G_M19900_IG06: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -118,11 +113,11 @@ G_M19900_IG10: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 8 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M19900_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M19900_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] mov ecx, 0x753 mov edx, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
+ call CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[eax] mov ecx, eax ; gcrRegs +[ecx] @@ -130,10 +125,10 @@ G_M19900_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b ; gcrRegs -[eax ecx] int3 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M19900_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M19900_IG08: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 0x76D mov edx, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
+ call CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[eax] mov ecx, eax ; gcrRegs +[ecx] @@ -142,6 +137,6 @@ G_M19900_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} int3 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 182, prolog size 20, PerfScore 37.34, instruction count 69, allocated bytes for code 182 (MethodHash=f847b243) for method System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
+; Total bytes of code 196, prolog size 20, PerfScore 39.62, instruction count 70, allocated bytes for code 196 (MethodHash=f847b243) for method System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
; ============================================================

+48 (+11.29%) : 7258.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag1[System.__Canon]:AddDiagnostics[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo1[System.Canon],System.Func`2[System.Canon,System.Canon],System.Canon):ubyte:this (FullOpts)

@@ -10,32 +10,30 @@ ; ; V00 this [V00,T02] ( 5, 19 ) ref -> esi this class-hnd single-def <Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]> ; V01 arg1 [V01 ] ( 5, 5 ) struct (16) [ebp+0x10] do-not-enreg[XSF] addr-exposed ld-addr-op single-def <Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon]>
-; V02 arg2 [V02,T05] ( 4, 4 ) ref -> edi class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]> -; V03 arg3 [V03,T14] ( 1, 1 ) ref -> [ebp+0x0C] class-hnd single-def <System.__Canon> -; V04 TypeCtx [V04,T12] ( 3, 2.20) int -> ecx single-def -; V05 loc0 [V05,T03] ( 3, 10 ) ref -> ebx class-hnd single-def <<unknown class>> -; V06 loc1 [V06,T08] ( 3, 6 ) ubyte -> [ebp-0x24] -; V07 loc2 [V07,T04] ( 2, 9 ) ref -> edi class-hnd single-def <<unknown class>> -; V08 loc3 [V08,T00] ( 14, 40 ) ref -> [ebp-0x2C] do-not-enreg[M] class-hnd EH-live <<unknown class>>
+; V02 arg2 [V02,T06] ( 4, 4 ) ref -> ebx class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]> +; V03 arg3 [V03,T12] ( 1, 1 ) ref -> [ebp+0x0C] class-hnd single-def <System.__Canon> +; V04 TypeCtx [V04,T05] ( 6, 6 ) int -> edi single-def +; V05 loc0 [V05,T03] ( 3, 10 ) ref -> [ebp-0x2C] class-hnd spill-single-def <<unknown class>> +; V06 loc1 [V06,T09] ( 3, 6 ) ubyte -> [ebp-0x24] +; V07 loc2 [V07,T04] ( 2, 9 ) ref -> ebx class-hnd single-def <<unknown class>> +; V08 loc3 [V08,T00] ( 14, 40 ) ref -> [ebp-0x30] do-not-enreg[M] class-hnd EH-live <<unknown class>>
;* V09 loc4 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd <Microsoft.CodeAnalysis.DiagnosticInfo>
-; V10 loc5 [V10,T13] ( 2, 2 ) ubyte -> [ebp-0x28] do-not-enreg[Z] must-init EH-live
+; V10 loc5 [V10,T11] ( 2, 2 ) ubyte -> [ebp-0x28] do-not-enreg[Z] must-init EH-live
;* V11 loc6 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V12 tmp1 [V12 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V13 tmp2 [V13 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V14 tmp3 [V14 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V15 tmp4 [V15 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-;* V16 tmp5 [V16,T15] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V17 tmp6 [V17,T06] ( 3, 6 ) ref -> ecx class-hnd single-def "Inlining Arg" <<unknown class>> -;* V18 tmp7 [V18,T16] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V19 tmp8 [V19,T07] ( 3, 6 ) ref -> ecx class-hnd single-def "Inlining Arg" <<unknown class>>
+;* V16 tmp5 [V16,T13] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V17 tmp6 [V17,T07] ( 3, 6 ) ref -> ecx class-hnd single-def "Inlining Arg" <<unknown class>> +;* V18 tmp7 [V18,T14] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V19 tmp8 [V19,T08] ( 3, 6 ) ref -> ecx class-hnd single-def "Inlining Arg" <<unknown class>>
;* V20 tmp9 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.__Canon>
-; V21 tmp10 [V21,T11] ( 2, 4 ) int -> edx "argument with side effect"
+; V21 tmp10 [V21,T10] ( 2, 4 ) int -> edx "argument with side effect"
; V22 tmp11 [V22,T01] ( 2, 32 ) ref -> edx "argument with side effect" ; V23 EHSlots [V23 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V24 rat0 [V24,T10] ( 3, 4 ) int -> edx "runtime lookup" -; V25 rat1 [V25,T09] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 36
G_M43811_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG push ebp @@ -43,7 +41,7 @@ G_M43811_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, b push edi push esi push ebx
- sub esp, 32
+ sub esp, 36
vxorps xmm4, xmm4, xmm4 vmovdqu xmmword ptr [ebp-0x28], xmm4 xor eax, eax @@ -53,58 +51,70 @@ G_M43811_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, b mov dword ptr [ebp-0x10], eax mov esi, ecx ; gcrRegs +[esi]
- mov edi, edx - ; gcrRegs +[edi] - mov ecx, dword ptr [ebp+0x08] - ;; size=39 bbWeight=1 PerfScore 13.58 -G_M43811_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ebx, gword ptr [esi+0x04]
+ mov ebx, edx
; gcrRegs +[ebx]
- test ebx, ebx
+ mov edi, dword ptr [ebp+0x08] + ;; size=39 bbWeight=1 PerfScore 13.58 +G_M43811_IG02: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref + mov eax, gword ptr [esi+0x04] + ; gcrRegs +[eax] + mov gword ptr [ebp-0x2C], eax + ; GC ptr vars +{V05} + test eax, eax
je G_M43811_IG12
+ mov ecx, edi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax]
mov ecx, gword ptr [ebp+0x10] ; gcrRegs +[ecx] test ecx, ecx
- je G_M43811_IG24
+ je G_M43811_IG21
call [<unknown method>] ; gcrRegs -[ecx] test eax, eax
- je G_M43811_IG24
+ je G_M43811_IG21
xor eax, eax mov dword ptr [ebp-0x24], eax mov edx, gword ptr [ebp+0x0C] ; gcrRegs +[edx]
- mov ecx, gword ptr [edi+0x04]
+ mov ecx, gword ptr [ebx+0x04]
; gcrRegs +[ecx]
- call [edi+0x0C]<unknown method> - ; gcrRegs -[ecx edx edi] +[eax] - mov edi, eax - ; gcrRegs +[edi]
+ call [ebx+0x0C]<unknown method> + ; gcrRegs -[ecx edx ebx] +[eax] + mov ebx, eax + ; gcrRegs +[ebx] + mov ecx, edi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax]
mov ecx, gword ptr [ebp+0x10] ; gcrRegs +[ecx] call [<unknown method>]
- ; gcrRegs -[ecx] - mov gword ptr [ebp-0x2C], eax
+ ; gcrRegs -[ecx] +[eax] + mov gword ptr [ebp-0x30], eax
; GC ptr vars +{V08}
- ;; size=64 bbWeight=1 PerfScore 22.25 -G_M43811_IG03: ; bbWeight=1, gcVars=00000001 {V08}, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=91 bbWeight=1 PerfScore 26.25 +G_M43811_IG03: ; bbWeight=1, gcVars=00000009 {V05 V08}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov ecx, gword ptr [ebp-0x2C]
+ mov ecx, gword ptr [ebp-0x30]
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] test eax, eax je SHORT G_M43811_IG07 ;; size=13 bbWeight=1 PerfScore 5.25
-G_M43811_IG04: ; bbWeight=8, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov ecx, gword ptr [ebp-0x2C]
+G_M43811_IG04: ; bbWeight=8, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz + mov ecx, gword ptr [ebp-0x30]
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] +[eax] mov edx, eax ; gcrRegs +[edx]
- push ebx
+ mov edi, gword ptr [ebp-0x2C] + ; gcrRegs +[edi]
push edi
+ push ebx
mov ecx, esi ; gcrRegs +[ecx] mov eax, dword ptr [esi] @@ -114,21 +124,22 @@ G_M43811_IG04: ; bbWeight=8, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs= ; gcrRegs -[ecx edx] test eax, eax je SHORT G_M43811_IG06
- ;; size=27 bbWeight=8 PerfScore 118.00
+ ;; size=30 bbWeight=8 PerfScore 126.00
G_M43811_IG05: ; bbWeight=4, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref mov dword ptr [ebp-0x24], 1 ;; size=7 bbWeight=4 PerfScore 4.00 G_M43811_IG06: ; bbWeight=8, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
- mov ecx, gword ptr [ebp-0x2C]
+ mov ecx, gword ptr [ebp-0x30]
; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] test eax, eax jne SHORT G_M43811_IG04 ;; size=13 bbWeight=8 PerfScore 42.00
-G_M43811_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M43811_IG07: ; bbWeight=1, gcVars=00000001 {V08}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[ebx esi edi]
- mov ecx, gword ptr [ebp-0x2C]
+ ; GC ptr vars -{V05} + mov ecx, gword ptr [ebp-0x30]
; gcrRegs +[ecx] ; GC ptr vars -{V08} call [<unknown method>] @@ -137,9 +148,9 @@ G_M43811_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ;; size=11 bbWeight=1 PerfScore 6.00 G_M43811_IG08: ; bbWeight=0, gcVars=00000001 {V08}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz ; GC ptr vars +{V00 V08}
- cmp gword ptr [ebp-0x2C], 0
+ cmp gword ptr [ebp-0x30], 0
je SHORT G_M43811_IG09
- mov ecx, gword ptr [ebp-0x2C]
+ mov ecx, gword ptr [ebp-0x30]
; gcrRegs +[ecx] ; GC ptr vars -{V00 V08} call [<unknown method>] @@ -151,7 +162,7 @@ G_M43811_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {} ;; size=3 bbWeight=0 PerfScore 0.00 G_M43811_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref cmp dword ptr [ebp-0x24], 0
- je G_M43811_IG24
+ je G_M43811_IG21
mov eax, 1 ;; size=15 bbWeight=1 PerfScore 3.25 G_M43811_IG11: ; bbWeight=1, epilog, nogc, extend @@ -162,103 +173,99 @@ G_M43811_IG11: ; bbWeight=1, epilog, nogc, extend pop ebp ret 24 ;; size=10 bbWeight=1 PerfScore 4.50
-G_M43811_IG12: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz - mov edx, dword ptr [ecx+0x20] - mov edx, dword ptr [edx+0x08] - test edx, edx - je SHORT G_M43811_IG14 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M43811_IG13: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M43811_IG15 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M43811_IG14: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M43811_IG12: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref + mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
- ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M43811_IG15: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
lea ecx, [ebp+0x10] call [Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon]:get_AccumulatesDiagnostics():ubyte:this] test eax, eax
- je G_M43811_IG24
+ je G_M43811_IG21 + mov ecx, edi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY
mov ecx, gword ptr [ebp+0x10] ; gcrRegs +[ecx] test ecx, ecx
- je G_M43811_IG24
+ je G_M43811_IG21
call [<unknown method>] ; gcrRegs -[ecx] test eax, eax
- je SHORT G_M43811_IG24
+ je G_M43811_IG21 + mov ecx, edi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY
mov ecx, gword ptr [ebp+0x10] ; gcrRegs +[ecx] call [<unknown method>] ; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x2C], eax
+ mov gword ptr [ebp-0x30], eax
; GC ptr vars +{V08}
- ;; size=50 bbWeight=1 PerfScore 16.25 -G_M43811_IG16: ; bbWeight=1, gcVars=00000001 {V08}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=92 bbWeight=1 PerfScore 21.00
...

+8 (+17.02%) : 7376.dasm - System.Collections.Immutable.ImmutableArray1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray1[System.__Canon]:this (FullOpts)

@@ -8,57 +8,52 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> esi this single-def -; V01 TypeCtx [V01,T00] ( 5, 4.20) int -> edx single-def -;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V00 this [V00,T01] ( 3, 3 ) byref -> edi this single-def +; V01 TypeCtx [V01,T00] ( 5, 5 ) int -> esi single-def +; V02 loc0 [V02,T02] ( 2, 4 ) int -> ebx "spilling helperCall"
;* V03 tmp1 [V03 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableArray`1[System.__Canon]> ;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.__Canon[]>
-; V06 tmp4 [V06,T05] ( 2, 2 ) ref -> eax single-def "field V03.array (fldOffset=0x0)" P-INDEP -; V07 tmp5 [V07,T04] ( 2, 4 ) int -> ecx "argument with side effect" -; V08 rat0 [V08,T03] ( 3, 4 ) int -> ecx "runtime lookup" -; V09 rat1 [V09,T01] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V06 tmp4 [V06,T03] ( 2, 2 ) ref -> eax single-def "field V03.array (fldOffset=0x0)" P-INDEP
; ; Lcl frame size = 4 G_M44373_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG push ebp mov ebp, esp
+ push edi
push esi
+ push ebx
push eax
- mov dword ptr [ebp-0x08], edx - mov esi, ecx - ; byrRegs +[esi] - ;; size=10 bbWeight=1 PerfScore 4.50 -G_M44373_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz - mov ecx, dword ptr [edx+0x20] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - je SHORT G_M44373_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M44373_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz - jmp SHORT G_M44373_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M44373_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref - mov ecx, edx
+ mov dword ptr [ebp-0x10], edx + mov edi, ecx + ; byrRegs +[edi] + mov esi, edx + ;; size=14 bbWeight=1 PerfScore 6.75 +G_M44373_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref + mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov ecx, eax - ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M44373_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref - mov edx, gword ptr [esi]
+ call CORINFO_HELP_MEMCPY + mov ebx, eax + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov edx, gword ptr [edi]
; gcrRegs +[edx]
- call CORINFO_HELP_ISINSTANCEOFARRAY
+ mov ecx, ebx + call CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[edx] +[eax]
- ; byrRegs -[esi] - ;; size=7 bbWeight=1 PerfScore 3.00 -G_M44373_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; byrRegs -[edi] + ;; size=35 bbWeight=1 PerfScore 6.50 +G_M44373_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
+ pop edi
pop ebp ret
- ;; size=4 bbWeight=1 PerfScore 2.50
+ ;; size=6 bbWeight=1 PerfScore 3.50
-; Total bytes of code 47, prolog size 8, PerfScore 17.20, instruction count 21, allocated bytes for code 47 (MethodHash=e6fb52aa) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
+; Total bytes of code 55, prolog size 10, PerfScore 16.75, instruction count 25, allocated bytes for code 55 (MethodHash=e6fb52aa) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
; ============================================================

realworld.run.windows.x86.checked.mch

-14 (-32.56%) : 12710.dasm - System.Linq.Enumerable:EmptySystem.Collections.Generic.KeyValuePair2[System.__Canon,int]]():System.Collections.Generic.IEnumerable1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]

@@ -7,10 +7,8 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> ecx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> ecx single-def
;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V02 rat0 [V02,T02] ( 3, 4 ) int -> edx "runtime lookup" -; V03 rat1 [V03,T01] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 4 @@ -20,31 +18,19 @@ G_M43414_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push eax mov dword ptr [ebp-0x04], ecx ;; size=7 bbWeight=1 PerfScore 3.25
-G_M43414_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [ecx+0x20] - mov edx, dword ptr [edx+0x08] - test edx, edx - je SHORT G_M43414_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M43414_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M43414_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M43414_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M43414_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edx, eax - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M43414_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - mov ecx, edx
+ call CORINFO_HELP_MEMCPY + mov ecx, eax
call [System.Array:Empty[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]():System.Collections.Generic.KeyValuePair`2[System.__Canon,int][]] ; gcrRegs +[eax]
- ;; size=8 bbWeight=1 PerfScore 3.25 -G_M43414_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=18 bbWeight=1 PerfScore 4.50 +G_M43414_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 43, prolog size 7, PerfScore 15.40, instruction count 17, allocated bytes for code 43 (MethodHash=4ae05669) for method System.Linq.Enumerable:Empty[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]():System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]] (FullOpts)
+; Total bytes of code 29, prolog size 7, PerfScore 9.50, instruction count 11, allocated bytes for code 29 (MethodHash=4ae05669) for method System.Linq.Enumerable:Empty[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]():System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]] (FullOpts)
; ============================================================

-14 (-32.56%) : 10176.dasm - Microsoft.FSharp.Collections.SeqModule:EmptySystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -7,10 +7,8 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) int -> ecx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> ecx single-def
;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V02 rat0 [V02,T02] ( 3, 4 ) int -> edx "runtime lookup" -; V03 rat1 [V03,T01] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 4 @@ -20,31 +18,19 @@ G_M15963_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} push eax mov dword ptr [ebp-0x04], ecx ;; size=7 bbWeight=1 PerfScore 3.25
-G_M15963_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [ecx+0x20] - mov edx, dword ptr [edx+0x08] - test edx, edx - je SHORT G_M15963_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M15963_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M15963_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M15963_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M15963_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edx, eax - ;; size=12 bbWeight=0.20 PerfScore 0.30 -G_M15963_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - mov ecx, edx
+ call CORINFO_HELP_MEMCPY + mov ecx, eax
call [Microsoft.FSharp.Collections.IEnumerator+EmptyEnumerable`1[System.__Canon]:get_EmptyEnumerable():Microsoft.FSharp.Collections.IEnumerator+EmptyEnumerable`1[System.__Canon]] ; gcrRegs +[eax]
- ;; size=8 bbWeight=1 PerfScore 3.25 -G_M15963_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=18 bbWeight=1 PerfScore 4.50 +G_M15963_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp pop ebp ret ;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 43, prolog size 7, PerfScore 15.40, instruction count 17, allocated bytes for code 43 (MethodHash=3ea8c1a4) for method Microsoft.FSharp.Collections.SeqModule:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 29, prolog size 7, PerfScore 9.50, instruction count 11, allocated bytes for code 29 (MethodHash=3ea8c1a4) for method Microsoft.FSharp.Collections.SeqModule:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================

-30 (-30.30%) : 5030.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilderSystem.__Canon:System.Collections.Immutable.ImmutableArray`1+BuilderSystem.__Canon

@@ -7,17 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> esi single-def
+; V00 TypeCtx [V00,T00] ( 5, 5 ) int -> esi single-def
; V01 loc0 [V01 ] ( 2, 2 ) struct ( 4) [ebp-0x0C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableArray`1[System.__Canon]> ;* V02 loc1 [V02 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V03 tmp1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ; V04 tmp2 [V04 ] ( 2, 2 ) ref -> [ebp-0x0C] do-not-enreg[X] addr-exposed "field V01.array (fldOffset=0x0)" P-DEP
-; V05 tmp3 [V05,T06] ( 2, 4 ) int -> edx "argument with side effect" -; V06 rat0 [V06,T04] ( 3, 4 ) int -> ecx "runtime lookup" -; V07 rat1 [V07,T01] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable" -; V08 rat2 [V08,T05] ( 3, 4 ) int -> edx "runtime lookup" -; V09 rat3 [V09,T02] ( 3, 5.60) int -> ecx "spilling expr" -; V10 rat4 [V10,T03] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
+; V05 tmp3 [V05,T01] ( 2, 4 ) int -> edx "argument with side effect"
; ; Lcl frame size = 8 @@ -31,56 +26,30 @@ G_M23077_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov dword ptr [ebp-0x08], ecx mov esi, ecx ;; size=17 bbWeight=1 PerfScore 5.00
-G_M23077_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - mov ecx, dword ptr [esi+0x20] - mov ecx, dword ptr [ecx+0x08] - test ecx, ecx - je SHORT G_M23077_IG04 - ;; size=10 bbWeight=1 PerfScore 5.25 -G_M23077_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M23077_IG05 - ;; size=2 bbWeight=0.80 PerfScore 1.60 -G_M23077_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M23077_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
- ;; size=14 bbWeight=0.20 PerfScore 0.35 -G_M23077_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
call [System.Collections.Immutable.ImmutableArray:Create[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]] ; gcrRegs +[eax] mov gword ptr [ebp-0x0C], eax
- mov ecx, dword ptr [esi+0x20] - cmp dword ptr [ecx+0x04], 12 - jle SHORT G_M23077_IG08 - ;; size=18 bbWeight=1 PerfScore 10.00 -G_M23077_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - ; gcrRegs -[eax] - mov edx, dword ptr [ecx+0x0C] - test edx, edx - je SHORT G_M23077_IG08 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M23077_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M23077_IG09 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M23077_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax]
mov edx, eax
- ;; size=14 bbWeight=0.36 PerfScore 0.63 -G_M23077_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
lea ecx, [ebp-0x0C] call [System.Collections.Immutable.ImmutableArray`1[System.__Canon]:ToBuilder():System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:this] ; gcrRegs +[eax]
- ;; size=9 bbWeight=1 PerfScore 3.50 -G_M23077_IG10: ; bbWeight=1, epilog, nogc, extend
+ ;; size=46 bbWeight=1 PerfScore 11.00 +G_M23077_IG03: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x04] pop esi pop ebp ret ;; size=6 bbWeight=1 PerfScore 2.50
-; Total bytes of code 99, prolog size 15, PerfScore 32.71, instruction count 36, allocated bytes for code 99 (MethodHash=10a6a5da) for method System.Collections.Immutable.ImmutableArray:CreateBuilder[System.__Canon]():System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon] (FullOpts)
+; Total bytes of code 69, prolog size 15, PerfScore 18.50, instruction count 24, allocated bytes for code 69 (MethodHash=10a6a5da) for method System.Collections.Immutable.ImmutableArray:CreateBuilder[System.__Canon]():System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon] (FullOpts)
; ============================================================

-2 (-1.49%) : 2248.dasm - System.Array:IndexOfSystem.__Canon:int (FullOpts)

@@ -9,10 +9,10 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T00] ( 5, 5 ) ref -> esi class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T03] ( 3, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon> -; V02 arg2 [V02,T06] ( 3, 3 ) int -> ebx single-def -; V03 arg3 [V03,T09] ( 2, 2 ) int -> [ebp+0x0C] single-def -; V04 TypeCtx [V04,T08] ( 3, 2.36) int -> ecx single-def
+; V01 arg1 [V01,T02] ( 3, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon> +; V02 arg2 [V02,T03] ( 3, 3 ) int -> ebx single-def +; V03 arg3 [V03,T06] ( 2, 2 ) int -> [ebp+0x0C] single-def +; V04 TypeCtx [V04,T04] ( 3, 3 ) int -> [ebp+0x08] single-def
;* V05 loc0 [V05 ] ( 0, 0 ) int -> zero-ref ;* V06 loc1 [V06 ] ( 0, 0 ) int -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref @@ -25,10 +25,7 @@ ;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" ;* V15 tmp6 [V15 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inlining Arg" ; V16 tmp7 [V16,T01] ( 3, 6 ) ref -> eax single-def "argument with side effect"
-; V17 cse0 [V17,T07] ( 3, 3 ) int -> edx "CSE - aggressive" -; V18 rat0 [V18,T05] ( 3, 4 ) int -> edx "runtime lookup" -; V19 rat1 [V19,T02] ( 3, 5.60) int -> edx "spilling expr" -; V20 rat2 [V20,T04] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
+; V17 cse0 [V17,T05] ( 3, 3 ) int -> ecx "CSE - aggressive"
; ; Lcl frame size = 4 @@ -46,38 +43,27 @@ G_M13831_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {} mov edi, edx ; gcrRegs +[edi] mov ebx, dword ptr [ebp+0x10]
- mov eax, dword ptr [ebp+0x0C] - mov ecx, dword ptr [ebp+0x08]
+ mov edx, dword ptr [ebp+0x0C] + mov eax, dword ptr [ebp+0x08]
;; size=26 bbWeight=1 PerfScore 11.75 G_M13831_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz test esi, esi
- je SHORT G_M13831_IG08 - mov edx, dword ptr [esi+0x04] - cmp edx, ebx - jb SHORT G_M13831_IG09 - sub edx, ebx - mov dword ptr [ebp+0x0C], eax - cmp edx, eax - jb SHORT G_M13831_IG10 - mov edx, dword ptr [ecx+0x20] - cmp dword ptr [edx+0x04], 12 - jle SHORT G_M13831_IG05 - ;; size=29 bbWeight=1 PerfScore 13.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x0C] - test edx, edx - je SHORT G_M13831_IG05 - ;; size=7 bbWeight=0.80 PerfScore 2.60 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz - jmp SHORT G_M13831_IG06 - ;; size=2 bbWeight=0.64 PerfScore 1.28 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M13831_IG04 + mov ecx, dword ptr [esi+0x04] + cmp ecx, ebx + jb SHORT G_M13831_IG05 + sub ecx, ebx + mov dword ptr [ebp+0x0C], edx + cmp ecx, edx + jb SHORT G_M13831_IG06 + mov dword ptr [ebp+0x08], eax + mov ecx, eax
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edx, eax - ;; size=12 bbWeight=0.36 PerfScore 0.54 -G_M13831_IG06: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref - mov ecx, edx
+ call CORINFO_HELP_MEMCPY + mov ecx, dword ptr [ebp+0x08] + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov ecx, eax
call [System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]] ; gcrRegs +[eax] push edi @@ -92,8 +78,8 @@ G_M13831_IG06: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=0000 mov eax, dword ptr [eax+0x30] call [eax]<unknown method> ; gcrRegs -[ecx edx esi edi]
- ;; size=24 bbWeight=1 PerfScore 13.75 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend
+ ;; size=72 bbWeight=1 PerfScore 25.50 +G_M13831_IG03: ; bbWeight=1, epilog, nogc, extend
pop ecx pop ebx pop esi @@ -101,20 +87,20 @@ G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend pop ebp ret 12 ;; size=8 bbWeight=1 PerfScore 4.50
-G_M13831_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M13831_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov ecx, 2 call [System.ThrowHelper:ThrowArgumentNullException(int)] int3 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M13831_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13831_IG05: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13831_IG06: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count()] int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 134, prolog size 13, PerfScore 47.42, instruction count 55, allocated bytes for code 134 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
+; Total bytes of code 132, prolog size 13, PerfScore 41.75, instruction count 52, allocated bytes for code 132 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================

-2 (-1.29%) : 11369.dasm - .$Set:loop@914-47System.__Canon:ubyte (FullOpts)

@@ -7,24 +7,21 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T08] ( 3, 6 ) ref -> ebx class-hnd single-def <System.Collections.IEqualityComparer> -; V01 arg1 [V01,T03] ( 4, 14 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]> -; V02 arg2 [V02,T07] ( 2, 12 ) ref -> edi class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]>
+; V00 arg0 [V00,T07] ( 3, 6 ) ref -> [ebp-0x20] class-hnd single-def <System.Collections.IEqualityComparer> +; V01 arg1 [V01,T01] ( 4, 14 ) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]> +; V02 arg2 [V02,T05] ( 2, 12 ) ref -> edi class-hnd single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]>
;* V03 arg3 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <Microsoft.FSharp.Core.Unit>
-; V04 TypeCtx [V04,T10] ( 3, 5.80) int -> [ebp+0x08] single-def -; V05 loc0 [V05,T02] ( 3, 20 ) ubyte -> [ebp-0x14] spill-single-def
+; V04 TypeCtx [V04,T06] ( 3, 9 ) int -> ebx single-def +; V05 loc0 [V05,T00] ( 3, 20 ) ubyte -> [ebp-0x14] spill-single-def
;* V06 loc1 [V06 ] ( 0, 0 ) ubyte -> zero-ref ;* V07 loc2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-;* V08 tmp1 [V08,T09] ( 0, 0 ) int -> zero-ref "VirtualCall with runtime lookup"
+; V08 tmp1 [V08,T03] ( 2, 16 ) int -> [ebp-0x18] spill-single-def "VirtualCall with runtime lookup"
;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp3 [V10,T00] ( 3, 24 ) int -> [ebp-0x18] spill-single-def "VirtualCall with runtime lookup"
+; V10 tmp3 [V10,T04] ( 2, 16 ) int -> [ebp-0x1C] spill-single-def "VirtualCall with runtime lookup"
;* V11 tmp4 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "non-inline candidate call" <<unknown class>>
-; V12 tmp5 [V12,T05] ( 2, 16 ) ref -> [ebp-0x1C] spill-single-def "argument with side effect" -; V13 cse0 [V13,T06] ( 2, 8 ) int -> edx "CSE - moderate" -; V14 rat0 [V14,T04] ( 3, 16 ) int -> edx "runtime lookup" -; V15 rat1 [V15,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
+; V12 tmp5 [V12,T02] ( 2, 16 ) ref -> [ebp-0x24] spill-single-def "argument with side effect"
;
-; Lcl frame size = 16
+; Lcl frame size = 24
G_M22437_IG01: ; bbWeight=8, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG push ebp @@ -32,17 +29,18 @@ G_M22437_IG01: ; bbWeight=8, gcVars=00000000 {}, gcrefRegs=00000000 {}, b push edi push esi push ebx
- sub esp, 16
+ sub esp, 24
mov eax, dword ptr [ebp+0x08] mov dword ptr [ebp-0x10], eax
- mov ebx, ecx - ; gcrRegs +[ebx]
+ mov gword ptr [ebp-0x20], ecx + ; GC ptr vars +{V00}
mov esi, edx ; gcrRegs +[esi] mov edi, gword ptr [ebp+0x10] ; gcrRegs +[edi]
- ;; size=22 bbWeight=8 PerfScore 72.00 -G_M22437_IG02: ; bbWeight=8, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov ebx, dword ptr [ebp+0x08] + ;; size=26 bbWeight=8 PerfScore 86.00 +G_M22437_IG02: ; bbWeight=8, gcVars=00000080 {V00}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
mov ecx, esi ; gcrRegs +[ecx] call [<unknown method>] @@ -54,61 +52,51 @@ G_M22437_IG02: ; bbWeight=8, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs= ; gcrRegs -[ecx] mov ecx, dword ptr [ebp-0x14] cmp eax, ecx
- jne SHORT G_M22437_IG07
+ jne SHORT G_M22437_IG04
;; size=26 bbWeight=8 PerfScore 78.00
-G_M22437_IG03: ; bbWeight=4, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M22437_IG03: ; bbWeight=4, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
test ecx, ecx
- je SHORT G_M22437_IG09 - mov eax, dword ptr [ebp+0x08] - mov ecx, dword ptr [eax+0x20] - mov edx, dword ptr [ecx+0x08] - test edx, edx - je SHORT G_M22437_IG05 - ;; size=17 bbWeight=4 PerfScore 30.00 -G_M22437_IG04: ; bbWeight=3.20, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov dword ptr [ebp+0x08], eax - jmp SHORT G_M22437_IG06 - ;; size=5 bbWeight=3.20 PerfScore 9.60 -G_M22437_IG05: ; bbWeight=0.80, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref - mov dword ptr [ebp+0x08], eax - mov ecx, eax
+ je SHORT G_M22437_IG06 + mov ecx, ebx
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov edx, eax - ;; size=17 bbWeight=0.80 PerfScore 2.20 -G_M22437_IG06: ; bbWeight=4, gcrefRegs=000000C8 {ebx esi edi}, byrefRegs=00000000 {}, byref, isz - mov dword ptr [ebp-0x18], edx
+ call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x18], eax + mov ecx, ebx + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x1C], eax
mov ecx, esi ; gcrRegs +[ecx]
- mov eax, edx
+ mov eax, dword ptr [ebp-0x18]
nop call [eax] ; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x1C], eax
+ mov gword ptr [ebp-0x24], eax
; GC ptr vars +{V12} mov ecx, edi ; gcrRegs +[ecx]
- mov eax, dword ptr [ebp-0x18]
+ mov eax, dword ptr [ebp-0x1C]
; gcrRegs -[eax] nop call [eax] ; gcrRegs -[ecx] +[eax] push eax
- mov edx, gword ptr [ebp-0x1C]
+ mov edx, gword ptr [ebp-0x24]
; gcrRegs +[edx]
- mov ecx, ebx
+ mov ecx, gword ptr [ebp-0x20]
; gcrRegs +[ecx] ; GC ptr vars -{V12} call [<unknown method>] ; gcrRegs -[eax ecx edx] test eax, eax jne SHORT G_M22437_IG02
- ;; size=41 bbWeight=4 PerfScore 67.00 -G_M22437_IG07: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref - ; gcrRegs -[ebx esi edi]
+ ;; size=74 bbWeight=4 PerfScore 94.00 +G_M22437_IG04: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs -[esi edi] + ; GC ptr vars -{V00}
xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M22437_IG08: ; bbWeight=0.50, epilog, nogc, extend
+G_M22437_IG05: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -116,10 +104,10 @@ G_M22437_IG08: ; bbWeight=0.50, epilog, nogc, extend pop ebp ret 12 ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M22437_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M22437_IG06: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
mov eax, 1 ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M22437_IG10: ; bbWeight=0.50, epilog, nogc, extend
+G_M22437_IG07: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -128,6 +116,6 @@ G_M22437_IG10: ; bbWeight=0.50, epilog, nogc, extend ret 12 ;; size=10 bbWeight=0.50 PerfScore 2.25
-; Total bytes of code 155, prolog size 15, PerfScore 263.55, instruction count 63, allocated bytes for code 155 (MethodHash=0ec8a85a) for method <StartupCode$FSharp-Core>.$Set:loop@914-47[System.__Canon](System.Collections.IEqualityComparer,System.Collections.Generic.IEnumerator`1[System.__Canon],System.Collections.Generic.IEnumerator`1[System.__Canon],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
+; Total bytes of code 153, prolog size 15, PerfScore 262.75, instruction count 59, allocated bytes for code 153 (MethodHash=0ec8a85a) for method <StartupCode$FSharp-Core>.$Set:loop@914-47[System.__Canon](System.Collections.IEqualityComparer,System.Collections.Generic.IEnumerator`1[System.__Canon],System.Collections.Generic.IEnumerator`1[System.__Canon],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
; ============================================================

-1 (-0.60%) : 2110.dasm - Microsoft.FSharp.Primitives.Basics.List:revSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon

@@ -8,125 +8,85 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T01] ( 5, 4 ) ref -> ecx class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V01 TypeCtx [V01,T00] ( 7, 4.28) int -> esi single-def
+; V01 TypeCtx [V01,T00] ( 7, 5 ) int -> esi single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V03 loc1 [V03,T15] ( 2, 1 ) ref -> eax class-hnd exact single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V04 loc2 [V04,T16] ( 2, 1 ) ref -> edi class-hnd exact single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V05 loc3 [V05,T17] ( 2, 1 ) ref -> ebx class-hnd single-def <System.__Canon> -; V06 loc4 [V06,T18] ( 2, 1 ) ref -> [ebp-0x1C] class-hnd spill-single-def <System.__Canon> -;* V07 loc5 [V07,T19] ( 0, 0 ) int -> zero-ref "spilling helperCall" -; V08 tmp1 [V08,T13] ( 2, 2 ) int -> [ebp-0x14] spill-single-def "spilling helperCall" -; V09 tmp2 [V09,T03] ( 3, 3 ) int -> [ebp-0x18] spill-single-def "spilling helperCall" -; V10 tmp3 [V10,T08] ( 3, 2 ) int -> esi "spilling helperCall" -; V11 tmp4 [V11,T10] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V12 tmp5 [V12,T11] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V13 tmp6 [V13,T12] ( 2, 2 ) ref -> edx single-def "argument with side effect" -; V14 cse0 [V14,T07] ( 3, 1.50) int -> eax "CSE - moderate" -; V15 cse1 [V15,T14] ( 3, 1.50) ref -> edi "CSE - moderate" -; V16 cse2 [V16,T02] ( 4, 3 ) ref -> eax "CSE - aggressive" -; V17 rat0 [V17,T09] ( 3, 2 ) int -> eax "runtime lookup" -; V18 rat1 [V18,T04] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable" -; V19 rat2 [V19,T05] ( 3, 2.80) int -> edx "spilling expr" -; V20 rat3 [V20,T06] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
+; V03 loc1 [V03,T11] ( 2, 1 ) ref -> edx class-hnd exact single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V04 loc2 [V04,T12] ( 2, 1 ) ref -> edi class-hnd exact single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V05 loc3 [V05,T13] ( 2, 1 ) ref -> ebx class-hnd single-def <System.__Canon> +; V06 loc4 [V06,T14] ( 2, 1 ) ref -> [ebp-0x20] class-hnd spill-single-def <System.__Canon> +; V07 loc5 [V07,T06] ( 2, 2 ) int -> [ebp-0x14] spill-single-def "spilling helperCall" +; V08 tmp1 [V08,T07] ( 2, 2 ) int -> [ebp-0x18] spill-single-def "spilling helperCall" +; V09 tmp2 [V09,T08] ( 2, 2 ) int -> [ebp-0x1C] spill-single-def "spilling helperCall" +; V10 tmp3 [V10,T09] ( 2, 2 ) int -> esi "spilling helperCall" +; V11 tmp4 [V11,T03] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V12 tmp5 [V12,T04] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V13 tmp6 [V13,T05] ( 2, 2 ) ref -> edx single-def "argument with side effect" +; V14 cse0 [V14,T10] ( 3, 1.50) ref -> edi "CSE - moderate" +; V15 cse1 [V15,T02] ( 4, 3 ) ref -> edx "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 20
-G_M34217_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
+G_M34217_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG
push ebp mov ebp, esp push edi push esi push ebx
- sub esp, 16
+ sub esp, 20
mov dword ptr [ebp-0x10], edx mov esi, edx ;; size=14 bbWeight=1 PerfScore 5.75
-G_M34217_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+G_M34217_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
; gcrRegs +[ecx]
- mov eax, gword ptr [ecx+0x08] - ; gcrRegs +[eax] - test eax, eax - je SHORT G_M34217_IG05 - ;; size=7 bbWeight=1 PerfScore 3.25 -G_M34217_IG03: ; bbWeight=0.50, gcrefRegs=00000003 {eax ecx}, byrefRegs=00000000 {}, byref, isz - mov edi, gword ptr [eax+0x08]
+ mov edx, gword ptr [ecx+0x08] + ; gcrRegs +[edx] + test edx, edx + je G_M34217_IG05 + ;; size=11 bbWeight=1 PerfScore 3.25 +G_M34217_IG03: ; bbWeight=0.50, gcrefRegs=00000006 {ecx edx}, byrefRegs=00000000 {}, byref, isz + mov edi, gword ptr [edx+0x08]
; gcrRegs +[edi] test edi, edi je SHORT G_M34217_IG05
- mov ebx, gword ptr [eax+0x04]
+ mov ebx, gword ptr [edx+0x04]
; gcrRegs +[ebx]
- mov edx, gword ptr [ecx+0x04] - ; gcrRegs +[edx] - mov gword ptr [ebp-0x1C], edx - ; GC ptr vars +{V06} - mov eax, dword ptr [esi+0x20] - ; gcrRegs -[eax] - mov eax, dword ptr [eax+0x08] - test eax, eax - je SHORT G_M34217_IG07 - ;; size=26 bbWeight=0.50 PerfScore 6.75 -G_M34217_IG04: ; bbWeight=0.40, gcVars=00040000 {V06}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref, isz - ; gcrRegs -[ecx edx] - jmp SHORT G_M34217_IG08 - ;; size=2 bbWeight=0.40 PerfScore 0.80 -G_M34217_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[ebx edi] +[ecx] - ; GC ptr vars -{V06} - mov eax, ecx
+ mov eax, gword ptr [ecx+0x04]
; gcrRegs +[eax]
- ;; size=2 bbWeight=0.50 PerfScore 0.12 -G_M34217_IG06: ; bbWeight=0.50, epilog, nogc, extend - lea esp, [ebp-0x0C] - pop ebx - pop esi - pop edi - pop ebp - ret - ;; size=8 bbWeight=0.50 PerfScore 1.75 -G_M34217_IG07: ; bbWeight=0.10, gcVars=00040000 {V06}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref - ; gcrRegs -[eax ecx] +[ebx edi] - ; GC ptr vars +{V06 V18}
+ mov gword ptr [ebp-0x20], eax + ; GC ptr vars +{V06}
mov ecx, esi
+ ; gcrRegs -[ecx]
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=12 bbWeight=0.10 PerfScore 0.15 -G_M34217_IG08: ; bbWeight=0.50, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[edx] + call CORINFO_HELP_MEMCPY + ; gcrRegs -[eax]
mov dword ptr [ebp-0x14], eax
- mov dword ptr [ebp-0x18], eax - mov edx, dword ptr [esi+0x20] - cmp dword ptr [edx+0x04], 12 - jle SHORT G_M34217_IG11 - ;; size=15 bbWeight=0.50 PerfScore 4.00 -G_M34217_IG09: ; bbWeight=0.40, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz - mov edx, dword ptr [edx+0x0C] - test edx, edx - je SHORT G_M34217_IG11 - ;; size=7 bbWeight=0.40 PerfScore 1.30 -G_M34217_IG10: ; bbWeight=0.32, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz - mov esi, edx - jmp SHORT G_M34217_IG12 - ;; size=4 bbWeight=0.32 PerfScore 0.72 -G_M34217_IG11: ; bbWeight=0.18, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
mov ecx, esi mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x18], eax + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY + mov dword ptr [ebp-0x1C], eax + mov ecx, esi + mov edx, 0xD1FFAB1E ; global ptr + call CORINFO_HELP_MEMCPY
mov esi, eax
- ;; size=14 bbWeight=0.18 PerfScore 0.32 -G_M34217_IG12: ; bbWeight=0.50, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
mov ecx, dword ptr [ebp-0x14] call [Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:get_Empty():Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]] ; gcrRegs +[eax] mov edx, eax ; gcrRegs +[edx] push dword ptr [ebp-0x18]
- mov ecx, gword ptr [ebp-0x1C]
+ mov ecx, gword ptr [ebp-0x20]
; gcrRegs +[ecx]
- ; GC ptr vars -{V06 V18}
+ ; GC ptr vars -{V06}
call [Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:Cons(System.__Canon,Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]] ; gcrRegs -[ecx edx] mov edx, eax ; gcrRegs +[edx]
- push dword ptr [ebp-0x18]
+ push dword ptr [ebp-0x1C]
mov ecx, ebx ; gcrRegs +[ecx] call [Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:Cons(System.__Canon,Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]] @@ -138,8 +98,21 @@ G_M34217_IG12: ; bbWeight=0.50, gcrefRegs=00000088 {ebx edi}, byrefRegs=0 ; gcrRegs +[ecx] call [Microsoft.FSharp.Primitives.Basics.List:revAcc[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]] ; gcrRegs -[ecx edx edi]
- ;; size=47 bbWeight=0.50 PerfScore 9.12 -G_M34217_IG13: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=122 bbWeight=0.50 PerfScore 17.88 +G_M34217_IG04: ; bbWeight=0.50, epilog, nogc, extend + lea esp, [ebp-0x0C] + pop ebx + pop esi + pop edi + pop ebp + ret + ;; size=8 bbWeight=0.50 PerfScore 1.75 +G_M34217_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref + ; gcrRegs -[eax] +[ecx] + mov eax, ecx + ; gcrRegs +[eax] + ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M34217_IG06: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C] pop ebx pop esi @@ -148,6 +121,6 @@ G_M34217_IG13: ; bbWeight=0.50, epilog, nogc, extend ret ;; size=8 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 166, prolog size 12, PerfScore 35.79, instruction count 66, allocated bytes for code 166 (MethodHash=43567a56) for method Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
+; Total bytes of code 165, prolog size 12, PerfScore 30.50, instruction count 60, allocated bytes for code 165 (MethodHash=43567a56) for method Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
; ============================================================

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.x86.checked.mch 88 82 3 3 -3,301 +193
benchmarks.run_pgo.windows.x86.checked.mch 280 278 2 0 -9,151 +187
benchmarks.run_tiered.windows.x86.checked.mch 179 179 0 0 -9,977 +0
coreclr_tests.run.windows.x86.checked.mch 1 1 0 0 -42 +0
libraries.crossgen2.windows.x86.checked.mch 0 0 0 0 -0 +0
libraries.pmi.windows.x86.checked.mch 202 195 7 0 -4,087 +593
libraries_tests.run.windows.x86.Release.mch 258 252 4 2 -15,807 +40
librariestestsnotieredcompilation.run.windows.x86.Release.mch 124 112 10 2 -5,425 +118
realworld.run.windows.x86.checked.mch 153 152 1 0 -5,720 +71
1,285 1,251 27 7 -53,510 +1,202

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x86.checked.mch 2,914 2 2,912 375 (4.69%) 4,683 (58.58%)
benchmarks.run_pgo.windows.x86.checked.mch 8,126 5,693 2,433 416 (2.71%) 6,829 (44.49%)
benchmarks.run_tiered.windows.x86.checked.mch 8,985 6,348 2,637 202 (1.33%) 5,858 (38.44%)
coreclr_tests.run.windows.x86.checked.mch 305 3 302 132 (2.01%) 5,859 (89.31%)
libraries.crossgen2.windows.x86.checked.mch 8,137 10 8,127 0 (0.00%) 2,977 (25.86%)
libraries.pmi.windows.x86.checked.mch 11,341 0 11,341 335 (1.63%) 8,868 (43.04%)
libraries_tests.run.windows.x86.Release.mch 6,272 5,436 836 200 (1.52%) 6,487 (49.31%)
librariestestsnotieredcompilation.run.windows.x86.Release.mch 3,429 0 3,429 661 (6.92%) 5,728 (59.96%)
realworld.run.windows.x86.checked.mch 3,983 0 3,983 1,189 (7.83%) 10,805 (71.16%)
53,492 17,492 36,000 3,510 (3.05%) 58,094 (50.45%)

jit-analyze output

benchmarks.run.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 298081 (overridden on cmd)
Total bytes of diff: 294973 (overridden on cmd)
Total bytes of delta: -3108 (-1.04 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         178 : 7633.dasm (59.53 % of base)
           9 : 6254.dasm (1.56 % of base)
           6 : 6009.dasm (2.76 % of base)

Top file improvements (bytes):
        -388 : 6416.dasm (-28.20 % of base)
        -247 : 1964.dasm (-29.55 % of base)
        -157 : 236.dasm (-35.52 % of base)
        -147 : 238.dasm (-29.82 % of base)
        -142 : 579.dasm (-36.60 % of base)
        -107 : 4463.dasm (-37.41 % of base)
         -99 : 462.dasm (-21.85 % of base)
         -93 : 201.dasm (-28.01 % of base)
         -77 : 2686.dasm (-29.28 % of base)
         -77 : 4350.dasm (-27.30 % of base)
         -64 : 4953.dasm (-26.78 % of base)
         -60 : 6234.dasm (-23.62 % of base)
         -56 : 232.dasm (-29.02 % of base)
         -56 : 3912.dasm (-29.02 % of base)
         -56 : 4952.dasm (-28.72 % of base)
         -52 : 1503.dasm (-30.06 % of base)
         -52 : 2865.dasm (-29.38 % of base)
         -48 : 8047.dasm (-25.81 % of base)
         -48 : 2228.dasm (-26.52 % of base)
         -43 : 2801.dasm (-20.00 % of base)

61 total files with Code Size differences (58 improved, 3 regressed), 3 unchanged.

Top method regressions (bytes):
         178 (59.53 % of base) : 7633.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (FullOpts)
           9 (1.56 % of base) : 6254.dasm - System.Collections.Perf_FrozenDictionary_String:ToImmutableDictionary():System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]:this (FullOpts)
           6 (2.76 % of base) : 6009.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)

Top method improvements (bytes):
        -388 (-28.20 % of base) : 6416.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (FullOpts)
        -247 (-29.55 % of base) : 1964.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -157 (-35.52 % of base) : 236.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -147 (-29.82 % of base) : 238.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -142 (-36.60 % of base) : 579.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -107 (-37.41 % of base) : 4463.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -99 (-21.85 % of base) : 462.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -93 (-28.01 % of base) : 201.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (FullOpts)
         -77 (-27.30 % of base) : 4350.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
         -77 (-29.28 % of base) : 2686.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
         -64 (-26.78 % of base) : 4953.dasm - ProtoBuf.ProtoReader+State:ReadAsRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (FullOpts)
         -60 (-23.62 % of base) : 6234.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
         -56 (-28.72 % of base) : 4952.dasm - ProtoBuf.ProtoReader+State:DeserializeRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (FullOpts)
         -56 (-29.02 % of base) : 3912.dasm - System.Linq.Enumerable:Select[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`3[System.__Canon,int,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -56 (-29.02 % of base) : 232.dasm - System.Linq.Enumerable:SkipWhile[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -52 (-29.38 % of base) : 2865.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -52 (-30.06 % of base) : 1503.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (FullOpts)
         -48 (-25.81 % of base) : 8047.dasm - Newtonsoft.Json.Serialization.JsonTypeReflector:GetAttribute[System.__Canon](System.Object):System.__Canon (FullOpts)
         -48 (-26.52 % of base) : 2228.dasm - System.Text.Json.Serialization.Metadata.JsonMetadataServices:GetConverter[System.__Canon](System.Text.Json.Serialization.Metadata.JsonObjectInfoValues`1[System.__Canon]):System.Text.Json.Serialization.JsonConverter`1[System.__Canon] (FullOpts)
         -43 (-20.00 % of base) : 2801.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)

Top method regressions (percentages):
         178 (59.53 % of base) : 7633.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (FullOpts)
           6 (2.76 % of base) : 6009.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
           9 (1.56 % of base) : 6254.dasm - System.Collections.Perf_FrozenDictionary_String:ToImmutableDictionary():System.Collections.Immutable.ImmutableDictionary`2[System.String,System.String]:this (FullOpts)

Top method improvements (percentages):
        -107 (-37.41 % of base) : 4463.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
        -142 (-36.60 % of base) : 579.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -157 (-35.52 % of base) : 236.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -32 (-34.41 % of base) : 3570.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (FullOpts)
         -32 (-32.00 % of base) : 4688.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (FullOpts)
         -52 (-30.06 % of base) : 1503.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (FullOpts)
        -147 (-29.82 % of base) : 238.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -247 (-29.55 % of base) : 1964.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
         -52 (-29.38 % of base) : 2865.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -77 (-29.28 % of base) : 2686.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
         -56 (-29.02 % of base) : 3912.dasm - System.Linq.Enumerable:Select[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`3[System.__Canon,int,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -56 (-29.02 % of base) : 232.dasm - System.Linq.Enumerable:SkipWhile[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -56 (-28.72 % of base) : 4952.dasm - ProtoBuf.ProtoReader+State:DeserializeRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (FullOpts)
         -30 (-28.57 % of base) : 1506.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (FullOpts)
         -30 (-28.57 % of base) : 3204.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](byref,System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
         -30 (-28.30 % of base) : 3179.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
        -388 (-28.20 % of base) : 6416.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (FullOpts)
         -30 (-28.04 % of base) : 5358.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]:AwaitUnsafeOnCompleted[System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.__Canon],System.Threading.Tasks.TaskCompletionSourceWithCancellation`1+<WaitWithCancellationAsync>d__1[System.__Canon]](byref,byref,byref) (FullOpts)
         -93 (-28.01 % of base) : 201.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (FullOpts)
         -30 (-27.52 % of base) : 3172.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (FullOpts)


benchmarks.run_pgo.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 726262 (overridden on cmd)
Total bytes of diff: 717298 (overridden on cmd)
Total bytes of delta: -8964 (-1.23 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         178 : 14139.dasm (59.53 % of base)
           9 : 4813.dasm (2.82 % of base)

Top file improvements (bytes):
        -300 : 594.dasm (-45.52 % of base)
        -296 : 849.dasm (-46.98 % of base)
        -258 : 1543.dasm (-38.62 % of base)
        -258 : 599.dasm (-36.24 % of base)
        -247 : 8074.dasm (-29.51 % of base)
        -216 : 5077.dasm (-40.45 % of base)
        -204 : 7247.dasm (-41.98 % of base)
        -182 : 1325.dasm (-27.58 % of base)
        -158 : 7951.dasm (-31.10 % of base)
        -148 : 14065.dasm (-35.92 % of base)
        -142 : 4536.dasm (-36.22 % of base)
        -140 : 13499.dasm (-34.83 % of base)
        -140 : 13868.dasm (-26.72 % of base)
        -140 : 521.dasm (-31.96 % of base)
        -140 : 7427.dasm (-33.18 % of base)
        -140 : 7568.dasm (-35.90 % of base)
        -128 : 1623.dasm (-33.68 % of base)
        -106 : 3277.dasm (-29.44 % of base)
        -106 : 5076.dasm (-41.09 % of base)
        -102 : 1625.dasm (-39.84 % of base)

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

Top method regressions (bytes):
         178 (59.53 % of base) : 14139.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
           9 (2.82 % of base) : 4813.dasm - Jil.Common.ExtensionMethods+<>c__DisplayClass65_0:<GetContainerInterface>b__0(System.Type):ubyte:this (Tier1)

Top method improvements (bytes):
        -300 (-45.52 % of base) : 594.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -296 (-46.98 % of base) : 849.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -258 (-36.24 % of base) : 599.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -258 (-38.62 % of base) : 1543.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -247 (-29.51 % of base) : 8074.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -216 (-40.45 % of base) : 5077.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -204 (-41.98 % of base) : 7247.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -182 (-27.58 % of base) : 1325.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -158 (-31.10 % of base) : 7951.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier1)
        -148 (-35.92 % of base) : 14065.dasm - ProtoBuf.ProtoReader+State:ReadAsRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (Tier0)
        -142 (-36.22 % of base) : 4536.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -140 (-26.72 % of base) : 13868.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (Tier0)
        -140 (-33.18 % of base) : 7427.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
        -140 (-34.83 % of base) : 13499.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (Tier0)
        -140 (-35.90 % of base) : 7568.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -140 (-31.96 % of base) : 521.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (Tier0)
        -128 (-33.68 % of base) : 1623.dasm - System.Linq.Enumerable:Concat[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -106 (-29.44 % of base) : 3277.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier0)
        -106 (-41.09 % of base) : 5076.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-42.15 % of base) : 4259.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)

Top method regressions (percentages):
         178 (59.53 % of base) : 14139.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
           9 (2.82 % of base) : 4813.dasm - Jil.Common.ExtensionMethods+<>c__DisplayClass65_0:<GetContainerInterface>b__0(System.Type):ubyte:this (Tier1)

Top method improvements (percentages):
        -296 (-46.98 % of base) : 849.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
         -64 (-46.72 % of base) : 5146.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (Instrumented Tier0)
         -64 (-46.72 % of base) : 3560.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (Tier0)
        -300 (-45.52 % of base) : 594.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -64 (-42.95 % of base) : 13696.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
         -64 (-42.67 % of base) : 4466.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (Instrumented Tier0)
         -64 (-42.67 % of base) : 2738.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (Tier0)
        -102 (-42.15 % of base) : 4259.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
        -204 (-41.98 % of base) : 7247.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
         -64 (-41.29 % of base) : 11454.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](byref,System.Text.Json.JsonSerializerOptions):System.__Canon (Tier0)
         -64 (-41.29 % of base) : 8804.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
        -106 (-41.09 % of base) : 5076.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -216 (-40.45 % of base) : 5077.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-40.16 % of base) : 4967.dasm - System.Linq.Enumerable:Select[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`3[System.__Canon,int,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-40.16 % of base) : 589.dasm - System.Linq.Enumerable:SkipWhile[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-39.84 % of base) : 1625.dasm - System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-39.08 % of base) : 2736.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (Tier0)
        -258 (-38.62 % of base) : 1543.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -64 (-38.10 % of base) : 8687.dasm - System.Collections.Immutable.SecurePooledObject`1[System.__Canon]:Use[System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]](byref):System.__Canon:this (Tier0)
         -64 (-37.87 % of base) : 10142.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (Tier0)


benchmarks.run_tiered.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 706843 (overridden on cmd)
Total bytes of diff: 696866 (overridden on cmd)
Total bytes of delta: -9977 (-1.41 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
        -388 : 11234.dasm (-28.20 % of base)
        -300 : 567.dasm (-45.52 % of base)
        -296 : 1467.dasm (-46.98 % of base)
        -258 : 1367.dasm (-38.62 % of base)
        -258 : 572.dasm (-36.24 % of base)
        -254 : 8558.dasm (-35.98 % of base)
        -247 : 5431.dasm (-29.55 % of base)
        -228 : 11232.dasm (-43.18 % of base)
        -216 : 7383.dasm (-40.45 % of base)
        -216 : 7816.dasm (-38.78 % of base)
        -204 : 9375.dasm (-41.98 % of base)
        -182 : 1211.dasm (-27.53 % of base)
        -178 : 8617.dasm (-43.20 % of base)
        -157 : 10961.dasm (-35.52 % of base)
        -148 : 9283.dasm (-35.92 % of base)
        -147 : 10314.dasm (-29.82 % of base)
        -142 : 3374.dasm (-36.60 % of base)
        -140 : 10586.dasm (-33.18 % of base)
        -140 : 498.dasm (-31.96 % of base)
        -140 : 7781.dasm (-34.83 % of base)

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

Top method improvements (bytes):
        -388 (-28.20 % of base) : 11234.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (Tier0-FullOpts)
        -300 (-45.52 % of base) : 567.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -296 (-46.98 % of base) : 1467.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -258 (-36.24 % of base) : 572.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -258 (-38.62 % of base) : 1367.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -254 (-35.98 % of base) : 8558.dasm - System.Array:Sort[System.__Canon,System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
        -247 (-29.55 % of base) : 5431.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -228 (-43.18 % of base) : 11232.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
        -216 (-40.45 % of base) : 7383.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -216 (-38.78 % of base) : 7816.dasm - System.Threading.Tasks.Parallel:ForEachWorker[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Threading.Tasks.ParallelOptions,System.Action`1[System.__Canon],System.Action`2[System.__Canon,System.__Canon],System.Action`3[System.__Canon,System.__Canon,long],System.Func`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon],System.Func`5[System.__Canon,System.__Canon,long,System.__Canon,System.__Canon],System.Func`1[System.__Canon],System.Action`1[System.__Canon]):System.Threading.Tasks.ParallelLoopResult (Tier0)
        -204 (-41.98 % of base) : 9375.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -182 (-27.53 % of base) : 1211.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -178 (-43.20 % of base) : 8617.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (Tier0)
        -157 (-35.52 % of base) : 10961.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier1)
        -148 (-35.92 % of base) : 9283.dasm - ProtoBuf.ProtoReader+State:ReadAsRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (Tier0)
        -147 (-29.82 % of base) : 10314.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier1)
        -142 (-36.60 % of base) : 3374.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
        -140 (-33.18 % of base) : 10586.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
        -140 (-34.83 % of base) : 7781.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (Tier0)
        -140 (-31.96 % of base) : 498.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (Tier0)

Top method improvements (percentages):
        -296 (-46.98 % of base) : 1467.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
         -64 (-46.72 % of base) : 14678.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (Tier0)
        -300 (-45.52 % of base) : 567.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -64 (-43.24 % of base) : 8862.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
        -178 (-43.20 % of base) : 8617.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (Tier0)
        -228 (-43.18 % of base) : 11232.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
         -64 (-42.67 % of base) : 8239.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (Tier0)
        -102 (-42.15 % of base) : 7419.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
        -204 (-41.98 % of base) : 9375.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
         -64 (-41.29 % of base) : 4981.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](byref,System.Text.Json.JsonSerializerOptions):System.__Canon (Tier0)
         -64 (-41.29 % of base) : 4328.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
        -106 (-41.09 % of base) : 7382.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -216 (-40.45 % of base) : 7383.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-40.16 % of base) : 562.dasm - System.Linq.Enumerable:SkipWhile[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-39.84 % of base) : 1453.dasm - System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -102 (-39.08 % of base) : 3855.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (Tier0)
        -216 (-38.78 % of base) : 7816.dasm - System.Threading.Tasks.Parallel:ForEachWorker[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Threading.Tasks.ParallelOptions,System.Action`1[System.__Canon],System.Action`2[System.__Canon,System.__Canon],System.Action`3[System.__Canon,System.__Canon,long],System.Func`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon],System.Func`5[System.__Canon,System.__Canon,long,System.__Canon,System.__Canon],System.Func`1[System.__Canon],System.Action`1[System.__Canon]):System.Threading.Tasks.ParallelLoopResult (Tier0)
        -258 (-38.62 % of base) : 1367.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -64 (-38.32 % of base) : 8358.dasm - System.Text.Json.Serialization.Metadata.JsonMetadataServices:CreateListInfo[System.__Canon,System.__Canon](System.Text.Json.JsonSerializerOptions,System.Text.Json.Serialization.Metadata.JsonCollectionInfoValues`1[System.__Canon]):System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[System.__Canon] (Tier0)
         -64 (-38.10 % of base) : 5556.dasm - System.Collections.Immutable.SecurePooledObject`1[System.__Canon]:Use[System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.__Canon]]](byref):System.__Canon:this (Tier0)


coreclr_tests.run.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 46161 (overridden on cmd)
Total bytes of diff: 46119 (overridden on cmd)
Total bytes of delta: -42 (-0.09 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -42 : 480.dasm (-14.14 % of base)

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

Top method improvements (bytes):
         -42 (-14.14 % of base) : 480.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)

Top method improvements (percentages):
         -42 (-14.14 % of base) : 480.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)

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


libraries.pmi.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1461078 (overridden on cmd)
Total bytes of diff: 1457584 (overridden on cmd)
Total bytes of delta: -3494 (-0.24 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         475 : 6101.dasm (101.93 % of base)
          36 : 4142.dasm (13.74 % of base)
          31 : 4154.dasm (16.06 % of base)
          24 : 22172.dasm (9.52 % of base)
          13 : 9923.dasm (4.73 % of base)
           8 : 9921.dasm (4.15 % of base)
           6 : 4108.dasm (4.17 % of base)

Top file improvements (bytes):
         -77 : 4104.dasm (-30.92 % of base)
         -77 : 4302.dasm (-30.92 % of base)
         -51 : 11892.dasm (-30.54 % of base)
         -50 : 6167.dasm (-9.86 % of base)
         -47 : 4316.dasm (-25.41 % of base)
         -46 : 4177.dasm (-15.92 % of base)
         -46 : 4216.dasm (-15.92 % of base)
         -46 : 4226.dasm (-15.92 % of base)
         -46 : 4196.dasm (-15.92 % of base)
         -46 : 4206.dasm (-15.92 % of base)
         -45 : 21864.dasm (-22.84 % of base)
         -44 : 3947.dasm (-35.20 % of base)
         -44 : 3951.dasm (-29.14 % of base)
         -43 : 14202.dasm (-29.45 % of base)
         -43 : 14203.dasm (-29.45 % of base)
         -43 : 14206.dasm (-26.87 % of base)
         -43 : 403.dasm (-13.44 % of base)
         -43 : 14201.dasm (-29.86 % of base)
         -43 : 14204.dasm (-29.86 % of base)
         -43 : 14207.dasm (-29.25 % of base)

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

Top method regressions (bytes):
         475 (101.93 % of base) : 6101.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
          36 (13.74 % of base) : 4142.dasm - System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          31 (16.06 % of base) : 4154.dasm - System.Numerics.Vector:CreateSequence[System.__Canon](System.__Canon,System.__Canon):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          24 (9.52 % of base) : 22172.dasm - <StartupCode$FSharp-Core>.$Map:loop@860-43[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
          13 (4.73 % of base) : 9923.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
           8 (4.15 % of base) : 9921.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
           6 (4.17 % of base) : 4108.dasm - System.Numerics.Vector:AndNot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)

Top method improvements (bytes):
         -77 (-30.92 % of base) : 4104.dasm - System.Numerics.Vector:Abs[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -77 (-30.92 % of base) : 4302.dasm - System.Numerics.Vector:SquareRoot[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -51 (-30.54 % of base) : 11892.dasm - System.Collections.Generic.CollectionExtensions:Remove[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IDictionary`2[System.__Canon,System.Nullable`1[int]],System.__Canon,byref):ubyte (FullOpts)
         -50 (-9.86 % of base) : 6167.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendEnum>g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte (FullOpts)
         -47 (-25.41 % of base) : 4316.dasm - System.Numerics.Vector:Sum[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
         -46 (-15.92 % of base) : 4177.dasm - System.Numerics.Vector:Equals[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -46 (-15.92 % of base) : 4196.dasm - System.Numerics.Vector:GreaterThan[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -46 (-15.92 % of base) : 4206.dasm - System.Numerics.Vector:GreaterThanOrEqual[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -46 (-15.92 % of base) : 4216.dasm - System.Numerics.Vector:LessThan[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -46 (-15.92 % of base) : 4226.dasm - System.Numerics.Vector:LessThanOrEqual[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -45 (-22.84 % of base) : 21864.dasm - <StartupCode$FSharp-Core>.$Set:loop@895-46[System.__Canon](System.Collections.Generic.IEnumerator`1[System.__Canon],System.Collections.Generic.IEnumerator`1[System.__Canon],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
         -44 (-35.20 % of base) : 3947.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -44 (-29.14 % of base) : 3951.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -43 (-29.86 % of base) : 14324.dasm - Microsoft.FSharp.Collections.FSharpMap`2[int,System.Nullable`1[int]]:FoldSection[System.__Canon](int,int,Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)
         -43 (-24.86 % of base) : 14205.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[double](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],double):double:this (FullOpts)
         -43 (-29.86 % of base) : 14204.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[int](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],int):int:this (FullOpts)
         -43 (-29.25 % of base) : 14207.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[long](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],long):long:this (FullOpts)
         -43 (-29.45 % of base) : 14203.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[short](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],short):short:this (FullOpts)
         -43 (-29.86 % of base) : 14201.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[System.__Canon](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)
         -43 (-26.87 % of base) : 14206.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[System.Numerics.Vector`1[float]](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Numerics.Vector`1[float]):System.Numerics.Vector`1[float]:this (FullOpts)

Top method regressions (percentages):
         475 (101.93 % of base) : 6101.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
          31 (16.06 % of base) : 4154.dasm - System.Numerics.Vector:CreateSequence[System.__Canon](System.__Canon,System.__Canon):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          36 (13.74 % of base) : 4142.dasm - System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          24 (9.52 % of base) : 22172.dasm - <StartupCode$FSharp-Core>.$Map:loop@860-43[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],System.Collections.Generic.IEnumerator`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
          13 (4.73 % of base) : 9923.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
           6 (4.17 % of base) : 4108.dasm - System.Numerics.Vector:AndNot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
           8 (4.15 % of base) : 9921.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)

Top method improvements (percentages):
         -32 (-57.14 % of base) : 4146.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[long]):System.Numerics.Vector`1[double] (FullOpts)
         -32 (-57.14 % of base) : 4147.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[ulong]):System.Numerics.Vector`1[double] (FullOpts)
         -26 (-39.39 % of base) : 3563.dasm - System.TupleExtensions:ToTuple[System.__Canon,System.Nullable`1[int]](System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]):System.Tuple`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
         -44 (-35.20 % of base) : 3947.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -30 (-33.33 % of base) : 4323.dasm - System.Numerics.Vector:ToScalar[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
         -32 (-32.32 % of base) : 19741.dasm - Microsoft.FSharp.Quotations.PatternsModule:|FrontAndBack|_|[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
         -30 (-32.26 % of base) : 15535.dasm - Microsoft.FSharp.Control.TaskBuilderBase:Zero[System.__Canon]():Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.__Canon]:this (FullOpts)
         -30 (-32.26 % of base) : 19493.dasm - Microsoft.FSharp.Core.CompilerServices.ResumableCode:Yield[System.__Canon]():Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[System.__Canon,System.__Canon] (FullOpts)
         -30 (-32.26 % of base) : 19463.dasm - Microsoft.FSharp.Core.CompilerServices.ResumableCode:Zero[System.__Canon]():Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[System.__Canon,System.__Canon] (FullOpts)
         -77 (-30.92 % of base) : 4104.dasm - System.Numerics.Vector:Abs[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -77 (-30.92 % of base) : 4302.dasm - System.Numerics.Vector:SquareRoot[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         -51 (-30.54 % of base) : 11892.dasm - System.Collections.Generic.CollectionExtensions:Remove[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IDictionary`2[System.__Canon,System.Nullable`1[int]],System.__Canon,byref):ubyte (FullOpts)
         -30 (-30.00 % of base) : 15870.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:getArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         -43 (-29.86 % of base) : 14324.dasm - Microsoft.FSharp.Collections.FSharpMap`2[int,System.Nullable`1[int]]:FoldSection[System.__Canon](int,int,Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)
         -43 (-29.86 % of base) : 14204.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[int](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],int):int:this (FullOpts)
         -43 (-29.86 % of base) : 14201.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[System.__Canon](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)
         -43 (-29.45 % of base) : 14203.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[short](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],short):short:this (FullOpts)
         -43 (-29.45 % of base) : 14202.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[ubyte](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],ubyte):ubyte:this (FullOpts)
         -43 (-29.25 % of base) : 14207.dasm - Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.Nullable`1[int]]:FoldSection[long](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],long):long:this (FullOpts)
         -43 (-29.25 % of base) : 14263.dasm - Microsoft.FSharp.Collections.FSharpMap`2[ubyte,System.Nullable`1[int]]:FoldSection[System.__Canon](ubyte,ubyte,Microsoft.FSharp.Core.FSharpFunc`2[ubyte,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)


libraries_tests.run.windows.x86.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 510379 (overridden on cmd)
Total bytes of diff: 494612 (overridden on cmd)
Total bytes of delta: -15767 (-3.09 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          17 : 3931.dasm (7.94 % of base)
          11 : 8479.dasm (5.24 % of base)
           6 : 3549.dasm (2.84 % of base)
           6 : 7105.dasm (2.75 % of base)

Top file improvements (bytes):
        -300 : 32.dasm (-45.45 % of base)
        -300 : 4404.dasm (-45.45 % of base)
        -296 : 38.dasm (-46.84 % of base)
        -296 : 4409.dasm (-46.84 % of base)
        -288 : 2170.dasm (-31.14 % of base)
        -288 : 6486.dasm (-31.14 % of base)
        -258 : 155.dasm (-38.62 % of base)
        -258 : 1279.dasm (-36.34 % of base)
        -258 : 4527.dasm (-38.62 % of base)
        -258 : 5645.dasm (-36.34 % of base)
        -247 : 8911.dasm (-29.98 % of base)
        -241 : 4533.dasm (-44.14 % of base)
        -241 : 4911.dasm (-44.14 % of base)
        -241 : 535.dasm (-44.46 % of base)
        -241 : 161.dasm (-44.46 % of base)
        -224 : 9942.dasm (-19.44 % of base)
        -204 : 1944.dasm (-41.98 % of base)
        -204 : 6256.dasm (-41.98 % of base)
        -182 : 5674.dasm (-27.58 % of base)
        -182 : 1308.dasm (-27.58 % of base)

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

Top method regressions (bytes):
          17 (7.94 % of base) : 3931.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
          11 (5.24 % of base) : 8479.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
           6 (2.84 % of base) : 3549.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
           6 (2.75 % of base) : 7105.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)

Top method improvements (bytes):
        -300 (-45.45 % of base) : 32.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -300 (-45.45 % of base) : 4404.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -296 (-46.84 % of base) : 38.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -296 (-46.84 % of base) : 4409.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -288 (-31.14 % of base) : 2170.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -288 (-31.14 % of base) : 6486.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -258 (-36.34 % of base) : 1279.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -258 (-36.34 % of base) : 5645.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -258 (-38.62 % of base) : 155.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -258 (-38.62 % of base) : 4527.dasm - System.Linq.Enumerable:Where[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -247 (-29.98 % of base) : 8911.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
        -241 (-44.14 % of base) : 4911.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Instrumented Tier0)
        -241 (-44.46 % of base) : 535.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Instrumented Tier0)
        -241 (-44.14 % of base) : 4533.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -241 (-44.46 % of base) : 161.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -224 (-19.44 % of base) : 9942.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
        -204 (-41.98 % of base) : 1944.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -204 (-41.98 % of base) : 6256.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
        -182 (-27.58 % of base) : 5674.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
        -182 (-27.58 % of base) : 1308.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)

Top method regressions (percentages):
          17 (7.94 % of base) : 3931.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
          11 (5.24 % of base) : 8479.dasm - System.Collections.Hashtable:KeyEquals(System.Object,System.Object):ubyte:this (Tier1)
           6 (2.84 % of base) : 3549.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
           6 (2.75 % of base) : 7105.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)

Top method improvements (percentages):
        -178 (-47.85 % of base) : 2987.dasm - Xunit.Assert:Contains[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[System.__Canon]) (Tier0)
        -296 (-46.84 % of base) : 38.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -296 (-46.84 % of base) : 4409.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
        -102 (-46.15 % of base) : 8542.dasm - System.Collections.Immutable.ImmutableHashSet:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableHashSet`1[System.__Canon] (Tier0)
        -300 (-45.45 % of base) : 32.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -300 (-45.45 % of base) : 4404.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -64 (-45.39 % of base) : 11711.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilder[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]] (Instrumented Tier0)
         -64 (-45.39 % of base) : 7140.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilder[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]] (Tier0)
        -102 (-44.74 % of base) : 9595.dasm - Microsoft.CodeAnalysis.PublicContract:ToBoxedImmutableArrayWithDistinctNonNullItems[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.String):System.Collections.Generic.IReadOnlyList`1[System.__Canon] (Tier0)
        -241 (-44.46 % of base) : 535.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Instrumented Tier0)
        -241 (-44.46 % of base) : 161.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
         -64 (-44.44 % of base) : 11462.dasm - System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
         -64 (-44.44 % of base) : 9504.dasm - System.Linq.ImmutableArrayExtensions:Where[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
        -241 (-44.14 % of base) : 4911.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Instrumented Tier0)
        -241 (-44.14 % of base) : 4533.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
         -64 (-43.84 % of base) : 7433.dasm - Roslyn.Utilities.EnumerableExtensions:ToImmutableDictionaryOrEmpty[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int] (Tier0)
         -64 (-43.54 % of base) : 8185.dasm - Microsoft.VisualStudio.Composition.AttributeServices:GetFirstAttribute[System.__Canon](System.Reflection.ICustomAttributeProvider):System.__Canon (Tier0)
         -64 (-43.54 % of base) : 2949.dasm - Xunit.Assert:Equal[System.__Canon](System.__Canon,System.__Canon) (Tier0)
        -178 (-43.31 % of base) : 7253.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.ValueTuple`3[int,int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[int,int,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.ValueTuple`3[int,int,System.__Canon]] (Tier0)
        -102 (-42.68 % of base) : 11393.dasm - Microsoft.CodeAnalysis.PublicContract:ToBoxedImmutableArrayWithNonNullItems[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.String):System.Collections.Generic.IReadOnlyList`1[System.__Canon] (Tier0)


librariestestsnotieredcompilation.run.windows.x86.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 256268 (overridden on cmd)
Total bytes of diff: 250961 (overridden on cmd)
Total bytes of delta: -5307 (-2.07 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          48 : 7258.dasm (11.29 % of base)
          14 : 4394.dasm (7.69 % of base)
          10 : 4483.dasm (5.29 % of base)
          10 : 7807.dasm (3.00 % of base)
           8 : 7376.dasm (17.02 % of base)
           8 : 7798.dasm (3.86 % of base)
           6 : 2115.dasm (2.84 % of base)
           6 : 69.dasm (2.75 % of base)
           5 : 1485.dasm (7.04 % of base)
           3 : 4130.dasm (1.27 % of base)

Top file improvements (bytes):
        -288 : 2985.dasm (-31.14 % of base)
        -288 : 968.dasm (-31.14 % of base)
        -247 : 4198.dasm (-29.55 % of base)
        -224 : 4556.dasm (-19.44 % of base)
        -157 : 9.dasm (-35.52 % of base)
        -157 : 2055.dasm (-35.52 % of base)
        -151 : 5216.dasm (-26.03 % of base)
        -151 : 735.dasm (-26.03 % of base)
        -147 : 428.dasm (-29.82 % of base)
        -147 : 2494.dasm (-29.82 % of base)
        -142 : 12.dasm (-36.60 % of base)
        -142 : 2058.dasm (-36.60 % of base)
        -135 : 4205.dasm (-21.70 % of base)
        -122 : 4447.dasm (-29.54 % of base)
        -107 : 3296.dasm (-37.41 % of base)
         -99 : 441.dasm (-21.85 % of base)
         -99 : 2507.dasm (-21.85 % of base)
         -97 : 7374.dasm (-21.04 % of base)
         -93 : 594.dasm (-28.27 % of base)
         -93 : 2454.dasm (-28.27 % of base)

63 total files with Code Size differences (53 improved, 10 regressed), 2 unchanged.

Top method regressions (bytes):
          48 (11.29 % of base) : 7258.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]:AddDiagnostics[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.__Canon):ubyte:this (FullOpts)
          14 (7.69 % of base) : 4394.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
          10 (3.00 % of base) : 7807.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:BetterFunctionMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon],Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.BoundExpression],byref):int:this (FullOpts)
          10 (5.29 % of base) : 4483.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon,System.__Canon](byref,System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon (FullOpts)
           8 (3.86 % of base) : 7798.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
           8 (17.02 % of base) : 7376.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
           6 (2.84 % of base) : 2115.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
           6 (2.75 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
           5 (7.04 % of base) : 1485.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
           3 (1.27 % of base) : 4130.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)

Top method improvements (bytes):
        -288 (-31.14 % of base) : 2985.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -288 (-31.14 % of base) : 968.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -247 (-29.55 % of base) : 4198.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -224 (-19.44 % of base) : 4556.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
        -157 (-35.52 % of base) : 9.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -157 (-35.52 % of base) : 2055.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -151 (-26.03 % of base) : 5216.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
        -151 (-26.03 % of base) : 735.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
        -147 (-29.82 % of base) : 428.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -147 (-29.82 % of base) : 2494.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -142 (-36.60 % of base) : 12.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -142 (-36.60 % of base) : 2058.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -135 (-21.70 % of base) : 4205.dasm - Microsoft.VisualStudio.Composition.CompositionConfiguration:PathExistsBetween[System.__Canon](System.__Canon,System.__Canon,System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.HashSet`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (FullOpts)
        -122 (-29.54 % of base) : 4447.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
        -107 (-37.41 % of base) : 3296.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -99 (-21.85 % of base) : 441.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -99 (-21.85 % of base) : 2507.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -97 (-21.04 % of base) : 7374.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:GetTypesFromMemberMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.ReadOnlyMemory`1[ushort]]):System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
         -93 (-28.27 % of base) : 594.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
         -93 (-28.27 % of base) : 2454.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)

Top method regressions (percentages):
           8 (17.02 % of base) : 7376.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
          48 (11.29 % of base) : 7258.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]:AddDiagnostics[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.__Canon):ubyte:this (FullOpts)
          14 (7.69 % of base) : 4394.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
           5 (7.04 % of base) : 1485.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
          10 (5.29 % of base) : 4483.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon,System.__Canon](byref,System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon (FullOpts)
           8 (3.86 % of base) : 7798.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
          10 (3.00 % of base) : 7807.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:BetterFunctionMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon],Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.BoundExpression],byref):int:this (FullOpts)
           6 (2.84 % of base) : 2115.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
           6 (2.75 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
           3 (1.27 % of base) : 4130.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)

Top method improvements (percentages):
        -107 (-37.41 % of base) : 3296.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
        -142 (-36.60 % of base) : 12.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -142 (-36.60 % of base) : 2058.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -157 (-35.52 % of base) : 9.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -157 (-35.52 % of base) : 2055.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -64 (-35.36 % of base) : 9910.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (FullOpts)
         -14 (-32.56 % of base) : 3256.dasm - System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -42 (-32.06 % of base) : 5298.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListPool:ToListAndFree[System.__Canon](byref):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)
        -288 (-31.14 % of base) : 2985.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -288 (-31.14 % of base) : 968.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
         -30 (-30.30 % of base) : 3364.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilder[System.ValueTuple`3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray`1+Builder[System.ValueTuple`3[int,int,System.__Canon]] (FullOpts)
         -48 (-30.19 % of base) : 4306.dasm - System.Linq.Enumerable:Contains[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]):ubyte (FullOpts)
         -52 (-30.06 % of base) : 48.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (FullOpts)
         -52 (-30.06 % of base) : 2094.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (FullOpts)
        -147 (-29.82 % of base) : 428.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -147 (-29.82 % of base) : 2494.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -247 (-29.55 % of base) : 4198.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -122 (-29.54 % of base) : 4447.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
         -77 (-29.28 % of base) : 827.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
         -77 (-29.28 % of base) : 2844.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)


realworld.run.windows.x86.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 481011 (overridden on cmd)
Total bytes of diff: 475362 (overridden on cmd)
Total bytes of delta: -5649 (-1.17 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          71 : 6212.dasm (12.28 % of base)

Top file improvements (bytes):
        -247 : 3242.dasm (-29.98 % of base)
        -157 : 237.dasm (-35.52 % of base)
        -153 : 15922.dasm (-29.31 % of base)
        -147 : 15245.dasm (-29.82 % of base)
        -147 : 239.dasm (-29.82 % of base)
        -146 : 9523.dasm (-26.31 % of base)
        -142 : 580.dasm (-36.60 % of base)
        -130 : 10209.dasm (-36.11 % of base)
        -128 : 8222.dasm (-26.50 % of base)
        -125 : 9525.dasm (-21.22 % of base)
        -111 : 8466.dasm (-21.22 % of base)
        -102 : 8188.dasm (-25.19 % of base)
        -100 : 9129.dasm (-24.45 % of base)
         -99 : 462.dasm (-21.85 % of base)
         -99 : 6005.dasm (-24.94 % of base)
         -93 : 202.dasm (-28.01 % of base)
         -90 : 11196.dasm (-20.50 % of base)
         -90 : 2875.dasm (-24.73 % of base)
         -77 : 6399.dasm (-27.30 % of base)
         -76 : 5135.dasm (-18.67 % of base)

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

Top method regressions (bytes):
          71 (12.28 % of base) : 6212.dasm - Internal.Utilities.Library.List:mapq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)

Top method improvements (bytes):
        -247 (-29.98 % of base) : 3242.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -157 (-35.52 % of base) : 237.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
        -153 (-29.31 % of base) : 15922.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -147 (-29.82 % of base) : 15245.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -147 (-29.82 % of base) : 239.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -146 (-26.31 % of base) : 9523.dasm - Internal.Utilities.Collections.Tagged.SetTreeModule:union[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon]):Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon] (FullOpts)
        -142 (-36.60 % of base) : 580.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
        -130 (-36.11 % of base) : 10209.dasm - Internal.Utilities.Collections.Tagged.SetTreeModule:intersectionAux[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon]):Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon] (FullOpts)
        -128 (-26.50 % of base) : 8222.dasm - Internal.Utilities.Collections.Tagged.SetTreeModule:remove[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon,Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon]):Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon] (FullOpts)
        -125 (-21.22 % of base) : 9525.dasm - Internal.Utilities.Collections.Tagged.SetTreeModule:balance[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon],System.__Canon,Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon]):Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon] (FullOpts)
        -111 (-21.22 % of base) : 8466.dasm - FSharp.Compiler.NameResolution:CollectAtMostOneResult[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
        -102 (-25.19 % of base) : 8188.dasm - Microsoft.FSharp.Primitives.Basics.List:mapi2[System.__Canon,System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
        -100 (-24.45 % of base) : 9129.dasm - FSharp.Compiler.NameResolution:CollectResults[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
         -99 (-24.94 % of base) : 6005.dasm - Microsoft.FSharp.Primitives.Basics.List:map2[System.__Canon,ubyte,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[ubyte]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -99 (-21.85 % of base) : 462.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -93 (-28.01 % of base) : 202.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (FullOpts)
         -90 (-20.50 % of base) : 11196.dasm - Microsoft.FSharp.Primitives.Basics.List:map3[System.__Canon,System.__Canon,System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -90 (-24.73 % of base) : 2875.dasm - Microsoft.FSharp.Primitives.Basics.List:mapi[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -77 (-27.30 % of base) : 6399.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
         -76 (-18.67 % of base) : 5135.dasm - FSharp.Compiler.AbstractIL.ILBinaryReader:seekReadIndexedRows[System.__Canon,FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag],System.__Canon](int,Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag]],Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag],int],ubyte,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)

Top method regressions (percentages):
          71 (12.28 % of base) : 6212.dasm - Internal.Utilities.Library.List:mapq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)

Top method improvements (percentages):
        -142 (-36.60 % of base) : 580.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         -63 (-36.21 % of base) : 8669.dasm - Internal.Utilities.Library.List:splitChoose[System.__Canon,System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.Tuple`2[System.__Canon,System.__Canon] (FullOpts)
        -130 (-36.11 % of base) : 10209.dasm - Internal.Utilities.Collections.Tagged.SetTreeModule:intersectionAux[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon]):Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon] (FullOpts)
        -157 (-35.52 % of base) : 237.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -14 (-32.56 % of base) : 10176.dasm - Microsoft.FSharp.Collections.SeqModule:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -14 (-32.56 % of base) : 12710.dasm - System.Linq.Enumerable:Empty[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]():System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]] (FullOpts)
         -30 (-30.30 % of base) : 5030.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilder[System.__Canon]():System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon] (FullOpts)
         -69 (-30.26 % of base) : 9519.dasm - Internal.Utilities.Collections.Tagged.SetTreeModule:diffAux[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon],Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon]):Internal.Utilities.Collections.Tagged.SetTree`1[System.__Canon] (FullOpts)
        -247 (-29.98 % of base) : 3242.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
        -147 (-29.82 % of base) : 15245.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
        -147 (-29.82 % of base) : 239.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -48 (-29.63 % of base) : 8994.dasm - Internal.Utilities.Library.Extras+ListSet:insert[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon,Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
        -153 (-29.31 % of base) : 15922.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
         -30 (-29.13 % of base) : 11373.dasm - Microsoft.FSharp.Collections.SetTreeModule:current[System.__Canon](Microsoft.FSharp.Collections.SetTreeModule+SetIterator`1[System.__Canon]):System.__Canon (FullOpts)
         -32 (-29.09 % of base) : 7460.dasm - Microsoft.FSharp.Collections.ListModule:GroupBy[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -56 (-29.02 % of base) : 233.dasm - System.Linq.Enumerable:SkipWhile[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
         -48 (-28.57 % of base) : 8915.dasm - Microsoft.FSharp.Collections.ListModule:SortBy[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -48 (-28.57 % of base) : 10290.dasm - Microsoft.FSharp.Collections.ListModule:SortWith[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         -93 (-28.01 % of base) : 202.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[int,System.__Canon]],byref):ubyte (FullOpts)
         -14 (-28.00 % of base) : 6225.dasm - Microsoft.FSharp.Collections.ArrayModule:OfList[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon[] (FullOpts)