Diffs are based on 82,026 contexts (29,474 MinOpts, 52,552 FullOpts).
MISSED contexts: base: 2,213 (1.72%), diff: 43,415 (33.68%)
Collection | Base size (bytes) | Diff size (bytes) |
---|---|---|
benchmarks.run.linux.arm.checked.mch | 507,536 | -2,486 |
benchmarks.run_pgo.linux.arm.checked.mch | 10,032,106 | -10,192 |
benchmarks.run_tiered.linux.arm.checked.mch | 1,668,128 | -10,252 |
coreclr_tests.run.linux.arm.checked.mch | 374,650 | -96 |
libraries.pmi.linux.arm.checked.mch | 927,870 | -6,268 |
libraries_tests.run.linux.arm.Release.mch | 818,984 | -11,466 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch | 481,540 | -3,786 |
realworld.run.linux.arm.checked.mch | 2,003,136 | -4,714 |
Collection | Base size (bytes) | Diff size (bytes) |
---|---|---|
benchmarks.run_pgo.linux.arm.checked.mch | 3,909,502 | -6,314 |
benchmarks.run_tiered.linux.arm.checked.mch | 1,162,028 | -7,152 |
coreclr_tests.run.linux.arm.checked.mch | 273,420 | +40 |
libraries_tests.run.linux.arm.Release.mch | 246,528 | -2,318 |
Collection | Base size (bytes) | Diff size (bytes) |
---|---|---|
benchmarks.run.linux.arm.checked.mch | 491,706 | -2,486 |
benchmarks.run_pgo.linux.arm.checked.mch | 6,122,604 | -3,878 |
benchmarks.run_tiered.linux.arm.checked.mch | 506,100 | -3,100 |
coreclr_tests.run.linux.arm.checked.mch | 101,230 | -136 |
libraries.pmi.linux.arm.checked.mch | 927,870 | -6,268 |
libraries_tests.run.linux.arm.Release.mch | 572,456 | -9,148 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch | 481,540 | -3,786 |
realworld.run.linux.arm.checked.mch | 1,998,620 | -4,714 |
@@ -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_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 (FullOpts)+; 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 (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
@@ -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
@@ -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
@@ -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,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
@@ -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 ----
1[System.__Canon]:CreateHiddenCharacteristic[ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic
1ubyte@@ -20,30 +20,14 @@ G_M32739_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x08] // [V00 TypeCtx]
str r1, [sp+0x04] // [V01 arg0]
;; size=18 bbWeight=1 PerfScore 6.00-G_M32739_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x08]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- cmp r3, 0
- beq SHORT G_M32739_IG04
- ;; size=10 bbWeight=1 PerfScore 5.00
-G_M32739_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x08]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- str r3, [sp] // [V03 tmp1]
- b SHORT G_M32739_IG05
- ;; size=10 bbWeight=0.80 PerfScore 4.00
-G_M32739_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ldr r0, [sp+0x08] // [V00 TypeCtx]+G_M32739_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [sp+0x08] movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD+ blx r3 // CORINFO_HELP_MEMCPY str r0, [sp] // [V03 tmp1]- ;; size=22 bbWeight=0.20 PerfScore 1.40
-G_M32739_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ldr r0, [sp] // [V03 tmp1]
ldr r1, [sp+0x04] // [V01 arg0]
; gcrRegs +[r1]
@@ -52,13 +36,13 @@ G_M32739_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldr r3, [r3]
blx r3 // <unknown method>
; gcrRegs -[r1] +[r0]- ;; size=16 bbWeight=1 PerfScore 6.00
-G_M32739_IG06: ; bbWeight=1, epilog, nogc, extend+ ;; size=38 bbWeight=1 PerfScore 13.00
+G_M32739_IG03: ; bbWeight=1, epilog, nogc, extend add sp, 16
pop {r4,r10,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.40, instruction count 31, allocated bytes for code 82 (MethodHash=9911801c) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateHiddenCharacteristic[ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[ubyte] (Tier0)+; Total bytes of code 62, prolog size 14, PerfScore 21.00, instruction count 21, allocated bytes for code 62 (MethodHash=9911801c) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateHiddenCharacteristic[ubyte](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[ubyte] (Tier0) ; ============================================================
Unwind Info:
@@ -70,7 +54,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 41 (0x00029) Actual length = 82 (0x000052)+ Function Length : 31 (0x0001f) Actual length = 62 (0x00003e) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
@@ -20,30 +20,14 @@ G_M53804_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x08] // [V00 TypeCtx]
str r1, [sp+0x04] // [V01 arg0]
;; size=18 bbWeight=1 PerfScore 6.00-G_M53804_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x08]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- cmp r3, 0
- beq SHORT G_M53804_IG04
- ;; size=10 bbWeight=1 PerfScore 5.00
-G_M53804_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x08]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- str r3, [sp] // [V03 tmp1]
- b SHORT G_M53804_IG05
- ;; size=10 bbWeight=0.80 PerfScore 4.00
-G_M53804_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ldr r0, [sp+0x08] // [V00 TypeCtx]+G_M53804_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [sp+0x08] movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD+ blx r3 // CORINFO_HELP_MEMCPY str r0, [sp] // [V03 tmp1]- ;; size=22 bbWeight=0.20 PerfScore 1.40
-G_M53804_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ldr r0, [sp] // [V03 tmp1]
ldr r1, [sp+0x04] // [V01 arg0]
; gcrRegs +[r1]
@@ -52,13 +36,13 @@ G_M53804_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldr r3, [r3]
blx r3 // <unknown method>
; gcrRegs -[r1] +[r0]- ;; size=16 bbWeight=1 PerfScore 6.00
-G_M53804_IG06: ; bbWeight=1, epilog, nogc, extend+ ;; size=38 bbWeight=1 PerfScore 13.00
+G_M53804_IG03: ; bbWeight=1, epilog, nogc, extend add sp, 16
pop {r4,r10,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.40, instruction count 31, allocated bytes for code 82 (MethodHash=26592dd3) for method Newtonsoft.Json.Serialization.JsonTypeReflector:GetCachedAttribute[System.__Canon](System.Object):System.__Canon (Tier0)+; Total bytes of code 62, prolog size 14, PerfScore 21.00, instruction count 21, allocated bytes for code 62 (MethodHash=26592dd3) for method Newtonsoft.Json.Serialization.JsonTypeReflector:GetCachedAttribute[System.__Canon](System.Object):System.__Canon (Tier0) ; ============================================================
Unwind Info:
@@ -70,7 +54,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 41 (0x00029) Actual length = 82 (0x000052)+ Function Length : 31 (0x0001f) Actual length = 62 (0x00003e) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
1[System.__Canon]:CreateCharacteristic[System.__Canon](System.String):BenchmarkDotNet.Characteristics.Characteristic
1System.__Canon@@ -20,30 +20,14 @@ G_M14281_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x08] // [V00 TypeCtx]
str r1, [sp+0x04] // [V01 arg0]
;; size=18 bbWeight=1 PerfScore 6.00-G_M14281_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x08]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- cmp r3, 0
- beq SHORT G_M14281_IG04
- ;; size=10 bbWeight=1 PerfScore 5.00
-G_M14281_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x08]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- str r3, [sp] // [V03 tmp1]
- b SHORT G_M14281_IG05
- ;; size=10 bbWeight=0.80 PerfScore 4.00
-G_M14281_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ldr r0, [sp+0x08] // [V00 TypeCtx]+G_M14281_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [sp+0x08] movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD+ blx r3 // CORINFO_HELP_MEMCPY str r0, [sp] // [V03 tmp1]- ;; size=22 bbWeight=0.20 PerfScore 1.40
-G_M14281_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ldr r0, [sp] // [V03 tmp1]
ldr r1, [sp+0x04] // [V01 arg0]
; gcrRegs +[r1]
@@ -52,13 +36,13 @@ G_M14281_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldr r3, [r3]
blx r3 // <unknown method>
; gcrRegs -[r1] +[r0]- ;; size=16 bbWeight=1 PerfScore 6.00
-G_M14281_IG06: ; bbWeight=1, epilog, nogc, extend+ ;; size=38 bbWeight=1 PerfScore 13.00
+G_M14281_IG03: ; bbWeight=1, epilog, nogc, extend add sp, 16
pop {r4,r10,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 82, prolog size 14, PerfScore 24.40, instruction count 31, allocated bytes for code 82 (MethodHash=cbf4c836) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateCharacteristic[System.__Canon](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon] (Tier0)+; Total bytes of code 62, prolog size 14, PerfScore 21.00, instruction count 21, allocated bytes for code 62 (MethodHash=cbf4c836) for method BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateCharacteristic[System.__Canon](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon] (Tier0) ; ============================================================
Unwind Info:
@@ -70,7 +54,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 41 (0x00029) Actual length = 82 (0x000052)+ Function Length : 31 (0x0001f) Actual length = 62 (0x00003e) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
@@ -53,7 +53,7 @@ G_M57177_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x48] // [V02 tmp1]
ldr r0, [sp+0x48] // [V02 tmp1]
@@ -82,7 +82,8 @@ G_M57177_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -96,11 +97,12 @@ G_M57177_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
cmp r3, 0
bne SHORT G_M57177_IG03
movw r0, 0xd1ff+ ; byrRegs -[r0] movt r0, 0xd1ff
movw r3, 0xd1ff
; gcrRegs -[r3]
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x10] // [V16 tmp15]
movw r0, 0xd1ff
@@ -109,7 +111,8 @@ G_M57177_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -119,6 +122,7 @@ G_M57177_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
; gcrRegs +[r1]
ldr r0, [sp+0x10] // [V16 tmp15]
; gcrRegs +[r0]+ ; byrRegs -[r0] movw r2, 0xd1ff
movt r2, 0xd1ff
movw r3, 0xd1ff
@@ -132,10 +136,12 @@ G_M57177_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] ldr r1, [sp+0x10] // [V16 tmp15]
; gcrRegs +[r1]
movw r0, 0xd1ff+ ; byrRegs -[r0] movt r0, 0xd1ff
movw r12, 0xd1ff
movt r12, 0xd1ff
@@ -163,7 +169,8 @@ G_M57177_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -177,11 +184,12 @@ G_M57177_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
cmp r3, 0
bne SHORT G_M57177_IG04
movw r0, 0xd1ff+ ; byrRegs -[r0] movt r0, 0xd1ff
movw r3, 0xd1ff
; gcrRegs -[r3]
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x14] // [V15 tmp14]
movw r0, 0xd1ff
@@ -190,7 +198,8 @@ G_M57177_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -200,6 +209,7 @@ G_M57177_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
; gcrRegs +[r1]
ldr r0, [sp+0x14] // [V15 tmp14]
; gcrRegs +[r0]+ ; byrRegs -[r0] movw r2, 0xd1ff
movt r2, 0xd1ff
movw r3, 0xd1ff
@@ -213,10 +223,12 @@ G_M57177_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] ldr r1, [sp+0x14] // [V15 tmp14]
; gcrRegs +[r1]
movw r0, 0xd1ff+ ; byrRegs -[r0] movt r0, 0xd1ff
movw r12, 0xd1ff
movt r12, 0xd1ff
@@ -244,7 +256,8 @@ G_M57177_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -258,11 +271,12 @@ G_M57177_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
cmp r3, 0
bne SHORT G_M57177_IG05
movw r0, 0xd1ff+ ; byrRegs -[r0] movt r0, 0xd1ff
movw r3, 0xd1ff
; gcrRegs -[r3]
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x18] // [V14 tmp13]
movw r0, 0xd1ff
@@ -271,7 +285,8 @@ G_M57177_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -281,6 +296,7 @@ G_M57177_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
; gcrRegs +[r1]
ldr r0, [sp+0x18] // [V14 tmp13]
; gcrRegs +[r0]+ ; byrRegs -[r0] movw r2, 0xd1ff
movt r2, 0xd1ff
movw r3, 0xd1ff
@@ -294,10 +310,12 @@ G_M57177_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
movs r1, 250
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE+ blx r3 // CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[r0] ldr r1, [sp+0x18] // [V14 tmp13]
; gcrRegs +[r1]
movw r0, 0xd1ff+ ; byrRegs -[r0] movt r0, 0xd1ff
movw r12, 0xd1ff
movt r12, 0xd1ff
@@ -324,7 +342,7 @@ G_M57177_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x20] // [V12 tmp11]
ldr r0, [sp+0x20] // [V12 tmp11]
@@ -352,7 +370,7 @@ G_M57177_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x1C] // [V13 tmp12]
ldr r0, [sp+0x1C] // [V13 tmp12]
@@ -21,7 +21,7 @@ G_M18825_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x04] // [V01 tmp1]
ldr r0, [sp+0x04] // [V01 tmp1]
@@ -21,7 +21,7 @@ G_M37758_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_NEWSFAST+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN ; gcrRegs +[r0]
str r0, [sp+0x04] // [V01 tmp1]
ldr r0, [sp+0x04] // [V01 tmp1]
@@ -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
@@ -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
@@ -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.Object>+; V00 TypeCtx [V00,T00] ( 4, 4 ) int -> r0 single-def
+; V01 arg0 [V01,T01] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Object> ;# 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_M53804_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_M53804_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 0
- beq SHORT G_M53804_IG04
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M53804_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M53804_IG05
- ;; size=4 bbWeight=0.80 PerfScore 1.60
-G_M53804_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref+ ;; size=6 bbWeight=1 PerfScore 3.00
+G_M53804_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_M53804_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_M53804_IG06: ; bbWeight=1, epilog, nogc, extend
- add sp, 12
- pop {r4,r11,lr}+ ;; size=30 bbWeight=1 PerfScore 9.00
+G_M53804_IG03: ; bbWeight=1, epilog, nogc, extend
+ add sp, 8
+ pop {r4,lr} bx r3 // Newtonsoft.Json.Serialization.CachedAttributeGetter`1[System.__Canon]:GetAttribute(System.Object):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=26592dd3) for method Newtonsoft.Json.Serialization.JsonTypeReflector:GetCachedAttribute[System.__Canon](System.Object):System.__Canon (Tier1)+; Total bytes of code 44, prolog size 6, PerfScore 15.00, instruction count 15, allocated bytes for code 44 (MethodHash=26592dd3) for method Newtonsoft.Json.Serialization.JsonTypeReflector:GetCachedAttribute[System.__Canon](System.Object):System.__Canon (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,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,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
@@ -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 ----
@@ -23,30 +23,14 @@ G_M305_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, n
str r1, [sp+0x0C] // [V01 arg0]
str r2, [sp+0x08] // [V02 arg1]
;; size=20 bbWeight=1 PerfScore 7.00-G_M305_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x10]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- cmp r3, 0
- beq SHORT G_M305_IG04
- ;; size=10 bbWeight=1 PerfScore 5.00
-G_M305_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [sp+0x10]
- ldr r3, [r3+0x20]
- ldr r3, [r3+0x08]
- str r3, [sp] // [V05 tmp1]
- b SHORT G_M305_IG05
- ;; size=10 bbWeight=0.80 PerfScore 4.00
-G_M305_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ldr r0, [sp+0x10] // [V00 TypeCtx]+G_M305_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [sp+0x10] movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD+ blx r3 // CORINFO_HELP_MEMCPY str r0, [sp] // [V05 tmp1]- ;; size=22 bbWeight=0.20 PerfScore 1.40
-G_M305_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref add r3, sp, 4 // [V03 loc0]
ldr r0, [sp] // [V05 tmp1]
ldr r1, [sp+0x0C] // [V01 arg0]
@@ -58,13 +42,13 @@ G_M305_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldr r4, [r4]
blx r4 // <unknown method>
; gcrRegs -[r1-r2] +[r0]- ;; size=20 bbWeight=1 PerfScore 8.00
-G_M305_IG06: ; bbWeight=1, epilog, nogc, extend+ ;; size=42 bbWeight=1 PerfScore 15.00
+G_M305_IG03: ; bbWeight=1, epilog, nogc, extend add sp, 24
pop {r4,r10,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 88, prolog size 14, PerfScore 27.40, instruction count 34, allocated bytes for code 88 (MethodHash=fd28fece) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.__Canon (Tier0)+; Total bytes of code 68, prolog size 14, PerfScore 24.00, instruction count 24, allocated bytes for code 68 (MethodHash=fd28fece) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.__Canon (Tier0) ; ============================================================
Unwind Info:
@@ -76,7 +60,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 44 (0x0002c) Actual length = 88 (0x000058)+ Function Length : 34 (0x00022) Actual length = 68 (0x000044) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
@@ -8,11 +8,10 @@
; with Dynamic PGO: edge weights are valid, and fgCalledCount is 3
; Final local variable assignments
;-; V00 arg0 [V00,T01] ( 5, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[int]>
-; V01 arg1 [V01,T02] ( 4, 3 ) int -> r6 single-def
-; V02 loc0 [V02,T03] ( 3, 3 ) ref -> r0 class-hnd single-def <System.Collections.Generic.ICollection`1[int]>+; V00 arg0 [V00,T00] ( 4, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEnumerable`1[int]>
+; V01 arg1 [V01,T01] ( 4, 3 ) int -> r6 single-def
+; V02 loc0 [V02,T02] ( 3, 3 ) ref -> r0 class-hnd single-def <System.Collections.Generic.ICollection`1[int]> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"-; V04 rat0 [V04,T00] ( 5, 7 ) ref -> r0 "replacement local" ;
; Lcl frame size = 4
@@ -24,33 +23,17 @@ G_M63104_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
mov r6, r1
;; size=12 bbWeight=1 PerfScore 4.00
G_M63104_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz- mov r0, r5
- ; gcrRegs +[r0]
- cmp r0, 0
- beq SHORT G_M63104_IG05
- ;; size=6 bbWeight=1 PerfScore 3.00
-G_M63104_IG03: ; bbWeight=0.50, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- cmp r1, r3
- beq SHORT G_M63104_IG05
- ;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M63104_IG04: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r0] mov r1, r5
; gcrRegs +[r1]
movw r0, 0xd1ff
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE+ blx r3 // CORINFO_HELP_INITINSTCLASS ; gcrRegs -[r1] +[r0]
; gcr arg pop 0- ;; size=20 bbWeight=0 PerfScore 0.00
-G_M63104_IG05: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz cmp r0, 0- beq SHORT G_M63104_IG07+ beq SHORT G_M63104_IG04 mov r1, r6
movw r4, 0xd1ff
movt r4, 0xd1ff
@@ -58,11 +41,11 @@ G_M63104_IG05: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, b
blx r3 // <unknown method>
; gcrRegs -[r0 r5]
; gcr arg pop 0- ;; size=18 bbWeight=1 PerfScore 7.00
-G_M63104_IG06: ; bbWeight=1, epilog, nogc, extend+ ;; size=38 bbWeight=1 PerfScore 13.00
+G_M63104_IG03: ; bbWeight=1, epilog, nogc, extend pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00-G_M63104_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref+G_M63104_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs +[r5]
mov r0, r5
; gcrRegs +[r0]
@@ -72,14 +55,14 @@ G_M63104_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byr
movt r3, 0xd1ff
ldr r3, [r3]
;; size=16 bbWeight=0 PerfScore 0.00-G_M63104_IG08: ; bbWeight=0, epilog, nogc, extend+G_M63104_IG05: ; 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
-; Total bytes of code 98, prolog size 12, PerfScore 17.50, instruction count 35, allocated bytes for code 98 (MethodHash=32f0097f) for method System.Linq.Enumerable:Contains[int](System.Collections.Generic.IEnumerable`1[int],int):ubyte (Tier1)+; Total bytes of code 78, prolog size 12, PerfScore 18.00, instruction count 27, allocated bytes for code 78 (MethodHash=32f0097f) for method System.Linq.Enumerable:Contains[int](System.Collections.Generic.IEnumerable`1[int],int):ubyte (Tier1) ; ============================================================
Unwind Info:
@@ -91,7 +74,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0- Function Length : 49 (0x00031) Actual length = 98 (0x000062)+ Function Length : 39 (0x00027) Actual length = 78 (0x00004e) ---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -10,11 +10,10 @@
; Final local variable assignments
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.ThreadPool+<>c>-; V01 arg1 [V01,T01] ( 5, 3 ) ref -> r5 class-hnd single-def <System.Object>
-; V02 loc0 [V02,T02] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Runtime.CompilerServices.IAsyncStateMachineBox>+; V01 arg1 [V01,T00] ( 4, 3 ) ref -> r5 class-hnd single-def <System.Object>
+; V02 loc0 [V02,T01] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Runtime.CompilerServices.IAsyncStateMachineBox> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[int,System.IO.Pipes.PipeStream+<ReadAsyncCore>d__82]>-; V05 rat0 [V05,T00] ( 5, 7 ) ref -> r0 "replacement local" ;
; Lcl frame size = 0
@@ -25,49 +24,33 @@ G_M44863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
; gcrRegs +[r5]
;; size=10 bbWeight=1 PerfScore 3.00
G_M44863_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz- mov r0, r5
- ; gcrRegs +[r0]
- cmp r0, 0
- beq SHORT G_M44863_IG05
- ;; size=6 bbWeight=1 PerfScore 3.00
-G_M44863_IG03: ; bbWeight=0.50, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- cmp r1, r3
- beq SHORT G_M44863_IG05
- ;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M44863_IG04: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r0] mov r1, r5
; gcrRegs +[r1]
movw r0, 0xd1ff
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE+ blx r3 // CORINFO_HELP_INITINSTCLASS ; gcrRegs -[r1] +[r0]
; gcr arg pop 0- ;; size=20 bbWeight=0 PerfScore 0.00
-G_M44863_IG05: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz cmp r0, 0- beq SHORT G_M44863_IG09+ beq SHORT G_M44863_IG06 ldr r1, [r0]
movw r3, 0xd1ff
movt r3, 0xd1ff
cmp r1, r3- bne SHORT G_M44863_IG07+ bne SHORT G_M44863_IG04 movs r1, 0
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]- ;; size=30 bbWeight=1 PerfScore 11.00
-G_M44863_IG06: ; bbWeight=1, epilog, nogc, extend+ ;; size=50 bbWeight=1 PerfScore 17.00
+G_M44863_IG03: ; bbWeight=1, epilog, nogc, extend pop {r4,r5,r11,lr}
bx r3 // <unknown method>
; gcr arg pop 0
;; size=6 bbWeight=1 PerfScore 2.00-G_M44863_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref+G_M44863_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs -[r5]
movw r4, 0xd1ff
movt r4, 0xd1ff
@@ -76,10 +59,10 @@ G_M44863_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byr
; gcrRegs -[r0]
; gcr arg pop 0
;; size=12 bbWeight=0 PerfScore 0.00-G_M44863_IG08: ; bbWeight=0, epilog, nogc, extend+G_M44863_IG05: ; bbWeight=0, epilog, nogc, extend pop {r4,r5,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00-G_M44863_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref+G_M44863_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs +[r5]
mov r0, r5
; gcrRegs +[r0]
@@ -92,7 +75,7 @@ G_M44863_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byr
bkpt
;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 118, prolog size 10, PerfScore 21.50, instruction count 41, allocated bytes for code 118 (MethodHash=743050c0) for method System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)+; Total bytes of code 98, prolog size 10, PerfScore 22.00, instruction count 33, allocated bytes for code 98 (MethodHash=743050c0) for method System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1) ; ============================================================
Unwind Info:
@@ -104,7 +87,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)+ Function Length : 49 (0x00031) Actual length = 98 (0x000062) ---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -8,7 +8,7 @@
; V00 arg0 [V00 ] ( 1, 1 ) ref -> [sp+0x14] do-not-enreg[] class-hnd <System.Object>
; V01 loc0 [V01 ] ( 1, 1 ) struct ( 4) [sp+0x10] do-not-enreg[S] must-init ld-addr-op <NotEmptyStructGen`1[int]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"-; V03 tmp1 [V03 ] ( 1, 1 ) struct ( 8) [sp+0x08] do-not-enreg[XSA] multireg-arg addr-exposed "impAppendStmt" <System.Nullable`1[NotEmptyStructGen`1[int]]>+; V03 tmp1 [V03 ] ( 1, 1 ) struct ( 8) [sp+0x08] do-not-enreg[SA] multireg-arg "impAppendStmt" <System.Nullable`1[NotEmptyStructGen`1[int]]> ; V04 tmp2 [V04 ] ( 1, 1 ) struct ( 4) [sp+0x04] do-not-enreg[S] "spilled call-like call argument" <NotEmptyStructGen`1[int]>
;
; Lcl frame size = 24
@@ -22,18 +22,23 @@ G_M20585_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x14] // [V00 arg0]
;; size=16 bbWeight=1 PerfScore 6.00
G_M20585_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref- add r0, sp, 8
- ldr r2, [sp+0x14]
- ; gcrRegs +[r2]
- movw r1, 0xd1ff
- movt r1, 0xd1ff+ ldr r1, [sp+0x14]
+ ; gcrRegs +[r1]
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_UNBOX_NULLABLE
- ; gcrRegs -[r2]+ blx r3 // CORINFO_HELP_UNBOX
+ ; gcrRegs -[r1]
+ ; byrRegs +[r0]
+ ldr r3, [r0]
+ str r3, [sp+0x08]
+ ldr r3, [r0+0x04]
+ str r3, [sp+0x0C] movs r3, 0
str r3, [sp+0x10] // [V01 loc0]
ldr r0, [sp+0x10] // [V01 loc0]+ ; byrRegs -[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -46,13 +51,13 @@ G_M20585_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r3, 0xd1ff
ldr r3, [r3]
blx r3 // <unknown method>- ;; size=60 bbWeight=1 PerfScore 22.00+ ;; size=66 bbWeight=1 PerfScore 25.00 G_M20585_IG03: ; bbWeight=1, epilog, nogc, extend
add sp, 24
pop {r4,r10,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 82, prolog size 14, PerfScore 30.00, instruction count 30, allocated bytes for code 82 (MethodHash=4befaf96) for method NullableTest27:BoxUnboxToQ(System.Object):ubyte (Tier0)+; Total bytes of code 88, prolog size 14, PerfScore 33.00, instruction count 33, allocated bytes for code 88 (MethodHash=4befaf96) for method NullableTest27:BoxUnboxToQ(System.Object):ubyte (Tier0) ; ============================================================
Unwind Info:
@@ -64,7 +69,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 41 (0x00029) Actual length = 82 (0x000052)+ Function Length : 44 (0x0002c) Actual length = 88 (0x000058) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
@@ -8,7 +8,7 @@
; V00 arg0 [V00 ] ( 1, 1 ) ref -> [sp+0x24] do-not-enreg[] class-hnd <System.Object>
; V01 loc0 [V01 ] ( 1, 1 ) struct ( 8) [sp+0x1C] do-not-enreg[SA] multireg-arg must-init ld-addr-op <NotEmptyStructConstrainedGenQ`1[int]>
; V02 OutArgs [V02 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"-; V03 tmp1 [V03 ] ( 1, 1 ) struct (12) [sp+0x10] do-not-enreg[XSA] multireg-arg addr-exposed "impAppendStmt" <System.Nullable`1[NotEmptyStructConstrainedGenQ`1[int]]>+; V03 tmp1 [V03 ] ( 1, 1 ) struct (12) [sp+0x10] do-not-enreg[SA] multireg-arg "impAppendStmt" <System.Nullable`1[NotEmptyStructConstrainedGenQ`1[int]]> ; V04 tmp2 [V04 ] ( 1, 1 ) struct ( 8) [sp+0x08] do-not-enreg[HSA] multireg-arg hidden-struct-arg "spilled call-like call argument" <NotEmptyStructConstrainedGenQ`1[int]>
;
; Lcl frame size = 40
@@ -23,21 +23,28 @@ G_M61455_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x24]
;; size=18 bbWeight=1 PerfScore 7.00
G_M61455_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref- add r0, sp, 16
- ldr r2, [sp+0x24]
- ; gcrRegs +[r2]
- movw r1, 0xd1ff
- movt r1, 0xd1ff+ ldr r1, [sp+0x24]
+ ; gcrRegs +[r1]
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_UNBOX_NULLABLE
- ; gcrRegs -[r2]+ blx r3 // CORINFO_HELP_UNBOX
+ ; gcrRegs -[r1]
+ ; byrRegs +[r0]
+ ldr r3, [r0]
+ str r3, [sp+0x10]
+ ldr r3, [r0+0x04]
+ str r3, [sp+0x14]
+ ldr r3, [r0+0x08]
+ str r3, [sp+0x18] movs r3, 0
str r3, [sp+0x1C]
str r3, [sp+0x20]
ldr r1, [sp+0x1C]
ldr r2, [sp+0x20]
add r0, sp, 8+ ; byrRegs -[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -52,13 +59,13 @@ G_M61455_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r4, 0xd1ff
ldr r4, [r4]
blx r4 // <unknown method>- ;; size=70 bbWeight=1 PerfScore 27.00+ ;; size=80 bbWeight=1 PerfScore 32.00 G_M61455_IG03: ; bbWeight=1, epilog, nogc, extend
add sp, 40
pop {r4,r10,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 94, prolog size 16, PerfScore 36.00, instruction count 36, allocated bytes for code 94 (MethodHash=233e0ff0) for method NullableTest30:BoxUnboxToQ(System.Object):ubyte (Tier0)+; Total bytes of code 104, prolog size 16, PerfScore 41.00, instruction count 41, allocated bytes for code 104 (MethodHash=233e0ff0) for method NullableTest30:BoxUnboxToQ(System.Object):ubyte (Tier0) ; ============================================================
Unwind Info:
@@ -70,7 +77,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 47 (0x0002f) Actual length = 94 (0x00005e)+ Function Length : 52 (0x00034) Actual length = 104 (0x000068) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
@@ -8,7 +8,7 @@
; V00 arg0 [V00 ] ( 1, 1 ) ref -> [sp+0x24] do-not-enreg[] class-hnd <System.Object>
; V01 loc0 [V01 ] ( 1, 1 ) struct ( 8) [sp+0x1C] do-not-enreg[SA] multireg-arg must-init ld-addr-op <NotEmptyStructQ>
; V02 OutArgs [V02 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"-; V03 tmp1 [V03 ] ( 1, 1 ) struct (12) [sp+0x10] do-not-enreg[XSA] multireg-arg addr-exposed "impAppendStmt" <System.Nullable`1[NotEmptyStructQ]>+; V03 tmp1 [V03 ] ( 1, 1 ) struct (12) [sp+0x10] do-not-enreg[SA] multireg-arg "impAppendStmt" <System.Nullable`1[NotEmptyStructQ]> ; V04 tmp2 [V04 ] ( 1, 1 ) struct ( 8) [sp+0x08] do-not-enreg[HSA] multireg-arg hidden-struct-arg "spilled call-like call argument" <NotEmptyStructQ>
;
; Lcl frame size = 40
@@ -23,21 +23,28 @@ G_M62189_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x24]
;; size=18 bbWeight=1 PerfScore 7.00
G_M62189_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref- add r0, sp, 16
- ldr r2, [sp+0x24]
- ; gcrRegs +[r2]
- movw r1, 0xd1ff
- movt r1, 0xd1ff+ ldr r1, [sp+0x24]
+ ; gcrRegs +[r1]
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff movw r3, 0xd1ff
movt r3, 0xd1ff- blx r3 // CORINFO_HELP_UNBOX_NULLABLE
- ; gcrRegs -[r2]+ blx r3 // CORINFO_HELP_UNBOX
+ ; gcrRegs -[r1]
+ ; byrRegs +[r0]
+ ldr r3, [r0]
+ str r3, [sp+0x10]
+ ldr r3, [r0+0x04]
+ str r3, [sp+0x14]
+ ldr r3, [r0+0x08]
+ str r3, [sp+0x18] movs r3, 0
str r3, [sp+0x1C]
str r3, [sp+0x20]
ldr r1, [sp+0x1C]
ldr r2, [sp+0x20]
add r0, sp, 8+ ; byrRegs -[r0] movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -52,13 +59,13 @@ G_M62189_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r4, 0xd1ff
ldr r4, [r4]
blx r4 // <unknown method>- ;; size=70 bbWeight=1 PerfScore 27.00+ ;; size=80 bbWeight=1 PerfScore 32.00 G_M62189_IG03: ; bbWeight=1, epilog, nogc, extend
add sp, 40
pop {r4,r10,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 94, prolog size 16, PerfScore 36.00, instruction count 36, allocated bytes for code 94 (MethodHash=23600d12) for method NullableTest23:BoxUnboxToQ(System.Object):ubyte (Tier0)+; Total bytes of code 104, prolog size 16, PerfScore 41.00, instruction count 41, allocated bytes for code 104 (MethodHash=23600d12) for method NullableTest23:BoxUnboxToQ(System.Object):ubyte (Tier0) ; ============================================================
Unwind Info:
@@ -70,7 +77,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 47 (0x0002f) Actual length = 94 (0x00005e)+ Function Length : 52 (0x00034) Actual length = 104 (0x000068) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
@@ -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+ToFSharpFunc@3788[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_M13653_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_M13653_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r1, [r1+0x08]
- cmp r1, 0
- beq SHORT G_M13653_IG04
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M13653_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- b SHORT G_M13653_IG05
- ;; size=2 bbWeight=0.80 PerfScore 0.80
-G_M13653_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref+ ;; size=6 bbWeight=1 PerfScore 3.00
+G_M13653_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_M13653_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_M13653_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
; byrRegs -[r0]
mov r0, r2
; gcrRegs +[r0]- ;; size=30 bbWeight=1 PerfScore 11.00
-G_M13653_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_M13653_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=ecddcaaa) for method Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[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=ecddcaaa) for method Microsoft.FSharp.Core.FuncConvert:ToFSharpFunc[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
1[int]](System.Func
2[System.Canon,System.Nullable1[int]]):Microsoft.FSharp.Core.FSharpFunc
2[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.Func`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.Func`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@3796-2[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_M41710_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_M41710_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r1, [r1+0x0C]
- cmp r1, 0
- beq SHORT G_M41710_IG04
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M41710_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- b SHORT G_M41710_IG05
- ;; size=2 bbWeight=0.80 PerfScore 0.80
-G_M41710_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref+ ;; size=6 bbWeight=1 PerfScore 3.00
+G_M41710_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_M41710_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_M41710_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
; byrRegs -[r0]
mov r0, r2
; gcrRegs +[r0]- ;; size=30 bbWeight=1 PerfScore 11.00
-G_M41710_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_M41710_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=1a5f5d11) for method 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)+; Total bytes of code 54, prolog size 4, PerfScore 19.00, instruction count 19, allocated bytes for code 54 (MethodHash=1a5f5d11) for method 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) ; ============================================================
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
1[int]](System.Func
2[System.Canon,System.Nullable1[int]]):Microsoft.FSharp.Core.FSharpFunc
2[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.Func`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.Func`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+FromFunc@3802-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_M48701_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_M48701_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r1, [r1+0x0C]
- cmp r1, 0
- beq SHORT G_M48701_IG04
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M48701_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- b SHORT G_M48701_IG05
- ;; size=2 bbWeight=0.80 PerfScore 0.80
-G_M48701_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref+ ;; size=6 bbWeight=1 PerfScore 3.00
+G_M48701_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_M48701_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_M48701_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
; byrRegs -[r0]
mov r0, r2
; gcrRegs +[r0]- ;; size=30 bbWeight=1 PerfScore 11.00
-G_M48701_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_M48701_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=9be041c2) for method 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)+; Total bytes of code 54, prolog size 4, PerfScore 19.00, instruction count 19, allocated bytes for code 54 (MethodHash=9be041c2) for method 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) ; ============================================================
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
@@ -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
@@ -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
@@ -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
1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span
1System.__Canon@@ -2,55 +2,39 @@
; 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 RetBuf [V00,T02] ( 3, 3 ) byref -> r4 single-def
-; V01 TypeCtx [V01,T00] ( 5, 4.20) int -> r1 single-def
-; V02 arg0 [V02,T03] ( 3, 3 ) byref -> r5 single-def
-; V03 arg1 [V03,T04] ( 3, 3 ) int -> r6 single-def+; V00 RetBuf [V00,T01] ( 3, 3 ) byref -> r4 single-def
+; V01 TypeCtx [V01,T00] ( 4, 4 ) int -> r1 single-def
+; V02 arg0 [V02,T02] ( 3, 3 ) byref -> r5 single-def
+; V03 arg1 [V03,T03] ( 3, 3 ) int -> r6 single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"-; V06 tmp2 [V06,T06] ( 2, 4 ) int -> r1 "argument with side effect"
-; V07 rat0 [V07,T05] ( 3, 4 ) int -> r1 "runtime lookup"
-; V08 rat1 [V08,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"+; V06 tmp2 [V06,T04] ( 2, 4 ) int -> r1 "argument with side effect" ;-; Lcl frame size = 12+; Lcl frame size = 8
G_M5478_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG- push {r4,r5,r6,r11,lr}
- sub sp, 12
- add r11, sp, 24
- str r1, [r11-0x14]+ push {r2,r3,r4,r5,r6,lr}
+ str r1, [sp+0x04] mov r4, r0
; byrRegs +[r4]
mov r5, r2
; byrRegs +[r5]
mov r6, r3- ;; size=20 bbWeight=1 PerfScore 7.00
-G_M5478_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0030 {r4 r5}, byref, isz
- ldr r0, [r1+0x20]
- ldr r3, [r0+0x0C]
- cmp r3, 0
- beq SHORT G_M5478_IG04
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M5478_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0030 {r4 r5}, byref, isz
- mov r1, r3
- b SHORT G_M5478_IG05
- ;; size=4 bbWeight=0.80 PerfScore 1.60
-G_M5478_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0030 {r4 r5}, byref+ ;; size=10 bbWeight=1 PerfScore 5.00
+G_M5478_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0030 {r4 r5}, 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
mov r1, r0- ;; size=22 bbWeight=0.20 PerfScore 1.40
-G_M5478_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0030 {r4 r5}, byref mov r0, r4
; byrRegs +[r0]
mov r2, r5
@@ -59,31 +43,38 @@ G_M5478_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0030 {r4 r5}, by
movw lr, 0xd1ff
movt lr, 0xd1ff
ldr r12, [lr]- ;; size=18 bbWeight=1 PerfScore 6.00
-G_M5478_IG06: ; bbWeight=1, epilog, nogc, extend
- add sp, 12
- pop {r4,r5,r6,r11,lr}+ ;; size=40 bbWeight=1 PerfScore 13.00
+G_M5478_IG03: ; bbWeight=1, epilog, nogc, extend
+ add sp, 8
+ pop {r4,r5,r6,lr} bx r12 // System.Runtime.InteropServices.MemoryMarshal:CreateSpan[System.__Canon](byref,int):System.Span`1[System.__Canon]
; gcr arg pop 0
;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 80, prolog size 20, PerfScore 23.00, instruction count 29, allocated bytes for code 80 (MethodHash=97bfea99) for method <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon] (Tier1)+; Total bytes of code 58, prolog size 10, PerfScore 21.00, instruction count 21, allocated bytes for code 58 (MethodHash=97bfea99) for method <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon] (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 : 40 (0x00028) Actual length = 80 (0x000050)
- --- One epilog, unwind codes at 0+ 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)
+ Condition : 14 (0xe) (always)
+ Epilog Start Index : 3 (0x03) ---- Unwind codes ----- ---- Epilog start at index 0 ----
- 03 add sp, sp, #12 ; opsize 16
- A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32+ ED 7C pop {r2,r3,r4,r5,r6,lr} ; opsize 16
+ FF end
+ ---- Epilog start at index 3 ----
+ 02 add sp, sp, #8 ; opsize 16
+ A0 70 pop {r4,r5,r6,lr} ; opsize 32
+ FF end FF end
@@ -2,50 +2,37 @@
; 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 arg1 [V02,T03] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,ubyte]>+; 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 arg1 [V02,T02] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,ubyte]> ; V03 loc0 [V03 ] ( 1, 1 ) ubyte -> [sp+0x00] do-not-enreg[X] addr-exposed ld-addr-op
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"-; V06 tmp2 [V06,T05] ( 2, 4 ) int -> r0 "argument with side effect"
-; V07 rat0 [V07,T04] ( 3, 4 ) int -> r0 "runtime lookup"
-; V08 rat1 [V08,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"+; V06 tmp2 [V06,T03] ( 2, 4 ) int -> r0 "argument with side effect" ;-; Lcl frame size = 8+; Lcl frame size = 12
G_M305_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG- push {r2,r3,r4,r5,r11,lr}
- add r11, sp, 16
- str r0, [r11-0x0C]+ push {r4,r5,lr}
+ sub sp, 12
+ str r0, [sp+0x04] mov r4, r1
; gcrRegs +[r4]
mov r5, r2
; gcrRegs +[r5]- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M305_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 0
- beq SHORT G_M305_IG04
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M305_IG03: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M305_IG05
- ;; size=4 bbWeight=0.80 PerfScore 1.60
-G_M305_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref+ ;; size=10 bbWeight=1 PerfScore 5.00
+G_M305_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, 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_M305_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref+ blx r3 // CORINFO_HELP_MEMCPY
+ ; gcr arg pop 0 add r3, sp, 0
mov r1, r4
; gcrRegs +[r1]
@@ -56,12 +43,14 @@ G_M305_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byr
ldr lr, [lr]
blx lr // <unknown method>
; gcrRegs -[r1-r2 r4-r5] +[r0]- ;; size=20 bbWeight=1 PerfScore 7.00
-G_M305_IG06: ; bbWeight=1, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=1 PerfScore 1.00+ ; gcr arg pop 0
+ ;; size=38 bbWeight=1 PerfScore 12.00
+G_M305_IG03: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,pc}
+ ;; size=4 bbWeight=1 PerfScore 2.00 -; Total bytes of code 70, prolog size 12, PerfScore 19.60, instruction count 24, allocated bytes for code 70 (MethodHash=fd28fece) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.__Canon (Tier1)+; Total bytes of code 52, prolog size 6, PerfScore 19.00, instruction count 19, allocated bytes for code 52 (MethodHash=fd28fece) for method System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.__Canon (Tier1) ; ============================================================
Unwind Info:
@@ -73,11 +62,12 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 35 (0x00023) Actual length = 70 (0x000046)+ Function Length : 26 (0x0001a) Actual length = 52 (0x000034) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32+ 03 add sp, sp, #12 ; opsize 16
+ D5 pop {r4,r5,lr} ; opsize 16 FF end
FF end
@@ -2,61 +2,42 @@
; Emitting BLENDED_CODE for generic ARM - Unix
; Instrumented Tier1 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,T01] ( 5, 4.36) int -> r0 single-def
-; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r4 class-hnd single-def <System.__Canon>
-; V02 arg1 [V02,T04] ( 3, 3 ) ref -> r5 class-hnd single-def <System.__Canon>+; V00 TypeCtx [V00,T01] ( 4, 4 ) int -> r0 single-def
+; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r4 class-hnd single-def <System.__Canon>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> r5 class-hnd single-def <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V04 tmp1 [V04,T00] ( 4, 8 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <System.Tuple`2[System.__Canon,System.__Canon]>
;* V05 tmp2 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"-; V06 rat0 [V06,T06] ( 3, 4 ) int -> r1 "runtime lookup"
-; V07 rat1 [V07,T02] ( 3, 5.60) int -> r1 "spilling expr"
-; V08 rat2 [V08,T05] ( 3, 4.48) int -> r1 "fgMakeTemp is creating a new local variable" ;-; Lcl frame size = 8+; Lcl frame size = 12
G_M54721_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG- push {r2,r3,r4,r5,r11,lr}
- add r11, sp, 16
- str r0, [r11-0x0C]+ push {r4,r5,lr}
+ sub sp, 12
+ str r0, [sp+0x04] mov r4, r1
; gcrRegs +[r4]
mov r5, r2
; gcrRegs +[r5]- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M54721_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 16
- ble SHORT G_M54721_IG05
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M54721_IG03: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r1+0x10]
- cmp r1, 0
- beq SHORT G_M54721_IG05
- ;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M54721_IG04: ; bbWeight=0.64, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- b SHORT G_M54721_IG06
- ;; size=2 bbWeight=0.64 PerfScore 0.64
-G_M54721_IG05: ; bbWeight=0.36, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref+ ;; size=10 bbWeight=1 PerfScore 5.00
+G_M54721_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, 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.36 PerfScore 2.16
-G_M54721_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, 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
@@ -80,12 +61,13 @@ G_M54721_IG06: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b
; byrRegs -[r0]
mov r0, r2
; gcrRegs +[r0]- ;; size=46 bbWeight=1 PerfScore 16.00
-G_M54721_IG07: ; bbWeight=1, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=1 PerfScore 1.00+ ;; size=62 bbWeight=1 PerfScore 20.00
+G_M54721_IG03: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,pc}
+ ;; size=4 bbWeight=1 PerfScore 2.00 -; Total bytes of code 102, prolog size 12, PerfScore 31.20, instruction count 36, allocated bytes for code 102 (MethodHash=1c7b2a3e) for method System.Tuple:Create[System.__Canon,System.__Canon](System.__Canon,System.__Canon):System.Tuple`2[System.__Canon,System.__Canon] (Instrumented Tier1)+; Total bytes of code 76, prolog size 6, PerfScore 27.00, instruction count 27, allocated bytes for code 76 (MethodHash=1c7b2a3e) for method System.Tuple:Create[System.__Canon,System.__Canon](System.__Canon,System.__Canon):System.Tuple`2[System.__Canon,System.__Canon] (Instrumented Tier1) ; ============================================================
Unwind Info:
@@ -97,11 +79,12 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 51 (0x00033) Actual length = 102 (0x000066)+ Function Length : 38 (0x00026) Actual length = 76 (0x00004c) --- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32+ 03 add sp, sp, #12 ; opsize 16
+ D5 pop {r4,r5,lr} ; opsize 16 FF end
FF end
@@ -9,98 +9,84 @@
; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;-; V00 this [V00,T04] ( 3, 2.72) ref -> r5 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
-; V01 TypeCtx [V01,T00] ( 5, 3.98) int -> r1 single-def
-; V02 arg1 [V02,T02] ( 4, 3.72) byref -> r4 single-def+; V00 this [V00,T04] ( 3, 2.72) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T00] ( 5, 4.44) int -> r4 single-def
+; V02 arg1 [V02,T02] ( 4, 3.72) byref -> r5 single-def ; V03 loc0 [V03,T03] ( 6, 5.16) 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,T01] ( 4, 5.77) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>+; V06 tmp1 [V06,T01] ( 4, 5.77) 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,T07] ( 3, 2.88) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T05] ( 3, 4.04) int -> r0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 3.23) 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_IG08+ bne SHORT G_M58319_IG04 ;; size=6 bbWeight=1 PerfScore 3.00-G_M58319_IG03: ; bbWeight=0.72, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz+G_M58319_IG03: ; bbWeight=0.72, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz ; gcrRegs -[r0]- ldr r0, [r1+0x20]
- ldr r3, [r0+0x04]
- cmp r3, 12
- ble SHORT G_M58319_IG06
- ;; size=8 bbWeight=0.72 PerfScore 2.88
-G_M58319_IG04: ; bbWeight=0.58, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
- ldr r0, [r0+0x0C]
- cmp r0, 0
- beq SHORT G_M58319_IG06
- ;; size=6 bbWeight=0.58 PerfScore 1.73
-G_M58319_IG05: ; bbWeight=0.46, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
- b SHORT G_M58319_IG07
- ;; size=2 bbWeight=0.46 PerfScore 0.46
-G_M58319_IG06: ; bbWeight=0.26, 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.26 PerfScore 1.56
-G_M58319_IG07: ; bbWeight=0.72, 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_IG08
- mov r0, r6
- ;; size=50 bbWeight=0.72 PerfScore 12.98
-G_M58319_IG08: ; 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.72 PerfScore 21.63
+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 116, prolog size 14, PerfScore 30.61, instruction count 43, allocated bytes for code 116 (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 31.63, 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:
@@ -112,11 +98,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 58 (0x0003a) Actual length = 116 (0x000074)+ 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
@@ -9,96 +9,82 @@
; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;-; V00 this [V00,T05] ( 3, 3 ) ref -> r5 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
-; V01 TypeCtx [V01,T01] ( 5, 4.36) int -> r1 single-def
-; V02 arg1 [V02,T03] ( 4, 4 ) byref -> r4 single-def+; V00 this [V00,T04] ( 3, 3 ) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T01] ( 5, 5 ) int -> r4 single-def
+; V02 arg1 [V02,T03] ( 4, 4 ) byref -> r5 single-def ; V03 loc0 [V03,T02] ( 6, 6 ) 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,T00] ( 4, 8 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>+; V06 tmp1 [V06,T00] ( 4, 8 ) 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,T07] ( 3, 4 ) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T04] ( 3, 5.60) int -> r0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 4.48) 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
- ldr r0, [r1+0x20]+ bne SHORT G_M58319_IG03
+ mov r0, r4 ; gcrRegs -[r0]- ldr r3, [r0+0x04]
- cmp r3, 12
- ble SHORT G_M58319_IG05
- ;; size=14 bbWeight=1 PerfScore 7.00
-G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
- ldr r0, [r0+0x0C]
- cmp r0, 0
- beq SHORT G_M58319_IG05
- ;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
- b SHORT G_M58319_IG06
- ;; size=2 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=0020 {r5}, 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
- ;; size=20 bbWeight=0.36 PerfScore 2.16
-G_M58319_IG06: ; bbWeight=1, 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=1 PerfScore 18.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_IG03
+ mov r0, r7
+ ;; size=96 bbWeight=1 PerfScore 33.00
+G_M58319_IG03: ; 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 116, prolog size 14, PerfScore 38.20, instruction count 43, allocated bytes for code 116 (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 40.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:
@@ -110,11 +96,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 58 (0x0003a) Actual length = 116 (0x000074)+ 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
@@ -9,98 +9,84 @@
; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;-; V00 this [V00,T04] ( 3, 2.71) ref -> r5 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
-; V01 TypeCtx [V01,T00] ( 5, 3.97) int -> r1 single-def
-; V02 arg1 [V02,T01] ( 4, 3.71) byref -> r4 single-def+; V00 this [V00,T04] ( 3, 2.71) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T00] ( 5, 4.42) int -> r4 single-def
+; V02 arg1 [V02,T01] ( 4, 3.71) byref -> r5 single-def ; V03 loc0 [V03,T03] ( 6, 5.13) 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,T02] ( 4, 5.68) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>+; V06 tmp1 [V06,T02] ( 4, 5.68) 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,T07] ( 3, 2.84) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T05] ( 3, 3.98) int -> r0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 3.18) 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_IG08+ bne SHORT G_M58319_IG04 ;; size=6 bbWeight=1 PerfScore 3.00-G_M58319_IG03: ; bbWeight=0.71, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz+G_M58319_IG03: ; bbWeight=0.71, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz ; gcrRegs -[r0]- ldr r0, [r1+0x20]
- ldr r3, [r0+0x04]
- cmp r3, 12
- ble SHORT G_M58319_IG06
- ;; size=8 bbWeight=0.71 PerfScore 2.84
-G_M58319_IG04: ; bbWeight=0.57, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
- ldr r0, [r0+0x0C]
- cmp r0, 0
- beq SHORT G_M58319_IG06
- ;; size=6 bbWeight=0.57 PerfScore 1.70
-G_M58319_IG05: ; bbWeight=0.45, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
- b SHORT G_M58319_IG07
- ;; size=2 bbWeight=0.45 PerfScore 0.45
-G_M58319_IG06: ; bbWeight=0.26, 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.26 PerfScore 1.53
-G_M58319_IG07: ; bbWeight=0.71, 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_IG08
- mov r0, r6
- ;; size=50 bbWeight=0.71 PerfScore 12.78
-G_M58319_IG08: ; 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.71 PerfScore 21.31
+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 116, prolog size 14, PerfScore 30.32, instruction count 43, allocated bytes for code 116 (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 31.31, 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:
@@ -112,11 +98,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0- Function Length : 58 (0x0003a) Actual length = 116 (0x000074)+ 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
@@ -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
@@ -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
@@ -2,79 +2,70 @@
; 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_M34864_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_M34864_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 0
- beq SHORT G_M34864_IG04
- ;; size=8 bbWeight=1 PerfScore 4.00
-G_M34864_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M34864_IG05
- ;; size=4 bbWeight=0.80 PerfScore 1.60
-G_M34864_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref+ ;; size=6 bbWeight=1 PerfScore 3.00
+G_M34864_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_M34864_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref mov r1, r4
; gcrRegs +[r1]
movs r2, 0
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]- ;; size=14 bbWeight=1 PerfScore 5.00
-G_M34864_IG06: ; bbWeight=1, epilog, nogc, extend
- add sp, 12
- pop {r4,r11,lr}+ ;; size=32 bbWeight=1 PerfScore 10.00
+G_M34864_IG03: ; bbWeight=1, epilog, nogc, extend
+ add sp, 8
+ pop {r4,lr} bx r3 // 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]
; gcr arg pop 0
;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 68, prolog size 16, PerfScore 19.60, instruction count 24, allocated bytes for code 68 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)+; Total bytes of code 46, prolog size 6, PerfScore 16.00, instruction count 16, allocated bytes for code 46 (MethodHash=c3d577cf) for method System.Linq.Enumerable:Distinct[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`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 : 34 (0x00022) Actual length = 68 (0x000044)
- --- 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
2[int,System.__Canon]](System.Collections.Generic.List
1System.ValueTuple2[int,System.__Canon]]):System.Span
1[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)
@@ -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
...
@@ -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 ----
@@ -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
@@ -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
@@ -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,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
@@ -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)
@@ -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
Collection | Contexts with diffs | Improvements | Regressions | Same size | Improvements (bytes) | Regressions (bytes) |
---|---|---|---|---|---|---|
benchmarks.run.linux.arm.checked.mch | 1,083 | 68 | 6 | 1,009 | -2,552 | +66 |
benchmarks.run_pgo.linux.arm.checked.mch | 9,076 | 325 | 0 | 8,751 | -10,192 | +0 |
benchmarks.run_tiered.linux.arm.checked.mch | 3,192 | 245 | 6 | 2,941 | -10,318 | +66 |
coreclr_tests.run.linux.arm.checked.mch | 307 | 37 | 27 | 243 | -234 | +138 |
libraries.crossgen2.linux.arm.checked.mch | 0 | 0 | 0 | 0 | -0 | +0 |
libraries.pmi.linux.arm.checked.mch | 2,628 | 288 | 9 | 2,331 | -7,220 | +952 |
libraries_tests.run.linux.arm.Release.mch | 1,048 | 244 | 80 | 724 | -11,626 | +160 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch | 1,222 | 109 | 8 | 1,105 | -4,018 | +232 |
realworld.run.linux.arm.checked.mch | 2,648 | 151 | 13 | 2,484 | -5,198 | +484 |
21,204 | 1,467 | 149 | 19,588 | -51,358 | +2,098 |
Collection | Diffed contexts | MinOpts | FullOpts | Missed, base | Missed, diff |
---|---|---|---|---|---|
benchmarks.run.linux.arm.checked.mch | 3,685 | 215 | 3,470 | 222 (3.14%) | 2,988 (42.27%) |
benchmarks.run_pgo.linux.arm.checked.mch | 33,310 | 15,197 | 18,113 | 753 (1.55%) | 14,849 (30.64%) |
benchmarks.run_tiered.linux.arm.checked.mch | 16,011 | 10,309 | 5,702 | 274 (1.25%) | 5,435 (24.88%) |
coreclr_tests.run.linux.arm.checked.mch | 2,142 | 1,308 | 834 | 46 (0.98%) | 2,131 (45.62%) |
libraries.crossgen2.linux.arm.checked.mch | 450 | 0 | 450 | 0 (0.00%) | 383 (31.16%) |
libraries.pmi.linux.arm.checked.mch | 12,432 | 0 | 12,432 | 73 (0.42%) | 4,366 (25.39%) |
libraries_tests.run.linux.arm.Release.mch | 5,070 | 2,388 | 2,682 | 407 (3.01%) | 8,057 (59.58%) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch | 3,606 | 0 | 3,606 | 259 (3.71%) | 2,973 (42.62%) |
realworld.run.linux.arm.checked.mch | 5,320 | 57 | 5,263 | 179 (2.25%) | 2,233 (28.09%) |
82,026 | 29,474 | 52,552 | 2,213 (1.72%) | 43,415 (33.68%) |
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: 507536 (overridden on cmd)
Total bytes of diff: 505050 (overridden on cmd)
Total bytes of delta: -2486 (-0.49 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
34 : 4998.dasm (17.00 % of base)
8 : 1658.dasm (5.00 % of base)
8 : 2187.dasm (3.25 % of base)
8 : 4924.dasm (3.92 % of base)
4 : 5510.dasm (3.51 % of base)
4 : 6630.dasm (3.23 % of base)
Top file improvements (bytes):
-206 : 6279.dasm (-21.37 % of base)
-124 : 252.dasm (-25.62 % of base)
-124 : 822.dasm (-27.19 % of base)
-108 : 256.dasm (-21.26 % of base)
-106 : 746.dasm (-17.97 % of base)
-90 : 5841.dasm (-22.06 % of base)
-86 : 4176.dasm (-28.10 % of base)
-80 : 5168.dasm (-12.58 % of base)
-80 : 6501.dasm (-22.60 % of base)
-76 : 660.dasm (-16.96 % of base)
-64 : 218.dasm (-20.13 % of base)
-62 : 5850.dasm (-21.83 % of base)
-54 : 5235.dasm (-16.77 % of base)
-50 : 1427.dasm (-13.51 % of base)
-46 : 5865.dasm (-14.56 % of base)
-44 : 4920.dasm (-20.75 % of base)
-42 : 255.dasm (-17.07 % of base)
-42 : 4991.dasm (-17.95 % of base)
-42 : 5840.dasm (-20.59 % of base)
-42 : 6873.dasm (-18.26 % of base)
41 total files with Code Size differences (35 improved, 6 regressed), 33 unchanged.
Top method regressions (bytes):
34 (17.00 % of base) : 4998.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
8 (5.00 % of base) : 1658.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
8 (3.92 % of base) : 4924.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) : 2187.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
4 (3.51 % of base) : 5510.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
4 (3.23 % of base) : 6630.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
Top method improvements (bytes):
-206 (-21.37 % of base) : 6279.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) : 822.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) : 746.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) : 5841.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) : 4176.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
-80 (-22.60 % of base) : 6501.dasm - System.Linq.Enumerable:ElementAt[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.__Canon (FullOpts)
-80 (-12.58 % of base) : 5168.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-76 (-16.96 % of base) : 660.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) : 5850.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
-54 (-16.77 % of base) : 5235.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) : 1427.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
-46 (-14.56 % of base) : 5865.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.IOrderedCollection`1[System.__Canon] (FullOpts)
-44 (-20.75 % of base) : 4920.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (FullOpts)
-42 (-17.95 % of base) : 4991.dasm - Newtonsoft.Json.Serialization.JsonTypeReflector:GetAttribute[System.__Canon](System.Object):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) : 5840.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) : 6873.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)
Top method regressions (percentages):
34 (17.00 % of base) : 4998.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
8 (5.00 % of base) : 1658.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
8 (3.92 % of base) : 4924.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
4 (3.51 % of base) : 5510.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
8 (3.25 % of base) : 2187.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
4 (3.23 % of base) : 6630.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
Top method improvements (percentages):
-26 (-38.24 % of base) : 5007.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-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) : 1775.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start[System.Text.Json.Serialization.Tests.ReadJson`1+<Setup>d__5[System.__Canon]](byref):this (FullOpts)
-28 (-28.57 % of base) : 2582.dasm - System.Threading.Tasks.TaskCache:CreateCacheableTask[System.__Canon](System.__Canon):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)
-30 (-28.30 % of base) : 6701.dasm - System.Collections.Immutable.SecurePooledObject`1[System.__Canon]:TryUse[System.Collections.Immutable.ImmutableSortedDictionary`2+Enumerator[System.__Canon,System.__Canon]](byref,byref):ubyte:this (FullOpts)
-86 (-28.10 % of base) : 4176.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
-22 (-27.50 % of base) : 1755.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) : 1729.dasm - <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon] (FullOpts)
-124 (-27.19 % of base) : 822.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
-26 (-27.08 % of base) : 841.dasm - System.Linq.Enumerable:HashSetToArray[System.__Canon](System.Collections.Generic.HashSet`1[System.__Canon]):System.__Canon[] (FullOpts)
-18 (-26.47 % of base) : 5849.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.Generic.IEnumerable`1[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)
-22 (-25.00 % of base) : 4155.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[]):System.Span`1[System.__Canon] (FullOpts)
-20 (-25.00 % of base) : 4158.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder:AwaitUnsafeOnCompleted[System.Runtime.CompilerServices.YieldAwaitable+YieldAwaiter,System.Buffers.Tests.RentReturnArrayPoolTests`1+<MultipleSerial>d__23[System.__Canon]](byref,byref):this (FullOpts)
-20 (-25.00 % of base) : 3013.dasm - System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1[System.__Canon]:AwaitUnsafeOnCompleted[System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.__Canon],System.Threading.Tasks.TaskCompletionSourceWithCancellation`1+<WaitWithCancellationAsync>d__1[System.__Canon]](byref,byref):this (FullOpts)
-20 (-22.73 % of base) : 1657.dasm - System.SZArrayHelper:Contains[System.__Canon](System.__Canon):ubyte:this (FullOpts)
-80 (-22.60 % of base) : 6501.dasm - System.Linq.Enumerable:ElementAt[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.__Canon (FullOpts)
-90 (-22.06 % of base) : 5841.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) : 5850.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
-26 (-21.67 % of base) : 1782.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (FullOpts)
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: 10032106 (overridden on cmd)
Total bytes of diff: 10021914 (overridden on cmd)
Total bytes of delta: -10192 (-0.10 % of base)
diff is an improvement.
relative diff is an improvement.
Top file improvements (bytes):
-292 : 40564.dasm (-22.92 % of base)
-232 : 2498.dasm (-37.18 % of base)
-230 : 659.dasm (-35.49 % of base)
-206 : 6261.dasm (-21.24 % of base)
-202 : 665.dasm (-30.51 % of base)
-200 : 2293.dasm (-30.21 % of base)
-180 : 11141.dasm (-23.68 % of base)
-172 : 5043.dasm (-32.33 % of base)
-170 : 40561.dasm (-28.81 % of base)
-162 : 9436.dasm (-31.89 % of base)
-140 : 2059.dasm (-23.57 % of base)
-140 : 5914.dasm (-32.56 % of base)
-130 : 262.dasm (-26.21 % of base)
-124 : 8708.dasm (-27.19 % of base)
-112 : 5902.dasm (-25.57 % of base)
-110 : 573.dasm (-25.70 % of base)
-110 : 5898.dasm (-28.06 % of base)
-110 : 6186.dasm (-20.00 % of base)
-100 : 2471.dasm (-25.51 % of base)
-94 : 19365.dasm (-14.42 % of base)
34 total files with Code Size differences (34 improved, 0 regressed), 40 unchanged.
Top method improvements (bytes):
-292 (-22.92 % of base) : 40564.dasm - System.Threading.Tasks.Parallel:ForEachWorker[System.__Canon,System.__Canon](System.Collections.Generic.IList`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)
-232 (-37.18 % of base) : 2498.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-230 (-35.49 % of base) : 659.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) : 6261.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) : 665.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-200 (-30.21 % of base) : 2293.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)
-180 (-23.68 % of base) : 11141.dasm - System.Collections.Frozen.FrozenSet:GetExistingFrozenOrNewSet[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon],byref):System.Collections.Frozen.FrozenSet`1[System.__Canon] (Tier0)
-172 (-32.33 % of base) : 5043.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-170 (-28.81 % of base) : 40561.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)
-162 (-31.89 % of base) : 9436.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) : 5914.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.IOrderedCollection`1[System.__Canon] (Tier0)
-140 (-23.57 % of base) : 2059.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) : 8708.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
-112 (-25.57 % of base) : 5902.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
-110 (-20.00 % of base) : 6186.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier0)
-110 (-28.06 % of base) : 5898.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (Tier0)
-110 (-25.70 % of base) : 573.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)
-100 (-25.51 % of base) : 2471.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)
-94 (-14.42 % of base) : 19365.dasm - System.Collections.Immutable.ImmutableQueue:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (Tier0-FullOpts)
Top method improvements (percentages):
-232 (-37.18 % of base) : 2498.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-230 (-35.49 % of base) : 659.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-80 (-34.19 % of base) : 19366.dasm - System.Collections.Immutable.ImmutableQueue:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (Tier0)
-80 (-33.33 % of base) : 5133.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
-140 (-32.56 % of base) : 5914.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.IOrderedCollection`1[System.__Canon] (Tier0)
-172 (-32.33 % of base) : 5043.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) : 13730.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
-162 (-31.89 % of base) : 9436.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
-50 (-31.65 % of base) : 22248.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.__Canon](int):ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
-50 (-31.65 % of base) : 22130.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) : 5725.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) : 7535.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
-202 (-30.51 % of base) : 665.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-80 (-30.30 % of base) : 5042.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) : 2293.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)
-80 (-29.63 % of base) : 2474.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)
-80 (-29.63 % of base) : 654.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)
-80 (-29.63 % of base) : 5723.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (Tier0)
-170 (-28.81 % of base) : 40561.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)
-110 (-28.06 % of base) : 5898.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (Tier0)
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: 1668128 (overridden on cmd)
Total bytes of diff: 1657876 (overridden on cmd)
Total bytes of delta: -10252 (-0.61 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
34 : 8036.dasm (17.00 % of base)
8 : 6498.dasm (5.00 % of base)
8 : 5155.dasm (3.92 % of base)
8 : 7949.dasm (7.27 % of base)
4 : 14340.dasm (3.51 % of base)
4 : 6620.dasm (3.23 % of base)
Top file improvements (bytes):
-232 : 2089.dasm (-37.18 % of base)
-230 : 591.dasm (-35.28 % of base)
-206 : 3224.dasm (-21.37 % of base)
-202 : 597.dasm (-30.51 % of base)
-200 : 1972.dasm (-30.30 % of base)
-190 : 16381.dasm (-17.15 % of base)
-172 : 12150.dasm (-32.33 % of base)
-170 : 16379.dasm (-31.72 % of base)
-162 : 8381.dasm (-31.89 % of base)
-140 : 13122.dasm (-30.17 % of base)
-140 : 7826.dasm (-34.31 % of base)
-140 : 1792.dasm (-23.57 % of base)
-140 : 3267.dasm (-32.41 % of base)
-130 : 251.dasm (-26.21 % of base)
-124 : 18088.dasm (-25.62 % of base)
-124 : 2478.dasm (-27.19 % of base)
-112 : 14118.dasm (-25.57 % of base)
-110 : 21278.dasm (-27.64 % of base)
-110 : 6181.dasm (-20.00 % of base)
-110 : 3271.dasm (-28.06 % of base)
38 total files with Code Size differences (32 improved, 6 regressed), 34 unchanged.
Top method regressions (bytes):
34 (17.00 % of base) : 8036.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) : 6498.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
8 (3.92 % of base) : 5155.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) : 7949.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
4 (3.51 % of base) : 14340.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
4 (3.23 % of base) : 6620.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
Top method improvements (bytes):
-232 (-37.18 % of base) : 2089.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-230 (-35.28 % of base) : 591.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) : 3224.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) : 597.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-200 (-30.30 % of base) : 1972.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) : 16381.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (Tier0-FullOpts)
-172 (-32.33 % of base) : 12150.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) : 16379.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
-162 (-31.89 % of base) : 8381.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) : 3267.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 (-34.31 % of base) : 7826.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-140 (-30.17 % of base) : 13122.dasm - System.Linq.Enumerable:ElementAt[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.__Canon (Tier0)
-140 (-23.57 % of base) : 1792.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) : 18088.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) : 2478.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
-112 (-25.57 % of base) : 14118.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
-110 (-27.64 % of base) : 21278.dasm - ProtoBuf.ProtoReader+State:ReadAsRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (Tier0)
-110 (-20.00 % of base) : 6181.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier0)
-110 (-28.06 % of base) : 3271.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (Tier0)
Top method regressions (percentages):
34 (17.00 % of base) : 8036.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) : 7949.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
8 (5.00 % of base) : 6498.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
8 (3.92 % of base) : 5155.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
4 (3.51 % of base) : 14340.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
4 (3.23 % of base) : 6620.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
Top method improvements (percentages):
-26 (-38.24 % of base) : 8052.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier1)
-232 (-37.18 % of base) : 2089.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-230 (-35.28 % of base) : 591.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) : 7826.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) : 2389.dasm - System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier1)
-22 (-33.33 % of base) : 21738.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:CreateCharacteristic[System.__Canon](System.String):BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon] (Tier1)
-22 (-33.33 % of base) : 8022.dasm - Newtonsoft.Json.Serialization.JsonTypeReflector:GetCachedAttribute[System.__Canon](System.Object):System.__Canon (Tier1)
-80 (-33.33 % of base) : 12243.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
-140 (-32.41 % of base) : 3267.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)
-22 (-32.35 % of base) : 2517.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) : 12150.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) : 20500.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
-162 (-31.89 % of base) : 8381.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
-28 (-31.82 % of base) : 19941.dasm - System.Text.Json.JsonHelpers:CreateDictionaryFromCollection[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier1)
-170 (-31.72 % of base) : 16379.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
-50 (-31.65 % of base) : 21022.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.__Canon](int):ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
-50 (-31.65 % of base) : 4963.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) : 14682.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
-50 (-31.25 % of base) : 4058.dasm - System.Text.Json.JsonSerializer:SerializeToUtf8Bytes[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):ubyte[] (Tier0)
-202 (-30.51 % of base) : 597.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
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: 374650 (overridden on cmd)
Total bytes of diff: 374554 (overridden on cmd)
Total bytes of delta: -96 (-0.03 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
10 : 3902.dasm (10.64 % of base)
10 : 3832.dasm (10.64 % of base)
6 : 3892.dasm (6.82 % of base)
6 : 3953.dasm (6.82 % of base)
6 : 3770.dasm (7.32 % of base)
6 : 3842.dasm (6.82 % of base)
6 : 3852.dasm (6.82 % of base)
6 : 3912.dasm (6.82 % of base)
6 : 3822.dasm (7.32 % of base)
6 : 3872.dasm (7.32 % of base)
6 : 3882.dasm (7.32 % of base)
4 : 3963.dasm (4.44 % of base)
4 : 3486.dasm (4.44 % of base)
4 : 3812.dasm (4.44 % of base)
4 : 3862.dasm (4.44 % of base)
4 : 3923.dasm (4.44 % of base)
4 : 3492.dasm (4.44 % of base)
4 : 3983.dasm (4.44 % of base)
4 : 4003.dasm (4.44 % of base)
4 : 3480.dasm (4.44 % of base)
Top file improvements (bytes):
-36 : 4578.dasm (-12.16 % of base)
-32 : 510.dasm (-10.60 % of base)
-20 : 2855.dasm (-13.70 % of base)
-20 : 2362.dasm (-16.95 % of base)
-20 : 2583.dasm (-20.41 % of base)
-20 : 509.dasm (-22.73 % of base)
-14 : 4570.dasm (-3.80 % of base)
-14 : 2847.dasm (-4.05 % of base)
-2 : 3300.dasm (-2.44 % of base)
-2 : 3313.dasm (-1.92 % of base)
-2 : 3522.dasm (-2.63 % of base)
-2 : 3545.dasm (-1.92 % of base)
-2 : 3529.dasm (-2.63 % of base)
-2 : 3534.dasm (-2.44 % of base)
-2 : 3604.dasm (-2.63 % of base)
-2 : 3644.dasm (-2.63 % of base)
-2 : 3675.dasm (-2.44 % of base)
-2 : 3685.dasm (-1.92 % of base)
-2 : 3789.dasm (-2.44 % of base)
-2 : 3498.dasm (-2.63 % of base)
47 total files with Code Size differences (25 improved, 22 regressed), 20 unchanged.
Top method regressions (bytes):
10 (10.64 % of base) : 3832.dasm - NullableTest23:BoxUnboxToQ(System.Object):ubyte (Tier0)
10 (10.64 % of base) : 3902.dasm - NullableTest30:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3770.dasm - NullableTest17:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3822.dasm - NullableTest22:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3842.dasm - NullableTest24:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3852.dasm - NullableTest25:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3872.dasm - NullableTest27:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3882.dasm - NullableTest28:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3892.dasm - NullableTest29:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3912.dasm - NullableTest31:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3953.dasm - NullableTest37:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (3.51 % of base) : 4842.dasm - NullableTest1:BoxUnboxToQ(IEmpty):ubyte (Tier0)
4 (4.44 % of base) : 3812.dasm - NullableTest21:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3862.dasm - NullableTest26:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3480.dasm - NullableTest3:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
4 (3.51 % of base) : 4846.dasm - NullableTest3:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
4 (4.44 % of base) : 3923.dasm - NullableTest32:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3963.dasm - NullableTest38:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3486.dasm - NullableTest4:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
4 (4.44 % of base) : 3983.dasm - NullableTest40:BoxUnboxToQ(System.Object):ubyte (Tier0)
Top method improvements (bytes):
-36 (-12.16 % of base) : 4578.dasm - System.Array:Resize[System.__Canon](byref,int) (Tier1)
-32 (-10.60 % of base) : 510.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
-20 (-20.41 % of base) : 2583.dasm - System.Linq.Enumerable:Contains[int](System.Collections.Generic.IEnumerable`1[int],int):ubyte (Tier1)
-20 (-22.73 % of base) : 509.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.__Canon (Tier0)
-20 (-13.70 % of base) : 2855.dasm - System.Threading.Tasks.Task:AddToList[System.__Canon](System.__Canon,byref,int) (Tier0)
-20 (-16.95 % of base) : 2362.dasm - System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)
-14 (-4.05 % of base) : 2847.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier1)
-14 (-3.80 % of base) : 4570.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-2 (-2.44 % of base) : 3300.dasm - NullableTest1:BoxUnboxToQ(System.Enum):ubyte (Tier0)
-2 (-2.63 % of base) : 3604.dasm - NullableTest1:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.63 % of base) : 3522.dasm - NullableTest10:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.63 % of base) : 3529.dasm - NullableTest11:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.22 % of base) : 3705.dasm - NullableTest11:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.44 % of base) : 3534.dasm - NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-1.92 % of base) : 3545.dasm - NullableTest14:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.44 % of base) : 3747.dasm - NullableTest15:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.22 % of base) : 3557.dasm - NullableTest16:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.44 % of base) : 3789.dasm - NullableTest19:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-1.92 % of base) : 3313.dasm - NullableTest3:BoxUnboxToQ(System.Enum):ubyte (Tier0)
-2 (-2.63 % of base) : 3644.dasm - NullableTest5:BoxUnboxToQ(System.Object):ubyte (Tier0)
Top method regressions (percentages):
10 (10.64 % of base) : 3832.dasm - NullableTest23:BoxUnboxToQ(System.Object):ubyte (Tier0)
10 (10.64 % of base) : 3902.dasm - NullableTest30:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3770.dasm - NullableTest17:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3822.dasm - NullableTest22:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3872.dasm - NullableTest27:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (7.32 % of base) : 3882.dasm - NullableTest28:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3842.dasm - NullableTest24:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3852.dasm - NullableTest25:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3892.dasm - NullableTest29:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3912.dasm - NullableTest31:BoxUnboxToQ(System.Object):ubyte (Tier0)
6 (6.82 % of base) : 3953.dasm - NullableTest37:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3812.dasm - NullableTest21:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3862.dasm - NullableTest26:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3480.dasm - NullableTest3:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
4 (4.44 % of base) : 3923.dasm - NullableTest32:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3963.dasm - NullableTest38:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3486.dasm - NullableTest4:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
4 (4.44 % of base) : 3983.dasm - NullableTest40:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 4003.dasm - NullableTest42:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3492.dasm - NullableTest5:BoxUnboxToQ(IEmpty):ubyte (Tier0)
Top method improvements (percentages):
-20 (-22.73 % of base) : 509.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.__Canon (Tier0)
-20 (-20.41 % of base) : 2583.dasm - System.Linq.Enumerable:Contains[int](System.Collections.Generic.IEnumerable`1[int],int):ubyte (Tier1)
-20 (-16.95 % of base) : 2362.dasm - System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)
-20 (-13.70 % of base) : 2855.dasm - System.Threading.Tasks.Task:AddToList[System.__Canon](System.__Canon,byref,int) (Tier0)
-36 (-12.16 % of base) : 4578.dasm - System.Array:Resize[System.__Canon](byref,int) (Tier1)
-32 (-10.60 % of base) : 510.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
-14 (-4.05 % of base) : 2847.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier1)
-14 (-3.80 % of base) : 4570.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-2 (-2.63 % of base) : 3604.dasm - NullableTest1:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.63 % of base) : 3522.dasm - NullableTest10:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.63 % of base) : 3529.dasm - NullableTest11:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.63 % of base) : 3644.dasm - NullableTest5:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.63 % of base) : 3498.dasm - NullableTest6:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.63 % of base) : 3654.dasm - NullableTest6:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.44 % of base) : 3300.dasm - NullableTest1:BoxUnboxToQ(System.Enum):ubyte (Tier0)
-2 (-2.44 % of base) : 3534.dasm - NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.44 % of base) : 3747.dasm - NullableTest15:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.44 % of base) : 3789.dasm - NullableTest19:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.44 % of base) : 3665.dasm - NullableTest7:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.44 % of base) : 3675.dasm - NullableTest8:BoxUnboxToQ(System.Object):ubyte (Tier0)
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: 927870 (overridden on cmd)
Total bytes of diff: 921602 (overridden on cmd)
Total bytes of delta: -6268 (-0.68 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
804 : 6680.dasm (152.85 % of base)
50 : 4416.dasm (21.19 % of base)
24 : 8273.dasm (10.26 % of base)
24 : 8276.dasm (7.41 % of base)
14 : 4382.dasm (10.29 % of base)
14 : 16173.dasm (6.80 % of base)
12 : 16178.dasm (3.16 % of base)
6 : 13011.dasm (6.00 % of base)
4 : 13023.dasm (1.92 % of base)
Top file improvements (bytes):
-78 : 12194.dasm (-22.16 % of base)
-74 : 16232.dasm (-20.67 % of base)
-70 : 4378.dasm (-25.18 % of base)
-70 : 13286.dasm (-15.22 % of base)
-70 : 4582.dasm (-25.18 % of base)
-64 : 13288.dasm (-21.19 % of base)
-64 : 13284.dasm (-21.19 % of base)
-62 : 12189.dasm (-23.48 % of base)
-62 : 12187.dasm (-19.87 % of base)
-62 : 12186.dasm (-24.03 % of base)
-60 : 12185.dasm (-23.44 % of base)
-60 : 12183.dasm (-23.44 % of base)
-60 : 12182.dasm (-23.44 % of base)
-60 : 12184.dasm (-23.44 % of base)
-58 : 13483.dasm (-21.32 % of base)
-58 : 13537.dasm (-21.32 % of base)
-58 : 16202.dasm (-15.26 % of base)
-58 : 13541.dasm (-21.32 % of base)
-54 : 13290.dasm (-15.17 % of base)
-50 : 4602.dasm (-24.27 % of base)
49 total files with Code Size differences (40 improved, 9 regressed), 31 unchanged.
Top method regressions (bytes):
804 (152.85 % of base) : 6680.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
50 (21.19 % of base) : 4416.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) : 8276.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
24 (10.26 % of base) : 8273.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
14 (6.80 % of base) : 16173.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) : 4382.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) : 16178.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) : 13011.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) : 13023.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) : 12194.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) : 16232.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) : 13286.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) : 4378.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) : 4582.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) : 13284.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) : 13288.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) : 12186.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) : 12189.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) : 12187.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) : 12185.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) : 12184.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) : 12182.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) : 12183.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) : 16202.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) : 13537.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) : 13541.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) : 13483.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) : 13290.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 (-24.27 % of base) : 4602.dasm - System.Numerics.Vector:Sum[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
Top method regressions (percentages):
804 (152.85 % of base) : 6680.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
50 (21.19 % of base) : 4416.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) : 4382.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) : 8273.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
24 (7.41 % of base) : 8276.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
14 (6.80 % of base) : 16173.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) : 13011.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) : 16178.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) : 13023.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) : 16180.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) : 15585.dasm - Microsoft.FSharp.Control.ObservableModule:Pairwise[System.__Canon](System.IObservable`1[System.__Canon]):System.IObservable`1[System.__Canon] (FullOpts)
-28 (-34.15 % of base) : 11474.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) : 11472.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) : 11469.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) : 11467.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) : 11463.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) : 11465.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) : 11461.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) : 13604.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) : 13608.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) : 13615.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) : 13693.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToByte[System.__Canon](System.__Canon):ubyte (FullOpts)
-22 (-33.33 % of base) : 13679.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToDouble[System.__Canon](System.__Canon):double (FullOpts)
-22 (-33.33 % of base) : 13707.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToSByte[System.__Canon](System.__Canon):byte (FullOpts)
-22 (-33.33 % of base) : 13665.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators:ToSingle[System.__Canon](System.__Canon):float (FullOpts)
-22 (-33.33 % of base) : 13771.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked:ToByte[System.__Canon](System.__Canon):ubyte (FullOpts)
-22 (-33.33 % of base) : 13778.dasm - Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked:ToSByte[System.__Canon](System.__Canon):byte (FullOpts)
-22 (-33.33 % of base) : 12875.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) : 13216.dasm - Microsoft.FSharp.Control.FSharpAsync:Parallel[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon] (FullOpts)
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: 818984 (overridden on cmd)
Total bytes of diff: 807518 (overridden on cmd)
Total bytes of delta: -11466 (-1.40 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
2 : 10360.dasm (1.72 % of base)
2 : 10959.dasm (1.72 % of base)
2 : 10639.dasm (1.72 % of base)
2 : 11335.dasm (1.72 % of base)
2 : 11648.dasm (1.72 % of base)
2 : 11803.dasm (1.72 % of base)
2 : 12752.dasm (1.72 % of base)
2 : 2820.dasm (1.72 % of base)
2 : 10223.dasm (1.72 % of base)
2 : 11492.dasm (1.69 % of base)
2 : 10179.dasm (1.72 % of base)
2 : 10420.dasm (1.72 % of base)
2 : 11964.dasm (1.72 % of base)
2 : 13224.dasm (1.69 % of base)
2 : 4920.dasm (1.69 % of base)
2 : 5472.dasm (1.69 % of base)
2 : 5780.dasm (1.69 % of base)
2 : 5992.dasm (1.69 % of base)
2 : 6304.dasm (1.72 % of base)
2 : 7168.dasm (1.72 % of base)
Top file improvements (bytes):
-232 : 47.dasm (-36.94 % of base)
-230 : 38.dasm (-35.17 % of base)
-200 : 188.dasm (-30.21 % of base)
-162 : 2014.dasm (-31.89 % of base)
-140 : 195.dasm (-34.31 % of base)
-140 : 511.dasm (-34.31 % of base)
-124 : 973.dasm (-27.31 % of base)
-110 : 10349.dasm (-17.57 % of base)
-110 : 12097.dasm (-17.57 % of base)
-110 : 12445.dasm (-17.57 % of base)
-110 : 13385.dasm (-17.57 % of base)
-110 : 3966.dasm (-29.89 % of base)
-110 : 12309.dasm (-17.57 % of base)
-110 : 5685.dasm (-17.57 % of base)
-110 : 7341.dasm (-17.57 % of base)
-110 : 7825.dasm (-17.57 % of base)
-110 : 7989.dasm (-17.57 % of base)
-110 : 8357.dasm (-17.57 % of base)
-110 : 8669.dasm (-17.57 % of base)
-110 : 8881.dasm (-17.57 % of base)
59 total files with Code Size differences (33 improved, 26 regressed), 20 unchanged.
Top method regressions (bytes):
2 (1.72 % of base) : 10360.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10959.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10639.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11335.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11648.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11803.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 12752.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 2820.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10223.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.69 % of base) : 11492.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10179.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10420.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11964.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.69 % of base) : 13224.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.69 % of base) : 4920.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.69 % of base) : 5472.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.69 % of base) : 5780.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.69 % of base) : 5992.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 6304.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 7168.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) : 47.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-230 (-35.17 % of base) : 38.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-200 (-30.21 % of base) : 188.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) : 2014.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
-140 (-34.31 % of base) : 511.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) : 195.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-124 (-27.31 % of base) : 973.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
-110 (-29.89 % of base) : 3966.dasm - System.Dynamic.Utils.ExpressionUtils:SameElements[System.__Canon](byref,System.Collections.Generic.IReadOnlyList`1[System.__Canon]):ubyte (Tier0)
-110 (-17.57 % of base) : 10349.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) : 12097.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) : 12445.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) : 13385.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) : 12309.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) : 5685.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) : 7341.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) : 7825.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) : 7989.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) : 8357.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) : 8669.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) : 8881.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)
Top method regressions (percentages):
2 (1.72 % of base) : 10360.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10959.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10639.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11335.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11648.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11803.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 12752.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 2820.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10223.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10179.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 10420.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 11964.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 6304.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 7168.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 7672.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 8556.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 8680.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 9328.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 9800.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
2 (1.72 % of base) : 9947.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
Top method improvements (percentages):
-232 (-36.94 % of base) : 47.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-230 (-35.17 % of base) : 38.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) : 511.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) : 195.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-80 (-33.06 % of base) : 22.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
-100 (-32.26 % of base) : 3927.dasm - System.Dynamic.Utils.ExpressionUtils:ReturnReadOnly[System.__Canon](byref):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
-162 (-31.89 % of base) : 2014.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
-200 (-30.21 % of base) : 188.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)
-110 (-29.89 % of base) : 3966.dasm - System.Dynamic.Utils.ExpressionUtils:SameElements[System.__Canon](byref,System.Collections.Generic.IReadOnlyList`1[System.__Canon]):ubyte (Tier0)
-80 (-29.41 % of base) : 151.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (Tier0)
-50 (-28.09 % of base) : 3899.dasm - System.Linq.Expressions.ArrayBuilderExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.ArrayBuilder`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
-50 (-27.78 % of base) : 1067.dasm - DictionaryExtensions:GetOrAdd[System.__Canon,System.__Canon](System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.__Canon,System.Func`1[System.__Canon]):System.__Canon (Tier0)
-80 (-27.59 % of base) : 839.dasm - System.Linq.Enumerable:SelectMany[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-22 (-27.50 % of base) : 975.dasm - <PrivateImplementationDetails>:InlineArrayAsSpan[System.Collections.Generic.SegmentedArrayBuilder`1+ScratchBuffer[System.__Canon],System.__Canon](byref,int):System.Span`1[System.__Canon] (Tier1)
-124 (-27.31 % of base) : 973.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
-80 (-27.03 % of base) : 43.dasm - System.Linq.Enumerable:SkipIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-50 (-26.32 % of base) : 191.dasm - System.Linq.Enumerable:Cast[System.__Canon](System.Collections.IEnumerable):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-18 (-25.71 % of base) : 922.dasm - System.Linq.Enumerable:FirstOrDefault[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.__Canon (Tier1)
-26 (-25.49 % of base) : 987.dasm - System.Tuple:Create[System.__Canon,System.__Canon](System.__Canon,System.__Canon):System.Tuple`2[System.__Canon,System.__Canon] (Instrumented Tier1)
-80 (-24.84 % of base) : 262.dasm - System.Linq.Enumerable:Union[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
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: 481540 (overridden on cmd)
Total bytes of diff: 477754 (overridden on cmd)
Total bytes of delta: -3786 (-0.79 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
76 : 6110.dasm (15.70 % of base)
68 : 4340.dasm (7.94 % of base)
40 : 2909.dasm (14.49 % of base)
34 : 67.dasm (17.00 % of base)
8 : 2293.dasm (3.92 % of base)
2 : 1291.dasm (2.00 % of base)
2 : 6219.dasm (3.12 % of base)
2 : 6676.dasm (1.01 % of base)
Top file improvements (bytes):
-206 : 3070.dasm (-21.37 % of base)
-200 : 1008.dasm (-19.88 % of base)
-124 : 12.dasm (-27.19 % of base)
-124 : 9.dasm (-25.62 % of base)
-108 : 480.dasm (-21.26 % of base)
-108 : 762.dasm (-18.18 % of base)
-106 : 65.dasm (-17.97 % of base)
-106 : 3077.dasm (-15.96 % of base)
-104 : 3318.dasm (-24.76 % of base)
-94 : 4581.dasm (-18.36 % of base)
-86 : 2224.dasm (-28.10 % of base)
-82 : 511.dasm (-17.67 % of base)
-80 : 3425.dasm (-7.08 % of base)
-76 : 493.dasm (-16.96 % of base)
-64 : 635.dasm (-20.51 % of base)
-62 : 2118.dasm (-21.83 % of base)
-60 : 6217.dasm (-12.15 % of base)
-54 : 6149.dasm (-19.85 % of base)
-54 : 865.dasm (-16.77 % of base)
-50 : 3141.dasm (-14.71 % of base)
46 total files with Code Size differences (38 improved, 8 regressed), 32 unchanged.
Top method regressions (bytes):
76 (15.70 % of base) : 6110.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)
68 (7.94 % of base) : 4340.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) : 2909.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)
8 (3.92 % of base) : 2293.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)
2 (1.01 % of base) : 6676.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) : 6219.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) : 1291.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) : 3070.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)
-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) : 762.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) : 3077.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) : 3318.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
-94 (-18.36 % of base) : 4581.dasm - Roslyn.Utilities.EnumerableExtensions:IsEmpty[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
-86 (-28.10 % of base) : 2224.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) : 3425.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) : 2118.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
-60 (-12.15 % of base) : 6217.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) : 6149.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 (-14.71 % of base) : 3141.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):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)
76 (15.70 % of base) : 6110.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)
40 (14.49 % of base) : 2909.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) : 4340.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) : 2293.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)
2 (3.12 % of base) : 6219.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) : 1291.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
2 (1.01 % of base) : 6676.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):
-22 (-33.33 % of base) : 4601.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) : 3638.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) : 2157.dasm - System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
-22 (-30.56 % of base) : 4673.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) : 819.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) : 2386.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)
-22 (-28.21 % of base) : 5437.dasm - System.Linq.Expressions.Expression:Lambda[System.__Canon](System.Linq.Expressions.Expression,ubyte,System.Collections.Generic.IEnumerable`1[System.Linq.Expressions.ParameterExpression]):System.Linq.Expressions.Expression`1[System.__Canon] (FullOpts)
-86 (-28.10 % of base) : 2224.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) : 2349.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) : 2116.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
-22 (-26.19 % of base) : 3381.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) : 3156.dasm - Microsoft.VisualStudio.Composition.DelegateServices:AsFunc[System.__Canon](System.__Canon):System.Func`1[System.__Canon] (FullOpts)
-18 (-25.71 % of base) : 4981.dasm - Microsoft.CodeAnalysis.Collections.RoslynImmutableInterlocked:InterlockedExchange[System.__Canon](byref,Microsoft.CodeAnalysis.Collections.ImmutableSegmentedHashSet`1[System.__Canon]):Microsoft.CodeAnalysis.Collections.ImmutableSegmentedHashSet`1[System.__Canon] (FullOpts)
-18 (-25.71 % of base) : 7364.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:SelectAsArray[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
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: 2003136 (overridden on cmd)
Total bytes of diff: 1998422 (overridden on cmd)
Total bytes of delta: -4714 (-0.24 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
166 : 7260.dasm (27.30 % of base)
64 : 6920.dasm (21.19 % of base)
64 : 6930.dasm (21.62 % of base)
64 : 6909.dasm (21.19 % of base)
56 : 6933.dasm (18.54 % of base)
12 : 3326.dasm (6.06 % of base)
12 : 6856.dasm (10.00 % of base)
12 : 5732.dasm (3.64 % of base)
8 : 5568.dasm (4.12 % of base)
8 : 4261.dasm (4.21 % of base)
8 : 3297.dasm (5.00 % of base)
6 : 6931.dasm (2.54 % of base)
4 : 3087.dasm (3.23 % of base)
Top file improvements (bytes):
-206 : 4282.dasm (-21.68 % of base)
-124 : 820.dasm (-27.19 % of base)
-124 : 252.dasm (-25.62 % of base)
-116 : 7094.dasm (-17.06 % of base)
-108 : 256.dasm (-21.26 % of base)
-106 : 744.dasm (-17.97 % of base)
-100 : 6274.dasm (-21.93 % of base)
-98 : 5958.dasm (-15.71 % of base)
-90 : 7054.dasm (-19.57 % of base)
-84 : 7255.dasm (-18.10 % of base)
-76 : 659.dasm (-16.96 % of base)
-68 : 4148.dasm (-16.92 % of base)
-68 : 3895.dasm (-16.50 % of base)
-64 : 218.dasm (-20.13 % of base)
-62 : 3888.dasm (-19.02 % of base)
-62 : 7461.dasm (-21.83 % of base)
-60 : 6164.dasm (-5.36 % of base)
-58 : 6001.dasm (-21.80 % of base)
-58 : 5750.dasm (-21.80 % of base)
-54 : 5614.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) : 7260.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) : 6930.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) : 6920.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) : 6909.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) : 6933.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) : 6856.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) : 5732.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) : 3326.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) : 5568.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) : 3297.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
8 (4.21 % of base) : 4261.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) : 6931.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) : 3087.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) : 4282.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) : 820.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
-116 (-17.06 % of base) : 7094.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) : 744.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) : 6274.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) : 5958.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) : 7054.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) : 7255.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) : 659.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
-68 (-16.92 % of base) : 4148.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) : 3895.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) : 3888.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) : 7461.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
-60 (-5.36 % of base) : 6164.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) : 5750.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) : 6001.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) : 5614.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) : 7260.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) : 6930.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) : 6920.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) : 6909.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) : 6933.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) : 6856.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) : 3326.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) : 3297.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
8 (4.21 % of base) : 4261.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) : 5568.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) : 5732.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) : 3087.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) : 6931.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) : 4171.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) : 3328.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) : 7273.dasm - Microsoft.FSharp.Collections.ArrayModule:OfList[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon[] (FullOpts)
-22 (-33.33 % of base) : 5630.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) : 6234.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) : 6592.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) : 3478.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) : 3245.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) : 6591.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) : 7412.dasm - Microsoft.FSharp.Collections.SeqModule:Singleton[System.__Canon](System.__Canon):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
-36 (-27.69 % of base) : 7035.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) : 5668.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) : 3244.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) : 6672.dasm - Microsoft.FSharp.Control.LazyExtensions:CreateFromValue[System.__Canon](System.__Canon):System.Lazy`1[System.__Canon] (FullOpts)
-26 (-27.66 % of base) : 4026.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) : 820.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
-26 (-27.08 % of base) : 839.dasm - System.Linq.Enumerable:HashSetToArray[System.__Canon](System.Collections.Generic.HashSet`1[System.__Canon]):System.__Canon[] (FullOpts)
-18 (-26.47 % of base) : 3782.dasm - Microsoft.FSharp.Collections.ListModule:Collect[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)
-18 (-26.47 % of base) : 3894.dasm - Microsoft.FSharp.Collections.ListModule:MapIndexed[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)
Diffs are based on 56,610 contexts (16,610 MinOpts, 40,000 FullOpts).
MISSED contexts: base: 1,422 (1.16%), diff: 62,829 (51.08%)
Collection | Base size (bytes) | Diff size (bytes) |
---|---|---|
benchmarks.run.windows.x86.checked.mch | 294,269 | -2,988 |
benchmarks.run_pgo.windows.x86.checked.mch | 1,606,515 | -12,182 |
benchmarks.run_tiered.windows.x86.checked.mch | 688,652 | -9,512 |
coreclr_tests.run.windows.x86.checked.mch | 52,457 | -84 |
libraries.pmi.windows.x86.checked.mch | 1,544,756 | -5,699 |
libraries_tests.run.windows.x86.Release.mch | 377,767 | -9,057 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch | 293,271 | -3,811 |
realworld.run.windows.x86.checked.mch | 517,918 | -6,148 |
Collection | Base size (bytes) | Diff size (bytes) |
---|---|---|
benchmarks.run_pgo.windows.x86.checked.mch | 610,624 | -9,271 |
benchmarks.run_tiered.windows.x86.checked.mch | 491,102 | -7,580 |
libraries_tests.run.windows.x86.Release.mch | 213,141 | -7,848 |
Collection | Base size (bytes) | Diff size (bytes) |
---|---|---|
benchmarks.run.windows.x86.checked.mch | 294,196 | -2,988 |
benchmarks.run_pgo.windows.x86.checked.mch | 995,891 | -2,911 |
benchmarks.run_tiered.windows.x86.checked.mch | 197,550 | -1,932 |
coreclr_tests.run.windows.x86.checked.mch | 52,457 | -84 |
libraries.pmi.windows.x86.checked.mch | 1,544,756 | -5,699 |
libraries_tests.run.windows.x86.Release.mch | 164,626 | -1,209 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch | 293,271 | -3,811 |
realworld.run.windows.x86.checked.mch | 517,918 | -6,148 |
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
1[ulong]:MultiplyBenchmark():System.Numerics.Vector
1[ulong]:this (FullOpts)@@ -32,7 +32,7 @@
;* V21 tmp19 [V21 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
;* V22 tmp20 [V22 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V23 tmp21 [V23 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"-;* V24 cse0 [V24,T12] ( 0, 0 ) int -> zero-ref "CSE - moderate"+;* V24 cse0 [V24,T12] ( 0, 0 ) byref -> zero-ref "CSE - moderate" ; V25 rat0 [V25,T04] ( 2, 8 ) int -> ebx "field V08.lo (fldOffset=0x0)" P-INDEP
; V26 rat1 [V26,T05] ( 2, 8 ) int -> [ebp-0x78] spill-single-def "field V08.hi (fldOffset=0x4)" P-INDEP
; V27 rat2 [V27,T06] ( 2, 8 ) int -> ebx "field V09.lo (fldOffset=0x0)" P-INDEP
@@ -57,7 +57,8 @@ G_M57120_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
G_M57120_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 ymm1, ymmword ptr [D1FFAB1EH] ; static handle
vmovups ymmword ptr [ebp-0x4C], ymm0
@@ -65,6 +66,7 @@ G_M57120_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {e
xor edi, edi
;; size=40 bbWeight=1 PerfScore 13.75
G_M57120_IG03: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz+ ; byrRegs -[eax] test edi, edi
jl SHORT G_M57120_IG05
;; size=4 bbWeight=4 PerfScore 5.00
1[System.ValueTuple
2[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) ; ============================================================
@@ -9,7 +9,7 @@
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Newtonsoft.Json.Linq.JContainer>
; V01 arg1 [V01,T00] ( 6, 4.50) ref -> esi class-hnd single-def <System.Object>-; V02 tmp0 [V02,T01] ( 2, 2 ) ref -> edx class-hnd "spilling QMark2" <<unknown class>>+; V02 tmp0 [V02,T01] ( 3, 2.50) ref -> edx class-hnd "spilling QMark2" <<unknown class>> ;
; Lcl frame size = 0
@@ -24,47 +24,55 @@ G_M29722_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
mov edx, esi
; gcrRegs +[edx]
mov ecx, 0xD1FFAB1E ; <unknown class>- call CORINFO_HELP_ISINSTANCEOFINTERFACE+ call CORINFO_HELP_INITINSTCLASS ; gcrRegs -[edx] +[eax]
test eax, eax- je SHORT G_M29722_IG05+ je SHORT G_M29722_IG07 ;; size=16 bbWeight=1 PerfScore 2.75
G_M29722_IG03: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov edx, esi
; gcrRegs +[edx]- cmp dword ptr [edx], 0xD1FFAB1E+ test edx, edx je SHORT G_M29722_IG05- mov edx, esi
- mov ecx, 0xD1FFAB1E ; <unknown class>
- call CORINFO_HELP_ISINSTANCEOFCLASS
- ; gcrRegs -[edx] +[eax]
- test eax, eax
- jne SHORT G_M29722_IG05+ ;; size=6 bbWeight=0.50 PerfScore 0.75
+G_M29722_IG04: ; bbWeight=0.25, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz
+ cmp dword ptr [edx], 0xD1FFAB1E
+ je SHORT G_M29722_IG07
+ ;; size=8 bbWeight=0.25 PerfScore 1.00
+G_M29722_IG05: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[edx] mov edx, esi
; gcrRegs +[edx]
mov ecx, 0xD1FFAB1E ; <unknown class>
call CORINFO_HELP_ISINSTANCEOFARRAY+ ; gcrRegs -[edx] +[eax]
+ test eax, eax
+ jne SHORT G_M29722_IG07
+ mov edx, esi
+ ; gcrRegs +[edx]
+ mov ecx, 0xD1FFAB1E ; <unknown class>
+ call CORINFO_HELP_ISINSTANCEOFINTERFACE ; gcrRegs -[edx esi]
test eax, eax
sete al
; gcrRegs -[eax]
movzx eax, al- ;; size=46 bbWeight=0.50 PerfScore 5.00
-G_M29722_IG04: ; bbWeight=0.50, epilog, nogc, extend
- pop esi
- pop ebp
- ret
- ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M29722_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
- xor eax, eax
- ;; size=2 bbWeight=0.50 PerfScore 0.12+ ;; size=36 bbWeight=0.50 PerfScore 2.88 G_M29722_IG06: ; bbWeight=0.50, epilog, nogc, extend
pop esi
pop ebp
ret
;; size=3 bbWeight=0.50 PerfScore 1.00+G_M29722_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+ xor eax, eax
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M29722_IG08: ; bbWeight=0.50, epilog, nogc, extend
+ pop esi
+ pop ebp
+ ret
+ ;; size=3 bbWeight=0.50 PerfScore 1.00 -; Total bytes of code 76, prolog size 4, PerfScore 12.38, instruction count 30, allocated bytes for code 76 (MethodHash=14138be5) for method Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)+; Total bytes of code 80, prolog size 4, PerfScore 12.00, instruction count 32, allocated bytes for code 80 (MethodHash=14138be5) for method Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -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.06) 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.06) int -> edx single-def ; V02 arg2 [V02,T11] ( 2, 1.06) int -> ecx single-def
; V03 arg3 [V03,T12] ( 2, 1.06) int -> ebx single-def
; V04 arg4 [V04,T13] ( 2, 1.06) 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.24) 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 ) ref -> ebx class-hnd <<unknown class>>
+;* V09 tmp0 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V10 tmp1 [V10,T15] ( 2, 0.24) 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_IG12
+ ;; 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_IG17 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.06, 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.06 PerfScore 0.60
-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.47, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+ ;; size=4 bbWeight=0.80 PerfScore 1.80
+G_M33863_IG09: ; bbWeight=0.47, 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.47, 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.47 PerfScore 4.00-G_M33863_IG14: ; bbWeight=0.41, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+G_M33863_IG10: ; bbWeight=0.41, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -149,9 +121,9 @@ G_M33863_IG14: ; bbWeight=0.41, 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.41 PerfScore 3.50-G_M33863_IG15: ; bbWeight=0.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+G_M33863_IG11: ; bbWeight=0.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -162,9 +134,34 @@ G_M33863_IG15: ; bbWeight=0.12, 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.12 PerfScore 1.00-G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+G_M33863_IG12: ; bbWeight=0.06, 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.06 PerfScore 0.60
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ push dword ptr [ebp-0x10]
+ push dword ptr [ebp-0x14]
+ push dword ptr [ebp-0x18]
+ mov ecx, esi
+ ; gcrRegs +[ecx]
+ call [System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateMethods(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeMethodInfo[]:this]
+ ; gcrRegs -[ecx] +[eax]
+ mov ebx, eax
+ ; gcrRegs +[ebx]
+ jmp SHORT G_M33863_IG07
+ ;; size=21 bbWeight=0 PerfScore 0.00
+G_M33863_IG14: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -175,35 +172,35 @@ G_M33863_IG16: ; 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_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; 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 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]...
@@ -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.06) 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.06) int -> edx single-def ; V02 arg2 [V02,T11] ( 2, 1.06) int -> ecx single-def
; V03 arg3 [V03,T12] ( 2, 1.06) int -> ebx single-def
; V04 arg4 [V04,T13] ( 2, 1.06) 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.24) 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 ) ref -> ebx class-hnd <<unknown class>>
+;* V09 tmp0 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V10 tmp1 [V10,T15] ( 2, 0.24) 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_IG12
+ ;; 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_IG17 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.06, 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.06 PerfScore 0.60
-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.47, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+ ;; size=4 bbWeight=0.80 PerfScore 1.80
+G_M33863_IG09: ; bbWeight=0.47, 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.47, 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.47 PerfScore 4.00-G_M33863_IG14: ; bbWeight=0.41, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+G_M33863_IG10: ; bbWeight=0.41, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -149,9 +121,9 @@ G_M33863_IG14: ; bbWeight=0.41, 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.41 PerfScore 3.50-G_M33863_IG15: ; bbWeight=0.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+G_M33863_IG11: ; bbWeight=0.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -162,9 +134,34 @@ G_M33863_IG15: ; bbWeight=0.12, 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.12 PerfScore 1.00-G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+G_M33863_IG12: ; bbWeight=0.06, 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.06 PerfScore 0.60
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ push dword ptr [ebp-0x10]
+ push dword ptr [ebp-0x14]
+ push dword ptr [ebp-0x18]
+ mov ecx, esi
+ ; gcrRegs +[ecx]
+ call [System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateMethods(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeMethodInfo[]:this]
+ ; gcrRegs -[ecx] +[eax]
+ mov ebx, eax
+ ; gcrRegs +[ebx]
+ jmp SHORT G_M33863_IG07
+ ;; size=21 bbWeight=0 PerfScore 0.00
+G_M33863_IG14: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -175,35 +172,35 @@ G_M33863_IG16: ; 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_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; 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 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]...
@@ -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=10 bbWeight=0.25 PerfScore 0.88
-G_M33863_IG10: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc+ ;; size=8 bbWeight=1 PerfScore 3.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
...
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -11,17 +11,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 arg2 [V02,T07] ( 5, 9 ) ref -> edi class-hnd single-def <System.String>-; V03 TypeCtx [V03,T28] ( 3, 1.60) int -> ecx single-def+; V03 TypeCtx [V03,T29] ( 2, 1.50) int -> ecx single-def ; V04 loc0 [V04,T14] ( 8, 4 ) ref -> ebx class-hnd <System.String>
;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref ld-addr-op
; V06 loc2 [V06 ] ( 2, 4.50) int -> [ebp-0x18] do-not-enreg[X] addr-exposed ld-addr-op
; V07 loc3 [V07 ] ( 5, 2.50) ref -> [ebp-0x1C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>-; V08 loc4 [V08,T22] ( 4, 2 ) byref -> ecx
-; V09 tmp1 [V09,T29] ( 3, 1.50) ref -> ebx +; V08 loc4 [V08,T21] ( 4, 2 ) byref -> ecx
+; V09 tmp1 [V09,T27] ( 3, 1.50) ref -> ebx ; V10 tmp2 [V10,T04] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" <System.__Canon>
;* V11 tmp3 [V11 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Span`1[ushort]>
;* V12 tmp4 [V12 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>-; V13 tmp5 [V13,T23] ( 3, 2 ) int -> eax "spilling helperCall"+; V13 tmp5 [V13,T25] ( 2, 2 ) int -> eax "spilling helperCall" ; V14 tmp6 [V14,T00] ( 4, 32 ) int -> edx "Inlining Arg"
; V15 tmp7 [V15,T01] ( 3, 24 ) byref -> ecx "Inlining Arg"
;* V16 tmp8 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
@@ -41,14 +41,14 @@
; V30 tmp22 [V30,T18] ( 3, 3 ) byref -> ecx single-def "Inlining Arg"
;* V31 tmp23 [V31 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
; V32 tmp24 [V32,T20] ( 3, 3 ) int -> edi "Inlining Arg"-; V33 tmp25 [V33,T24] ( 2, 2 ) byref -> [ebp-0x2C] spill-single-def "Inlining Arg"+; V33 tmp25 [V33,T22] ( 2, 2 ) byref -> [ebp-0x2C] spill-single-def "Inlining Arg" ;* V34 tmp26 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V35 tmp27 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"-;* V36 tmp28 [V36,T31] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp"+;* V36 tmp28 [V36,T30] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" ;* V37 tmp29 [V37 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
;* V38 tmp30 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"-; V39 tmp31 [V39,T25] ( 2, 2 ) byref -> edx single-def "Inlining Arg"
-; V40 tmp32 [V40,T27] ( 2, 2 ) int -> ecx "Inlining Arg"+; V39 tmp31 [V39,T23] ( 2, 2 ) byref -> edx single-def "Inlining Arg"
+; V40 tmp32 [V40,T26] ( 2, 2 ) int -> ecx "Inlining Arg" ;* V41 tmp33 [V41 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V42 tmp34 [V42 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V43 tmp35 [V43 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x4)" P-INDEP
@@ -69,10 +69,9 @@
;* V58 tmp50 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V37._reference (fldOffset=0x0)" P-INDEP
;* V59 tmp51 [V59 ] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x4)" P-INDEP
; V60 tmp52 [V60,T19] ( 3, 3 ) ref -> ecx single-def "argument with side effect"-; V61 tmp53 [V61,T26] ( 2, 2 ) ref -> ecx single-def "argument with side effect"+; V61 tmp53 [V61,T24] ( 2, 2 ) ref -> ecx single-def "argument with side effect" ; V62 cse0 [V62,T06] ( 3, 12 ) int -> eax "CSE - moderate"-; V63 cse1 [V63,T30] ( 3, 1.50) int -> edi "CSE - conservative"
-; V64 rat0 [V64,T21] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"+; V63 cse1 [V63,T28] ( 3, 1.50) int -> edi "CSE - conservative" ;
; Lcl frame size = 32
@@ -96,22 +95,11 @@ G_M38382_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
;; size=31 bbWeight=1 PerfScore 12.00
G_M38382_IG02: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz
cmp byte ptr [esi+0x0C], 0- je SHORT G_M38382_IG08
- ;; size=6 bbWeight=1 PerfScore 4.00
-G_M38382_IG03: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz
- mov edx, dword ptr [ecx+0x20]
- mov eax, dword ptr [edx+0x08]
- test eax, eax je SHORT G_M38382_IG05- ;; size=10 bbWeight=0.50 PerfScore 2.62
-G_M38382_IG04: ; bbWeight=0.40, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz
- jmp SHORT G_M38382_IG06
- ;; size=2 bbWeight=0.40 PerfScore 0.80
-G_M38382_IG05: ; bbWeight=0.10, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref+ ;; size=6 bbWeight=1 PerfScore 4.00
+G_M38382_IG03: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref mov edx, 0xD1FFAB1E ; global ptr- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- ;; size=10 bbWeight=0.10 PerfScore 0.12
-G_M38382_IG06: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref+ call CORINFO_HELP_MEMCPY push edi
push eax
mov ecx, esi
@@ -121,8 +109,8 @@ G_M38382_IG06: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000
call [<unknown method>]
; gcrRegs -[edx edi]
; byrRegs -[ecx esi]- ;; size=13 bbWeight=0.50 PerfScore 3.12
-G_M38382_IG07: ; bbWeight=0.50, epilog, nogc, extend+ ;; size=23 bbWeight=0.50 PerfScore 3.75
+G_M38382_IG04: ; bbWeight=0.50, epilog, nogc, extend lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -130,27 +118,27 @@ G_M38382_IG07: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret 8
;; size=10 bbWeight=0.50 PerfScore 2.25-G_M38382_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, gcvars, byref, isz+G_M38382_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, gcvars, byref, isz ; gcrRegs +[edi]
; 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_M38382_IG18+ je G_M38382_IG15 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_M38382_IG10+ jne SHORT G_M38382_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]
@@ -161,20 +149,20 @@ G_M38382_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000080 {e
; gcrRegs -[ecx edx edi]
mov ebx, eax
; gcrRegs +[ebx]- jmp G_M38382_IG20+ jmp G_M38382_IG17 ;; size=70 bbWeight=0.50 PerfScore 8.50-G_M38382_IG09: ; bbWeight=2, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref+G_M38382_IG06: ; bbWeight=2, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref ; gcrRegs -[eax ebx] +[edi]
mov ecx, esi
; byrRegs +[ecx]
call [<unknown method>]
; byrRegs -[ecx]
;; size=8 bbWeight=2 PerfScore 6.50-G_M38382_IG10: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000040 {esi}, byref, isz+G_M38382_IG07: ; bbWeight=4, gcrefRegs=00000080 {edi}, 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 ebx, eax
; gcrRegs +[ebx]
@@ -184,7 +172,7 @@ G_M38382_IG10: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000040
mov eax, dword ptr [ecx+0x04]
; gcrRegs -[eax]
cmp edx, eax- ja G_M38382_IG25+ ja G_M38382_IG22 mov ecx, bword ptr [ecx]
lea ecx, bword ptr [ecx+2*edx]
mov bword ptr [ebp-0x28], ecx
@@ -192,9 +180,9 @@ G_M38382_IG10: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000040
sub eax, edx
mov dword ptr [ebp-0x20], eax
test eax, eax- jge SHORT G_M38382_IG12+ jge SHORT G_M38382_IG09 ;; size=49 bbWeight=4 PerfScore 57.00-G_M38382_IG11: ; bbWeight=2, gcVars=00000020 {V18}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000040 {esi}, gcvars, byref+G_M38382_IG08: ; bbWeight=2, gcVars=00000020 {V18}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000040 {esi}, gcvars, byref ; byrRegs -[ecx]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
@@ -203,28 +191,28 @@ G_M38382_IG11: ; bbWeight=2, gcVars=00000020 {V18}, gcrefRegs=00000088 {e
call [<unknown method>]
; gcrRegs -[ecx edx]
;; size=16 bbWeight=2 PerfScore 7.00-G_M38382_IG12: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000040 {esi}, byref, isz+G_M38382_IG09: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000040 {esi}, byref, isz mov ecx, bword ptr [ebp-0x28]
; byrRegs +[ecx]
mov eax, dword ptr [ebp-0x20]
mov dword ptr [ebp-0x24], eax
test edi, edi- jne SHORT G_M38382_IG14+ jne SHORT G_M38382_IG11 ;; size=13 bbWeight=4 PerfScore 17.00-G_M38382_IG13: ; bbWeight=2, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000042 {ecx esi}, gcvars, byref, isz+G_M38382_IG10: ; bbWeight=2, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000042 {ecx esi}, gcvars, byref, isz ; GC ptr vars -{V18}
xor edx, edx
; byrRegs +[edx]
xor eax, eax- jmp SHORT G_M38382_IG15+ jmp SHORT G_M38382_IG12 ;; size=6 bbWeight=2 PerfScore 5.00-G_M38382_IG14: ; bbWeight=2, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000042 {ecx esi}, byref+G_M38382_IG11: ; bbWeight=2, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000042 {ecx esi}, byref ; byrRegs -[edx]
lea edx, bword ptr [edi+0x08]
; byrRegs +[edx]
mov eax, dword ptr [edi+0x04]
;; size=6 bbWeight=2 PerfScore 5.00-G_M38382_IG15: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000046 {ecx edx esi}, byref, isz+G_M38382_IG12: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000046 {ecx edx esi}, byref, isz push dword ptr [ebp-0x24]
push ecx
push eax
@@ -238,14 +226,14 @@ G_M38382_IG15: ; bbWeight=4, gcrefRegs=00000088 {ebx edi}, byrefRegs=0000
call [<unknown method>]
; gcrRegs -[ecx ebx]
test eax, eax- je SHORT G_M38382_IG09+ je SHORT G_M38382_IG06 ;; size=23 bbWeight=4 PerfScore 44.00-G_M38382_IG16: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref+G_M38382_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref ; gcrRegs -[edi]
mov ecx, dword ptr [ebp-0x18]
add dword ptr [esi+0x08], ecx
;; size=6 bbWeight=0.50 PerfScore 2.00-G_M38382_IG17: ; bbWeight=0.50, epilog, nogc, extend+G_M38382_IG14: ; bbWeight=0.50, epilog, nogc, extend lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -253,7 +241,7 @@ G_M38382_IG17: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret 8
;; size=10 bbWeight=0.50 PerfScore 2.25-G_M38382_IG18: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, gcvars, byref, isz+G_M38382_IG15: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, gcvars, byref, isz xor ecx, ecx
; gcrRegs +[ecx]
mov gword ptr [ebp-0x1C], ecx
@@ -261,7 +249,7 @@ G_M38382_IG18: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}
; gcrRegs -[ecx]
; byrRegs +[ecx]
cmp gword ptr [ebp-0x1C], 0- jne SHORT G_M38382_IG19+ jne SHORT G_M38382_IG16 mov ecx, gword ptr [ecx]
; gcrRegs +[ecx]
; byrRegs -[ecx]
@@ -270,12 +258,12 @@ G_M38382_IG18: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}
; gcrRegs -[ecx]
; byrRegs +[ecx]
cmp gword ptr [ebp-0x1C], 0- jne SHORT G_M38382_IG19+ jne SHORT G_M38382_IG16 xor ebx, ebx
; gcrRegs +[ebx]
...
@@ -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) ; ============================================================
@@ -9,7 +9,7 @@
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Newtonsoft.Json.Linq.JContainer>
; V01 arg1 [V01,T00] ( 6, 4.50) ref -> esi class-hnd single-def <System.Object>-; V02 tmp0 [V02,T01] ( 2, 2 ) ref -> edx class-hnd "spilling QMark2" <<unknown class>>+; V02 tmp0 [V02,T01] ( 3, 2.50) ref -> edx class-hnd "spilling QMark2" <<unknown class>> ;
; Lcl frame size = 0
@@ -24,47 +24,55 @@ G_M29722_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
mov edx, esi
; gcrRegs +[edx]
mov ecx, 0xD1FFAB1E ; <unknown class>- call CORINFO_HELP_ISINSTANCEOFINTERFACE+ call CORINFO_HELP_INITINSTCLASS ; gcrRegs -[edx] +[eax]
test eax, eax- je SHORT G_M29722_IG05+ je SHORT G_M29722_IG07 ;; size=16 bbWeight=1 PerfScore 2.75
G_M29722_IG03: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov edx, esi
; gcrRegs +[edx]- cmp dword ptr [edx], 0xD1FFAB1E+ test edx, edx je SHORT G_M29722_IG05- mov edx, esi
- mov ecx, 0xD1FFAB1E ; <unknown class>
- call CORINFO_HELP_ISINSTANCEOFCLASS
- ; gcrRegs -[edx] +[eax]
- test eax, eax
- jne SHORT G_M29722_IG05+ ;; size=6 bbWeight=0.50 PerfScore 0.75
+G_M29722_IG04: ; bbWeight=0.25, gcrefRegs=00000044 {edx esi}, byrefRegs=00000000 {}, byref, isz
+ cmp dword ptr [edx], 0xD1FFAB1E
+ je SHORT G_M29722_IG07
+ ;; size=8 bbWeight=0.25 PerfScore 1.00
+G_M29722_IG05: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[edx] mov edx, esi
; gcrRegs +[edx]
mov ecx, 0xD1FFAB1E ; <unknown class>
call CORINFO_HELP_ISINSTANCEOFARRAY+ ; gcrRegs -[edx] +[eax]
+ test eax, eax
+ jne SHORT G_M29722_IG07
+ mov edx, esi
+ ; gcrRegs +[edx]
+ mov ecx, 0xD1FFAB1E ; <unknown class>
+ call CORINFO_HELP_ISINSTANCEOFINTERFACE ; gcrRegs -[edx esi]
test eax, eax
sete al
; gcrRegs -[eax]
movzx eax, al- ;; size=46 bbWeight=0.50 PerfScore 5.00
-G_M29722_IG04: ; bbWeight=0.50, epilog, nogc, extend
- pop esi
- pop ebp
- ret
- ;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M29722_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
- xor eax, eax
- ;; size=2 bbWeight=0.50 PerfScore 0.12+ ;; size=36 bbWeight=0.50 PerfScore 2.88 G_M29722_IG06: ; bbWeight=0.50, epilog, nogc, extend
pop esi
pop ebp
ret
;; size=3 bbWeight=0.50 PerfScore 1.00+G_M29722_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+ xor eax, eax
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M29722_IG08: ; bbWeight=0.50, epilog, nogc, extend
+ pop esi
+ pop ebp
+ ret
+ ;; size=3 bbWeight=0.50 PerfScore 1.00 -; Total bytes of code 76, prolog size 4, PerfScore 12.38, instruction count 30, allocated bytes for code 76 (MethodHash=14138be5) for method Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)+; Total bytes of code 80, prolog size 4, PerfScore 12.00, instruction count 32, allocated bytes for code 80 (MethodHash=14138be5) for method Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1) ; ============================================================
@@ -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
...
@@ -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
...
1[ulong]):System.Runtime.Intrinsics.Vector128
1double@@ -5,39 +5,25 @@
; esp based frame
; partially interruptible
; No matching PGO data-; 0 inlinees with PGO data; 0 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 ) simd16 -> mm0 single-def <System.Runtime.Intrinsics.Vector128`1[ulong]>
-;* V02 loc0 [V02 ] ( 0, 0 ) simd16 -> zero-ref "Inline return value spill temp" <System.Runtime.Intrinsics.Vector128`1[double]>
-;* V03 tmp1 [V03 ] ( 0, 0 ) simd16 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector128`1[uint]>
-;* V04 tmp2 [V04 ] ( 0, 0 ) simd16 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector128`1[ulong]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) simd16 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector128`1[double]>+; V01 arg0 [V01,T01] ( 1, 1 ) simd16 -> [esp+0x04] single-def <System.Runtime.Intrinsics.Vector128`1[ulong]> ;
; Lcl frame size = 0
G_M6437_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
vzeroupper - vmovups xmm0, xmmword ptr [esp+0x04]
- ;; size=9 bbWeight=1 PerfScore 4.00+ ;; size=3 bbWeight=1 PerfScore 1.00 G_M6437_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
; byrRegs +[ecx]- vpblendd xmm1, xmm0, xmmword ptr [@RWD00], 10
- vpsrlq xmm0, xmm0, 32
- vpxor xmm0, xmm0, xmmword ptr [@RWD16]
- vsubpd xmm0, xmm0, qword ptr [@RWD32] {1to2}
- vaddpd xmm0, xmm1, xmm0+ vcvtuqq2pd xmm0, xmmword ptr [esp+0x04] vmovups xmmword ptr [ecx], xmm0- ;; size=41 bbWeight=1 PerfScore 15.00+ ;; size=15 bbWeight=1 PerfScore 7.00 G_M6437_IG03: ; bbWeight=1, epilog, nogc, extend
ret 16
;; size=3 bbWeight=1 PerfScore 2.00-RWD00 dq 4330000000000000h, 4330000000000000h
-RWD16 dq 4530000000000000h, 4530000000000000h
-RWD32 dq 4530000000100000h ; 1.93428131e+25 -
-; Total bytes of code 53, prolog size 3, PerfScore 21.00, instruction count 9, allocated bytes for code 53 (MethodHash=90d9e6da) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector128`1[ulong]):System.Runtime.Intrinsics.Vector128`1[double] (FullOpts)+; Total bytes of code 21, prolog size 3, PerfScore 10.00, instruction count 4, allocated bytes for code 21 (MethodHash=90d9e6da) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector128`1[ulong]):System.Runtime.Intrinsics.Vector128`1[double] (FullOpts) ; ============================================================
1[long]):System.Runtime.Intrinsics.Vector128
1double@@ -5,39 +5,25 @@
; esp based frame
; partially interruptible
; No matching PGO data-; 0 inlinees with PGO data; 0 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 ) simd16 -> mm0 single-def <System.Runtime.Intrinsics.Vector128`1[long]>
-;* V02 loc0 [V02 ] ( 0, 0 ) simd16 -> zero-ref "Inline return value spill temp" <System.Runtime.Intrinsics.Vector128`1[double]>
-;* V03 tmp1 [V03 ] ( 0, 0 ) simd16 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector128`1[int]>
-;* V04 tmp2 [V04 ] ( 0, 0 ) simd16 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector128`1[long]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) simd16 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector128`1[double]>+; V01 arg0 [V01,T01] ( 1, 1 ) simd16 -> [esp+0x04] single-def <System.Runtime.Intrinsics.Vector128`1[long]> ;
; Lcl frame size = 0
G_M31493_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
vzeroupper - vmovups xmm0, xmmword ptr [esp+0x04]
- ;; size=9 bbWeight=1 PerfScore 4.00+ ;; size=3 bbWeight=1 PerfScore 1.00 G_M31493_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
; byrRegs +[ecx]- vpblendd xmm1, xmm0, xmmword ptr [@RWD00], 10
- vpsrlq xmm0, xmm0, 32
- vpxor xmm0, xmm0, xmmword ptr [@RWD16]
- vsubpd xmm0, xmm0, qword ptr [@RWD32] {1to2}
- vaddpd xmm0, xmm1, xmm0+ vcvtqq2pd xmm0, xmmword ptr [esp+0x04] vmovups xmmword ptr [ecx], xmm0- ;; size=41 bbWeight=1 PerfScore 15.00+ ;; size=15 bbWeight=1 PerfScore 7.00 G_M31493_IG03: ; bbWeight=1, epilog, nogc, extend
ret 16
;; size=3 bbWeight=1 PerfScore 2.00-RWD00 dq 4330000000000000h, 4330000000000000h
-RWD16 dq 4530000080000000h, 4530000080000000h
-RWD32 dq 4530000080100000h ; 1.93428223e+25 -
-; Total bytes of code 53, prolog size 3, PerfScore 21.00, instruction count 9, allocated bytes for code 53 (MethodHash=19e884fa) for method System.Numerics.Tensors.TensorPrimitives+ConvertInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector128`1[long]):System.Runtime.Intrinsics.Vector128`1[double] (FullOpts)+; Total bytes of code 21, prolog size 3, PerfScore 10.00, instruction count 4, allocated bytes for code 21 (MethodHash=19e884fa) for method System.Numerics.Tensors.TensorPrimitives+ConvertInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector128`1[long]):System.Runtime.Intrinsics.Vector128`1[double] (FullOpts) ; ============================================================
1[ulong]):System.Runtime.Intrinsics.Vector256
1double@@ -5,40 +5,26 @@
; esp based frame
; partially interruptible
; No matching PGO data-; 0 inlinees with PGO data; 0 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.Runtime.Intrinsics.Vector256`1[ulong]>
-;* V02 loc0 [V02 ] ( 0, 0 ) simd32 -> zero-ref "Inline return value spill temp" <System.Runtime.Intrinsics.Vector256`1[double]>
-;* V03 tmp1 [V03 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[uint]>
-;* V04 tmp2 [V04 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[ulong]>
-;* V05 tmp3 [V05 ] ( 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.Runtime.Intrinsics.Vector256`1[ulong]> ;
; Lcl frame size = 0
G_M42853_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_M42853_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_M42853_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=0172589a) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector256`1[ulong]):System.Runtime.Intrinsics.Vector256`1[double] (FullOpts)+; Total bytes of code 24, prolog size 3, PerfScore 11.00, instruction count 5, allocated bytes for code 24 (MethodHash=0172589a) for method System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector256`1[ulong]):System.Runtime.Intrinsics.Vector256`1[double] (FullOpts) ; ============================================================
@@ -10,28 +10,25 @@
;
; V00 arg0 [V00,T01] ( 4, 4 ) int -> esi single-def
; V01 arg1 [V01,T00] ( 4, 4 ) ref -> ebx class-hnd single-def <System.__Canon[]>-; V02 arg2 [V02,T08] ( 3, 2 ) int -> [ebp+0x10] single-def
-; V03 arg3 [V03,T06] ( 4, 3 ) int -> [ebp+0x0C] single-def
-; V04 TypeCtx [V04,T07] ( 3, 2.20) int -> [ebp+0x08] single-def+; V02 arg2 [V02,T05] ( 3, 2 ) int -> [ebp+0x10] single-def
+; V03 arg3 [V03,T04] ( 4, 3 ) int -> [ebp+0x0C] single-def
+; V04 TypeCtx [V04,T02] ( 4, 4 ) int -> [ebp+0x08] single-def ; V05 loc0 [V05 ] ( 2, 2 ) struct ( 8) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[System.__Canon]>
; V06 loc1 [V06 ] ( 3, 6 ) struct ( 8) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V08 tmp2 [V08 ] ( 3, 6 ) struct ( 8) [ebp-0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V09 tmp3 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"-; V10 tmp4 [V10,T05] ( 2, 4 ) int -> edx "spilling helperCall"+; V10 tmp4 [V10,T03] ( 2, 4 ) int -> edx "spilling helperCall" ; V11 tmp5 [V11 ] ( 2, 2 ) byref -> [ebp-0x18] do-not-enreg[X] addr-exposed "field V05._reference (fldOffset=0x0)" P-DEP
; V12 tmp6 [V12 ] ( 2, 2 ) int -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V05._length (fldOffset=0x4)" P-DEP
; V13 tmp7 [V13 ] ( 3, 6 ) byref -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V06._reference (fldOffset=0x0)" P-DEP
; V14 tmp8 [V14 ] ( 3, 6 ) int -> [ebp-0x1C] do-not-enreg[X] addr-exposed "field V06._length (fldOffset=0x4)" P-DEP
; V15 tmp9 [V15 ] ( 3, 6 ) byref -> [ebp-0x28] do-not-enreg[X] addr-exposed "field V08._reference (fldOffset=0x0)" P-DEP
; V16 tmp10 [V16 ] ( 3, 6 ) int -> [ebp-0x24] do-not-enreg[X] addr-exposed "field V08._length (fldOffset=0x4)" P-DEP-; V17 tmp11 [V17,T09] ( 2, 0 ) ref -> edx single-def "argument with side effect"
-; V18 tmp12 [V18,T10] ( 2, 0 ) ref -> edx single-def "argument with side effect"
-; V19 cse0 [V19,T03] ( 4, 4 ) int -> [ebp-0x2C] spill-single-def "CSE - aggressive"
-; V20 rat0 [V20,T04] ( 3, 4 ) int -> registers "runtime lookup"
-; V21 rat1 [V21,T02] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"+; V17 tmp11 [V17,T06] ( 2, 0 ) ref -> edx single-def "argument with side effect"
+; V18 tmp12 [V18,T07] ( 2, 0 ) ref -> edx single-def "argument with side effect" ;-; Lcl frame size = 32+; Lcl frame size = 28
G_M25615_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -39,7 +36,7 @@ G_M25615_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx- sub esp, 32+ sub esp, 28 vxorps xmm4, xmm4, xmm4
vmovdqu xmmword ptr [ebp-0x28], xmm4
xor eax, eax
@@ -50,9 +47,9 @@ G_M25615_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov esi, ecx
mov ebx, edx
; gcrRegs +[ebx]- mov edi, dword ptr [ebp+0x0C]+ mov edi, dword ptr [ebp+0x08] ;; size=39 bbWeight=1 PerfScore 13.58-G_M25615_IG02: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz+G_M25615_IG02: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref mov ecx, ebx
; gcrRegs +[ecx]
mov edx, 0xD1FFAB1E
@@ -60,25 +57,22 @@ G_M25615_IG02: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
call [<unknown method>]
; gcrRegs -[ecx edx]
test esi, esi- je G_M25615_IG06+ je G_M25615_IG04 cmp dword ptr [ebp+0x10], 0- jl G_M25615_IG07
- test edi, edi
- jl G_M25615_IG08+ jl G_M25615_IG05
+ mov edx, dword ptr [ebp+0x0C]
+ test edx, edx
+ jl G_M25615_IG06 xor ecx, ecx
mov dword ptr [ebp-0x20], ecx
mov dword ptr [ebp-0x1C], ecx- mov ecx, dword ptr [ebp+0x08]
- mov edx, dword ptr [ecx+0x20]
- mov edx, dword ptr [edx+0x08]
- test edx, edx
- je SHORT G_M25615_IG05
- ;; size=60 bbWeight=1 PerfScore 17.50
-G_M25615_IG03: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref
- mov dword ptr [ebp+0x0C], edi
- push edi
- mov dword ptr [ebp-0x2C], edx+ mov dword ptr [ebp+0x0C], edx push edx+ mov dword ptr [ebp+0x08], edi
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ push eax lea ecx, [ebp-0x20]
mov edx, esi
call [System.Span`1[System.__Canon]:.ctor(uint,int):this]
@@ -93,21 +87,26 @@ G_M25615_IG03: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000
mov dword ptr [ebp-0x24], ecx
push dword ptr [ebp+0x10]
push dword ptr [ebp+0x0C]- push dword ptr [ebp-0x2C]+ mov ecx, dword ptr [ebp+0x08]
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ; byrRegs -[esi edi]
+ push eax lea ecx, [ebp-0x28]
mov edx, ebx
; gcrRegs +[edx]
call [System.Span`1[System.__Canon]:.ctor(System.__Canon[],int,int):this]
; gcrRegs -[edx ebx]- ; byrRegs -[esi edi]
- mov ebx, dword ptr [ebp-0x2C]
- mov edx, ebx+ mov ecx, dword ptr [ebp+0x08]
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov edx, eax push dword ptr [ebp-0x24]
push bword ptr [ebp-0x28]
lea ecx, [ebp-0x18]
call [System.Span`1[System.__Canon]:CopyTo(System.Span`1[System.__Canon]):this]- ;; size=75 bbWeight=1 PerfScore 26.50
-G_M25615_IG04: ; bbWeight=1, epilog, nogc, extend+ ;; size=158 bbWeight=1 PerfScore 43.75
+G_M25615_IG03: ; bbWeight=1, epilog, nogc, extend lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -115,18 +114,10 @@ G_M25615_IG04: ; bbWeight=1, epilog, nogc, extend
pop ebp
ret 12
;; size=10 bbWeight=1 PerfScore 4.50-G_M25615_IG05: ; bbWeight=0.20, gcVars=00000000 {}, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs +[ebx]
- mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- jmp SHORT G_M25615_IG03
- ;; size=14 bbWeight=0.20 PerfScore 0.70
-G_M25615_IG06: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[ebx]+G_M25615_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref mov ecx, 0x346C
mov edx, 0xD1FFAB1E- call CORINFO_HELP_STRCNS+ call CORINFO_HELP_NEWARR_1_ALIGN8 ; gcrRegs +[eax]
mov ecx, eax
; gcrRegs +[ecx]
@@ -134,10 +125,10 @@ G_M25615_IG06: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
; gcrRegs -[eax ecx]
int3
;; size=24 bbWeight=0 PerfScore 0.00-G_M25615_IG07: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref+G_M25615_IG05: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref mov ecx, 0x2A10
mov edx, 0xD1FFAB1E- call CORINFO_HELP_STRCNS+ call CORINFO_HELP_NEWARR_1_ALIGN8 ; gcrRegs +[eax]
mov edx, eax
; gcrRegs +[edx]
@@ -146,19 +137,20 @@ G_M25615_IG07: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
; gcrRegs -[eax edx]
int3
;; size=27 bbWeight=0 PerfScore 0.00-G_M25615_IG08: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref+G_M25615_IG06: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov dword ptr [ebp+0x0C], edx mov ecx, 381
mov edx, 0xD1FFAB1E- call CORINFO_HELP_STRCNS+ call CORINFO_HELP_NEWARR_1_ALIGN8 ; gcrRegs +[eax]
mov edx, eax
; gcrRegs +[edx]- mov ecx, edi+ mov ecx, dword ptr [ebp+0x0C] call [System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)]
; gcrRegs -[eax edx]
int3 - ;; size=26 bbWeight=0 PerfScore 0.00+ ;; size=30 bbWeight=0 PerfScore 0.00 -; Total bytes of code 275, prolog size 32, PerfScore 62.78, instruction count 89, allocated bytes for code 275 (MethodHash=6f309bf0) for method System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)+; Total bytes of code 288, prolog size 32, PerfScore 61.83, instruction count 90, allocated bytes for code 288 (MethodHash=6f309bf0) for method System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts) ; ============================================================
1[int]](System.Collections.Generic.IEnumerator
1[System.Collections.Generic.KeyValuePair`2[System.Canon,System.Nullable1[int]]],System.Collections.Generic.IEnumerator
1[System.Collections.Generic.KeyValuePair2[System.__Canon,System.Nullable
1[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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -17,39 +17,24 @@ G_M45405_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_M45405_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_M45405_IG04
- ;; size=12 bbWeight=1 PerfScore 7.00
-G_M45405_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_M45405_IG05
- ;; size=14 bbWeight=0.80 PerfScore 6.40
-G_M45405_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref+G_M45405_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_M45405_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref push dword ptr [ebp-0x0C]
xor ecx, ecx
; gcrRegs +[ecx]
mov edx, 2
call [<unknown method>]
; gcrRegs -[ecx] +[eax]- ;; size=16 bbWeight=1 PerfScore 4.50
-G_M45405_IG06: ; bbWeight=1, epilog, nogc, extend+ ;; size=32 bbWeight=1 PerfScore 7.75
+G_M45405_IG03: ; bbWeight=1, epilog, nogc, extend mov esp, ebp
pop ebp
ret
;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 74, prolog size 9, PerfScore 23.80, instruction count 25, allocated bytes for code 74 (MethodHash=839d4ea2) for method Microsoft.Extensions.DependencyInjection.ServiceDescriptor:Transient[System.__Canon,System.__Canon]():Microsoft.Extensions.DependencyInjection.ServiceDescriptor (Tier0)+; Total bytes of code 48, prolog size 9, PerfScore 13.00, instruction count 16, allocated bytes for code 48 (MethodHash=839d4ea2) for method Microsoft.Extensions.DependencyInjection.ServiceDescriptor:Transient[System.__Canon,System.__Canon]():Microsoft.Extensions.DependencyInjection.ServiceDescriptor (Tier0) ; ============================================================
1[ubyte]](System.String):System.Nullable
1[ubyte]:this (Tier0)@@ -9,19 +9,18 @@
; V01 arg1 [V01 ] ( 1, 1 ) ref -> [ebp-0x08] do-not-enreg[] class-hnd <System.String>
; V02 loc0 [V02 ] ( 1, 1 ) ref -> [ebp-0x0C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <<unknown class>>
; V03 loc1 [V03 ] ( 1, 1 ) struct ( 4) [ebp-0x10] do-not-enreg[S] must-init ld-addr-op <System.Nullable`1[ubyte]>-; V04 tmp0 [V04 ] ( 1, 1 ) struct ( 4) [ebp-0x14] do-not-enreg[XS] addr-exposed "pseudo return buffer" <System.Nullable`1[ubyte]>
-; V05 tmp1 [V05 ] ( 1, 1 ) ref -> [ebp-0x18] do-not-enreg[] must-init "argument with side effect"+; V04 tmp0 [V04 ] ( 1, 1 ) ref -> [ebp-0x14] do-not-enreg[] must-init "argument with side effect" ;-; Lcl frame size = 24+; Lcl frame size = 20
G_M29704_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG
push ebp
mov ebp, esp- sub esp, 24+ sub esp, 20 xor eax, eax
mov dword ptr [ebp-0x0C], eax
mov dword ptr [ebp-0x10], eax- mov dword ptr [ebp-0x18], eax+ mov dword ptr [ebp-0x14], eax mov gword ptr [ebp-0x04], ecx
mov gword ptr [ebp-0x08], edx
;; size=23 bbWeight=1 PerfScore 6.75
@@ -29,11 +28,11 @@ G_M29704_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov eax, gword ptr [ebp-0x04]
; gcrRegs +[eax]
mov eax, gword ptr [eax+0x04]- mov gword ptr [ebp-0x18], eax+ mov gword ptr [ebp-0x14], eax lea eax, [ebp-0x0C]
; gcrRegs -[eax]
push eax- mov ecx, gword ptr [ebp-0x18]+ mov ecx, gword ptr [ebp-0x14] ; gcrRegs +[ecx]
mov edx, gword ptr [ebp-0x08]
; gcrRegs +[edx]
@@ -42,12 +41,15 @@ G_M29704_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
; gcrRegs -[ecx edx]
test eax, eax
je SHORT G_M29704_IG04- push gword ptr [ebp-0x0C]
- lea ecx, [ebp-0x14]
- mov edx, 0xD1FFAB1E ; System.Nullable`1[ubyte]
- call CORINFO_HELP_UNBOX_NULLABLE
- mov eax, dword ptr [ebp-0x14]
- ;; size=50 bbWeight=1 PerfScore 18.50+ mov edx, gword ptr [ebp-0x0C]
+ ; gcrRegs +[edx]
+ mov ecx, 0xD1FFAB1E ; System.Nullable`1[ubyte]
+ call CORINFO_HELP_UNBOX
+ ; gcrRegs -[edx]
+ ; byrRegs +[eax]
+ movzx eax, word ptr [eax]
+ ; byrRegs -[eax]
+ ;; size=47 bbWeight=1 PerfScore 19.00 G_M29704_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp
pop ebp
@@ -63,6 +65,6 @@ G_M29704_IG05: ; bbWeight=1, epilog, nogc, extend
ret
;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 90, prolog size 17, PerfScore 30.75, instruction count 33, allocated bytes for code 90 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)+; Total bytes of code 87, prolog size 17, PerfScore 31.25, instruction count 32, allocated bytes for code 87 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0) ; ============================================================
@@ -9,26 +9,26 @@
; 0 inlinees with PGO data; 3 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.00) 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.00) int -> edx single-def ; V02 arg2 [V02,T11] ( 2, 1.00) int -> ecx single-def
; V03 arg3 [V03,T12] ( 2, 1.00) int -> ebx single-def
; V04 arg4 [V04,T13] ( 2, 1.00) int -> [ebp+0x10] single-def
; V05 arg5 [V05,T14] ( 1, 1 ) int -> [ebp+0x0C] single-def
; V06 arg6 [V06,T10] ( 3, 1.03) int -> edi single-def-; V07 loc0 [V07,T05] ( 10, 4.00) 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.02) 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,T08] ( 2, 2 ) int -> ebx "field V15.m_pStringHeap (fldOffset=0x0)" P-INDEP
-; V17 tmp8 [V17,T09] ( 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.00) 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.02) 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,T08] ( 2, 2 ) int -> ebx "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP
+; V15 tmp6 [V15,T09] ( 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
@@ -47,7 +47,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
;; size=20 bbWeight=1 PerfScore 7.75
G_M33863_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
test ecx, ecx- jne G_M33863_IG13+ jne G_M33863_IG12 ;; size=8 bbWeight=1 PerfScore 1.25
G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ebp+0x10]
@@ -58,7 +58,7 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
xor ebx, ebx
; gcrRegs +[ebx]
cmp edi, 5- jne SHORT G_M33863_IG11+ jne SHORT G_M33863_IG10 ;; size=22 bbWeight=1 PerfScore 6.50
G_M33863_IG04: ; bbWeight=0.99, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[ebx]
@@ -77,29 +77,20 @@ G_M33863_IG05: ; 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+0x14]
- test edx, edx
- je SHORT G_M33863_IG10
- ;; size=14 bbWeight=1 PerfScore 9.25
-G_M33863_IG06: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
- mov eax, ebx
- ; gcrRegs +[eax]+ mov eax, dword ptr [edx+0x14] test eax, eax
je SHORT G_M33863_IG09- ;; size=6 bbWeight=1 PerfScore 1.50
-G_M33863_IG07: ; bbWeight=0.50, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, byref, isz
- cmp dword ptr [eax], edx
- je SHORT G_M33863_IG09
- ;; size=4 bbWeight=0.50 PerfScore 2.00
-G_M33863_IG08: ; bbWeight=0.25, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[eax]
- mov ecx, edx+ ;; size=14 bbWeight=1 PerfScore 9.25
+G_M33863_IG06: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ mov ecx, eax
+ ;; size=2 bbWeight=0.80 PerfScore 0.20
+G_M33863_IG07: ; 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_IG09: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc+ ;; size=7 bbWeight=1 PerfScore 1.25
+G_M33863_IG08: ; bbWeight=1, epilog, nogc, extend lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -107,23 +98,23 @@ G_M33863_IG09: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=0000
pop ebp
ret 20
;; size=10 bbWeight=1 PerfScore 4.50-G_M33863_IG10: ; bbWeight=0.20, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz+G_M33863_IG09: ; bbWeight=0.20, gcVars=00000000 {}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz ; gcrRegs -[eax] +[ebx]
mov edx, 0xD1FFAB1E ; global ptr- call CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov edx, eax
- jmp SHORT G_M33863_IG06+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
+ mov ecx, eax
+ jmp SHORT G_M33863_IG07 ;; size=14 bbWeight=0.20 PerfScore 0.70-G_M33863_IG11: ; bbWeight=0.01, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref+G_M33863_IG10: ; bbWeight=0.01, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref cmp edi, 6- ja G_M33863_IG18+ ja G_M33863_IG17 lea ecx, [@RWD00]
mov ecx, dword ptr [ecx+4*edi]
lea eax, G_M33863_IG02
add ecx, eax
jmp ecx
;; size=28 bbWeight=0.01 PerfScore 0.10-G_M33863_IG12: ; bbWeight=0.01, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz+G_M33863_IG11: ; bbWeight=0.01, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz ; gcrRegs -[ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -136,7 +127,7 @@ G_M33863_IG12: ; bbWeight=0.01, gcrefRegs=00000040 {esi}, byrefRegs=00000
; gcrRegs +[ebx]
jmp SHORT G_M33863_IG05
;; size=21 bbWeight=0.01 PerfScore 0.08-G_M33863_IG13: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref+G_M33863_IG12: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref ; gcrRegs -[eax ebx]
mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
@@ -149,7 +140,7 @@ G_M33863_IG13: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000
; gcrRegs -[eax ecx]
jmp G_M33863_IG03
;; size=23 bbWeight=0.00 PerfScore 0.04-G_M33863_IG14: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref+G_M33863_IG13: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
push dword ptr [ebp-0x18]
@@ -161,7 +152,7 @@ G_M33863_IG14: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000
; gcrRegs +[ebx]
jmp G_M33863_IG05
;; size=24 bbWeight=0.00 PerfScore 0.02-G_M33863_IG15: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref+G_M33863_IG14: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -174,7 +165,7 @@ G_M33863_IG15: ; bbWeight=0.00, gcrefRegs=00000040 {esi}, byrefRegs=00000
; gcrRegs +[ebx]
jmp G_M33863_IG05
;; size=24 bbWeight=0.00 PerfScore 0.01-G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {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]
@@ -187,7 +178,7 @@ G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs +[ebx]
jmp G_M33863_IG05
;; size=24 bbWeight=0 PerfScore 0.00-G_M33863_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref+G_M33863_IG16: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref ; gcrRegs -[eax ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -200,7 +191,7 @@ G_M33863_IG17: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs +[ebx]
jmp G_M33863_IG05
;; size=24 bbWeight=0 PerfScore 0.00-G_M33863_IG18: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref+G_M33863_IG17: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref ; gcrRegs -[eax]
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
@@ -208,7 +199,7 @@ G_M33863_IG18: ; bbWeight=0, gcrefRegs=00000048 {ebx esi}, byrefRegs=0000
; gcrRegs -[ecx]
jmp G_M33863_IG05
;; size=16 bbWeight=0 PerfScore 0.00-G_M33863_IG19: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref+G_M33863_IG18: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref ; gcrRegs -[ebx]
push dword ptr [ebp-0x10]
push dword ptr [ebp-0x14]
@@ -221,15 +212,15 @@ G_M33863_IG19: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs +[ebx]
jmp G_M33863_IG05
;; size=24 bbWeight=0 PerfScore 0.00-RWD00 dd G_M33863_IG14 - G_M33863_IG02
- dd G_M33863_IG12 - G_M33863_IG02
- dd G_M33863_IG19 - G_M33863_IG02+RWD00 dd G_M33863_IG13 - G_M33863_IG02
+ dd G_M33863_IG11 - G_M33863_IG02
+ dd G_M33863_IG18 - G_M33863_IG02
+ dd G_M33863_IG14 - G_M33863_IG02 dd G_M33863_IG15 - G_M33863_IG02- dd G_M33863_IG16 - G_M33863_IG02 dd G_M33863_IG04 - G_M33863_IG02- dd G_M33863_IG17 - G_M33863_IG02+ dd G_M33863_IG16 - G_M33863_IG02
-; Total bytes of code 334, prolog size 9, PerfScore 40.49, instruction count 109, allocated bytes for code 334 (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 324, prolog size 9, PerfScore 38.06, instruction count 104, allocated bytes for code 324 (MethodHash=14bb7bb8) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1) ; ============================================================
@@ -70,19 +70,24 @@ G_M22456_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
;; size=14 bbWeight=1 PerfScore 5.25
G_M22456_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax]- push gword ptr [ebp-0x1C]
- lea ecx, [ebp-0x08]
- mov edx, 0xD1FFAB1E ; System.Nullable`1[ubyte]
- call CORINFO_HELP_UNBOX_NULLABLE+ mov edx, gword ptr [ebp-0x1C]
+ ; gcrRegs +[edx]
+ mov ecx, 0xD1FFAB1E ; System.Nullable`1[ubyte]
+ call CORINFO_HELP_UNBOX
+ ; gcrRegs -[edx]
+ ; byrRegs +[eax]
+ mov ax, word ptr [eax]
+ ; byrRegs -[eax]
+ mov word ptr [ebp-0x08], ax lea ecx, [ebp-0x08]
call [<unknown method>]- ;; size=25 bbWeight=1 PerfScore 6.25+ ;; size=29 bbWeight=1 PerfScore 8.75 G_M22456_IG06: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp
pop ebp
ret
;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 140, prolog size 23, PerfScore 47.33, instruction count 44, allocated bytes for code 140 (MethodHash=12a7a847) for method System.PlatformDetection+<>c:<.cctor>b__509_5():ubyte:this (Tier0)+; Total bytes of code 144, prolog size 23, PerfScore 49.83, instruction count 45, allocated bytes for code 144 (MethodHash=12a7a847) for method System.PlatformDetection+<>c:<.cctor>b__509_5():ubyte:this (Tier0) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
3[int,int,System.__Canon]]():System.Collections.Immutable.ImmutableArray
1+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) ; ============================================================
1[System.__Canon]:AddDiagnostics[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo
1[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...
1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray
1[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) ; ============================================================
@@ -10,105 +10,103 @@
;
;* V00 arg0 [V00 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>-; V02 TypeCtx [V02,T00] ( 5, 3.68) int -> ecx single-def+; V02 TypeCtx [V02,T00] ( 8, 6 ) int -> esi single-def ;* V03 loc0 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V05 tmp2 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp3 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
;* V07 tmp4 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V08 tmp5 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"-; V09 tmp6 [V09,T03] ( 3, 2 ) ref -> esi single-def "field V00.array (fldOffset=0x0)" P-INDEP
-; V10 tmp7 [V10,T04] ( 3, 2 ) ref -> edi single-def "field V01.array (fldOffset=0x0)" P-INDEP
-; V11 tmp8 [V11,T06] ( 2, 2 ) int -> edx "argument with side effect"
-; V12 rat0 [V12,T05] ( 3, 2 ) int -> edx "runtime lookup"
-; V13 rat1 [V13,T01] ( 3, 2.80) int -> edx "spilling expr"
-; V14 rat2 [V14,T02] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"+; V09 tmp6 [V09,T01] ( 3, 2 ) ref -> edi single-def "field V00.array (fldOffset=0x0)" P-INDEP
+; V10 tmp7 [V10,T03] ( 3, 1.50) ref -> ebx single-def "field V01.array (fldOffset=0x0)" P-INDEP
+; V11 tmp8 [V11,T02] ( 2, 2 ) int -> edx "argument with side effect" ;
; Lcl frame size = 4
-G_M51000_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG+G_M51000_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 push eax- mov dword ptr [ebp-0x0C], ecx
- mov esi, gword ptr [ebp+0x0C]
- ; gcrRegs +[esi]
- mov edi, gword ptr [ebp+0x08]+ mov dword ptr [ebp-0x10], ecx
+ mov esi, ecx
+ mov edi, gword ptr [ebp+0x0C] ; gcrRegs +[edi]- ;; size=15 bbWeight=1 PerfScore 7.25
-G_M51000_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov eax, esi
- ; gcrRegs +[eax]
- or eax, edi
- ; gcrRegs -[eax]+ mov ebx, gword ptr [ebp+0x08]
+ ; gcrRegs +[ebx]
+ ;; size=18 bbWeight=1 PerfScore 8.50
+G_M51000_IG02: ; bbWeight=1, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ test edi, edi
+ jne SHORT G_M51000_IG05
+ ;; size=16 bbWeight=1 PerfScore 2.75
+G_M51000_IG03: ; bbWeight=0.50, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ test ebx, ebx jne SHORT G_M51000_IG05- ;; size=6 bbWeight=1 PerfScore 1.50
-G_M51000_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[esi edi] mov eax, 1- ;; size=5 bbWeight=0.50 PerfScore 0.12+ ;; size=21 bbWeight=0.50 PerfScore 1.50 G_M51000_IG04: ; bbWeight=0.50, epilog, nogc, extend
pop ecx+ pop ebx pop esi
pop edi
pop ebp
ret 8- ;; size=7 bbWeight=0.50 PerfScore 2.00
-G_M51000_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs +[esi edi]+ ;; size=8 bbWeight=0.50 PerfScore 2.25
+G_M51000_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY xor eax, eax- test esi, esi
- sete al
- xor edx, edx test edi, edi- sete dl
- cmp eax, edx+ sete al
+ xor ecx, ecx
+ test ebx, ebx
+ sete cl
+ cmp eax, ecx je SHORT G_M51000_IG07
xor eax, eax- ;; size=20 bbWeight=0.50 PerfScore 2.25+ ;; size=44 bbWeight=0.50 PerfScore 3.75 G_M51000_IG06: ; bbWeight=0.50, epilog, nogc, extend
pop ecx+ pop ebx pop esi
pop edi
pop ebp
ret 8- ;; size=7 bbWeight=0.50 PerfScore 2.00
-G_M51000_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- mov edx, dword ptr [ecx+0x20]
- cmp dword ptr [edx+0x04], 12
- jle SHORT G_M51000_IG10
- ;; size=9 bbWeight=0.50 PerfScore 3.00
-G_M51000_IG08: ; bbWeight=0.40, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov edx, dword ptr [edx+0x0C]
- test edx, edx
- je SHORT G_M51000_IG10
- ;; size=7 bbWeight=0.40 PerfScore 1.30
-G_M51000_IG09: ; bbWeight=0.32, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M51000_IG11
- ;; size=2 bbWeight=0.32 PerfScore 0.64
-G_M51000_IG10: ; bbWeight=0.18, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- ;; size=12 bbWeight=0.18 PerfScore 0.27
-G_M51000_IG11: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- push esi+ ;; size=8 bbWeight=0.50 PerfScore 2.25
+G_M51000_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, gcvars, byref push edi+ push ebx
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ; gcrRegs -[ebx edi]
+ mov edx, eax xor ecx, ecx
; gcrRegs +[ecx]
call [System.Linq.ImmutableArrayExtensions:SequenceEqual[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte]- ; gcrRegs -[ecx esi edi]
- ;; size=10 bbWeight=0.50 PerfScore 2.62
-G_M51000_IG12: ; bbWeight=0.50, epilog, nogc, extend+ ; gcrRegs -[ecx]
+ ;; size=24 bbWeight=0.50 PerfScore 3.50
+G_M51000_IG08: ; bbWeight=0.50, epilog, nogc, extend pop ecx+ pop ebx pop esi
pop edi
pop ebp
ret 8- ;; size=7 bbWeight=0.50 PerfScore 2.00+ ;; size=8 bbWeight=0.50 PerfScore 2.25 -; Total bytes of code 107, prolog size 9, PerfScore 24.96, instruction count 50, allocated bytes for code 107 (MethodHash=d02338c7) for method Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol+TupleExtraData:<EqualsIgnoringTupleUnderlyingType>g__areEqual|20_0[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):ubyte (FullOpts)+; Total bytes of code 147, prolog size 10, PerfScore 26.75, instruction count 62, allocated bytes for code 147 (MethodHash=d02338c7) for method Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol+TupleExtraData:<EqualsIgnoringTupleUnderlyingType>g__areEqual|20_0[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):ubyte (FullOpts) ; ============================================================
@@ -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) ; ============================================================
2[System.__Canon,int]]():System.Collections.Generic.IEnumerable
1[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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
@@ -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) ; ============================================================
Collection | Contexts with diffs | Improvements | Regressions | Same size | Improvements (bytes) | Regressions (bytes) |
---|---|---|---|---|---|---|
benchmarks.run.windows.x86.checked.mch | 84 | 78 | 3 | 3 | -3,176 | +188 |
benchmarks.run_pgo.windows.x86.checked.mch | 656 | 655 | 1 | 0 | -12,360 | +178 |
benchmarks.run_tiered.windows.x86.checked.mch | 183 | 181 | 2 | 0 | -9,694 | +182 |
coreclr_tests.run.windows.x86.checked.mch | 2 | 2 | 0 | 0 | -84 | +0 |
libraries.crossgen2.windows.x86.checked.mch | 0 | 0 | 0 | 0 | -0 | +0 |
libraries.pmi.windows.x86.checked.mch | 294 | 288 | 6 | 0 | -6,261 | +562 |
libraries_tests.run.windows.x86.Release.mch | 128 | 127 | 1 | 0 | -9,061 | +4 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch | 106 | 93 | 12 | 1 | -4,005 | +194 |
realworld.run.windows.x86.checked.mch | 164 | 163 | 1 | 0 | -6,219 | +71 |
1,617 | 1,587 | 26 | 4 | -50,860 | +1,379 |
Collection | Diffed contexts | MinOpts | FullOpts | Missed, base | Missed, diff |
---|---|---|---|---|---|
benchmarks.run.windows.x86.checked.mch | 2,849 | 2 | 2,847 | 70 (0.90%) | 4,501 (58.11%) |
benchmarks.run_pgo.windows.x86.checked.mch | 12,413 | 7,971 | 4,442 | 963 (3.83%) | 12,315 (49.02%) |
benchmarks.run_tiered.windows.x86.checked.mch | 8,811 | 6,152 | 2,659 | 55 (0.37%) | 5,773 (38.54%) |
coreclr_tests.run.windows.x86.checked.mch | 318 | 3 | 315 | 1 (0.02%) | 5,856 (89.13%) |
libraries.crossgen2.windows.x86.checked.mch | 8,169 | 10 | 8,159 | 5 (0.04%) | 2,939 (25.55%) |
libraries.pmi.windows.x86.checked.mch | 12,857 | 0 | 12,857 | 18 (0.08%) | 10,518 (44.25%) |
libraries_tests.run.windows.x86.Release.mch | 3,389 | 2,472 | 917 | 103 (1.23%) | 4,571 (54.70%) |
librariestestsnotieredcompilation.run.windows.x86.Release.mch | 3,729 | 0 | 3,729 | 130 (1.29%) | 5,939 (59.01%) |
realworld.run.windows.x86.checked.mch | 4,075 | 0 | 4,075 | 77 (0.52%) | 10,417 (69.97%) |
56,610 | 16,610 | 40,000 | 1,422 (1.16%) | 62,829 (51.08%) |
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: 294269 (overridden on cmd)
Total bytes of diff: 291281 (overridden on cmd)
Total bytes of delta: -2988 (-1.02 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
178 : 4798.dasm (59.53 % of base)
6 : 4551.dasm (2.76 % of base)
4 : 4856.dasm (5.26 % of base)
Top file improvements (bytes):
-388 : 4474.dasm (-28.20 % of base)
-247 : 7344.dasm (-29.55 % of base)
-157 : 236.dasm (-35.52 % of base)
-147 : 238.dasm (-29.82 % of base)
-142 : 578.dasm (-36.60 % of base)
-107 : 6616.dasm (-37.41 % of base)
-99 : 461.dasm (-21.85 % of base)
-93 : 201.dasm (-28.01 % of base)
-77 : 3344.dasm (-29.28 % of base)
-77 : 7314.dasm (-27.30 % of base)
-64 : 2774.dasm (-26.78 % of base)
-60 : 7310.dasm (-23.62 % of base)
-56 : 2773.dasm (-28.72 % of base)
-56 : 232.dasm (-29.02 % of base)
-56 : 7133.dasm (-29.02 % of base)
-52 : 3055.dasm (-30.06 % of base)
-52 : 3256.dasm (-29.38 % of base)
-48 : 3066.dasm (-26.52 % of base)
-43 : 3218.dasm (-20.00 % of base)
-42 : 679.dasm (-14.14 % of base)
63 total files with Code Size differences (60 improved, 3 regressed), 3 unchanged.
Top method regressions (bytes):
178 (59.53 % of base) : 4798.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (FullOpts)
6 (2.76 % of base) : 4551.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)
4 (5.26 % of base) : 4856.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
Top method improvements (bytes):
-388 (-28.20 % of base) : 4474.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (FullOpts)
-247 (-29.55 % of base) : 7344.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) : 578.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
-107 (-37.41 % of base) : 6616.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
-99 (-21.85 % of base) : 461.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) : 7314.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (FullOpts)
-77 (-29.28 % of base) : 3344.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) : 2774.dasm - ProtoBuf.ProtoReader+State:ReadAsRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (FullOpts)
-60 (-23.62 % of base) : 7310.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) : 2773.dasm - ProtoBuf.ProtoReader+State:DeserializeRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (FullOpts)
-56 (-29.02 % of base) : 7133.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) : 3256.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) : 3055.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (FullOpts)
-48 (-26.52 % of base) : 3066.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) : 3218.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
-42 (-14.14 % of base) : 679.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 regressions (percentages):
178 (59.53 % of base) : 4798.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (FullOpts)
4 (5.26 % of base) : 4856.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
6 (2.76 % of base) : 4551.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 (percentages):
-107 (-37.41 % of base) : 6616.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
-142 (-36.60 % of base) : 578.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) : 6800.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (FullOpts)
-32 (-32.00 % of base) : 2456.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (FullOpts)
-52 (-30.06 % of base) : 3055.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) : 7344.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) : 3256.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) : 3344.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) : 7133.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) : 2773.dasm - ProtoBuf.ProtoReader+State:DeserializeRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (FullOpts)
-30 (-28.57 % of base) : 3057.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (FullOpts)
-30 (-28.30 % of base) : 5028.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
-388 (-28.20 % of base) : 4474.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (FullOpts)
-30 (-28.04 % of base) : 5891.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) : 5011.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (FullOpts)
-77 (-27.30 % of base) : 7314.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (FullOpts)
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: 1606515 (overridden on cmd)
Total bytes of diff: 1594333 (overridden on cmd)
Total bytes of delta: -12182 (-0.76 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
178 : 10926.dasm (59.53 % of base)
Top file improvements (bytes):
-388 : 12023.dasm (-28.01 % of base)
-300 : 601.dasm (-45.52 % of base)
-296 : 1640.dasm (-46.98 % of base)
-258 : 606.dasm (-36.24 % of base)
-258 : 1541.dasm (-38.62 % of base)
-258 : 30217.dasm (-36.24 % of base)
-247 : 6448.dasm (-29.51 % of base)
-241 : 10620.dasm (-44.06 % of base)
-228 : 12021.dasm (-43.18 % of base)
-216 : 9730.dasm (-38.64 % of base)
-216 : 3805.dasm (-40.45 % of base)
-204 : 3369.dasm (-41.98 % of base)
-182 : 1336.dasm (-27.53 % of base)
-178 : 9218.dasm (-43.20 % of base)
-148 : 8755.dasm (-35.92 % of base)
-140 : 9222.dasm (-34.83 % of base)
-140 : 528.dasm (-31.96 % of base)
-140 : 6298.dasm (-33.18 % of base)
-140 : 8427.dasm (-26.72 % of base)
-128 : 1624.dasm (-33.68 % of base)
70 total files with Code Size differences (69 improved, 1 regressed), 0 unchanged.
Top method regressions (bytes):
178 (59.53 % of base) : 10926.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
Top method improvements (bytes):
-388 (-28.01 % of base) : 12023.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (Tier0-FullOpts)
-300 (-45.52 % of base) : 601.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) : 1640.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-258 (-36.24 % of base) : 606.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-258 (-36.24 % of base) : 30217.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-258 (-38.62 % of base) : 1541.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) : 6448.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.06 % of base) : 10620.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][] (Tier0)
-228 (-43.18 % of base) : 12021.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
-216 (-40.45 % of base) : 3805.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.64 % of base) : 9730.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) : 3369.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) : 1336.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-178 (-43.20 % of base) : 9218.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)
-148 (-35.92 % of base) : 8755.dasm - ProtoBuf.ProtoReader+State:ReadAsRoot[System.__Canon](System.__Canon,ProtoBuf.Serializers.ISerializer`1[System.__Canon]):System.__Canon:this (Tier0)
-140 (-26.72 % of base) : 8427.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (Tier0)
-140 (-33.18 % of base) : 6298.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
-140 (-34.83 % of base) : 9222.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (Tier0)
-140 (-31.96 % of base) : 528.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) : 1624.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)
Top method regressions (percentages):
178 (59.53 % of base) : 10926.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
Top method improvements (percentages):
-296 (-46.98 % of base) : 1640.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-102 (-46.15 % of base) : 25801.dasm - System.Collections.Immutable.ImmutableQueue:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (Tier0)
-300 (-45.52 % of base) : 601.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-241 (-44.06 % of base) : 10620.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][] (Tier0)
-178 (-43.20 % of base) : 9218.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) : 12021.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
-64 (-42.95 % of base) : 8178.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializer[System.__Canon]():ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
-64 (-42.67 % of base) : 3203.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) : 3915.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
-204 (-41.98 % of base) : 3369.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.56 % of base) : 24404.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.__Canon](int):ProtoBuf.Serializers.ISerializer`1[System.__Canon]:this (Tier0)
-64 (-41.29 % of base) : 7330.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
-106 (-41.09 % of base) : 3804.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) : 3805.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) : 596.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) : 1626.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) : 3201.dasm - System.Linq.Enumerable:ToList[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.List`1[System.__Canon] (Tier0)
-216 (-38.64 % of base) : 9730.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) : 1541.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) : 17210.dasm - System.Text.Json.Serialization.Metadata.JsonMetadataServices:CreateIListInfo[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)
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: 688652 (overridden on cmd)
Total bytes of diff: 679140 (overridden on cmd)
Total bytes of delta: -9512 (-1.38 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
178 : 8508.dasm (59.53 % of base)
4 : 9492.dasm (5.26 % of base)
Top file improvements (bytes):
-388 : 5727.dasm (-28.20 % of base)
-300 : 559.dasm (-45.52 % of base)
-296 : 1485.dasm (-46.98 % of base)
-258 : 1372.dasm (-38.62 % of base)
-258 : 564.dasm (-36.24 % of base)
-254 : 13454.dasm (-35.98 % of base)
-247 : 13037.dasm (-29.55 % of base)
-228 : 5725.dasm (-43.18 % of base)
-216 : 10381.dasm (-38.78 % of base)
-216 : 1836.dasm (-40.45 % of base)
-204 : 5026.dasm (-41.98 % of base)
-182 : 1192.dasm (-27.53 % of base)
-178 : 13509.dasm (-43.20 % of base)
-147 : 4822.dasm (-29.82 % of base)
-142 : 1767.dasm (-36.60 % of base)
-140 : 13513.dasm (-34.83 % of base)
-140 : 5247.dasm (-33.18 % of base)
-140 : 489.dasm (-31.96 % of base)
-128 : 1469.dasm (-33.68 % of base)
-106 : 1835.dasm (-41.09 % of base)
81 total files with Code Size differences (79 improved, 2 regressed), 0 unchanged.
Top method regressions (bytes):
178 (59.53 % of base) : 8508.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
4 (5.26 % of base) : 9492.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
Top method improvements (bytes):
-388 (-28.20 % of base) : 5727.dasm - System.SpanHelpers:SequenceEqual[System.__Canon](byref,byref,int):ubyte (Tier0-FullOpts)
-300 (-45.52 % of base) : 559.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) : 1485.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-258 (-36.24 % of base) : 564.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-258 (-38.62 % of base) : 1372.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) : 13454.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) : 13037.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) : 5725.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
-216 (-40.45 % of base) : 1836.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) : 10381.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) : 5026.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) : 1192.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-178 (-43.20 % of base) : 13509.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)
-147 (-29.82 % of base) : 4822.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier1)
-142 (-36.60 % of base) : 1767.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
-140 (-33.18 % of base) : 5247.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier0)
-140 (-34.83 % of base) : 13513.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.IEnumerable,byref):ubyte (Tier0)
-140 (-31.96 % of base) : 489.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) : 1469.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) : 2925.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier0)
Top method regressions (percentages):
178 (59.53 % of base) : 8508.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
4 (5.26 % of base) : 9492.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
Top method improvements (percentages):
-296 (-46.98 % of base) : 1485.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-64 (-46.72 % of base) : 7476.dasm - System.Collections.Generic.EnumerableHelpers:GetEmptyEnumerator[System.__Canon]():System.Collections.Generic.IEnumerator`1[System.__Canon] (Tier0)
-300 (-45.52 % of base) : 559.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-178 (-43.20 % of base) : 13509.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) : 5725.dasm - System.MemoryExtensions:SequenceEqual[System.__Canon](System.Span`1[System.__Canon],System.ReadOnlySpan`1[System.__Canon]):ubyte (Tier0)
-64 (-42.67 % of base) : 3259.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) : 6347.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
-204 (-41.98 % of base) : 5026.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) : 13311.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](byref,System.Text.Json.JsonSerializerOptions):System.__Canon (Tier0)
-64 (-41.29 % of base) : 13280.dasm - System.Text.Json.JsonSerializer:Serialize[System.__Canon](System.__Canon,System.Text.Json.JsonSerializerOptions):System.String (Tier0)
-106 (-41.09 % of base) : 1835.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) : 1836.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) : 8187.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) : 554.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) : 1471.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) : 3257.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) : 10381.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) : 1372.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) : 10171.dasm - System.Text.Json.Serialization.Metadata.JsonMetadataServices:CreateIListInfo[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.32 % of base) : 3601.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)
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: 52457 (overridden on cmd)
Total bytes of diff: 52373 (overridden on cmd)
Total bytes of delta: -84 (-0.16 % of base)
diff is an improvement.
relative diff is an improvement.
Top file improvements (bytes):
-42 : 718.dasm (-14.14 % of base)
-42 : 480.dasm (-14.14 % of base)
2 total files with Code Size differences (2 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-42 (-14.14 % of base) : 718.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-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) : 718.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-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)
2 total methods with Code Size differences (2 improved, 0 regressed).
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: 1544756 (overridden on cmd)
Total bytes of diff: 1539057 (overridden on cmd)
Total bytes of delta: -5699 (-0.37 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
475 : 6086.dasm (101.93 % of base)
36 : 4127.dasm (13.74 % of base)
24 : 22553.dasm (9.52 % of base)
13 : 9872.dasm (4.73 % of base)
8 : 9870.dasm (4.15 % of base)
6 : 4093.dasm (4.17 % of base)
Top file improvements (bytes):
-110 : 13595.dasm (-80.88 % of base)
-110 : 13591.dasm (-80.88 % of base)
-77 : 4280.dasm (-30.92 % of base)
-77 : 4089.dasm (-30.92 % of base)
-76 : 24206.dasm (-28.68 % of base)
-66 : 26054.dasm (-29.20 % of base)
-61 : 25974.dasm (-25.52 % of base)
-59 : 24222.dasm (-21.00 % of base)
-56 : 26058.dasm (-27.05 % of base)
-51 : 11873.dasm (-30.54 % of base)
-50 : 6152.dasm (-9.86 % of base)
-48 : 22812.dasm (-30.19 % of base)
-48 : 23282.dasm (-35.82 % of base)
-47 : 4294.dasm (-25.41 % of base)
-46 : 4155.dasm (-15.92 % of base)
-46 : 4194.dasm (-15.92 % of base)
-46 : 4204.dasm (-15.92 % of base)
-46 : 4174.dasm (-15.92 % of base)
-46 : 4184.dasm (-15.92 % of base)
-45 : 22245.dasm (-22.84 % of base)
85 total files with Code Size differences (79 improved, 6 regressed), 0 unchanged.
Top method regressions (bytes):
475 (101.93 % of base) : 6086.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) : 4127.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) : 22553.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) : 9872.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
8 (4.15 % of base) : 9870.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
6 (4.17 % of base) : 4093.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):
-110 (-80.88 % of base) : 13595.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector512`1[long]):System.Runtime.Intrinsics.Vector512`1[double] (FullOpts)
-110 (-80.88 % of base) : 13591.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector512`1[ulong]):System.Runtime.Intrinsics.Vector512`1[double] (FullOpts)
-77 (-30.92 % of base) : 4089.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) : 4280.dasm - System.Numerics.Vector:SquareRoot[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
-76 (-28.68 % of base) : 24206.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-66 (-29.20 % of base) : 26054.dasm - Microsoft.FSharp.Primitives.Basics.List:transpose[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
-61 (-25.52 % of base) : 25974.dasm - Microsoft.FSharp.Primitives.Basics.List:scan[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon,Microsoft.FSharp.Collections.FSharpList`1[System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
-59 (-21.00 % of base) : 24222.dasm - Microsoft.FSharp.Collections.SeqModule:SumBy$W[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Nullable`1[int]],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.Nullable`1[int]]],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Nullable`1[int] (FullOpts)
-56 (-27.05 % of base) : 26058.dasm - Microsoft.FSharp.Primitives.Basics.List:truncate[System.__Canon](int,Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
-51 (-30.54 % of base) : 11873.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) : 6152.dasm - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendEnum>g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte (FullOpts)
-48 (-30.19 % of base) : 22812.dasm - Microsoft.FSharp.Collections.ArrayModule:groupByValueType[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]],System.__Canon[]):System.__Canon[] (FullOpts)
-48 (-35.82 % of base) : 23282.dasm - Microsoft.FSharp.Collections.ArrayModule+Parallel:SortDescending[System.__Canon](System.__Canon[]):System.__Canon[] (FullOpts)
-47 (-25.41 % of base) : 4294.dasm - System.Numerics.Vector:Sum[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
-46 (-15.92 % of base) : 4155.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) : 4174.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) : 4184.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) : 4194.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) : 4204.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) : 22245.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)
Top method regressions (percentages):
475 (101.93 % of base) : 6086.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) : 4127.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) : 22553.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) : 9872.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](int,System.__Canon[],int,int) (FullOpts)
6 (4.17 % of base) : 4093.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) : 9870.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
Top method improvements (percentages):
-110 (-80.88 % of base) : 13595.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector512`1[long]):System.Runtime.Intrinsics.Vector512`1[double] (FullOpts)
-110 (-80.88 % of base) : 13591.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector512`1[ulong]):System.Runtime.Intrinsics.Vector512`1[double] (FullOpts)
-32 (-60.38 % of base) : 13593.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector128`1[long]):System.Runtime.Intrinsics.Vector128`1[double] (FullOpts)
-32 (-60.38 % of base) : 13589.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector128`1[ulong]):System.Runtime.Intrinsics.Vector128`1[double] (FullOpts)
-32 (-57.14 % of base) : 13594.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector256`1[long]):System.Runtime.Intrinsics.Vector256`1[double] (FullOpts)
-32 (-57.14 % of base) : 13590.dasm - System.Numerics.Tensors.TensorPrimitives+ConvertUInt64ToDouble:Invoke(System.Runtime.Intrinsics.Vector256`1[ulong]):System.Runtime.Intrinsics.Vector256`1[double] (FullOpts)
-32 (-57.14 % of base) : 4131.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[long]):System.Numerics.Vector`1[double] (FullOpts)
-32 (-57.14 % of base) : 4132.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[ulong]):System.Numerics.Vector`1[double] (FullOpts)
-26 (-39.39 % of base) : 3548.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)
-48 (-35.82 % of base) : 23282.dasm - Microsoft.FSharp.Collections.ArrayModule+Parallel:SortDescending[System.__Canon](System.__Canon[]):System.__Canon[] (FullOpts)
-44 (-35.20 % of base) : 3932.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
-42 (-33.60 % of base) : 23742.dasm - Microsoft.FSharp.Collections.ListModule:FindBack[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon (FullOpts)
-14 (-33.33 % of base) : 25530.dasm - Microsoft.FSharp.Collections.ComparisonIdentity:NonStructural[System.__Canon]():System.Collections.Generic.IComparer`1[System.__Canon] (FullOpts)
-14 (-33.33 % of base) : 25566.dasm - Microsoft.FSharp.Collections.HashIdentity:NonStructural[System.__Canon]():System.Collections.Generic.IEqualityComparer`1[System.__Canon] (FullOpts)
-30 (-33.33 % of base) : 4301.dasm - System.Numerics.Vector:ToScalar[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
-14 (-32.56 % of base) : 22732.dasm - Microsoft.FSharp.Collections.ArrayModule:Empty[System.__Canon]():System.__Canon[] (FullOpts)
-32 (-32.32 % of base) : 22478.dasm - Microsoft.FSharp.Collections.MapTreeModule:toList[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
-32 (-32.32 % of base) : 20122.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) : 23224.dasm - Microsoft.FSharp.Collections.ArrayModule+Parallel:valueFactory@2231[System.__Canon]():System.Func`2[System.__Canon,System.__Canon] (FullOpts)
-30 (-32.26 % of base) : 23228.dasm - Microsoft.FSharp.Collections.ArrayModule+Parallel:valueFactory@2231-1[System.__Canon]():System.Func`2[System.__Canon,System.__Canon] (FullOpts)
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: 377767 (overridden on cmd)
Total bytes of diff: 368710 (overridden on cmd)
Total bytes of delta: -9057 (-2.40 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
4 : 2018.dasm (2.86 % of base)
Top file improvements (bytes):
-300 : 29.dasm (-45.45 % of base)
-300 : 3475.dasm (-45.45 % of base)
-296 : 3480.dasm (-46.84 % of base)
-296 : 36.dasm (-46.84 % of base)
-288 : 2528.dasm (-31.10 % of base)
-258 : 151.dasm (-38.62 % of base)
-258 : 1769.dasm (-36.24 % of base)
-258 : 3591.dasm (-38.62 % of base)
-241 : 3597.dasm (-44.14 % of base)
-241 : 3958.dasm (-44.14 % of base)
-241 : 157.dasm (-44.46 % of base)
-241 : 520.dasm (-44.46 % of base)
-216 : 7410.dasm (-40.45 % of base)
-204 : 2320.dasm (-41.98 % of base)
-182 : 1798.dasm (-27.53 % of base)
-151 : 7223.dasm (-26.03 % of base)
-146 : 7045.dasm (-37.24 % of base)
-140 : 1708.dasm (-31.96 % of base)
-128 : 1813.dasm (-33.68 % of base)
-106 : 7409.dasm (-41.09 % of base)
74 total files with Code Size differences (73 improved, 1 regressed), 0 unchanged.
Top method regressions (bytes):
4 (2.86 % of base) : 2018.dasm - System.PlatformDetection+<>c:<.cctor>b__509_5():ubyte:this (Tier0)
Top method improvements (bytes):
-300 (-45.45 % of base) : 29.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) : 3475.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) : 3480.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-296 (-46.84 % of base) : 36.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-288 (-31.10 % of base) : 2528.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.24 % of base) : 1769.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-258 (-38.62 % of base) : 151.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) : 3591.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)
-241 (-44.14 % of base) : 3958.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) : 520.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) : 3597.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) : 157.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-216 (-40.45 % of base) : 7410.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) : 2320.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) : 1798.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (Tier0)
-151 (-26.03 % of base) : 7223.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)
-146 (-37.24 % of base) : 7045.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
-140 (-31.96 % of base) : 1708.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (Tier0)
-128 (-33.68 % of base) : 1813.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 (-41.09 % of base) : 7409.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
Top method regressions (percentages):
4 (2.86 % of base) : 2018.dasm - System.PlatformDetection+<>c:<.cctor>b__509_5():ubyte:this (Tier0)
Top method improvements (percentages):
-296 (-46.84 % of base) : 3480.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-296 (-46.84 % of base) : 36.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-300 (-45.45 % of base) : 29.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) : 3475.dasm - System.Linq.Enumerable:Skip[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-241 (-44.46 % of base) : 520.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) : 157.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-241 (-44.14 % of base) : 3958.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) : 3597.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier0)
-64 (-43.54 % of base) : 6792.dasm - Xunit.Assert:Equal[System.__Canon](System.__Canon,System.__Canon) (Tier0)
-64 (-43.54 % of base) : 7261.dasm - Xunit.Assert:Equal[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]) (Tier0)
-64 (-43.24 % of base) : 6680.dasm - Xunit.Assert:Single[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (Tier0)
-64 (-42.67 % of base) : 1955.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`1[System.__Canon] (Tier0)
-204 (-41.98 % of base) : 2320.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier0)
-102 (-41.98 % of base) : 3454.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
-102 (-41.98 % of base) : 16.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (Tier0)
-102 (-41.46 % of base) : 6661.dasm - System.Linq.Enumerable:Reverse[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-106 (-41.09 % of base) : 7409.dasm - System.Linq.Enumerable:Take[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-64 (-40.51 % of base) : 2568.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]:AwaitUnsafeOnCompleted[System.Runtime.CompilerServices.TaskAwaiter`1[System.__Canon],Xunit.Sdk.TestAssemblyRunner`1+<RunAsync>d__41[System.__Canon]](byref,byref,byref) (Tier0)
-216 (-40.45 % of base) : 7410.dasm - System.Linq.Enumerable:TakeIterator[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):System.Collections.Generic.IEnumerable`1[System.__Canon] (Tier0)
-64 (-40.25 % of base) : 2001.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier0)
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: 293271 (overridden on cmd)
Total bytes of diff: 289460 (overridden on cmd)
Total bytes of delta: -3811 (-1.30 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
48 : 6179.dasm (11.29 % of base)
40 : 10482.dasm (37.38 % of base)
21 : 10876.dasm (7.27 % of base)
21 : 10422.dasm (6.77 % of base)
14 : 3323.dasm (7.69 % of base)
10 : 3412.dasm (5.29 % of base)
10 : 6727.dasm (3.00 % of base)
8 : 6297.dasm (17.02 % of base)
8 : 6717.dasm (3.86 % of base)
6 : 69.dasm (2.75 % of base)
5 : 1413.dasm (7.04 % of base)
3 : 3059.dasm (1.27 % of base)
Top file improvements (bytes):
-288 : 967.dasm (-31.14 % of base)
-247 : 3127.dasm (-29.55 % of base)
-224 : 3486.dasm (-19.44 % of base)
-157 : 9.dasm (-35.52 % of base)
-151 : 734.dasm (-26.03 % of base)
-147 : 428.dasm (-29.82 % of base)
-142 : 12.dasm (-36.60 % of base)
-135 : 3134.dasm (-21.70 % of base)
-122 : 3376.dasm (-29.54 % of base)
-107 : 2235.dasm (-37.41 % of base)
-102 : 4596.dasm (-22.72 % of base)
-99 : 441.dasm (-21.85 % of base)
-97 : 6295.dasm (-21.04 % of base)
-93 : 594.dasm (-28.27 % of base)
-77 : 2178.dasm (-27.30 % of base)
-77 : 826.dasm (-29.28 % of base)
-66 : 6234.dasm (-26.51 % of base)
-64 : 9027.dasm (-35.36 % of base)
-64 : 150.dasm (-19.51 % of base)
-60 : 2757.dasm (-27.40 % of base)
67 total files with Code Size differences (55 improved, 12 regressed), 1 unchanged.
Top method regressions (bytes):
48 (11.29 % of base) : 6179.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)
40 (37.38 % of base) : 10482.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol+TupleExtraData:<EqualsIgnoringTupleUnderlyingType>g__areEqual|20_0[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):ubyte (FullOpts)
21 (7.27 % of base) : 10876.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveMethodsNotDeclaredStatic[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
21 (6.77 % of base) : 10422.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveStaticInstanceMismatches[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte) (FullOpts)
14 (7.69 % of base) : 3323.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) : 6727.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) : 3412.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) : 6717.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) : 6297.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (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) : 1413.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) : 3059.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
Top method improvements (bytes):
-288 (-31.14 % of base) : 967.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) : 3127.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) : 3486.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)
-151 (-26.03 % of base) : 734.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)
-142 (-36.60 % of base) : 12.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
-135 (-21.70 % of base) : 3134.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) : 3376.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
-107 (-37.41 % of base) : 2235.dasm - System.Linq.Enumerable:TryGetSpan[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):ubyte (FullOpts)
-102 (-22.72 % of base) : 4596.dasm - Roslyn.Utilities.EnumerableExtensions:IsEmpty[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):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)
-97 (-21.04 % of base) : 6295.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)
-77 (-27.30 % of base) : 2178.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (FullOpts)
-77 (-29.28 % of base) : 826.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
-66 (-26.51 % of base) : 6234.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
-64 (-19.51 % of base) : 150.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)
-64 (-35.36 % of base) : 9027.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (FullOpts)
-60 (-27.40 % of base) : 2757.dasm - System.Linq.Enumerable:SelectMany[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
Top method regressions (percentages):
40 (37.38 % of base) : 10482.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol+TupleExtraData:<EqualsIgnoringTupleUnderlyingType>g__areEqual|20_0[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):ubyte (FullOpts)
8 (17.02 % of base) : 6297.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) : 6179.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) : 3323.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
21 (7.27 % of base) : 10876.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveMethodsNotDeclaredStatic[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
5 (7.04 % of base) : 1413.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
21 (6.77 % of base) : 10422.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveStaticInstanceMismatches[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte) (FullOpts)
10 (5.29 % of base) : 3412.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) : 6717.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) : 6727.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.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) : 3059.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
Top method improvements (percentages):
-107 (-37.41 % of base) : 2235.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)
-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)
-64 (-35.36 % of base) : 9027.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon):ubyte (FullOpts)
-14 (-32.56 % of base) : 2554.dasm - System.Linq.Enumerable:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
-42 (-32.06 % of base) : 4428.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) : 967.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) : 2312.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) : 3235.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)
-147 (-29.82 % of base) : 428.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
-247 (-29.55 % of base) : 3127.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) : 3376.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
-77 (-29.28 % of base) : 826.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
-14 (-29.17 % of base) : 7191.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:Cast[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
-30 (-28.57 % of base) : 561.dasm - System.Linq.Enumerable:SetCountAndGetSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon],int):System.Span`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)
-30 (-28.04 % of base) : 1001.dasm - System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]:AwaitUnsafeOnCompleted[System.Runtime.CompilerServices.TaskAwaiter`1[System.__Canon],Xunit.Sdk.TestAssemblyRunner`1+<RunAsync>d__41[System.__Canon]](byref,byref,byref) (FullOpts)
-14 (-28.00 % of base) : 4657.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:AsImmutable[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
-60 (-27.40 % of base) : 2757.dasm - System.Linq.Enumerable:SelectMany[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
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: 517918 (overridden on cmd)
Total bytes of diff: 511770 (overridden on cmd)
Total bytes of delta: -6148 (-1.19 % of base)
diff is an improvement.
relative diff is an improvement.
Top file regressions (bytes):
71 : 7812.dasm (12.28 % of base)
Top file improvements (bytes):
-247 : 3889.dasm (-29.98 % of base)
-157 : 1822.dasm (-35.52 % of base)
-157 : 237.dasm (-35.52 % of base)
-147 : 1824.dasm (-29.82 % of base)
-147 : 239.dasm (-29.82 % of base)
-146 : 10612.dasm (-26.31 % of base)
-142 : 5500.dasm (-36.60 % of base)
-142 : 579.dasm (-36.60 % of base)
-130 : 11298.dasm (-36.11 % of base)
-128 : 9316.dasm (-26.50 % of base)
-125 : 10614.dasm (-21.22 % of base)
-111 : 9555.dasm (-21.22 % of base)
-102 : 9282.dasm (-25.19 % of base)
-100 : 10218.dasm (-24.45 % of base)
-99 : 5450.dasm (-21.85 % of base)
-99 : 7606.dasm (-24.94 % of base)
-99 : 462.dasm (-21.85 % of base)
-93 : 1787.dasm (-28.01 % of base)
-93 : 202.dasm (-28.01 % of base)
-90 : 12285.dasm (-20.50 % of base)
80 total files with Code Size differences (79 improved, 1 regressed), 0 unchanged.
Top method regressions (bytes):
71 (12.28 % of base) : 7812.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) : 3889.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) : 1822.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) : 237.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) : 1824.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) : 10612.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) : 5500.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):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)
-130 (-36.11 % of base) : 11298.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) : 9316.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) : 10614.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) : 9555.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) : 9282.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) : 10218.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) : 7606.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) : 5450.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):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) : 1787.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)
-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) : 12285.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)
Top method regressions (percentages):
71 (12.28 % of base) : 7812.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) : 5500.dasm - System.Linq.Enumerable:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):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)
-63 (-36.21 % of base) : 9758.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) : 11298.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) : 1822.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) : 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) : 11265.dasm - Microsoft.FSharp.Collections.SeqModule:Empty[System.__Canon]():System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
-14 (-32.56 % of base) : 13709.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) : 6638.dasm - System.Collections.Immutable.ImmutableArray:CreateBuilder[System.__Canon]():System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon] (FullOpts)
-69 (-30.26 % of base) : 10608.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) : 3889.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) : 1824.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) : 10083.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)
-30 (-29.13 % of base) : 12413.dasm - Microsoft.FSharp.Collections.SetTreeModule:current[System.__Canon](Microsoft.FSharp.Collections.SetTreeModule+SetIterator`1[System.__Canon]):System.__Canon (FullOpts)
-32 (-29.09 % of base) : 8559.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) : 1818.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 (-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) : 10004.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) : 11379.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)