Assembly Diffs
linux arm
Diffs are based on 104,582 contexts (34,422 MinOpts, 70,160 FullOpts).
MISSED contexts: base: 2,785 (1.74%), diff: 52,364 (32.62%)
Overall (+7,880 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run.linux.arm.checked.mch |
1,221,696 |
+798 |
benchmarks.run_pgo.linux.arm.checked.mch |
2,429,618 |
-5,282 |
benchmarks.run_tiered.linux.arm.checked.mch |
2,096,812 |
+492 |
coreclr_tests.run.linux.arm.checked.mch |
405,476 |
+218 |
libraries.pmi.linux.arm.checked.mch |
1,144,640 |
+4,704 |
libraries_tests.run.linux.arm.Release.mch |
939,238 |
+810 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
894,282 |
+2,676 |
realworld.run.linux.arm.checked.mch |
3,364,120 |
+3,464 |
MinOpts (-226 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run_pgo.linux.arm.checked.mch |
1,196,190 |
-152 |
benchmarks.run_tiered.linux.arm.checked.mch |
1,501,706 |
-126 |
coreclr_tests.run.linux.arm.checked.mch |
295,394 |
+92 |
libraries_tests.run.linux.arm.Release.mch |
752,254 |
-40 |
FullOpts (+8,106 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run.linux.arm.checked.mch |
1,143,408 |
+798 |
benchmarks.run_pgo.linux.arm.checked.mch |
1,233,428 |
-5,130 |
benchmarks.run_tiered.linux.arm.checked.mch |
595,106 |
+618 |
coreclr_tests.run.linux.arm.checked.mch |
110,082 |
+126 |
libraries.pmi.linux.arm.checked.mch |
1,144,640 |
+4,704 |
libraries_tests.run.linux.arm.Release.mch |
186,984 |
+850 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
894,282 |
+2,676 |
realworld.run.linux.arm.checked.mch |
3,354,282 |
+3,464 |
Example diffs
benchmarks.run.linux.arm.checked.mch
-26 (-11.21%) : 2063.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
@@ -12,7 +12,7 @@
; V01 tmp1 [V01,T00] ( 8, 16 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
; V02 tmp2 [V02,T01] ( 8, 16 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
; V03 tmp3 [V03,T02] ( 8, 16 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
-; V04 cse0 [V04,T03] ( 4, 4 ) int -> r4 "CSE - aggressive"
+; V04 cse0 [V04,T03] ( 4, 4 ) ref -> r4 "CSE - aggressive"
; V05 cse1 [V05,T04] ( 4, 4 ) int -> r6 "CSE - aggressive"
;
; Lcl frame size = 4
@@ -22,14 +22,15 @@ G_M2338_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
add r11, sp, 16
;; size=8 bbWeight=1 PerfScore 2.00
G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movw r4, 0xd1ff
- movt r4, 0xd1ff
- mov r0, r4
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
- mov r5, r0
+ mov r4, r0
+ ; gcrRegs +[r4]
+ mov r5, r4
; gcrRegs +[r5]
movs r0, 0
; gcrRegs -[r0]
@@ -59,15 +60,9 @@ G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
- mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r5, r0
+ mov r5, r4
; gcrRegs +[r5]
movs r0, 0
- ; gcrRegs -[r0]
str r0, [r5+0x08]
movs r0, 4
dmb 15
@@ -91,15 +86,7 @@ G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
- mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r4, r0
- ; gcrRegs +[r4]
movs r0, 0
- ; gcrRegs -[r0]
str r0, [r4+0x08]
movs r0, 4
dmb 15
@@ -124,12 +111,12 @@ G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r4]
- ;; size=220 bbWeight=1 PerfScore 81.00
+ ;; size=194 bbWeight=1 PerfScore 72.00
G_M2338_IG03: ; bbWeight=1, epilog, nogc, extend
pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 232, prolog size 8, PerfScore 84.00, instruction count 84, allocated bytes for code 232 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
+; Total bytes of code 206, prolog size 8, PerfScore 75.00, instruction count 75, allocated bytes for code 206 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
; ============================================================
Unwind Info:
@@ -141,7 +128,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 116 (0x00074) Actual length = 232 (0x0000e8)
+ Function Length : 103 (0x00067) Actual length = 206 (0x0000ce)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
-26 (-9.29%) : 7492.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
@@ -13,8 +13,8 @@
; V02 tmp2 [V02,T02] ( 3, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <System.Security.Cryptography.X509Certificates.OpenSslCachedDirectoryStoreProvider>
; V03 tmp3 [V03,T03] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.Security.Cryptography.X509Certificates.OpenSslCachedDirectoryStoreProvider>
; V04 tmp4 [V04,T04] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
-; V05 cse0 [V05,T00] ( 6, 6 ) int -> r6 "CSE - aggressive"
-; V06 cse1 [V06,T05] ( 4, 4 ) int -> r4 "CSE - aggressive"
+; V05 cse0 [V05,T05] ( 4, 4 ) ref -> r4 "CSE - aggressive"
+; V06 cse1 [V06,T00] ( 6, 6 ) int -> r6 "CSE - aggressive"
; TEMP_01 ref -> [r11-0x14]
;
; Lcl frame size = 20
@@ -27,14 +27,15 @@ G_M27654_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x0C]
;; size=14 bbWeight=1 PerfScore 5.00
G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movw r4, 0xd1ff
- movt r4, 0xd1ff
- mov r0, r4
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
- mov r5, r0
+ mov r4, r0
+ ; gcrRegs +[r4]
+ mov r5, r4
; gcrRegs +[r5]
mov r0, r5
movw r1, 0xd1ff
@@ -53,14 +54,10 @@ G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
- mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r5, r0
+ mov r5, r4
; gcrRegs +[r5]
mov r0, r5
+ ; gcrRegs +[r0]
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
@@ -76,13 +73,7 @@ G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
; gcrRegs +[r0]
- mov r4, r0
- ; gcrRegs +[r4]
- mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
@@ -101,7 +92,7 @@ G_M27654_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]
mov r4, r0
; gcrRegs +[r4]
@@ -139,13 +130,13 @@ G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1]
- ;; size=260 bbWeight=1 PerfScore 86.00
+ ;; size=234 bbWeight=1 PerfScore 77.00
G_M27654_IG03: ; bbWeight=1, epilog, nogc, extend
add sp, 20
pop {r4,r5,r6,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 280, prolog size 14, PerfScore 93.00, instruction count 93, allocated bytes for code 280 (MethodHash=9e1993f9) for method System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
+; Total bytes of code 254, prolog size 14, PerfScore 84.00, instruction count 84, allocated bytes for code 254 (MethodHash=9e1993f9) for method System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
; ============================================================
Unwind Info:
@@ -157,7 +148,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 140 (0x0008c) Actual length = 280 (0x000118)
+ Function Length : 127 (0x0007f) Actual length = 254 (0x0000fe)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
-28 (-8.81%) : 8646.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute
@@ -8,21 +8,17 @@
; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4.50) ref -> r4 class-hnd single-def <System.Type>
-; V01 loc0 [V01,T04] ( 5, 4 ) ref -> r5 class-hnd single-def <System.Collections.Hashtable>
-; V02 loc1 [V02,T02] ( 7, 5 ) ref -> r7 class-hnd <System.Attribute[]>
-; V03 loc2 [V03,T11] ( 4, 1 ) ref -> [sp+0x00] class-hnd exact EH-live spill-single-def <System.Object>
+; V00 arg0 [V00,T00] ( 6, 4.50) ref -> r4 class-hnd single-def <System.Type>
+; V01 loc0 [V01,T02] ( 5, 4 ) ref -> r5 class-hnd single-def <System.Collections.Hashtable>
+; V02 loc1 [V02,T01] ( 7, 5 ) ref -> r7 class-hnd <System.Attribute[]>
+; V03 loc2 [V03,T07] ( 4, 1 ) ref -> [sp+0x00] class-hnd exact EH-live spill-single-def <System.Object>
; V04 loc3 [V04 ] ( 6, 2.50) ubyte -> [sp+0x04] do-not-enreg[X] addr-exposed ld-addr-op
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T03] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1"
-; V07 tmp2 [V07,T09] ( 3, 1.25) int -> r3 "fgMakeTemp is creating a new local variable"
-; V08 tmp3 [V08,T00] ( 5, 6.75) ref -> r7 class-hnd "spilling QMark2" <System.Attribute[]>
-; V09 tmp4 [V09,T07] ( 3, 2.25) ref -> r1 single-def "CASTCLASS eval op1"
-; V10 tmp5 [V10,T10] ( 3, 1.25) int -> r3 "fgMakeTemp is creating a new local variable"
-; V11 tmp6 [V11,T05] ( 5, 3.75) ref -> r7 class-hnd "spilling QMark2" <System.Attribute[]>
-; V12 tmp7 [V12,T08] ( 2, 2 ) ubyte -> r0 "Inlining Arg"
-; V13 PSPSym [V13,T12] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym"
-; V14 cse0 [V14,T06] ( 4, 3 ) int -> r6 "CSE - aggressive"
+; V06 tmp1 [V06,T06] ( 2, 2 ) ubyte -> r0 "Inlining Arg"
+; V07 tmp2 [V07,T03] ( 2, 4 ) ref -> r1 single-def "argument with side effect"
+; V08 tmp3 [V08,T05] ( 2, 2 ) ref -> r1 single-def "argument with side effect"
+; V09 PSPSym [V09,T08] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym"
+; V10 cse0 [V10,T04] ( 4, 3 ) int -> r6 "CSE - aggressive"
;
; Lcl frame size = 16
@@ -31,7 +27,7 @@ G_M8794_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
sub sp, 16
add r11, sp, 32
add r1, sp, 40
- str r1, [sp+0x0C] // [V13 PSPSym]
+ str r1, [sp+0x0C] // [V09 PSPSym]
mov r4, r0
; gcrRegs +[r4]
;; size=16 bbWeight=1 PerfScore 6.00
@@ -55,45 +51,29 @@ G_M8794_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
; gcr arg pop 0
mov r1, r0
; gcrRegs +[r1]
- mov r7, r1
- ; gcrRegs +[r7]
- cmp r7, 0
- beq SHORT G_M8794_IG05
- ;; size=34 bbWeight=1 PerfScore 15.00
-G_M8794_IG03: ; bbWeight=0.25, gcrefRegs=00B2 {r1 r4 r5 r7}, byrefRegs=0000 {}, byref, isz
+ movw r0, 0xd1ff
; gcrRegs -[r0]
- ldr r0, [r7]
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- cmp r0, r3
- beq SHORT G_M8794_IG05
- ;; size=14 bbWeight=0.25 PerfScore 1.25
-G_M8794_IG04: ; bbWeight=0.12, gcrefRegs=0032 {r1 r4 r5}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r7]
- mov r0, r3
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
mov r7, r0
; gcrRegs +[r7]
- ;; size=14 bbWeight=0.12 PerfScore 0.62
-G_M8794_IG05: ; bbWeight=1, gcrefRegs=00B0 {r4 r5 r7}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
cmp r7, 0
- beq SHORT G_M8794_IG08
- ;; size=4 bbWeight=1 PerfScore 2.00
-G_M8794_IG06: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r4-r5]
+ beq SHORT G_M8794_IG05
+ ;; size=52 bbWeight=1 PerfScore 20.00
+G_M8794_IG03: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[r0 r4-r5]
mov r0, r7
; gcrRegs +[r0]
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8794_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M8794_IG04: ; bbWeight=1, epilog, nogc, extend
add sp, 16
pop {r4,r5,r6,r7,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M8794_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
+G_M8794_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0 r7] +[r4-r5]
movw r1, 0xd1ff
movt r1, 0xd1ff
@@ -104,12 +84,12 @@ G_M8794_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}
movs r1, 0
str r1, [sp+0x04] // [V04 loc3]
;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M8794_IG09: ; bbWeight=0.50, gcVars=00000800 {V03}, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG06: ; bbWeight=0.50, gcVars=00000080 {V03}, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb r1, [sp+0x04] // [V04 loc3]
cmp r1, 0
- beq SHORT G_M8794_IG11
+ beq SHORT G_M8794_IG08
;; size=8 bbWeight=0.50 PerfScore 1.50
-G_M8794_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8794_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0 r4-r5]
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -118,7 +98,7 @@ G_M8794_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcr arg pop 0
bkpt
;; size=14 bbWeight=0 PerfScore 0.00
-G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r0 r4-r5]
add r1, sp, 4 // [V04 loc3]
movw r3, 0xd1ff
@@ -128,7 +108,7 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000
; gcr arg pop 0
ldrb r0, [sp+0x04] // [V04 loc3]
cmp r0, 0
- bne SHORT G_M8794_IG12
+ bne SHORT G_M8794_IG09
movw r0, 0xd1ff
movt r0, 0xd1ff
movw r1, 0xd1ff
@@ -139,7 +119,7 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000
blx r3 // <unknown method>
; gcr arg pop 0
;; size=48 bbWeight=0.50 PerfScore 7.50
-G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG09: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
mov r0, r5
; gcrRegs +[r0]
mov r1, r4
@@ -150,36 +130,19 @@ G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {},
; gcr arg pop 0
mov r1, r0
; gcrRegs +[r1]
- mov r7, r1
- ; gcrRegs +[r7]
- cmp r7, 0
- beq SHORT G_M8794_IG15
- ;; size=16 bbWeight=0.50 PerfScore 4.00
-G_M8794_IG13: ; bbWeight=0.25, gcrefRegs=00B2 {r1 r4 r5 r7}, byrefRegs=0000 {}, byref, isz
+ movw r0, 0xd1ff
; gcrRegs -[r0]
- ldr r0, [r7]
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- cmp r0, r3
- beq SHORT G_M8794_IG15
- ;; size=14 bbWeight=0.25 PerfScore 1.25
-G_M8794_IG14: ; bbWeight=0.12, gcrefRegs=0032 {r1 r4 r5}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r7]
- mov r0, r3
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
mov r7, r0
; gcrRegs +[r7]
- ;; size=14 bbWeight=0.12 PerfScore 0.62
-G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=00B0 {r4 r5 r7}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
cmp r7, 0
- bne SHORT G_M8794_IG16
+ bne SHORT G_M8794_IG10
mov r0, r4
- ; gcrRegs +[r0]
movw r1, 0xd1ff
movt r1, 0xd1ff
movs r2, 0
@@ -200,11 +163,11 @@ G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=00B0 {r4 r5 r7}, byrefRegs=0000
blx r3 // <unknown method>
; gcrRegs -[r0-r2 r4-r5]
; gcr arg pop 0
- ;; size=40 bbWeight=0.50 PerfScore 8.00
-G_M8794_IG16: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=70 bbWeight=0.50 PerfScore 13.50
+G_M8794_IG10: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
ldrb r0, [sp+0x04] // [V04 loc3]
cmp r0, 0
- beq SHORT G_M8794_IG06
+ beq SHORT G_M8794_IG03
ldr r0, [sp] // [V03 loc2]
; gcrRegs +[r0]
movw r3, 0xd1ff
@@ -213,33 +176,33 @@ G_M8794_IG16: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, by
blx r3 // <unknown method>
; gcrRegs -[r0]
; gcr arg pop 0
- b SHORT G_M8794_IG06
+ b SHORT G_M8794_IG03
;; size=22 bbWeight=0.50 PerfScore 4.00
-G_M8794_IG17: ; bbWeight=0, gcVars=00000800 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
+G_M8794_IG11: ; bbWeight=0, gcVars=00000080 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
; gcrRegs -[r7]
- ; GC ptr vars +{V03 V11}
+ ; GC ptr vars +{V03 V07}
push {r2,r3,r4,r5,r6,r7,r11,lr}
add r3, r11, 8
str r3, [sp+0x04]
;; size=10 bbWeight=0 PerfScore 0.00
-G_M8794_IG18: ; bbWeight=0, gcVars=00000800 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG12: ; bbWeight=0, gcVars=00000080 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb r0, [r11-0x1C] // [V04 loc3]
cmp r0, 0
- beq SHORT G_M8794_IG19
+ beq SHORT G_M8794_IG13
ldr r0, [r11-0x20] // [V03 loc2]
; gcrRegs +[r0]
movw r3, 0xd1ff
movt r3, 0xd1ff
- ; GC ptr vars -{V03 V11}
+ ; GC ptr vars -{V03 V07}
blx r3 // <unknown method>
; gcrRegs -[r0]
; gcr arg pop 0
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8794_IG19: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
+G_M8794_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 318, prolog size 16, PerfScore 57.75, instruction count 118, allocated bytes for code 318 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
+; Total bytes of code 290, prolog size 16, PerfScore 58.50, instruction count 104, allocated bytes for code 290 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
; ============================================================
Unwind Info:
@@ -251,7 +214,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 141 (0x0008d) Actual length = 282 (0x00011a)
+ Function Length : 127 (0x0007f) Actual length = 254 (0x0000fe)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -282,4 +245,4 @@ Unwind Info:
*************** EH table for System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[]
1 EH table entries, 0 duplicate clauses, 0 cloned finallys, 1 total EH entries reported to VM
-EH#0: try [G_M8794_IG09..G_M8794_IG16) handled by [G_M8794_IG17..END) (fault)
...
+32 (+20.00%) : 1452.dasm - System.Array:IndexOfSystem.__Canon:int (FullOpts)
@@ -8,11 +8,11 @@
; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) int -> r0 single-def
-; 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
+; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> r4 single-def
+; V01 arg0 [V01,T01] ( 5, 5 ) ref -> r5 class-hnd single-def <System.__Canon[]>
+; V02 arg1 [V02,T06] ( 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,T10] ( 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,95 @@
;* 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,T09] ( 3, 3 ) int -> r0 "CSE - aggressive"
+;* V17 rat0 [V17,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V18 rat1 [V18,T04] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable"
+; V19 rat2 [V19,T08] ( 3, 4 ) int -> r0 "runtime lookup"
+; V20 rat3 [V20,T05] ( 3, 5.60) int -> r0 "spilling expr"
+; V21 rat4 [V21,T07] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; 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]
- 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
- 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
+ push {r4,r5,r6,r7,r8,r11,lr}
+ sub sp, 20
+ add r11, sp, 40
+ str r0, [r11-0x1C]
+ mov r4, r0
+ mov r5, r1
+ ; gcrRegs +[r5]
+ 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=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ cmp r5, 0
+ beq SHORT G_M13831_IG10
+ ldr r0, [r5+0x04]
+ cmp r0, r6
+ blo SHORT G_M13831_IG11
+ subs r0, r0, r6
+ cmp r0, r8
+ blo SHORT G_M13831_IG12
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ bne SHORT G_M13831_IG04
;; 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
+G_M13831_IG03: ; bbWeight=0.20, gcrefRegs=00A0 {r5 r7}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.20 PerfScore 1.20
+G_M13831_IG04: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M13831_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ beq SHORT G_M13831_IG07
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M13831_IG08
+ ;; size=2 bbWeight=0.64 PerfScore 0.64
+G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 2.16
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
- mov r0, r1
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=00A0 {r5 r7}, byrefRegs=0000 {}, byref
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]
- mov r1, r4
+ str r8, [sp]
+ mov r1, r5
; 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 r5 r7]
+ ;; size=36 bbWeight=1 PerfScore 12.00
+G_M13831_IG09: ; 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_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -104,14 +120,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_IG11: ; 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_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -119,7 +135,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 192, prolog size 14, PerfScore 45.40, instruction count 71, allocated bytes for code 192 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================
Unwind Info:
@@ -131,7 +147,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 80 (0x00050) Actual length = 160 (0x0000a0)
+ Function Length : 96 (0x00060) Actual length = 192 (0x0000c0)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -139,7 +155,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
+28 (+22.58%) : 9872.dasm - System.Array:SortSystem.__Canon (FullOpts)
@@ -8,86 +8,102 @@
; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T01] ( 5, 4.36) int -> r0 single-def
-; V01 arg0 [V01,T00] ( 5, 5 ) ref -> r1 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T02] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> r4 single-def
+; V01 arg0 [V01,T01] ( 5, 5 ) ref -> r5 class-hnd single-def <System.__Canon[]>
+; V02 arg1 [V02,T02] ( 4, 4 ) ref -> r6 class-hnd single-def <System.Comparison`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[System.__Canon]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 tmp1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 4 ) int -> r6 "Inlining Arg"
-; V09 tmp5 [V09,T06] ( 2, 4 ) byref -> r5 single-def "Inlining Arg"
+; V08 tmp4 [V08,T08] ( 2, 4 ) int -> r5 "Inlining Arg"
+; V09 tmp5 [V09,T07] ( 2, 4 ) byref -> r7 single-def "Inlining Arg"
;* V10 tmp6 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V11 tmp7 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V12 tmp8 [V12 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
;* V13 tmp9 [V13 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x4)" P-INDEP
-; V14 tmp10 [V14,T09] ( 2, 2 ) byref -> r5 single-def "field V05._reference (fldOffset=0x0)" P-INDEP
-; V15 tmp11 [V15,T10] ( 2, 2 ) int -> r6 "field V05._length (fldOffset=0x4)" P-INDEP
-; V16 tmp12 [V16,T08] ( 2, 4 ) int -> r0 "argument with side effect"
-; V17 rat0 [V17,T05] ( 3, 4 ) int -> r0 "runtime lookup"
-; V18 rat1 [V18,T03] ( 3, 5.60) int -> r1 "spilling expr"
-; V19 rat2 [V19,T04] ( 3, 4.48) int -> r3 "fgMakeTemp is creating a new local variable"
+; V14 tmp10 [V14,T10] ( 2, 2 ) byref -> r7 single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+; V15 tmp11 [V15,T11] ( 2, 2 ) int -> r5 "field V05._length (fldOffset=0x4)" P-INDEP
+; V16 tmp12 [V16,T09] ( 2, 4 ) int -> r0 "argument with side effect"
+;* V17 rat0 [V17,T12] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V18 rat1 [V18,T03] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable"
+; V19 rat2 [V19,T06] ( 3, 4 ) int -> r0 "runtime lookup"
+; V20 rat3 [V20,T04] ( 3, 5.60) int -> r0 "spilling expr"
+; V21 rat4 [V21,T05] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M37190_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 r0, [r11-0x14]
- mov r4, r2
- ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M37190_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs +[r1]
- cmp r1, 0
- beq SHORT G_M37190_IG08
- cmp r4, 0
- beq SHORT G_M37190_IG09
- add r5, r1, 8
- ; byrRegs +[r5]
- ldr r6, [r1+0x04]
- ldr r1, [r0+0x20]
- ; gcrRegs -[r1]
- ldr r3, [r1+0x04]
- cmp r3, 12
- ble SHORT G_M37190_IG05
- ;; size=22 bbWeight=1 PerfScore 10.00
-G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
- ldr r3, [r1+0x0C]
- cmp r3, 0
- beq SHORT G_M37190_IG05
- ;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
- mov r0, r3
- b SHORT G_M37190_IG06
- ;; size=4 bbWeight=0.64 PerfScore 1.28
-G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref
+ mov r4, r0
+ mov r5, r1
+ ; gcrRegs +[r5]
+ mov r6, r2
+ ; gcrRegs +[r6]
+ ;; size=18 bbWeight=1 PerfScore 6.00
+G_M37190_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
+ cmp r5, 0
+ beq SHORT G_M37190_IG10
+ cmp r6, 0
+ beq SHORT G_M37190_IG11
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ bne SHORT G_M37190_IG04
+ ;; size=16 bbWeight=1 PerfScore 8.00
+G_M37190_IG03: ; bbWeight=0.20, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref
+ mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
- ;; size=18 bbWeight=0.36 PerfScore 1.80
-G_M37190_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref
- mov r1, r5
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.20 PerfScore 1.20
+G_M37190_IG04: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
+ add r7, r5, 8
+ ; byrRegs +[r7]
+ ldr r5, [r5+0x04]
+ ; gcrRegs -[r5]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M37190_IG07
+ ;; size=14 bbWeight=1 PerfScore 6.00
+G_M37190_IG05: ; bbWeight=0.80, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ beq SHORT G_M37190_IG07
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M37190_IG06: ; bbWeight=0.64, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref, isz
+ b SHORT G_M37190_IG08
+ ;; size=2 bbWeight=0.64 PerfScore 0.64
+G_M37190_IG07: ; bbWeight=0.36, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M37190_IG08: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref
+ mov r1, r7
; byrRegs +[r1]
- mov r2, r6
- mov r3, r4
+ mov r2, r5
+ mov r3, r6
; gcrRegs +[r3]
movw lr, 0xd1ff
movt lr, 0xd1ff
ldr lr, [lr]
blx lr // <unknown method>
- ; gcrRegs -[r3-r4]
- ; byrRegs -[r1 r5]
+ ; gcrRegs -[r3 r6]
+ ; byrRegs -[r1 r7]
;; size=20 bbWeight=1 PerfScore 7.00
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend
- add sp, 12
- pop {r4,r5,r6,r11,pc}
- ;; size=6 bbWeight=1 PerfScore 2.00
-G_M37190_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M37190_IG09: ; bbWeight=1, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
+G_M37190_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -95,7 +111,7 @@ G_M37190_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
blx r3 // System.ThrowHelper:ThrowArgumentNullException(int)
bkpt
;; size=16 bbWeight=0 PerfScore 0.00
-G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M37190_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 29
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -104,7 +120,7 @@ G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
bkpt
;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 124, prolog size 14, PerfScore 29.48, instruction count 46, allocated bytes for code 124 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
+; Total bytes of code 152, prolog size 12, PerfScore 34.40, instruction count 56, allocated bytes for code 152 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
; ============================================================
Unwind Info:
@@ -116,7 +132,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 62 (0x0003e) Actual length = 124 (0x00007c)
+ Function Length : 76 (0x0004c) Actual length = 152 (0x000098)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -124,7 +140,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- 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
+40 (+33.90%) : 2728.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -8,92 +8,117 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T00] ( 7, 4.20) int -> r0 single-def
-; V01 arg0 [V01,T01] ( 4, 3 ) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 9, 4.88) int -> r4 single-def
+; V01 arg0 [V01,T01] ( 4, 3 ) int -> r5 single-def
; V02 arg1 [V02,T02] ( 3, 3 ) ubyte -> r2 single-def
-; V03 loc0 [V03,T08] ( 2, 1 ) int -> r5
+; V03 loc0 [V03,T10] ( 2, 1 ) int -> r6
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T05] ( 3, 2 ) int -> r1 "spilling helperCall"
+; V05 tmp1 [V05,T07] ( 3, 2 ) int -> r0 "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 2 ) int -> r0 "argument with side effect"
-; V09 rat0 [V09,T06] ( 3, 2 ) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T03] ( 3, 2.80) int -> r3 "fgMakeTemp is creating a new local variable"
-; V11 rat2 [V11,T04] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T09] ( 2, 2 ) int -> r0 "argument with side effect"
+;* V09 rat0 [V09,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V10 rat1 [V10,T03] ( 3, 2.80) int -> r0 "spilling expr"
+; V11 rat2 [V11,T06] ( 2, 1.60) int -> r0 "fgMakeTemp is creating a new local variable"
+; V12 rat3 [V12,T08] ( 3, 2 ) int -> r0 "runtime lookup"
+; V13 rat4 [V13,T04] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
+; V14 rat5 [V14,T05] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M46119_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]
- mov r4, r1
- ;; size=14 bbWeight=1 PerfScore 4.00
+ push {r4,r5,r6,r11,lr}
+ sub sp, 12
+ add r11, sp, 24
+ str r0, [r11-0x14]
+ mov r4, r0
+ mov r5, r1
+ ;; size=18 bbWeight=1 PerfScore 6.00
G_M46119_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- uxtb r1, r2
- cmp r1, 0
- bne SHORT G_M46119_IG08
+ uxtb r0, r2
+ cmp r0, 0
+ bne SHORT G_M46119_IG11
;; size=6 bbWeight=1 PerfScore 3.00
G_M46119_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 0
- beq SHORT G_M46119_IG05
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M46119_IG05
;; size=8 bbWeight=0.50 PerfScore 2.00
G_M46119_IG04: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.40 PerfScore 0.80
-G_M46119_IG05: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M46119_IG06
+ ;; size=6 bbWeight=0.40 PerfScore 1.20
+G_M46119_IG05: ; bbWeight=0.18, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
- ;; size=18 bbWeight=0.10 PerfScore 0.50
-G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r1, r4
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.18 PerfScore 1.08
+G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG08
+ ;; size=8 bbWeight=0.50 PerfScore 2.00
+G_M46119_IG07: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.40 PerfScore 0.40
+G_M46119_IG08: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWARR_1_OBJ
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.10 PerfScore 0.60
+G_M46119_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[r0]
;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M46119_IG07: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M46119_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46119_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0.50 PerfScore 1.00
+G_M46119_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0]
- movs r5, 80
- ldr r1, [r0+0x20]
- ldr r1, [r1+0x08]
- cmp r1, 0
- beq SHORT G_M46119_IG10
+ movs r6, 80
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG13
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M46119_IG09: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- b SHORT G_M46119_IG11
+G_M46119_IG12: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG14
;; size=2 bbWeight=0.40 PerfScore 0.40
-G_M46119_IG10: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46119_IG13: ; bbWeight=0.10, gcrefRegs=0000 {}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.10 PerfScore 0.60
-G_M46119_IG11: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r0, r1
- mov r1, r4
- mov r2, r5
+G_M46119_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ mov r2, r6
movw r3, 0xd1ff
movt r3, 0xd1ff
blx r3 // <unknown method>
; gcrRegs +[r0]
- ;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M46119_IG12: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
+ ;; size=14 bbWeight=0.50 PerfScore 2.50
+G_M46119_IG15: ; bbWeight=0.50, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 118, prolog size 12, PerfScore 19.80, instruction count 42, allocated bytes for code 118 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
+; Total bytes of code 158, prolog size 14, PerfScore 26.28, instruction count 58, allocated bytes for code 158 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
; ============================================================
Unwind Info:
@@ -105,7 +130,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ Function Length : 79 (0x0004f) Actual length = 158 (0x00009e)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -117,7 +142,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- Unwind codes ----
---- Epilog start at index 0 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
- FF end
+ 03 add sp, sp, #12 ; opsize 16
+ A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
FF end
benchmarks.run_pgo.linux.arm.checked.mch
-26 (-29.55%) : 11417.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCoreSystem.DateTimeOffset:ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Instrumented Tier0)
@@ -8,8 +8,7 @@
; V00 this [V00 ] ( 1, 1 ) ref -> [sp+0x0C] do-not-enreg[] this class-hnd <ProtoBuf.Meta.RuntimeTypeModel>
; V01 arg1 [V01 ] ( 1, 1 ) int -> [sp+0x08] do-not-enreg[]
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03 ] ( 1, 1 ) ref -> [sp+0x04] do-not-enreg[] must-init "handle histogram profile tmp"
-; V04 tmp2 [V04 ] ( 1, 1 ) ref -> [sp+0x00] do-not-enreg[] must-init "argument with side effect"
+; V03 tmp1 [V03 ] ( 1, 1 ) ref -> [sp+0x04] do-not-enreg[] must-init "argument with side effect"
;
; Lcl frame size = 16
@@ -19,10 +18,9 @@ G_M11904_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
add r11, sp, 24
movs r2, 0
str r2, [sp+0x04] // [V03 tmp1]
- str r2, [sp] // [V04 tmp2]
str r0, [sp+0x0C] // [V00 this]
str r1, [sp+0x08] // [V01 arg1]
- ;; size=20 bbWeight=1 PerfScore 8.00
+ ;; size=18 bbWeight=1 PerfScore 7.00
G_M11904_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldr r0, [sp+0x0C]
; gcrRegs +[r0]
@@ -32,32 +30,22 @@ G_M11904_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldr r3, [r3]
blx r3 // <unknown method>
str r0, [sp+0x04] // [V03 tmp1]
- ldr r0, [sp+0x04] // [V03 tmp1]
- movw r1, 0xd1ff
- movt r1, 0xd1ff
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CLASSPROFILE32
- ; gcrRegs -[r0]
- ldr r3, [sp+0x04] // [V03 tmp1]
- ; gcrRegs +[r3]
- str r3, [sp] // [V04 tmp2]
- ldr r1, [sp] // [V04 tmp2]
+ ldr r1, [sp+0x04] // [V03 tmp1]
; gcrRegs +[r1]
movw r0, 0xd1ff
+ ; gcrRegs -[r0]
movt r0, 0xd1ff
movw r3, 0xd1ff
- ; gcrRegs -[r3]
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
+ blx r3 // CORINFO_HELP_INITINSTCLASS
; gcrRegs -[r1] +[r0]
- ;; size=62 bbWeight=1 PerfScore 21.00
+ ;; size=38 bbWeight=1 PerfScore 13.00
G_M11904_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 88, prolog size 16, PerfScore 31.00, instruction count 31, allocated bytes for code 88 (MethodHash=e001d17f) for method ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Instrumented Tier0)
+; Total bytes of code 62, prolog size 14, PerfScore 22.00, instruction count 22, allocated bytes for code 62 (MethodHash=e001d17f) for method ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Instrumented Tier0)
; ============================================================
Unwind Info:
@@ -69,7 +57,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 44 (0x0002c) Actual length = 88 (0x000058)
+ Function Length : 31 (0x0001f) Actual length = 62 (0x00003e)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
-20 (-21.28%) : 13764.dasm - System.Collections.Generic.IInternalStringEqualityComparer:GetUnderlyingEqualityComparer(System.Collections.Generic.IEqualityComparer1[System.String]):System.Collections.Generic.IEqualityComparer
1System.String
@@ -9,12 +9,11 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.String]>
-; V01 loc0 [V01,T02] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Collections.Generic.IInternalStringEqualityComparer>
+; V00 arg0 [V00,T00] ( 4, 3 ) ref -> r5 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.String]>
+; V01 loc0 [V01,T01] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Collections.Generic.IInternalStringEqualityComparer>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
+; V03 tmp1 [V03,T02] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Collections.Generic.NonRandomizedStringEqualityComparer+OrdinalComparer>
-; V05 rat0 [V05,T00] ( 5, 7 ) ref -> r0 class-hnd "replacement local" <System.Collections.Generic.IInternalStringEqualityComparer>
;
; Lcl frame size = 0
@@ -25,61 +24,45 @@ G_M10100_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
; gcrRegs +[r5]
;; size=10 bbWeight=1 PerfScore 3.00
G_M10100_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- mov r0, r5
- ; gcrRegs +[r0]
- cmp r0, 0
- beq SHORT G_M10100_IG05
- ;; size=6 bbWeight=1 PerfScore 3.00
-G_M10100_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_M10100_IG05
- ;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M10100_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]
- ;; size=20 bbWeight=0 PerfScore 0.00
-G_M10100_IG05: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz
cmp r0, 0
- beq SHORT G_M10100_IG07
- ldr r1, [r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- cmp r1, r3
- bne SHORT G_M10100_IG09
+ beq SHORT G_M10100_IG04
+ ldr r3, [r0]
+ movw r2, 0xd1ff
+ movt r2, 0xd1ff
+ cmp r3, r2
+ bne SHORT G_M10100_IG06
ldr r0, [r0+0x04]
- ;; size=20 bbWeight=1 PerfScore 8.00
-G_M10100_IG06: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=40 bbWeight=1 PerfScore 14.00
+G_M10100_IG03: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r5]
pop {r4,r5,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M10100_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
+G_M10100_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0] +[r5]
mov r0, r5
; gcrRegs +[r0]
;; size=2 bbWeight=0 PerfScore 0.00
-G_M10100_IG08: ; bbWeight=0, epilog, nogc, extend
+G_M10100_IG05: ; bbWeight=0, epilog, nogc, extend
pop {r4,r5,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-G_M10100_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M10100_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r5]
movw r4, 0xd1ff
movt r4, 0xd1ff
ldr r3, [r4]
blx r3 // <unknown method>
- b SHORT G_M10100_IG06
+ b SHORT G_M10100_IG03
;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 94, prolog size 8, PerfScore 17.50, instruction count 33, allocated bytes for code 94 (MethodHash=e669d88b) for method System.Collections.Generic.IInternalStringEqualityComparer:GetUnderlyingEqualityComparer(System.Collections.Generic.IEqualityComparer`1[System.String]):System.Collections.Generic.IEqualityComparer`1[System.String] (Tier1)
+; Total bytes of code 74, prolog size 8, PerfScore 18.00, instruction count 25, allocated bytes for code 74 (MethodHash=e669d88b) for method System.Collections.Generic.IInternalStringEqualityComparer:GetUnderlyingEqualityComparer(System.Collections.Generic.IEqualityComparer`1[System.String]):System.Collections.Generic.IEqualityComparer`1[System.String] (Tier1)
; ============================================================
Unwind Info:
@@ -91,7 +74,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 47 (0x0002f) Actual length = 94 (0x00005e)
+ Function Length : 37 (0x00025) Actual length = 74 (0x00004a)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-22 (-20.37%) : 11652.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCoreSystem.DateTimeOffset:ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Tier1)
@@ -7,13 +7,12 @@
; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 4, 3 ) ref -> r4 this class-hnd single-def <ProtoBuf.Meta.RuntimeTypeModel>
-; V01 arg1 [V01,T03] ( 3, 2 ) int -> r5 single-def
+; V00 this [V00,T01] ( 4, 3 ) ref -> r4 this class-hnd single-def <ProtoBuf.Meta.RuntimeTypeModel>
+; V01 arg1 [V01,T02] ( 3, 2 ) int -> r5 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T04] ( 2, 4 ) ref -> r1 class-hnd single-def "dup spill" <System.Object>
-; V04 tmp2 [V04,T05] ( 5, 3 ) ref -> r1
-; V05 tmp3 [V05,T01] ( 3, 6 ) ref -> r0 single-def "argument with side effect"
-; V06 rat0 [V06,T00] ( 5, 7 ) ref -> r0 class-hnd "replacement local" <ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]>
+; V03 tmp1 [V03,T03] ( 2, 4 ) ref -> r1 class-hnd single-def "dup spill" <System.Object>
+; V04 tmp2 [V04,T04] ( 4, 3 ) ref -> r1
+; V05 tmp3 [V05,T00] ( 3, 6 ) ref -> r0 single-def "argument with side effect"
;
; Lcl frame size = 0
@@ -36,27 +35,21 @@ G_M11904_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
mov r1, r0
; gcrRegs +[r1]
cmp r1, 0
- beq SHORT G_M11904_IG06
- ;; size=24 bbWeight=1 PerfScore 10.00
-G_M11904_IG03: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0 r4]
- mov r0, r1
- ; gcrRegs +[r0]
- cmp r0, 0
beq SHORT G_M11904_IG05
- ;; size=6 bbWeight=1 PerfScore 3.00
-G_M11904_IG04: ; bbWeight=0.50, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, byref, isz
- ldr r2, [r0]
+ ;; size=24 bbWeight=1 PerfScore 10.00
+G_M11904_IG03: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[r0 r4]
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- cmp r2, r3
- bne SHORT G_M11904_IG07
- ;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M11904_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[r1]
+ blx r3 // CORINFO_HELP_INITINSTCLASS
+ ; gcrRegs -[r1] +[r0]
+ ;; size=18 bbWeight=1 PerfScore 5.00
+G_M11904_IG04: ; bbWeight=1, epilog, nogc, extend
pop {r4,r5,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-G_M11904_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M11904_IG05: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] +[r4]
mov r0, r4
; gcrRegs +[r0]
@@ -72,18 +65,8 @@ G_M11904_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byr
; gcrRegs +[r1]
b SHORT G_M11904_IG03
;; size=28 bbWeight=0 PerfScore 0.00
-G_M11904_IG07: ; bbWeight=0, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
- movw r0, 0xd1ff
- movt r0, 0xd1ff
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
- ; gcrRegs -[r1] +[r0]
- b SHORT G_M11904_IG05
- ;; size=20 bbWeight=0 PerfScore 0.00
-; Total bytes of code 108, prolog size 8, PerfScore 20.50, instruction count 39, allocated bytes for code 108 (MethodHash=e001d17f) for method ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Tier1)
+; Total bytes of code 86, prolog size 8, PerfScore 20.00, instruction count 30, allocated bytes for code 86 (MethodHash=e001d17f) for method ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Tier1)
; ============================================================
Unwind Info:
@@ -95,7 +78,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 54 (0x00036) Actual length = 108 (0x00006c)
+ Function Length : 43 (0x0002b) Actual length = 86 (0x000056)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+32 (+28.57%) : 21352.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
@@ -9,95 +9,116 @@
; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 3, 2.03) ref -> r5 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
-; V01 TypeCtx [V01,T00] ( 5, 3.04) int -> r1 single-def
-; V02 arg1 [V02,T01] ( 4, 3.03) byref -> r4 single-def
+; V00 this [V00,T02] ( 3, 2.03) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T00] ( 7, 3.08) int -> r4 single-def
+; V02 arg1 [V02,T01] ( 4, 3.03) byref -> r5 single-def
; V03 loc0 [V03,T03] ( 6, 3.10) 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, 0.26) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 0.26) 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, 0.13) int -> r0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 0.13) int -> r0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 0.18) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V12 rat3 [V12,T06] ( 3, 0.18) int -> r0 "spilling expr"
+; V13 rat4 [V13,T07] ( 2, 0.10) 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
beq SHORT G_M58319_IG04
;; size=6 bbWeight=1 PerfScore 3.00
G_M58319_IG03: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[r5]
- ; byrRegs -[r4]
- add sp, 12
- pop {r4,r5,r6,r11,pc}
- ;; size=6 bbWeight=1 PerfScore 2.00
-G_M58319_IG04: ; bbWeight=0.03, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, gcvars, byref, isz
- ; gcrRegs -[r0] +[r5]
- ; byrRegs +[r4]
- ldr r0, [r1+0x20]
+ ; gcrRegs -[r6]
+ ; byrRegs -[r5]
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
+G_M58319_IG04: ; bbWeight=0.03, gcVars=00000000 {}, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, gcvars, byref, isz
+ ; gcrRegs -[r0] +[r6]
+ ; byrRegs +[r5]
+ ldr r0, [r4+0x20]
ldr r0, [r0+0x08]
cmp r0, 0
beq SHORT G_M58319_IG06
;; size=8 bbWeight=0.03 PerfScore 0.13
-G_M58319_IG05: ; bbWeight=0.03, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG05: ; bbWeight=0.03, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
b SHORT G_M58319_IG07
;; size=2 bbWeight=0.03 PerfScore 0.03
-G_M58319_IG06: ; bbWeight=0.01, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref
- mov r0, r1
+G_M58319_IG06: ; bbWeight=0.01, gcrefRegs=0040 {r6}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.01 PerfScore 0.04
-G_M58319_IG07: ; bbWeight=0.03, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG07: ; bbWeight=0.03, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
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]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M58319_IG09
+ ;; size=36 bbWeight=0.03 PerfScore 0.42
+G_M58319_IG08: ; bbWeight=0.03, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M58319_IG10
+ ;; size=6 bbWeight=0.03 PerfScore 0.08
+G_M58319_IG09: ; bbWeight=0.01, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref
mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.01 PerfScore 0.07
+G_M58319_IG10: ; bbWeight=0.03, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ 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_IG03
- mov r0, r6
+ mov r0, r7
b SHORT G_M58319_IG03
- ;; size=52 bbWeight=0.03 PerfScore 0.61
+ ;; size=24 bbWeight=0.03 PerfScore 0.32
-; Total bytes of code 112, prolog size 14, PerfScore 11.81, instruction count 41, allocated bytes for code 112 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 144, prolog size 12, PerfScore 11.08, instruction count 53, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================
Unwind Info:
@@ -109,7 +130,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 56 (0x00038) Actual length = 112 (0x000070)
+ Function Length : 72 (0x00048) Actual length = 144 (0x000090)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -117,7 +138,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- 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
+32 (+29.09%) : 11164.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
@@ -9,92 +9,113 @@
; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T04] ( 3, 2.67) ref -> r5 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
-; V01 TypeCtx [V01,T00] ( 5, 3.80) int -> r1 single-def
-; V02 arg1 [V02,T01] ( 4, 3.67) byref -> r4 single-def
+; V00 this [V00,T04] ( 3, 2.67) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T00] ( 7, 4.71) int -> r4 single-def
+; V02 arg1 [V02,T01] ( 4, 3.67) byref -> r5 single-def
; V03 loc0 [V03,T03] ( 6, 5.00) 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.33) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T02] ( 4, 5.33) 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.67) int -> r0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 2.67) int -> r0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 3.73) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V12 rat3 [V12,T06] ( 3, 3.73) int -> r0 "spilling expr"
+; V13 rat4 [V13,T07] ( 2, 2.13) 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_IG10
;; size=6 bbWeight=1 PerfScore 3.00
-G_M58319_IG03: ; bbWeight=0.67, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG03: ; bbWeight=0.67, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
; gcrRegs -[r0]
- ldr r0, [r1+0x20]
+ ldr r0, [r4+0x20]
ldr r0, [r0+0x08]
cmp r0, 0
beq SHORT G_M58319_IG05
;; size=8 bbWeight=0.67 PerfScore 2.67
-G_M58319_IG04: ; bbWeight=0.53, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG04: ; bbWeight=0.53, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
b SHORT G_M58319_IG06
;; size=2 bbWeight=0.53 PerfScore 0.53
-G_M58319_IG05: ; bbWeight=0.13, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref
- mov r0, r1
+G_M58319_IG05: ; bbWeight=0.13, gcrefRegs=0040 {r6}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.13 PerfScore 0.80
-G_M58319_IG06: ; bbWeight=0.67, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG06: ; bbWeight=0.67, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
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]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M58319_IG08
+ ;; size=36 bbWeight=0.67 PerfScore 8.67
+G_M58319_IG07: ; bbWeight=0.53, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M58319_IG09
+ ;; size=6 bbWeight=0.53 PerfScore 1.60
+G_M58319_IG08: ; bbWeight=0.24, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref
mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.24 PerfScore 1.44
+G_M58319_IG09: ; bbWeight=0.67, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ 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.67 PerfScore 12.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_IG10
+ mov r0, r7
+ ;; size=22 bbWeight=0.67 PerfScore 6.00
+G_M58319_IG10: ; 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 27.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 142, prolog size 12, PerfScore 31.71, instruction count 52, allocated bytes for code 142 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================
Unwind Info:
@@ -106,11 +127,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 55 (0x00037) Actual length = 110 (0x00006e)
+ Function Length : 71 (0x00047) Actual length = 142 (0x00008e)
--- 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
+40 (+33.90%) : 21630.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -9,88 +9,113 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T00] ( 7, 4.20) int -> r0 single-def
-; V01 arg0 [V01,T02] ( 4, 3 ) int -> r4 single-def
-; V02 arg1 [V02,T03] ( 3, 3 ) ubyte -> r2 single-def
-; V03 loc0 [V03,T06] ( 2, 0 ) int -> r5
+; V00 TypeCtx [V00,T00] ( 9, 5.56) int -> r4 single-def
+; V01 arg0 [V01,T03] ( 4, 3 ) int -> r5 single-def
+; V02 arg1 [V02,T04] ( 3, 3 ) ubyte -> r2 single-def
+; V03 loc0 [V03,T09] ( 2, 0 ) int -> r6
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T07] ( 3, 0 ) int -> r1 "spilling helperCall"
+; V05 tmp1 [V05,T10] ( 3, 0 ) int -> r0 "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T05] ( 2, 4 ) int -> r0 "argument with side effect"
-; V09 rat0 [V09,T04] ( 3, 4 ) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
-; V11 rat2 [V11,T08] ( 3, 0 ) int -> r1 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T07] ( 2, 4 ) int -> r0 "argument with side effect"
+;* V09 rat0 [V09,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V10 rat1 [V10,T01] ( 3, 5.60) int -> r0 "spilling expr"
+; V11 rat2 [V11,T05] ( 2, 3.20) int -> r0 "fgMakeTemp is creating a new local variable"
+; V12 rat3 [V12,T06] ( 3, 4 ) int -> r0 "runtime lookup"
+; V13 rat4 [V13,T02] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable"
+; V14 rat5 [V14,T11] ( 3, 0 ) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M46119_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]
- mov r4, r1
- ;; size=14 bbWeight=1 PerfScore 4.00
+ push {r4,r5,r6,r11,lr}
+ sub sp, 12
+ add r11, sp, 24
+ str r0, [r11-0x14]
+ mov r4, r0
+ mov r5, r1
+ ;; size=18 bbWeight=1 PerfScore 6.00
G_M46119_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- uxtb r1, r2
- cmp r1, 0
- bne SHORT G_M46119_IG07
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 0
- beq SHORT G_M46119_IG04
+ uxtb r0, r2
+ cmp r0, 0
+ bne SHORT G_M46119_IG10
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M46119_IG04
;; size=14 bbWeight=1 PerfScore 7.00
G_M46119_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M46119_IG05
- ;; size=4 bbWeight=0.80 PerfScore 1.60
-G_M46119_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M46119_IG05
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M46119_IG04: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
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_M46119_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r1, r4
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M46119_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M46119_IG06: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG08
+ ;; size=2 bbWeight=0.80 PerfScore 0.80
+G_M46119_IG07: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWARR_1_OBJ
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.20 PerfScore 1.20
+G_M46119_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[r0]
;; size=12 bbWeight=1 PerfScore 4.00
-G_M46119_IG06: ; bbWeight=1, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=1 PerfScore 1.00
-G_M46119_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46119_IG09: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=1 PerfScore 2.00
+G_M46119_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0]
- movs r5, 80
- ldr r1, [r0+0x20]
- ldr r1, [r1+0x08]
- cmp r1, 0
- beq SHORT G_M46119_IG08
- b SHORT G_M46119_IG09
+ movs r6, 80
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG11
+ b SHORT G_M46119_IG12
;; size=12 bbWeight=0 PerfScore 0.00
-G_M46119_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46119_IG11: ; bbWeight=0, gcrefRegs=0000 {}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0 PerfScore 0.00
-G_M46119_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r0, r1
- mov r1, r4
- mov r2, r5
+G_M46119_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ mov r2, r6
movw r3, 0xd1ff
movt r3, 0xd1ff
blx r3 // <unknown method>
; gcrRegs +[r0]
- ;; size=16 bbWeight=0 PerfScore 0.00
-G_M46119_IG10: ; bbWeight=0, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0 PerfScore 0.00
+ ;; size=14 bbWeight=0 PerfScore 0.00
+G_M46119_IG13: ; bbWeight=0, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 118, prolog size 12, PerfScore 18.60, instruction count 42, allocated bytes for code 118 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
+; Total bytes of code 158, prolog size 14, PerfScore 29.56, instruction count 58, allocated bytes for code 158 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
; ============================================================
Unwind Info:
@@ -102,7 +127,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ Function Length : 79 (0x0004f) Actual length = 158 (0x00009e)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -114,7 +139,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- Unwind codes ----
---- Epilog start at index 0 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
- FF end
+ 03 add sp, sp, #12 ; opsize 16
+ A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
FF end
benchmarks.run_tiered.linux.arm.checked.mch
-28 (-8.81%) : 17816.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute
@@ -8,21 +8,17 @@
; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4.50) ref -> r4 class-hnd single-def <System.Type>
-; V01 loc0 [V01,T04] ( 5, 4 ) ref -> r5 class-hnd single-def <System.Collections.Hashtable>
-; V02 loc1 [V02,T02] ( 7, 5 ) ref -> r7 class-hnd <System.Attribute[]>
-; V03 loc2 [V03,T11] ( 4, 1 ) ref -> [sp+0x00] class-hnd exact EH-live spill-single-def <System.Object>
+; V00 arg0 [V00,T00] ( 6, 4.50) ref -> r4 class-hnd single-def <System.Type>
+; V01 loc0 [V01,T02] ( 5, 4 ) ref -> r5 class-hnd single-def <System.Collections.Hashtable>
+; V02 loc1 [V02,T01] ( 7, 5 ) ref -> r7 class-hnd <System.Attribute[]>
+; V03 loc2 [V03,T07] ( 4, 1 ) ref -> [sp+0x00] class-hnd exact EH-live spill-single-def <System.Object>
; V04 loc3 [V04 ] ( 6, 2.50) ubyte -> [sp+0x04] do-not-enreg[X] addr-exposed ld-addr-op
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T03] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1"
-; V07 tmp2 [V07,T09] ( 3, 1.25) int -> r3 "fgMakeTemp is creating a new local variable"
-; V08 tmp3 [V08,T00] ( 5, 6.75) ref -> r7 class-hnd "spilling QMark2" <System.Attribute[]>
-; V09 tmp4 [V09,T07] ( 3, 2.25) ref -> r1 single-def "CASTCLASS eval op1"
-; V10 tmp5 [V10,T10] ( 3, 1.25) int -> r3 "fgMakeTemp is creating a new local variable"
-; V11 tmp6 [V11,T05] ( 5, 3.75) ref -> r7 class-hnd "spilling QMark2" <System.Attribute[]>
-; V12 tmp7 [V12,T08] ( 2, 2 ) ubyte -> r0 "Inlining Arg"
-; V13 PSPSym [V13,T12] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym"
-; V14 cse0 [V14,T06] ( 4, 3 ) int -> r6 "CSE - aggressive"
+; V06 tmp1 [V06,T06] ( 2, 2 ) ubyte -> r0 "Inlining Arg"
+; V07 tmp2 [V07,T03] ( 2, 4 ) ref -> r1 single-def "argument with side effect"
+; V08 tmp3 [V08,T05] ( 2, 2 ) ref -> r1 single-def "argument with side effect"
+; V09 PSPSym [V09,T08] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym"
+; V10 cse0 [V10,T04] ( 4, 3 ) int -> r6 "CSE - aggressive"
;
; Lcl frame size = 16
@@ -31,7 +27,7 @@ G_M8794_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
sub sp, 16
add r11, sp, 32
add r1, sp, 40
- str r1, [sp+0x0C] // [V13 PSPSym]
+ str r1, [sp+0x0C] // [V09 PSPSym]
mov r4, r0
; gcrRegs +[r4]
;; size=16 bbWeight=1 PerfScore 6.00
@@ -55,45 +51,29 @@ G_M8794_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
; gcr arg pop 0
mov r1, r0
; gcrRegs +[r1]
- mov r7, r1
- ; gcrRegs +[r7]
- cmp r7, 0
- beq SHORT G_M8794_IG05
- ;; size=34 bbWeight=1 PerfScore 15.00
-G_M8794_IG03: ; bbWeight=0.25, gcrefRegs=00B2 {r1 r4 r5 r7}, byrefRegs=0000 {}, byref, isz
+ movw r0, 0xd1ff
; gcrRegs -[r0]
- ldr r0, [r7]
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- cmp r0, r3
- beq SHORT G_M8794_IG05
- ;; size=14 bbWeight=0.25 PerfScore 1.25
-G_M8794_IG04: ; bbWeight=0.12, gcrefRegs=0032 {r1 r4 r5}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r7]
- mov r0, r3
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
mov r7, r0
; gcrRegs +[r7]
- ;; size=14 bbWeight=0.12 PerfScore 0.62
-G_M8794_IG05: ; bbWeight=1, gcrefRegs=00B0 {r4 r5 r7}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
cmp r7, 0
- beq SHORT G_M8794_IG08
- ;; size=4 bbWeight=1 PerfScore 2.00
-G_M8794_IG06: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r4-r5]
+ beq SHORT G_M8794_IG05
+ ;; size=52 bbWeight=1 PerfScore 20.00
+G_M8794_IG03: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[r0 r4-r5]
mov r0, r7
; gcrRegs +[r0]
;; size=2 bbWeight=1 PerfScore 1.00
-G_M8794_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M8794_IG04: ; bbWeight=1, epilog, nogc, extend
add sp, 16
pop {r4,r5,r6,r7,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M8794_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
+G_M8794_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0 r7] +[r4-r5]
movw r1, 0xd1ff
movt r1, 0xd1ff
@@ -104,12 +84,12 @@ G_M8794_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}
movs r1, 0
str r1, [sp+0x04] // [V04 loc3]
;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M8794_IG09: ; bbWeight=0.50, gcVars=00000800 {V03}, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG06: ; bbWeight=0.50, gcVars=00000080 {V03}, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb r1, [sp+0x04] // [V04 loc3]
cmp r1, 0
- beq SHORT G_M8794_IG11
+ beq SHORT G_M8794_IG08
;; size=8 bbWeight=0.50 PerfScore 1.50
-G_M8794_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8794_IG07: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0 r4-r5]
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -118,7 +98,7 @@ G_M8794_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcr arg pop 0
bkpt
;; size=14 bbWeight=0 PerfScore 0.00
-G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r0 r4-r5]
add r1, sp, 4 // [V04 loc3]
movw r3, 0xd1ff
@@ -128,7 +108,7 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000
; gcr arg pop 0
ldrb r0, [sp+0x04] // [V04 loc3]
cmp r0, 0
- bne SHORT G_M8794_IG12
+ bne SHORT G_M8794_IG09
movw r0, 0xd1ff
movt r0, 0xd1ff
movw r1, 0xd1ff
@@ -139,7 +119,7 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000
blx r3 // <unknown method>
; gcr arg pop 0
;; size=48 bbWeight=0.50 PerfScore 7.50
-G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG09: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
mov r0, r5
; gcrRegs +[r0]
mov r1, r4
@@ -150,36 +130,19 @@ G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {},
; gcr arg pop 0
mov r1, r0
; gcrRegs +[r1]
- mov r7, r1
- ; gcrRegs +[r7]
- cmp r7, 0
- beq SHORT G_M8794_IG15
- ;; size=16 bbWeight=0.50 PerfScore 4.00
-G_M8794_IG13: ; bbWeight=0.25, gcrefRegs=00B2 {r1 r4 r5 r7}, byrefRegs=0000 {}, byref, isz
+ movw r0, 0xd1ff
; gcrRegs -[r0]
- ldr r0, [r7]
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- cmp r0, r3
- beq SHORT G_M8794_IG15
- ;; size=14 bbWeight=0.25 PerfScore 1.25
-G_M8794_IG14: ; bbWeight=0.12, gcrefRegs=0032 {r1 r4 r5}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r7]
- mov r0, r3
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
mov r7, r0
; gcrRegs +[r7]
- ;; size=14 bbWeight=0.12 PerfScore 0.62
-G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=00B0 {r4 r5 r7}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
cmp r7, 0
- bne SHORT G_M8794_IG16
+ bne SHORT G_M8794_IG10
mov r0, r4
- ; gcrRegs +[r0]
movw r1, 0xd1ff
movt r1, 0xd1ff
movs r2, 0
@@ -200,11 +163,11 @@ G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=00B0 {r4 r5 r7}, byrefRegs=0000
blx r3 // <unknown method>
; gcrRegs -[r0-r2 r4-r5]
; gcr arg pop 0
- ;; size=40 bbWeight=0.50 PerfScore 8.00
-G_M8794_IG16: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
+ ;; size=70 bbWeight=0.50 PerfScore 13.50
+G_M8794_IG10: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
ldrb r0, [sp+0x04] // [V04 loc3]
cmp r0, 0
- beq SHORT G_M8794_IG06
+ beq SHORT G_M8794_IG03
ldr r0, [sp] // [V03 loc2]
; gcrRegs +[r0]
movw r3, 0xd1ff
@@ -213,33 +176,33 @@ G_M8794_IG16: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, by
blx r3 // <unknown method>
; gcrRegs -[r0]
; gcr arg pop 0
- b SHORT G_M8794_IG06
+ b SHORT G_M8794_IG03
;; size=22 bbWeight=0.50 PerfScore 4.00
-G_M8794_IG17: ; bbWeight=0, gcVars=00000800 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
+G_M8794_IG11: ; bbWeight=0, gcVars=00000080 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
; gcrRegs -[r7]
- ; GC ptr vars +{V03 V11}
+ ; GC ptr vars +{V03 V07}
push {r2,r3,r4,r5,r6,r7,r11,lr}
add r3, r11, 8
str r3, [sp+0x04]
;; size=10 bbWeight=0 PerfScore 0.00
-G_M8794_IG18: ; bbWeight=0, gcVars=00000800 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG12: ; bbWeight=0, gcVars=00000080 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb r0, [r11-0x1C] // [V04 loc3]
cmp r0, 0
- beq SHORT G_M8794_IG19
+ beq SHORT G_M8794_IG13
ldr r0, [r11-0x20] // [V03 loc2]
; gcrRegs +[r0]
movw r3, 0xd1ff
movt r3, 0xd1ff
- ; GC ptr vars -{V03 V11}
+ ; GC ptr vars -{V03 V07}
blx r3 // <unknown method>
; gcrRegs -[r0]
; gcr arg pop 0
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8794_IG19: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
+G_M8794_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-; Total bytes of code 318, prolog size 16, PerfScore 57.75, instruction count 118, allocated bytes for code 318 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
+; Total bytes of code 290, prolog size 16, PerfScore 58.50, instruction count 104, allocated bytes for code 290 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
; ============================================================
Unwind Info:
@@ -251,7 +214,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 141 (0x0008d) Actual length = 282 (0x00011a)
+ Function Length : 127 (0x0007f) Actual length = 254 (0x0000fe)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -282,4 +245,4 @@ Unwind Info:
*************** EH table for System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[]
1 EH table entries, 0 duplicate clauses, 0 cloned finallys, 1 total EH entries reported to VM
-EH#0: try [G_M8794_IG09..G_M8794_IG16) handled by [G_M8794_IG17..END) (fault)
...
-14 (-3.93%) : 2344.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)
@@ -9,23 +9,23 @@
; Final local variable assignments
;
; V00 this [V00,T01] ( 10, 6.50) ref -> r4 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T07] ( 3, 2.50) int -> r1 single-def
-; V02 arg2 [V02,T05] ( 4, 3.50) int -> r2 single-def
-; V03 arg3 [V03,T06] ( 4, 3.50) int -> r5 single-def
+; V01 arg1 [V01,T06] ( 3, 2.50) int -> r1 single-def
+; V02 arg2 [V02,T04] ( 4, 3.50) int -> r2 single-def
+; V03 arg3 [V03,T05] ( 4, 3.50) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1.50) int -> r7 single-def
; V05 arg5 [V05,T14] ( 1, 1 ) int -> [sp+0x34] single-def
; V06 arg6 [V06,T10] ( 2, 2 ) int -> r6 single-def
; V07 loc0 [V07,T00] ( 24, 13.50) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> r5 class-hnd <<unknown class>>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> r5 class-hnd <<unknown class>>
; V09 OutArgs [V09 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T09] ( 4, 2.75) int -> r1 "spilling helperCall"
-;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V12 tmp3 [V12,T02] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <System.__Canon[]>
-;* V13 tmp4 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String>
-; V14 tmp5 [V14,T11] ( 2, 2 ) int -> r5 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP
-; V15 tmp6 [V15,T12] ( 2, 2 ) int -> r7 "field V13.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP
-; V16 rat0 [V16,T08] ( 3, 4.40) int -> r0 "Spilling to split statement for tree"
-; V17 rat1 [V17,T04] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+;* V11 tmp2 [V11 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String>
+; V12 tmp3 [V12,T11] ( 2, 2 ) int -> r5 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP
+; V13 tmp4 [V13,T12] ( 2, 2 ) int -> r7 "field V11.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP
+; V14 tmp5 [V14,T09] ( 2, 4 ) int -> r0 "argument with side effect"
+; V15 rat0 [V15,T07] ( 3, 4.40) int -> r0 "Spilling to split statement for tree"
+; V16 rat1 [V16,T08] ( 3, 4 ) int -> r0 "runtime lookup"
+; V17 rat2 [V17,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 24
@@ -197,43 +197,30 @@ G_M33863_IG13: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b
ldr r0, [r4]
ldr r1, [r0+0x24]
ldr r1, [r1]
- ldr r1, [r1+0x0C]
- cmp r1, 0
+ ldr r3, [r1+0x0C]
+ cmp r3, 0
beq SHORT G_M33863_IG15
;; size=12 bbWeight=1 PerfScore 6.00
G_M33863_IG14: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
+ mov r0, r3
b SHORT G_M33863_IG16
- ;; size=2 bbWeight=0.80 PerfScore 0.80
+ ;; size=4 bbWeight=0.80 PerfScore 1.60
G_M33863_IG15: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov r1, r0
- ;; size=20 bbWeight=0.20 PerfScore 1.20
-G_M33863_IG16: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- mov r0, r5
- ; gcrRegs +[r0]
- cmp r0, 0
- beq SHORT G_M33863_IG19
- ;; size=6 bbWeight=1 PerfScore 3.00
-G_M33863_IG17: ; bbWeight=0.25, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz
- ldr r3, [r0]
- cmp r3, r1
- beq SHORT G_M33863_IG19
- ;; size=6 bbWeight=0.25 PerfScore 0.75
-G_M33863_IG18: ; bbWeight=0.12, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r0]
- mov r0, r1
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
+ ;; size=18 bbWeight=0.20 PerfScore 1.00
+G_M33863_IG16: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
mov r1, r5
; gcrRegs +[r1]
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1 r5] +[r0]
- ;; size=14 bbWeight=0.12 PerfScore 0.62
-G_M33863_IG19: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=12 bbWeight=1 PerfScore 4.00
+G_M33863_IG17: ; bbWeight=1, epilog, nogc, extend
add sp, 24
pop {r4,r5,r6,r7,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
@@ -246,7 +233,7 @@ RWD00 dd G_M33863_IG05
dd G_M33863_IG10
-; Total bytes of code 356, prolog size 14, PerfScore 77.88, instruction count 133, allocated bytes for code 356 (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 342, prolog size 14, PerfScore 78.10, instruction count 126, allocated bytes for code 342 (MethodHash=14bb7bb8) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
; ============================================================
Unwind Info:
@@ -258,7 +245,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 178 (0x000b2) Actual length = 356 (0x000164)
+ Function Length : 171 (0x000ab) Actual length = 342 (0x000156)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
-10 (-3.73%) : 10811.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
@@ -7,40 +7,38 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 4, 4 ) ref -> r5 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5.50) ref -> r5 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T02] ( 4, 3 ) ubyte -> r6 single-def
-; V02 loc0 [V02,T12] ( 3, 2.50) ref -> r4 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T11] ( 3, 2.50) ref -> r4 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 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp3 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp4 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T08] ( 4, 3 ) int -> r3 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T07] ( 4, 3 ) int -> r3 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T05] ( 2, 4 ) int -> r0 "argument with side effect"
-; V10 tmp7 [V10,T15] ( 2, 2 ) int -> r0 "argument with side effect"
-; V11 tmp8 [V11,T16] ( 2, 2 ) int -> r0 "argument with side effect"
-; V12 cse0 [V12,T07] ( 5, 3.50) ref -> r8 "CSE - aggressive"
-; V13 cse1 [V13,T06] ( 8, 3.80) int -> r7 "CSE - aggressive"
-; V14 rat0 [V14,T03] ( 3, 4.40) int -> r0 "Spilling to split statement for tree"
-; V15 rat1 [V15,T04] ( 3, 4 ) int -> r0 "runtime lookup"
-; V16 rat2 [V16,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
-; V17 rat3 [V17,T09] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
-; V18 rat4 [V18,T13] ( 3, 2 ) int -> r0 "runtime lookup"
-; V19 rat5 [V19,T10] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
-; V20 rat6 [V20,T14] ( 3, 2 ) int -> r0 "runtime lookup"
-; V21 rat7 [V21,T11] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
+; V10 tmp7 [V10,T14] ( 2, 2 ) int -> r0 "argument with side effect"
+; V11 tmp8 [V11,T15] ( 2, 2 ) int -> r0 "argument with side effect"
+; V12 cse0 [V12,T06] ( 8, 3.80) int -> r7 "CSE - aggressive"
+; V13 rat0 [V13,T03] ( 3, 4.40) int -> r0 "Spilling to split statement for tree"
+; V14 rat1 [V14,T04] ( 3, 4 ) int -> r0 "runtime lookup"
+; V15 rat2 [V15,T01] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
+; V16 rat3 [V16,T08] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
+; V17 rat4 [V17,T12] ( 3, 2 ) int -> r0 "runtime lookup"
+; V18 rat5 [V18,T09] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
+; V19 rat6 [V19,T13] ( 3, 2 ) int -> r0 "runtime lookup"
+; V20 rat7 [V20,T10] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r11,lr}
- sub sp, 12
- add r11, sp, 32
- str r0, [r11-0x1C]
+ push {r2,r3,r4,r5,r6,r7,r11,lr}
+ add r11, sp, 24
+ str r0, [r11-0x14]
mov r5, r0
; gcrRegs +[r5]
mov r6, r1
- ;; size=18 bbWeight=1 PerfScore 6.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
G_M18513_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
ldr r7, [r5]
mov r0, r7
@@ -59,26 +57,24 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, b
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0
;; size=18 bbWeight=0.20 PerfScore 1.00
G_M18513_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- ldr r8, [r5+0x04]
- ; gcrRegs +[r8]
- mov r1, r8
+ ldr r1, [r5+0x04]
; gcrRegs +[r1]
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
+ blx r3 // CORINFO_HELP_INITINSTCLASS
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
mov r4, r0
; gcrRegs +[r4]
cmp r4, 0
beq SHORT G_M18513_IG11
- ;; size=22 bbWeight=1 PerfScore 8.00
+ ;; size=18 bbWeight=1 PerfScore 7.00
G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0 r8]
+ ; gcrRegs -[r0]
ldr r0, [r7+0x24]
ldr r0, [r0]
ldr r0, [r0+0x20]
@@ -95,7 +91,7 @@ G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0
mov r3, r0
;; size=22 bbWeight=0.10 PerfScore 0.70
@@ -111,11 +107,9 @@ G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}
; gcr arg pop 0
;; size=10 bbWeight=0.50 PerfScore 2.50
G_M18513_IG10: ; bbWeight=0.50, epilog, nogc, extend
- add sp, 12
- pop {r4,r5,r6,r7,r8,r11,pc}
- ;; size=6 bbWeight=0.50 PerfScore 1.00
-G_M18513_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, gcvars, byref, isz
- ; gcrRegs +[r8]
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=0.50 PerfScore 0.50
+G_M18513_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz
uxtb r0, r6
cmp r0, 0
beq SHORT G_M18513_IG16
@@ -125,36 +119,36 @@ G_M18513_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0120 {r5 r8
cmp r0, 0
beq SHORT G_M18513_IG13
;; size=16 bbWeight=0.50 PerfScore 4.00
-G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, byref, isz
+G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
b SHORT G_M18513_IG14
;; size=2 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
mov r0, r7
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0
;; size=20 bbWeight=0.10 PerfScore 0.60
-G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, byref, isz
- mov r1, r8
+G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r1, [r5+0x04]
; gcrRegs +[r1]
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
+ blx r3 // CORINFO_HELP_INITINSTCLASS
; gcrRegs -[r1] +[r0]
; gcr arg pop 0
cmp r0, 0
bne SHORT G_M18513_IG16
- mov r1, r8
+ ldr r1, [r5+0x04]
; gcrRegs +[r1]
movw r0, 0xd1ff
; gcrRegs -[r0]
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
cmp r0, 0
@@ -163,55 +157,54 @@ G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}
; gcrRegs -[r0]
;; size=44 bbWeight=0.50 PerfScore 7.50
G_M18513_IG15: ; bbWeight=0.50, epilog, nogc, extend
- add sp, 12
- pop {r4,r5,r6,r7,r8,r11,pc}
- ;; size=6 bbWeight=0.50 PerfScore 1.00
-G_M18513_IG16: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, gcvars, byref, isz
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=0.50 PerfScore 0.50
+G_M18513_IG16: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz
ldr r0, [r7+0x24]
ldr r0, [r0]
ldr r0, [r0+0x18]
cmp r0, 0
beq SHORT G_M18513_IG18
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, byref, isz
+G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
b SHORT G_M18513_IG19
;; size=2 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, byref
+G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
mov r0, r7
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0
;; size=20 bbWeight=0.10 PerfScore 0.60
-G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, byref
- mov r1, r8
+G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ ldr r1, [r5+0x04]
; gcrRegs +[r1]
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
;; size=12 bbWeight=0.50 PerfScore 2.00
G_M18513_IG20: ; bbWeight=0.50, epilog, nogc, extend
- add sp, 12
- pop {r4,r5,r6,r7,r8,r11,lr}
+ add sp, 8
+ pop {r4,r5,r6,r7,r11,lr}
bx r3 // <unknown method>
; gcr arg pop 0
;; size=8 bbWeight=0.50 PerfScore 1.50
-; Total bytes of code 268, prolog size 18, PerfScore 51.60, instruction count 100, allocated bytes for code 268 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
+; Total bytes of code 258, prolog size 16, PerfScore 48.60, instruction count 96, allocated bytes for code 258 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1
+ Code Words : 2
Epilog Count : 3
F bit : 0
E bit : 0
X bit : 0
Vers : 0
- Function Length : 134 (0x00086) Actual length = 268 (0x00010c)
+ 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)
@@ -224,10 +217,14 @@ Unwind Info:
---- Scope 2
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Condition : 14 (0xe) (always)
- Epilog Start Index : 0 (0x00)
+ Epilog Start Index : 3 (0x03)
---- 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
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
+ FF end
+ ---- Epilog start at index 3 ----
+ 02 add sp, sp, #8 ; opsize 16
+ A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
+ FF end
FF end
+34 (+27.42%) : 7423.dasm - System.Array:SortSystem.__Canon (Tier1)
@@ -8,86 +8,108 @@
; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T01] ( 5, 4.36) int -> r0 single-def
-; V01 arg0 [V01,T00] ( 5, 5 ) ref -> r1 class-hnd single-def <System.__Canon[]>
-; V02 arg1 [V02,T02] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 5.72) int -> r4 single-def
+; V01 arg0 [V01,T01] ( 5, 5 ) ref -> r5 class-hnd single-def <System.__Canon[]>
+; V02 arg1 [V02,T02] ( 4, 4 ) ref -> r6 class-hnd single-def <System.Comparison`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[System.__Canon]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 tmp1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 4 ) int -> r6 "Inlining Arg"
-; V09 tmp5 [V09,T06] ( 2, 4 ) byref -> r5 single-def "Inlining Arg"
+; V08 tmp4 [V08,T09] ( 2, 4 ) int -> r5 "Inlining Arg"
+; V09 tmp5 [V09,T08] ( 2, 4 ) byref -> r7 single-def "Inlining Arg"
;* V10 tmp6 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V11 tmp7 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V12 tmp8 [V12 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
;* V13 tmp9 [V13 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x4)" P-INDEP
-; V14 tmp10 [V14,T09] ( 2, 2 ) byref -> r5 single-def "field V05._reference (fldOffset=0x0)" P-INDEP
-; V15 tmp11 [V15,T10] ( 2, 2 ) int -> r6 "field V05._length (fldOffset=0x4)" P-INDEP
-; V16 tmp12 [V16,T08] ( 2, 4 ) int -> r0 "argument with side effect"
-; V17 rat0 [V17,T05] ( 3, 4 ) int -> r0 "runtime lookup"
-; V18 rat1 [V18,T03] ( 3, 5.60) int -> r1 "spilling expr"
-; V19 rat2 [V19,T04] ( 3, 4.48) int -> r3 "fgMakeTemp is creating a new local variable"
+; V14 tmp10 [V14,T11] ( 2, 2 ) byref -> r7 single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+; V15 tmp11 [V15,T12] ( 2, 2 ) int -> r5 "field V05._length (fldOffset=0x4)" P-INDEP
+; V16 tmp12 [V16,T10] ( 2, 4 ) int -> r0 "argument with side effect"
+;* V17 rat0 [V17,T13] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V18 rat1 [V18,T03] ( 3, 5.60) int -> r0 "spilling expr"
+; V19 rat2 [V19,T05] ( 2, 3.20) int -> r0 "fgMakeTemp is creating a new local variable"
+; V20 rat3 [V20,T07] ( 3, 4 ) int -> r0 "runtime lookup"
+; V21 rat4 [V21,T04] ( 3, 5.60) int -> r0 "spilling expr"
+; V22 rat5 [V22,T06] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M37190_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 r0, [r11-0x14]
- mov r4, r2
- ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M37190_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs +[r1]
- cmp r1, 0
- beq SHORT G_M37190_IG08
- cmp r4, 0
- beq SHORT G_M37190_IG09
- add r5, r1, 8
- ; byrRegs +[r5]
- ldr r6, [r1+0x04]
- ldr r1, [r0+0x20]
- ; gcrRegs -[r1]
- ldr r3, [r1+0x04]
- cmp r3, 16
- ble SHORT G_M37190_IG05
- ;; size=22 bbWeight=1 PerfScore 10.00
-G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
- ldr r3, [r1+0x10]
- cmp r3, 0
- beq SHORT G_M37190_IG05
+ mov r4, r0
+ mov r5, r1
+ ; gcrRegs +[r5]
+ mov r6, r2
+ ; gcrRegs +[r6]
+ ;; size=18 bbWeight=1 PerfScore 6.00
+G_M37190_IG02: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
+ cmp r5, 0
+ beq SHORT G_M37190_IG11
+ cmp r6, 0
+ beq SHORT G_M37190_IG12
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M37190_IG04
+ ;; size=16 bbWeight=1 PerfScore 8.00
+G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M37190_IG05
;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref, isz
- mov r0, r3
- b SHORT G_M37190_IG06
- ;; size=4 bbWeight=0.64 PerfScore 1.28
-G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref
+G_M37190_IG04: ; bbWeight=0.36, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref
+ mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
- ;; size=18 bbWeight=0.36 PerfScore 1.80
-G_M37190_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0020 {r5}, byref
- mov r1, r5
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M37190_IG05: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
+ add r7, r5, 8
+ ; byrRegs +[r7]
+ ldr r5, [r5+0x04]
+ ; gcrRegs -[r5]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 16
+ ble SHORT G_M37190_IG08
+ ;; size=14 bbWeight=1 PerfScore 6.00
+G_M37190_IG06: ; bbWeight=0.80, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref, isz
+ ldr r0, [r0+0x10]
+ cmp r0, 0
+ beq SHORT G_M37190_IG08
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M37190_IG07: ; bbWeight=0.64, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref, isz
+ b SHORT G_M37190_IG09
+ ;; size=2 bbWeight=0.64 PerfScore 0.64
+G_M37190_IG08: ; bbWeight=0.36, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M37190_IG09: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref
+ mov r1, r7
; byrRegs +[r1]
- mov r2, r6
- mov r3, r4
+ mov r2, r5
+ mov r3, r6
; gcrRegs +[r3]
movw lr, 0xd1ff
movt lr, 0xd1ff
ldr lr, [lr]
blx lr // <unknown method>
- ; gcrRegs -[r3-r4]
- ; byrRegs -[r1 r5]
+ ; gcrRegs -[r3 r6]
+ ; byrRegs -[r1 r7]
;; size=20 bbWeight=1 PerfScore 7.00
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend
- add sp, 12
- pop {r4,r5,r6,r11,pc}
- ;; size=6 bbWeight=1 PerfScore 2.00
-G_M37190_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M37190_IG10: ; bbWeight=1, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
+G_M37190_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 2
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -95,7 +117,7 @@ G_M37190_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
blx r3 // System.ThrowHelper:ThrowArgumentNullException(int)
bkpt
;; size=16 bbWeight=0 PerfScore 0.00
-G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M37190_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 29
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -104,7 +126,7 @@ G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
bkpt
;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 124, prolog size 14, PerfScore 29.48, instruction count 46, allocated bytes for code 124 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
+; Total bytes of code 158, prolog size 12, PerfScore 37.76, instruction count 59, allocated bytes for code 158 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
; ============================================================
Unwind Info:
@@ -116,7 +138,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 62 (0x0003e) Actual length = 124 (0x00007c)
+ Function Length : 79 (0x0004f) Actual length = 158 (0x00009e)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -124,7 +146,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- 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
+32 (+29.09%) : 6012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
@@ -8,92 +8,113 @@
; 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] ( 7, 4.28) 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"
+; V09 rat0 [V09,T08] ( 3, 2 ) int -> r0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V12 rat3 [V12,T06] ( 3, 2.80) int -> r0 "spilling expr"
+; V13 rat4 [V13,T07] ( 2, 1.60) 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_IG10
;; 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, [r4+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
+G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, 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
+G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=0040 {r6}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.10 PerfScore 0.60
-G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
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]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M58319_IG08
+ ;; size=36 bbWeight=0.50 PerfScore 6.50
+G_M58319_IG07: ; bbWeight=0.40, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M58319_IG09
+ ;; size=6 bbWeight=0.40 PerfScore 1.20
+G_M58319_IG08: ; bbWeight=0.18, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref
mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.18 PerfScore 1.08
+G_M58319_IG09: ; bbWeight=0.50, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ 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_IG10
+ mov r0, r7
+ ;; size=22 bbWeight=0.50 PerfScore 4.50
+G_M58319_IG10: ; 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 142, prolog size 12, PerfScore 26.28, instruction count 52, allocated bytes for code 142 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================
Unwind Info:
@@ -105,11 +126,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 55 (0x00037) Actual length = 110 (0x00006e)
+ Function Length : 71 (0x00047) Actual length = 142 (0x00008e)
--- 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
+40 (+33.90%) : 4655.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -8,92 +8,117 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T00] ( 7, 4.20) int -> r0 single-def
-; V01 arg0 [V01,T01] ( 4, 3 ) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 9, 4.88) int -> r4 single-def
+; V01 arg0 [V01,T01] ( 4, 3 ) int -> r5 single-def
; V02 arg1 [V02,T02] ( 3, 3 ) ubyte -> r2 single-def
-; V03 loc0 [V03,T08] ( 2, 1 ) int -> r5
+; V03 loc0 [V03,T10] ( 2, 1 ) int -> r6
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T05] ( 3, 2 ) int -> r1 "spilling helperCall"
+; V05 tmp1 [V05,T07] ( 3, 2 ) int -> r0 "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 2 ) int -> r0 "argument with side effect"
-; V09 rat0 [V09,T06] ( 3, 2 ) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T03] ( 3, 2.80) int -> r3 "fgMakeTemp is creating a new local variable"
-; V11 rat2 [V11,T04] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T09] ( 2, 2 ) int -> r0 "argument with side effect"
+;* V09 rat0 [V09,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V10 rat1 [V10,T03] ( 3, 2.80) int -> r0 "spilling expr"
+; V11 rat2 [V11,T06] ( 2, 1.60) int -> r0 "fgMakeTemp is creating a new local variable"
+; V12 rat3 [V12,T08] ( 3, 2 ) int -> r0 "runtime lookup"
+; V13 rat4 [V13,T04] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
+; V14 rat5 [V14,T05] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M46119_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]
- mov r4, r1
- ;; size=14 bbWeight=1 PerfScore 4.00
+ push {r4,r5,r6,r11,lr}
+ sub sp, 12
+ add r11, sp, 24
+ str r0, [r11-0x14]
+ mov r4, r0
+ mov r5, r1
+ ;; size=18 bbWeight=1 PerfScore 6.00
G_M46119_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- uxtb r1, r2
- cmp r1, 0
- bne SHORT G_M46119_IG08
+ uxtb r0, r2
+ cmp r0, 0
+ bne SHORT G_M46119_IG11
;; size=6 bbWeight=1 PerfScore 3.00
G_M46119_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 0
- beq SHORT G_M46119_IG05
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M46119_IG05
;; size=8 bbWeight=0.50 PerfScore 2.00
G_M46119_IG04: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.40 PerfScore 0.80
-G_M46119_IG05: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M46119_IG06
+ ;; size=6 bbWeight=0.40 PerfScore 1.20
+G_M46119_IG05: ; bbWeight=0.18, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
- ;; size=18 bbWeight=0.10 PerfScore 0.50
-G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r1, r4
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.18 PerfScore 1.08
+G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG08
+ ;; size=8 bbWeight=0.50 PerfScore 2.00
+G_M46119_IG07: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.40 PerfScore 0.40
+G_M46119_IG08: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWARR_1_OBJ
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.10 PerfScore 0.60
+G_M46119_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[r0]
;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M46119_IG07: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M46119_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46119_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0.50 PerfScore 1.00
+G_M46119_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0]
- movs r5, 80
- ldr r1, [r0+0x20]
- ldr r1, [r1+0x08]
- cmp r1, 0
- beq SHORT G_M46119_IG10
+ movs r6, 80
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG13
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M46119_IG09: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- b SHORT G_M46119_IG11
+G_M46119_IG12: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG14
;; size=2 bbWeight=0.40 PerfScore 0.40
-G_M46119_IG10: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46119_IG13: ; bbWeight=0.10, gcrefRegs=0000 {}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.10 PerfScore 0.60
-G_M46119_IG11: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r0, r1
- mov r1, r4
- mov r2, r5
+G_M46119_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ mov r2, r6
movw r3, 0xd1ff
movt r3, 0xd1ff
blx r3 // <unknown method>
; gcrRegs +[r0]
- ;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M46119_IG12: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
+ ;; size=14 bbWeight=0.50 PerfScore 2.50
+G_M46119_IG15: ; bbWeight=0.50, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 118, prolog size 12, PerfScore 19.80, instruction count 42, allocated bytes for code 118 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
+; Total bytes of code 158, prolog size 14, PerfScore 26.28, instruction count 58, allocated bytes for code 158 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
; ============================================================
Unwind Info:
@@ -105,7 +130,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ Function Length : 79 (0x0004f) Actual length = 158 (0x00009e)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -117,7 +142,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- Unwind codes ----
---- Epilog start at index 0 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
- FF end
+ 03 add sp, sp, #12 ; opsize 16
+ A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
FF end
coreclr_tests.run.linux.arm.checked.mch
-20 (-20.41%) : 2583.dasm - System.Linq.Enumerable:Containsint:ubyte (Tier1)
@@ -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 class-hnd "replacement local" <System.Collections.Generic.ICollection`1[int]>
;
; 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)
-20 (-16.95%) : 2362.dasm - System.Threading.ThreadPool+<>c:<.cctor>b_520(System.Object):this (Tier1)
@@ -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 class-hnd "replacement local" <System.Runtime.CompilerServices.IAsyncStateMachineBox>
;
; 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)
-14 (-3.80%) : 4570.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)
@@ -9,24 +9,24 @@
; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 10, 4 ) ref -> r4 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T07] ( 3, 2 ) int -> r1 single-def
-; V02 arg2 [V02,T04] ( 4, 3 ) int -> r2 single-def
-; V03 arg3 [V03,T05] ( 4, 3 ) int -> r5 single-def
+; V00 this [V00,T01] ( 10, 4 ) ref -> r4 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V01 arg1 [V01,T06] ( 3, 2 ) int -> r1 single-def
+; V02 arg2 [V02,T03] ( 4, 3 ) int -> r2 single-def
+; V03 arg3 [V03,T04] ( 4, 3 ) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1 ) int -> [sp+0x30] single-def
; V05 arg5 [V05,T14] ( 1, 1 ) int -> [sp+0x34] single-def
; V06 arg6 [V06,T12] ( 3, 1 ) int -> [sp+0x38] single-def
-; V07 loc0 [V07,T01] ( 24, 6 ) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T09] ( 10, 3.25) ref -> r6 class-hnd <<unknown class>>
+; V07 loc0 [V07,T00] ( 24, 6 ) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
+; V08 loc1 [V08,T09] ( 9, 3 ) ref -> r6 class-hnd <<unknown class>>
; V09 OutArgs [V09 ] ( 1, 1 ) struct ( 4) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T08] ( 4, 3.50) int -> r1 "spilling helperCall"
-;* V11 tmp2 [V11 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V12 tmp3 [V12,T00] ( 5, 7.50) ref -> r0 class-hnd "spilling QMark2" <System.__Canon[]>
-;* V13 tmp4 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String>
-; V14 tmp5 [V14,T10] ( 2, 2 ) int -> r5 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP
-; V15 tmp6 [V15,T11] ( 2, 2 ) int -> r6 "field V13.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP
-; V16 rat0 [V16,T06] ( 3, 4.40) int -> r0 "Spilling to split statement for tree"
-; V17 rat1 [V17,T03] ( 3, 5.60) int -> r1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+;* V11 tmp2 [V11 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String>
+; V12 tmp3 [V12,T10] ( 2, 2 ) int -> r5 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP
+; V13 tmp4 [V13,T11] ( 2, 2 ) int -> r6 "field V11.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP
+; V14 tmp5 [V14,T08] ( 2, 4 ) int -> r0 "argument with side effect"
+; V15 rat0 [V15,T05] ( 3, 4.40) int -> r0 "Spilling to split statement for tree"
+; V16 rat1 [V16,T07] ( 3, 4 ) int -> r0 "runtime lookup"
+; V17 rat2 [V17,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 24
@@ -41,7 +41,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
;; size=18 bbWeight=1 PerfScore 6.00
G_M33863_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
cmp r2, 0
- bne SHORT G_M33863_IG12
+ bne SHORT G_M33863_IG10
;; size=4 bbWeight=1 PerfScore 2.00
G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r6, [sp+0x30] // [V04 arg4]
@@ -52,7 +52,7 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
movs r6, 0
ldr r7, [sp+0x38] // [V06 arg6]
cmp r7, 2
- bne SHORT G_M33863_IG13
+ bne SHORT G_M33863_IG11
;; size=18 bbWeight=1 PerfScore 9.00
G_M33863_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
ldr r1, [sp+0x08] // [V07 loc0]
@@ -72,48 +72,35 @@ G_M33863_IG05: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b
ldr r0, [r4]
ldr r1, [r0+0x24]
ldr r1, [r1]
- ldr r1, [r1+0x14]
- cmp r1, 0
+ ldr r3, [r1+0x14]
+ cmp r3, 0
beq SHORT G_M33863_IG07
;; size=12 bbWeight=1 PerfScore 6.00
G_M33863_IG06: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+ mov r0, r3
b SHORT G_M33863_IG08
- ;; size=2 bbWeight=0.80 PerfScore 0.80
+ ;; size=4 bbWeight=0.80 PerfScore 1.60
G_M33863_IG07: ; bbWeight=0.20, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov r1, r0
- ;; size=20 bbWeight=0.20 PerfScore 1.20
-G_M33863_IG08: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
- mov r0, r6
- ; gcrRegs +[r0]
- cmp r0, 0
- beq SHORT G_M33863_IG11
- ;; size=6 bbWeight=1 PerfScore 3.00
-G_M33863_IG09: ; bbWeight=0.50, gcrefRegs=0051 {r0 r4 r6}, byrefRegs=0000 {}, byref, isz
- ldr r3, [r0]
- cmp r3, r1
- beq SHORT G_M33863_IG11
- ;; size=6 bbWeight=0.50 PerfScore 1.50
-G_M33863_IG10: ; bbWeight=0.25, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r0]
- mov r0, r1
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
+ ;; size=18 bbWeight=0.20 PerfScore 1.00
+G_M33863_IG08: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
mov r1, r6
; gcrRegs +[r1]
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1 r6] +[r0]
- ;; size=16 bbWeight=0.25 PerfScore 1.50
-G_M33863_IG11: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=14 bbWeight=1 PerfScore 5.00
+G_M33863_IG09: ; bbWeight=1, epilog, nogc, extend
add sp, 24
pop {r4,r5,r6,r7,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M33863_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M33863_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0]
ldr r6, [sp+0x30] // [V04 arg4]
str r6, [sp] // [V09 OutArgs]
@@ -130,24 +117,24 @@ G_M33863_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byr
str r6, [sp+0x30] // [V04 arg4]
b SHORT G_M33863_IG03
;; size=34 bbWeight=0 PerfScore 0.00
-G_M33863_IG13: ; bbWeight=0, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+G_M33863_IG11: ; bbWeight=0, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r6]
cmp r7, 6
- bhi SHORT G_M33863_IG20
+ bhi SHORT G_M33863_IG18
movw r1, LOW ADDRESS J_M33863_DS00
movt r1, HIGH ADDRESS J_M33863_DS00
J_M33863_DS00 LABEL DWORD
+ DD G_M33863_IG12
+ DD G_M33863_IG13
+ DD G_M33863_IG04
DD G_M33863_IG14
DD G_M33863_IG15
- DD G_M33863_IG04
- DD G_M33863_IG16
DD G_M33863_IG17
- DD G_M33863_IG19
- DD G_M33863_IG18
+ DD G_M33863_IG16
ldr pc, [r1+4*r7]
;; size=16 bbWeight=0 PerfScore 0.00
-G_M33863_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M33863_IG12: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r6]
ldr r1, [sp+0x08] // [V07 loc0]
ldr r2, [sp+0x0C] // [V07 loc0+0x04]
@@ -162,6 +149,36 @@ G_M33863_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
; gcrRegs +[r6]
b SHORT G_M33863_IG05
;; size=26 bbWeight=0 PerfScore 0.00
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ; gcrRegs -[r0 r6]
+ ldr r1, [sp+0x08] // [V07 loc0]
+ ldr r2, [sp+0x0C] // [V07 loc0+0x04]
+ ldr r3, [sp+0x10] // [V07 loc0+0x08]
+ mov r0, r4
+ ; gcrRegs +[r0]
+ movw lr, 0xd1ff
+ movt lr, 0xd1ff
+ ldr lr, [lr]
+ blx lr // <unknown method>
+ mov r6, r0
+ ; gcrRegs +[r6]
+ b SHORT G_M33863_IG05
+ ;; size=26 bbWeight=0 PerfScore 0.00
+G_M33863_IG14: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ ; gcrRegs -[r0 r6]
+ ldr r1, [sp+0x08] // [V07 loc0]
+ ldr r2, [sp+0x0C] // [V07 loc0+0x04]
+ ldr r3, [sp+0x10] // [V07 loc0+0x08]
+ mov r0, r4
+ ; gcrRegs +[r0]
+ movw lr, 0xd1ff
+ movt lr, 0xd1ff
+ ldr lr, [lr]
+ blx lr // <unknown method>
+ mov r6, r0
+ ; gcrRegs +[r6]
+ b SHORT G_M33863_IG05
+ ;; size=26 bbWeight=0 PerfScore 0.00
G_M33863_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r6]
ldr r1, [sp+0x08] // [V07 loc0]
@@ -172,7 +189,7 @@ G_M33863_IG15: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
movw lr, 0xd1ff
movt lr, 0xd1ff
ldr lr, [lr]
- blx lr // <unknown method>
+ blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateEvents(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeEventInfo[]:this
mov r6, r0
; gcrRegs +[r6]
b SHORT G_M33863_IG05
@@ -193,21 +210,6 @@ G_M33863_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
b SHORT G_M33863_IG05
;; size=26 bbWeight=0 PerfScore 0.00
G_M33863_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0 r6]
- ldr r1, [sp+0x08] // [V07 loc0]
- ldr r2, [sp+0x0C] // [V07 loc0+0x04]
- ldr r3, [sp+0x10] // [V07 loc0+0x08]
- mov r0, r4
- ; gcrRegs +[r0]
- movw lr, 0xd1ff
- movt lr, 0xd1ff
- ldr lr, [lr]
- blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateEvents(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeEventInfo[]:this
- mov r6, r0
- ; gcrRegs +[r6]
- b SHORT G_M33863_IG05
- ;; size=26 bbWeight=0 PerfScore 0.00
-G_M33863_IG18: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r6]
ldr r1, [sp+0x08] // [V07 loc0]
ldr r2, [sp+0x0C] // [V07 loc0+0x04]
@@ -222,22 +224,7 @@ G_M33863_IG18: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
; gcrRegs +[r6]
b SHORT G_M33863_IG05
;; size=26 bbWeight=0 PerfScore 0.00
-G_M33863_IG19: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0 r6]
- ldr r1, [sp+0x08] // [V07 loc0]
- ldr r2, [sp+0x0C] // [V07 loc0+0x04]
- ldr r3, [sp+0x10] // [V07 loc0+0x08]
- mov r0, r4
- ; gcrRegs +[r0]
- movw lr, 0xd1ff
- movt lr, 0xd1ff
- ldr lr, [lr]
- blx lr // <unknown method>
- mov r6, r0
- ; gcrRegs +[r6]
- b SHORT G_M33863_IG05
- ;; size=26 bbWeight=0 PerfScore 0.00
-G_M33863_IG20: ; bbWeight=0, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+G_M33863_IG18: ; bbWeight=0, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
movw r0, 0xd1ff
movt r0, 0xd1ff
@@ -249,16 +236,16 @@ G_M33863_IG20: ; bbWeight=0, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b
blx r3 // <unknown method>
b SHORT G_M33863_IG05
;; size=30 bbWeight=0 PerfScore 0.00
-RWD00 dd G_M33863_IG14
- dd G_M33863_IG15
+RWD00 dd G_M33863_IG12
+ dd G_M33863_IG13
dd G_M33863_IG04
...
+48 (+13.64%) : 2159.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Tier1)
@@ -12,44 +12,45 @@
; V01 arg1 [V01,T05] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Text.Encoding>
; V02 arg2 [V02,T04] ( 4, 3 ) int -> r5 single-def
; V03 OutArgs [V03 ] ( 1, 1 ) struct (24) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T00] ( 3, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <System.IO.FileStream>
-;* V05 tmp2 [V05,T12] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V04 tmp1 [V04,T00] ( 5, 8 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.IO.FileStream>
+;* V05 tmp2 [V05,T13] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref single-def
;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
;* V08 tmp5 [V08 ] ( 0, 0 ) int -> zero-ref
;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref
;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref
;* V11 tmp8 [V11 ] ( 0, 0 ) int -> zero-ref
-;* V12 tmp9 [V12,T08] ( 0, 0 ) ref -> zero-ref single-def
+;* V12 tmp9 [V12,T09] ( 0, 0 ) ref -> zero-ref single-def
;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref single-def
;* V14 tmp11 [V14 ] ( 0, 0 ) int -> zero-ref
;* V15 tmp12 [V15 ] ( 0, 0 ) int -> zero-ref
;* V16 tmp13 [V16 ] ( 0, 0 ) int -> zero-ref
-;* V17 tmp14 [V17,T09] ( 0, 0 ) int -> zero-ref
+;* V17 tmp14 [V17,T10] ( 0, 0 ) int -> zero-ref
;* V18 tmp15 [V18 ] ( 0, 0 ) int -> zero-ref
;* V19 tmp16 [V19 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[int]>
;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
;* V21 tmp18 [V21 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Nullable`1[int]>
;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.IO.Strategies.FileStreamStrategy>
-; V23 tmp20 [V23,T03] ( 3, 6 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.UnixFileStreamStrategy>
-; V24 tmp21 [V24,T06] ( 2, 2 ) ref -> r1 class-hnd single-def "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
-; V25 tmp22 [V25,T01] ( 4, 8 ) ref -> [sp+0x1C] class-hnd exact spill-single-def "NewObj constructor temp" <System.IO.Strategies.BufferedFileStreamStrategy>
+; V23 tmp20 [V23,T03] ( 3, 6 ) ref -> r7 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.UnixFileStreamStrategy>
+; V24 tmp21 [V24,T07] ( 3, 1.50) ref -> r8 class-hnd single-def "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
+; V25 tmp22 [V25,T01] ( 4, 8 ) ref -> r8 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.BufferedFileStreamStrategy>
;* V26 tmp23 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V27 tmp24 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V28 tmp25 [V28,T07] ( 2, 2 ) ref -> r1 class-hnd "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
-;* V29 tmp26 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.DerivedFileStreamStrategy>
+; V28 tmp25 [V28,T08] ( 3, 1.50) ref -> r1 class-hnd "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
+; V29 tmp26 [V29,T14] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.DerivedFileStreamStrategy>
;* V30 tmp27 [V30 ] ( 0, 0 ) ubyte -> zero-ref "field V19.hasValue (fldOffset=0x0)" P-INDEP
;* V31 tmp28 [V31 ] ( 0, 0 ) int -> zero-ref "field V19.value (fldOffset=0x4)" P-INDEP
-;* V32 tmp29 [V32,T10] ( 0, 0 ) ubyte -> zero-ref "field V21.hasValue (fldOffset=0x0)" P-INDEP
-;* V33 tmp30 [V33,T11] ( 0, 0 ) int -> zero-ref "field V21.value (fldOffset=0x4)" P-INDEP
-; V34 tmp31 [V34,T13] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
-; V35 tmp32 [V35,T14] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+;* V32 tmp29 [V32,T11] ( 0, 0 ) ubyte -> zero-ref "field V21.hasValue (fldOffset=0x0)" P-INDEP
+;* V33 tmp30 [V33,T12] ( 0, 0 ) int -> zero-ref "field V21.value (fldOffset=0x4)" P-INDEP
+; V34 tmp31 [V34,T15] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+; V35 tmp32 [V35,T16] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+; V36 cse0 [V36,T06] ( 3, 3 ) int -> r5 "CSE - aggressive"
;
-; Lcl frame size = 36
+; Lcl frame size = 28
G_M52285_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r11,lr}
- sub sp, 36
+ push {r4,r5,r6,r7,r8,r11,lr}
+ sub sp, 28
add r11, sp, 48
mov r4, r0
; gcrRegs +[r4]
@@ -58,33 +59,34 @@ G_M52285_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
G_M52285_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r1]
cmp r4, 0
- beq SHORT G_M52285_IG09
+ beq SHORT G_M52285_IG11
;; size=4 bbWeight=1 PerfScore 2.00
G_M52285_IG03: ; bbWeight=0.33, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r4+0x04]
cmp r0, 0
- beq SHORT G_M52285_IG09
+ beq SHORT G_M52285_IG11
;; size=6 bbWeight=0.33 PerfScore 1.00
G_M52285_IG04: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
cmp r1, 0
- beq SHORT G_M52285_IG10
+ beq SHORT G_M52285_IG12
cmp r5, 0
- ble G_M52285_IG11
- movw r0, 0xd1ff
- movt r0, 0xd1ff
+ ble G_M52285_IG13
+ movw r5, 0xd1ff
+ movt r5, 0xd1ff
+ mov r0, r5
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs -[r1] +[r0]
- mov r5, r0
- ; gcrRegs +[r5]
+ mov r6, r0
+ ; gcrRegs +[r6]
mov r0, 0x1000
; gcrRegs -[r0]
str r0, [sp]
movs r0, 0
str r0, [sp+0x04]
- ;; size=40 bbWeight=1 PerfScore 14.00
-G_M52285_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
+ ;; size=42 bbWeight=1 PerfScore 15.00
+G_M52285_IG05: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
movs r1, 0
str r0, [sp+0x08]
str r1, [sp+0x0C]
@@ -102,25 +104,25 @@ G_M52285_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
- mov r6, r0
- ; gcrRegs +[r6]
+ mov r7, r0
+ ; gcrRegs +[r7]
movs r0, 1
; gcrRegs -[r0]
str r0, [sp]
movs r0, 0
str r0, [sp+0x04]
;; size=56 bbWeight=1 PerfScore 21.00
-G_M52285_IG06: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+G_M52285_IG06: ; bbWeight=1, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}, byref
movs r1, 0
str r0, [sp+0x08]
str r1, [sp+0x0C]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M52285_IG07: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+G_M52285_IG07: ; bbWeight=1, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}, byref, isz
strb r0, [sp+0x10]
str r1, [sp+0x14]
- mov r0, r6
+ mov r0, r7
; gcrRegs +[r0]
mov r1, r4
; gcrRegs +[r1]
@@ -135,52 +137,55 @@ G_M52285_IG07: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
- mov r1, r0
- ; gcrRegs +[r1]
- str r1, [sp+0x1C]
- ; GC ptr vars +{V25}
- add r0, r1, 12
+ mov r8, r0
+ ; gcrRegs +[r8]
+ add r0, r8, 12
; gcrRegs -[r0]
; byrRegs +[r0]
- mov r1, r6
+ mov r1, r7
+ ; gcrRegs +[r1]
movw r12, 0xd1ff
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r6]
+ ; gcrRegs -[r1 r7]
; byrRegs -[r0]
mov r1, 0x1000
- ldr r0, [sp+0x1C]
- ; gcrRegs +[r0]
- str r1, [r0+0x14]
- mov r1, r0
+ str r1, [r8+0x14]
+ ldr r1, [r6]
+ cmp r1, r5
+ bne SHORT G_M52285_IG14
+ ;; size=78 bbWeight=1 PerfScore 26.00
+G_M52285_IG08: ; bbWeight=0.50, gcrefRegs=0140 {r6 r8}, byrefRegs=0000 {}, byref
+ mov r1, r8
; gcrRegs +[r1]
- add r0, r5, 8
- ; gcrRegs -[r0]
+ ;; size=2 bbWeight=0.50 PerfScore 0.50
+G_M52285_IG09: ; bbWeight=1, gcrefRegs=0042 {r1 r6}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[r8]
+ add r0, r6, 8
; byrRegs +[r0]
movw r12, 0xd1ff
movt r12, 0xd1ff
- ; GC ptr vars -{V25}
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1]
; byrRegs -[r0]
- mov r0, r5
+ mov r0, r6
; gcrRegs +[r0]
- ;; size=92 bbWeight=1 PerfScore 31.00
-G_M52285_IG08: ; bbWeight=1, epilog, nogc, extend
- add sp, 36
- pop {r4,r5,r6,r11,pc}
+ ;; size=16 bbWeight=1 PerfScore 5.00
+G_M52285_IG10: ; bbWeight=1, epilog, nogc, extend
+ add sp, 28
+ pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M52285_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
- ; gcrRegs -[r0 r5] +[r4]
+G_M52285_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
+ ; gcrRegs -[r0 r6] +[r4]
movw r0, 0xd1ff
movt 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]
@@ -192,14 +197,14 @@ G_M52285_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byr
; gcrRegs -[r0-r1 r4]
bkpt
;; size=44 bbWeight=0 PerfScore 0.00
-G_M52285_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M52285_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r0, 0xd1ff
movt 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
@@ -208,14 +213,14 @@ G_M52285_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0]
bkpt
;; size=40 bbWeight=0 PerfScore 0.00
-G_M52285_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M52285_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r0, 0xd1ff
movt 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
...
+48 (+13.64%) : 1432.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Instrumented Tier1)
@@ -12,44 +12,45 @@
; V01 arg1 [V01,T05] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Text.Encoding>
; V02 arg2 [V02,T04] ( 4, 3 ) int -> r5 single-def
; V03 OutArgs [V03 ] ( 1, 1 ) struct (24) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T00] ( 3, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <System.IO.FileStream>
-;* V05 tmp2 [V05,T12] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V04 tmp1 [V04,T00] ( 5, 8 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.IO.FileStream>
+;* V05 tmp2 [V05,T13] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref single-def
;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref single-def
;* V08 tmp5 [V08 ] ( 0, 0 ) int -> zero-ref
;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref
;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref
;* V11 tmp8 [V11 ] ( 0, 0 ) int -> zero-ref
-;* V12 tmp9 [V12,T08] ( 0, 0 ) ref -> zero-ref single-def
+;* V12 tmp9 [V12,T09] ( 0, 0 ) ref -> zero-ref single-def
;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref single-def
;* V14 tmp11 [V14 ] ( 0, 0 ) int -> zero-ref
;* V15 tmp12 [V15 ] ( 0, 0 ) int -> zero-ref
;* V16 tmp13 [V16 ] ( 0, 0 ) int -> zero-ref
-;* V17 tmp14 [V17,T09] ( 0, 0 ) int -> zero-ref
+;* V17 tmp14 [V17,T10] ( 0, 0 ) int -> zero-ref
;* V18 tmp15 [V18 ] ( 0, 0 ) int -> zero-ref
;* V19 tmp16 [V19 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[int]>
;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
;* V21 tmp18 [V21 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Nullable`1[int]>
;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.IO.Strategies.FileStreamStrategy>
-; V23 tmp20 [V23,T03] ( 3, 6 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.UnixFileStreamStrategy>
-; V24 tmp21 [V24,T06] ( 2, 2 ) ref -> r1 class-hnd single-def "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
-; V25 tmp22 [V25,T01] ( 4, 8 ) ref -> [sp+0x1C] class-hnd exact spill-single-def "NewObj constructor temp" <System.IO.Strategies.BufferedFileStreamStrategy>
+; V23 tmp20 [V23,T03] ( 3, 6 ) ref -> r7 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.UnixFileStreamStrategy>
+; V24 tmp21 [V24,T07] ( 3, 1.50) ref -> r8 class-hnd single-def "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
+; V25 tmp22 [V25,T01] ( 4, 8 ) ref -> r8 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.BufferedFileStreamStrategy>
;* V26 tmp23 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V27 tmp24 [V27 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V28 tmp25 [V28,T07] ( 2, 2 ) ref -> r1 class-hnd "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
-;* V29 tmp26 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.DerivedFileStreamStrategy>
+; V28 tmp25 [V28,T08] ( 3, 1.50) ref -> r1 class-hnd "Inline return value spill temp" <System.IO.Strategies.FileStreamStrategy>
+; V29 tmp26 [V29,T14] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.IO.Strategies.DerivedFileStreamStrategy>
;* V30 tmp27 [V30 ] ( 0, 0 ) ubyte -> zero-ref "field V19.hasValue (fldOffset=0x0)" P-INDEP
;* V31 tmp28 [V31 ] ( 0, 0 ) int -> zero-ref "field V19.value (fldOffset=0x4)" P-INDEP
-;* V32 tmp29 [V32,T10] ( 0, 0 ) ubyte -> zero-ref "field V21.hasValue (fldOffset=0x0)" P-INDEP
-;* V33 tmp30 [V33,T11] ( 0, 0 ) int -> zero-ref "field V21.value (fldOffset=0x4)" P-INDEP
-; V34 tmp31 [V34,T13] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
-; V35 tmp32 [V35,T14] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+;* V32 tmp29 [V32,T11] ( 0, 0 ) ubyte -> zero-ref "field V21.hasValue (fldOffset=0x0)" P-INDEP
+;* V33 tmp30 [V33,T12] ( 0, 0 ) int -> zero-ref "field V21.value (fldOffset=0x4)" P-INDEP
+; V34 tmp31 [V34,T15] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+; V35 tmp32 [V35,T16] ( 2, 0 ) ref -> r1 single-def "argument with side effect"
+; V36 cse0 [V36,T06] ( 3, 3 ) int -> r5 "CSE - aggressive"
;
-; Lcl frame size = 36
+; Lcl frame size = 28
G_M52285_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r11,lr}
- sub sp, 36
+ push {r4,r5,r6,r7,r8,r11,lr}
+ sub sp, 28
add r11, sp, 48
mov r4, r0
; gcrRegs +[r4]
@@ -58,33 +59,34 @@ G_M52285_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
G_M52285_IG02: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r1]
cmp r4, 0
- beq SHORT G_M52285_IG09
+ beq SHORT G_M52285_IG11
;; size=4 bbWeight=1 PerfScore 2.00
G_M52285_IG03: ; bbWeight=0.33, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
ldr r0, [r4+0x04]
cmp r0, 0
- beq SHORT G_M52285_IG09
+ beq SHORT G_M52285_IG11
;; size=6 bbWeight=0.33 PerfScore 1.00
G_M52285_IG04: ; bbWeight=1, gcrefRegs=0012 {r1 r4}, byrefRegs=0000 {}, byref, isz
cmp r1, 0
- beq SHORT G_M52285_IG10
+ beq SHORT G_M52285_IG12
cmp r5, 0
- ble G_M52285_IG11
- movw r0, 0xd1ff
- movt r0, 0xd1ff
+ ble G_M52285_IG13
+ movw r5, 0xd1ff
+ movt r5, 0xd1ff
+ mov r0, r5
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs -[r1] +[r0]
- mov r5, r0
- ; gcrRegs +[r5]
+ mov r6, r0
+ ; gcrRegs +[r6]
mov r0, 0x1000
; gcrRegs -[r0]
str r0, [sp]
movs r0, 0
str r0, [sp+0x04]
- ;; size=40 bbWeight=1 PerfScore 14.00
-G_M52285_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref
+ ;; size=42 bbWeight=1 PerfScore 15.00
+G_M52285_IG05: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
movs r1, 0
str r0, [sp+0x08]
str r1, [sp+0x0C]
@@ -102,25 +104,25 @@ G_M52285_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
- mov r6, r0
- ; gcrRegs +[r6]
+ mov r7, r0
+ ; gcrRegs +[r7]
movs r0, 1
; gcrRegs -[r0]
str r0, [sp]
movs r0, 0
str r0, [sp+0x04]
;; size=56 bbWeight=1 PerfScore 21.00
-G_M52285_IG06: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+G_M52285_IG06: ; bbWeight=1, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}, byref
movs r1, 0
str r0, [sp+0x08]
str r1, [sp+0x0C]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M52285_IG07: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}, byref
+G_M52285_IG07: ; bbWeight=1, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}, byref, isz
strb r0, [sp+0x10]
str r1, [sp+0x14]
- mov r0, r6
+ mov r0, r7
; gcrRegs +[r0]
mov r1, r4
; gcrRegs +[r1]
@@ -135,52 +137,55 @@ G_M52285_IG07: ; bbWeight=1, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000 {}
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
- mov r1, r0
- ; gcrRegs +[r1]
- str r1, [sp+0x1C]
- ; GC ptr vars +{V25}
- add r0, r1, 12
+ mov r8, r0
+ ; gcrRegs +[r8]
+ add r0, r8, 12
; gcrRegs -[r0]
; byrRegs +[r0]
- mov r1, r6
+ mov r1, r7
+ ; gcrRegs +[r1]
movw r12, 0xd1ff
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r6]
+ ; gcrRegs -[r1 r7]
; byrRegs -[r0]
mov r1, 0x1000
- ldr r0, [sp+0x1C]
- ; gcrRegs +[r0]
- str r1, [r0+0x14]
- mov r1, r0
+ str r1, [r8+0x14]
+ ldr r1, [r6]
+ cmp r1, r5
+ bne SHORT G_M52285_IG14
+ ;; size=78 bbWeight=1 PerfScore 26.00
+G_M52285_IG08: ; bbWeight=0.50, gcrefRegs=0140 {r6 r8}, byrefRegs=0000 {}, byref
+ mov r1, r8
; gcrRegs +[r1]
- add r0, r5, 8
- ; gcrRegs -[r0]
+ ;; size=2 bbWeight=0.50 PerfScore 0.50
+G_M52285_IG09: ; bbWeight=1, gcrefRegs=0042 {r1 r6}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[r8]
+ add r0, r6, 8
; byrRegs +[r0]
movw r12, 0xd1ff
movt r12, 0xd1ff
- ; GC ptr vars -{V25}
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1]
; byrRegs -[r0]
- mov r0, r5
+ mov r0, r6
; gcrRegs +[r0]
- ;; size=92 bbWeight=1 PerfScore 31.00
-G_M52285_IG08: ; bbWeight=1, epilog, nogc, extend
- add sp, 36
- pop {r4,r5,r6,r11,pc}
+ ;; size=16 bbWeight=1 PerfScore 5.00
+G_M52285_IG10: ; bbWeight=1, epilog, nogc, extend
+ add sp, 28
+ pop {r4,r5,r6,r7,r8,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M52285_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
- ; gcrRegs -[r0 r5] +[r4]
+G_M52285_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref
+ ; gcrRegs -[r0 r6] +[r4]
movw r0, 0xd1ff
movt 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]
@@ -192,14 +197,14 @@ G_M52285_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byr
; gcrRegs -[r0-r1 r4]
bkpt
;; size=44 bbWeight=0 PerfScore 0.00
-G_M52285_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M52285_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r0, 0xd1ff
movt 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
@@ -208,14 +213,14 @@ G_M52285_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r0]
bkpt
;; size=40 bbWeight=0 PerfScore 0.00
-G_M52285_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M52285_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r0, 0xd1ff
movt 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
...
+32 (+27.12%) : 4541.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
@@ -9,101 +9,122 @@
; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 3, 2.09) ref -> r5 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
-; V01 TypeCtx [V01,T00] ( 5, 3.12) int -> r1 single-def
-; V02 arg1 [V02,T01] ( 4, 3.09) byref -> r4 single-def
+; V00 this [V00,T02] ( 3, 2.09) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T00] ( 7, 3.23) int -> r4 single-def
+; V02 arg1 [V02,T01] ( 4, 3.09) byref -> r5 single-def
; V03 loc0 [V03,T03] ( 6, 3.26) 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, 0.68) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 0.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, 0.34) int -> r0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 0.34) int -> r0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 0.48) int -> r0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 0.38) int -> r0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 0.38) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V12 rat3 [V12,T10] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V13 rat4 [V13,T06] ( 3, 0.48) int -> r0 "spilling expr"
+; V14 rat5 [V14,T08] ( 2, 0.27) 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
beq SHORT G_M58319_IG04
;; size=6 bbWeight=1 PerfScore 3.00
G_M58319_IG03: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[r5]
- ; byrRegs -[r4]
- add sp, 12
- pop {r4,r5,r6,r11,pc}
- ;; size=6 bbWeight=1 PerfScore 2.00
-G_M58319_IG04: ; bbWeight=0.09, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, gcvars, byref, isz
- ; gcrRegs -[r0] +[r5]
- ; byrRegs +[r4]
- ldr r0, [r1+0x20]
- ldr r3, [r0+0x04]
- cmp r3, 12
+ ; gcrRegs -[r6]
+ ; byrRegs -[r5]
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
+G_M58319_IG04: ; bbWeight=0.09, gcVars=00000000 {}, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, gcvars, byref, isz
+ ; gcrRegs -[r0] +[r6]
+ ; byrRegs +[r5]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
ble SHORT G_M58319_IG07
;; size=8 bbWeight=0.09 PerfScore 0.34
-G_M58319_IG05: ; bbWeight=0.07, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG05: ; bbWeight=0.07, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
ldr r0, [r0+0x0C]
cmp r0, 0
beq SHORT G_M58319_IG07
;; size=6 bbWeight=0.07 PerfScore 0.20
-G_M58319_IG06: ; bbWeight=0.05, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG06: ; bbWeight=0.05, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
b SHORT G_M58319_IG08
;; size=2 bbWeight=0.05 PerfScore 0.05
-G_M58319_IG07: ; bbWeight=0.03, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref
- mov r0, r1
+G_M58319_IG07: ; bbWeight=0.03, gcrefRegs=0040 {r6}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.03 PerfScore 0.18
-G_M58319_IG08: ; bbWeight=0.09, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG08: ; bbWeight=0.09, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
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]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 16
+ ble SHORT G_M58319_IG10
+ ;; size=36 bbWeight=0.09 PerfScore 1.11
+G_M58319_IG09: ; bbWeight=0.07, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x10]
+ cmp r0, 0
+ bne SHORT G_M58319_IG11
+ ;; size=6 bbWeight=0.07 PerfScore 0.20
+G_M58319_IG10: ; bbWeight=0.03, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref
mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.03 PerfScore 0.18
+G_M58319_IG11: ; bbWeight=0.09, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ 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_IG03
- mov r0, r6
+ mov r0, r7
b SHORT G_M58319_IG03
- ;; size=52 bbWeight=0.09 PerfScore 1.62
+ ;; size=24 bbWeight=0.09 PerfScore 0.85
-; Total bytes of code 118, prolog size 14, PerfScore 13.41, instruction count 44, 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)
+; Total bytes of code 150, prolog size 12, PerfScore 13.14, instruction count 56, allocated bytes for code 150 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================
Unwind Info:
@@ -115,7 +136,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ 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)
@@ -123,7 +144,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- 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
libraries.pmi.linux.arm.checked.mch
-38 (-30.65%) : 20699.dasm - System.ValueTuple2[System.__Canon,System.Nullable
1[int]]:GetHashCode():int:this (FullOpts)
@@ -10,31 +10,31 @@
;
; V00 this [V00,T00] ( 6, 5.50) byref -> r4 this single-def
;* V01 TypeCtx [V01 ] ( 0, 0 ) int -> zero-ref single-def
-; V02 loc0 [V02 ] ( 4, 2.50) ref -> [sp+0x0C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [sp+0x04] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V02 loc0 [V02 ] ( 4, 2.50) ref -> [sp+0x04] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
+;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 tmp1 [V05 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
-; V06 tmp2 [V06,T04] ( 3, 2 ) byref -> r0
-; V07 tmp3 [V07,T05] ( 3, 2 ) int -> r0
-; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> r1 single-def "impAppendStmt"
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> r0
+; V07 tmp3 [V07,T04] ( 3, 2 ) int -> r0
+; V08 tmp4 [V08,T01] ( 3, 4.03) byref -> r1 single-def "impAppendStmt"
;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref
-; V10 tmp6 [V10,T03] ( 4, 2.02) byref -> r3
+;* V10 tmp6 [V10 ] ( 0, 0 ) byref -> zero-ref single-def
;* V11 tmp7 [V11 ] ( 0, 0 ) int -> zero-ref
-; V12 tmp8 [V12,T06] ( 3, 2 ) int -> r1
-; V13 tmp9 [V13,T07] ( 3, 1 ) int -> r1 "Inline return value spill temp"
+;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref
+; V13 tmp9 [V13,T05] ( 3, 1.50) int -> r1 "Inline return value spill temp"
;* V14 tmp10 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V15 tmp11 [V15 ] ( 5, 3.50) ubyte -> [sp+0x04] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP
-; V16 tmp12 [V16 ] ( 3, 2 ) int -> [sp+0x08] do-not-enreg[X] addr-exposed "field V03.value (fldOffset=0x4)" P-DEP
+;* V15 tmp11 [V15 ] ( 0, 0 ) ubyte -> zero-ref "field V03.hasValue (fldOffset=0x0)" P-INDEP
+;* V16 tmp12 [V16 ] ( 0, 0 ) int -> zero-ref "field V03.value (fldOffset=0x4)" P-INDEP
; V17 tmp13 [V17,T02] ( 3, 3 ) ref -> r0 single-def "argument with side effect"
;
-; Lcl frame size = 20
+; Lcl frame size = 12
G_M34277_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r4,r11,lr}
- sub sp, 20
- add r11, sp, 24
+ sub sp, 12
+ add r11, sp, 16
movs r2, 0
- str r2, [sp+0x0C] // [V02 loc0]
+ str r2, [sp+0x04] // [V02 loc0]
mov r4, r0
; byrRegs +[r4]
;; size=16 bbWeight=1 PerfScore 6.00
@@ -42,7 +42,7 @@ G_M34277_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byre
ldrsb r0, [r4]
mov r0, r4
; byrRegs +[r0]
- ldr r3, [sp+0x0C]
+ ldr r3, [sp+0x04]
; gcrRegs +[r3]
cmp r3, 0
bne SHORT G_M34277_IG04
@@ -52,11 +52,11 @@ G_M34277_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, b
; byrRegs -[r0]
ldr r0, [r4]
; gcrRegs +[r0]
- str r0, [sp+0x0C] // [V02 loc0]
- add r0, sp, 12 // [V02 loc0]
+ str r0, [sp+0x04] // [V02 loc0]
+ add r0, sp, 4 // [V02 loc0]
; gcrRegs -[r0]
; byrRegs +[r0]
- ldr r3, [sp+0x0C] // [V02 loc0]
+ ldr r3, [sp+0x04] // [V02 loc0]
; gcrRegs +[r3]
cmp r3, 0
bne SHORT G_M34277_IG04
@@ -79,57 +79,32 @@ G_M34277_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0011 {r0 r4}
G_M34277_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz
adds r1, r4, 4
; byrRegs +[r1]
- movs r3, 0
- str r3, [sp+0x04] // [V03 loc1]
- str r3, [sp+0x08] // [V03 loc1+0x04]
- mov r3, r1
- ; byrRegs +[r3]
- ldrb r2, [sp+0x04] // [V15 tmp11]
- cmp r2, 0
- bne SHORT G_M34277_IG07
- ;; size=18 bbWeight=1 PerfScore 8.00
-G_M34277_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref, isz
- ; byrRegs -[r3-r4]
- ldr r3, [r1]
- str r3, [sp+0x04] // [V03 loc1]
- ldr r3, [r1+0x04]
- str r3, [sp+0x08] // [V03 loc1+0x04]
- add r3, sp, 4 // [V03 loc1]
- ; byrRegs +[r3]
- ldrb r1, [sp+0x04] // [V15 tmp11]
- ; byrRegs -[r1]
- cmp r1, 0
+ ldrb r3, [r1]
+ cmp r3, 0
bne SHORT G_M34277_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M34277_IG06: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ; byrRegs -[r1 r4]
movs r1, 0
- b SHORT G_M34277_IG10
- ;; size=22 bbWeight=0.50 PerfScore 5.00
-G_M34277_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0008 {r3}, byref, isz
- ldrb r1, [r3]
- cmp r1, 0
- bne SHORT G_M34277_IG09
- ;; size=6 bbWeight=0.50 PerfScore 1.50
-G_M34277_IG08: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ; byrRegs -[r3]
- movs r1, 0
- b SHORT G_M34277_IG10
+ b SHORT G_M34277_IG08
;; size=4 bbWeight=0.48 PerfScore 0.97
-G_M34277_IG09: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0008 {r3}, byref
- ; byrRegs +[r3]
- ldr r1, [r3+0x04]
+G_M34277_IG07: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0002 {r1}, byref
+ ; byrRegs +[r1]
+ ldr r1, [r1+0x04]
+ ; byrRegs -[r1]
;; size=2 bbWeight=0.02 PerfScore 0.02
-G_M34277_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ; byrRegs -[r3]
+G_M34277_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
blx r3 // <unknown method>
;; size=12 bbWeight=1 PerfScore 4.00
-G_M34277_IG11: ; bbWeight=1, epilog, nogc, extend
- add sp, 20
+G_M34277_IG09: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
pop {r4,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 124, prolog size 14, PerfScore 38.98, instruction count 54, allocated bytes for code 124 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
+; Total bytes of code 86, prolog size 14, PerfScore 28.48, instruction count 37, allocated bytes for code 86 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
; ============================================================
Unwind Info:
@@ -141,11 +116,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 62 (0x0003e) Actual length = 124 (0x00007c)
+ Function Length : 43 (0x0002b) Actual length = 86 (0x000056)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
- 05 add sp, sp, #20 ; opsize 16
+ 03 add sp, sp, #12 ; opsize 16
A8 10 pop {r4,r11,lr} ; opsize 32
FF end
-42 (-25.30%) : 20703.dasm - System.ValueTuple2[System.__Canon,System.Nullable
1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
@@ -10,41 +10,40 @@
;
; V00 this [V00,T00] ( 6, 5.50) byref -> r4 this single-def
;* V01 TypeCtx [V01 ] ( 0, 0 ) int -> zero-ref single-def
-; V02 loc0 [V02 ] ( 4, 2.50) ref -> [sp+0x0C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [sp+0x04] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V02 loc0 [V02 ] ( 4, 2.50) ref -> [sp+0x04] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
+;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 tmp1 [V05 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
-; V06 tmp2 [V06,T04] ( 3, 2 ) byref -> r0
-; V07 tmp3 [V07,T05] ( 3, 2 ) ref -> r5
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> r0
+; V07 tmp3 [V07,T04] ( 3, 2 ) ref -> r5
; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> r0 single-def "impAppendStmt"
;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref single-def
-;* V10 tmp6 [V10,T08] ( 0, 0 ) ref -> zero-ref single-def
-; V11 tmp7 [V11,T03] ( 4, 2.50) byref -> r3
+;* V10 tmp6 [V10,T06] ( 0, 0 ) ref -> zero-ref single-def
+;* V11 tmp7 [V11 ] ( 0, 0 ) byref -> zero-ref single-def
;* V12 tmp8 [V12 ] ( 0, 0 ) ref -> zero-ref
;* V13 tmp9 [V13 ] ( 0, 0 ) ref -> zero-ref
-; V14 tmp10 [V14,T06] ( 3, 2 ) ref -> r2
-; V15 tmp11 [V15,T07] ( 3, 1.50) ref -> r2 class-hnd "Inline return value spill temp" <System.String>
+;* V14 tmp10 [V14 ] ( 0, 0 ) ref -> zero-ref
+; V15 tmp11 [V15,T05] ( 3, 2 ) ref -> r2 class-hnd "Inline return value spill temp" <System.String>
;* V16 tmp12 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V17 tmp13 [V17 ] ( 5, 3.50) ubyte -> [sp+0x04] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP
-; V18 tmp14 [V18 ] ( 3, 2 ) int -> [sp+0x08] do-not-enreg[X] addr-exposed "field V03.value (fldOffset=0x4)" P-DEP
+;* V17 tmp13 [V17 ] ( 0, 0 ) ubyte -> zero-ref "field V03.hasValue (fldOffset=0x0)" P-INDEP
+;* V18 tmp14 [V18 ] ( 0, 0 ) int -> zero-ref "field V03.value (fldOffset=0x4)" P-INDEP
; V19 tmp15 [V19,T02] ( 3, 3 ) ref -> r0 single-def "argument with side effect"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M39544_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r11,lr}
- sub sp, 16
- add r11, sp, 24
+ push {r2,r3,r4,r5,r11,lr}
+ add r11, sp, 16
movs r2, 0
- str r2, [sp+0x0C] // [V02 loc0]
+ str r2, [sp+0x04] // [V02 loc0]
mov r4, r0
; byrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 6.00
+ ;; size=14 bbWeight=1 PerfScore 5.00
G_M39544_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz
ldrsb r0, [r4]
mov r0, r4
; byrRegs +[r0]
- ldr r3, [sp+0x0C]
+ ldr r3, [sp+0x04]
; gcrRegs +[r3]
cmp r3, 0
bne SHORT G_M39544_IG04
@@ -54,11 +53,11 @@ G_M39544_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, b
; byrRegs -[r0]
ldr r0, [r4]
; gcrRegs +[r0]
- str r0, [sp+0x0C] // [V02 loc0]
- add r0, sp, 12 // [V02 loc0]
+ str r0, [sp+0x04] // [V02 loc0]
+ add r0, sp, 4 // [V02 loc0]
; gcrRegs -[r0]
; byrRegs +[r0]
- ldr r3, [sp+0x0C] // [V02 loc0]
+ ldr r3, [sp+0x04] // [V02 loc0]
; gcrRegs +[r3]
cmp r3, 0
bne SHORT G_M39544_IG04
@@ -81,42 +80,21 @@ G_M39544_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, by
; gcrRegs -[r0]
adds r0, r4, 4
; byrRegs +[r0]
- movs r3, 0
- str r3, [sp+0x04] // [V03 loc1]
- str r3, [sp+0x08] // [V03 loc1+0x04]
- mov r3, r0
- ; byrRegs +[r3]
- ldrb r2, [sp+0x04] // [V17 tmp13]
- cmp r2, 0
+ ldrb r3, [r0]
+ cmp r3, 0
bne SHORT G_M39544_IG07
- ;; size=18 bbWeight=1 PerfScore 8.00
-G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0001 {r0}, byref, isz
- ; byrRegs -[r3-r4]
- ldr r3, [r0]
- str r3, [sp+0x04] // [V03 loc1]
- ldr r3, [r0+0x04]
- str r3, [sp+0x08] // [V03 loc1+0x04]
- add r3, sp, 4 // [V03 loc1]
- ; byrRegs +[r3]
- ldrb r0, [sp+0x04] // [V17 tmp13]
- ; byrRegs -[r0]
- cmp r0, 0
- bne SHORT G_M39544_IG07
- movs r2, 0
- b SHORT G_M39544_IG09
- ;; size=22 bbWeight=0.50 PerfScore 5.00
-G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0008 {r3}, byref, isz
- ldrb r0, [r3]
- cmp r0, 0
- bne SHORT G_M39544_IG08
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ; byrRegs -[r0 r4]
movw r2, 0xd1ff
movt r2, 0xd1ff
- b SHORT G_M39544_IG09
- ;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0008 {r3}, byref
- ldr r0, [r3+0x04]
+ b SHORT G_M39544_IG08
+ ;; size=10 bbWeight=0.50 PerfScore 1.50
+G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0001 {r0}, byref
+ ; byrRegs +[r0]
+ ldr r0, [r0+0x04]
+ ; byrRegs -[r0]
movw r3, 0xd1ff
- ; byrRegs -[r3]
movt r3, 0xd1ff
ldr r3, [r3]
blx r3 // System.Number:Int32ToDecStr(int):System.String
@@ -124,7 +102,7 @@ G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0008 {r3},
mov r2, r0
; gcrRegs +[r2]
;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M39544_IG09: ; bbWeight=1, gcrefRegs=0024 {r2 r5}, byrefRegs=0000 {}, byref
+G_M39544_IG08: ; bbWeight=1, gcrefRegs=0024 {r2 r5}, byrefRegs=0000 {}, byref
; gcrRegs -[r0]
mov r0, r5
; gcrRegs +[r0]
@@ -138,12 +116,11 @@ G_M39544_IG09: ; bbWeight=1, gcrefRegs=0024 {r2 r5}, byrefRegs=0000 {}, b
blx lr // <unknown method>
; gcrRegs -[r2 r5]
;; size=32 bbWeight=1 PerfScore 9.00
-G_M39544_IG10: ; bbWeight=1, epilog, nogc, extend
- add sp, 16
- pop {r4,r5,r11,pc}
- ;; size=6 bbWeight=1 PerfScore 2.00
+G_M39544_IG09: ; bbWeight=1, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 166, prolog size 14, PerfScore 48.00, instruction count 66, allocated bytes for code 166 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
+; Total bytes of code 124, prolog size 12, PerfScore 35.50, instruction count 47, allocated bytes for code 124 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
; ============================================================
Unwind Info:
@@ -155,11 +132,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 83 (0x00053) Actual length = 166 (0x0000a6)
+ Function Length : 62 (0x0003e) Actual length = 124 (0x00007c)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
- 04 add sp, sp, #16 ; opsize 16
- A8 30 pop {r4,r5,r11,lr} ; opsize 32
+ A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
+ FF end
FF end
-36 (-17.14%) : 17975.dasm - System.HashCode:Combine[System.__Canon,System.Nullable1[int]](System.__Canon,System.Nullable
1[int]):int (FullOpts)
@@ -9,40 +9,40 @@
; Final local variable assignments
;
;* V00 TypeCtx [V00 ] ( 0, 0 ) int -> zero-ref single-def
-; V01 arg0 [V01 ] ( 3, 3 ) ref -> [sp+0x0C] do-not-enreg[X] addr-exposed ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg1 [V02 ] ( 3, 3 ) struct ( 8) [sp+0x20] do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Nullable`1[int]>
+; V01 arg0 [V01 ] ( 3, 3 ) ref -> [sp+0x04] do-not-enreg[X] addr-exposed ld-addr-op class-hnd single-def <System.__Canon>
+; V02 arg1 [V02 ] ( 3, 3 ) struct ( 8) [sp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Nullable`1[int]>
;* V03 loc0 [V03 ] ( 0, 0 ) int -> zero-ref
;* V04 loc1 [V04 ] ( 0, 0 ) int -> zero-ref
; V05 loc2 [V05,T02] ( 3, 3 ) int -> r0
-; V06 loc3 [V06 ] ( 4, 2.50) ref -> [sp+0x08] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V07 loc4 [V07 ] ( 5, 3.50) struct ( 8) [sp+0x00] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V06 loc3 [V06 ] ( 4, 2.50) ref -> [sp+0x00] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
+;* V07 loc4 [V07 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V09 tmp1 [V09,T04] ( 4, 2.50) byref -> r0
+; V09 tmp1 [V09,T03] ( 4, 2.50) byref -> r0
; V10 tmp2 [V10,T05] ( 3, 2 ) int -> r4
-; V11 tmp3 [V11,T03] ( 5, 2.52) byref -> r0
-; V12 tmp4 [V12,T06] ( 3, 2 ) int -> r3
-; V13 tmp5 [V13,T07] ( 3, 1 ) int -> r3 "Inline return value spill temp"
+; V11 tmp3 [V11,T04] ( 3, 2.02) byref -> r0 single-def
+;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref
+; V13 tmp5 [V13,T06] ( 3, 1.50) int -> r3 "Inline return value spill temp"
;* V14 tmp6 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
; V15 tmp7 [V15,T00] ( 6, 12 ) int -> r0 "Inlining Arg"
-; V16 tmp8 [V16 ] ( 5, 3.50) ubyte -> [sp+0x00] do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
-; V17 tmp9 [V17 ] ( 3, 2 ) int -> [sp+0x04] do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
+;* V16 tmp8 [V16 ] ( 0, 0 ) ubyte -> zero-ref "field V07.hasValue (fldOffset=0x0)" P-INDEP
+;* V17 tmp9 [V17 ] ( 0, 0 ) int -> zero-ref "field V07.value (fldOffset=0x4)" P-INDEP
; V18 tmp10 [V18,T01] ( 3, 3 ) ref -> r0 single-def "argument with side effect"
;
-; Lcl frame size = 20
+; Lcl frame size = 12
G_M60379_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r2,r3}
push {r4,r11,lr}
- sub sp, 20
- add r11, sp, 24
+ sub sp, 12
+ add r11, sp, 16
movs r2, 0
- str r2, [sp+0x08] // [V06 loc3]
- str r1, [sp+0x0C] // [V01 arg0]
+ str r2, [sp] // [V06 loc3]
+ str r1, [sp+0x04] // [V01 arg0]
;; size=18 bbWeight=1 PerfScore 7.00
G_M60379_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- add r0, sp, 12
+ add r0, sp, 4
; byrRegs +[r0]
- ldr r3, [sp+0x08]
+ ldr r3, [sp]
; gcrRegs +[r3]
cmp r3, 0
bne SHORT G_M60379_IG04
@@ -52,11 +52,11 @@ G_M60379_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {r0}, b
ldr r0, [r0]
; gcrRegs +[r0]
; byrRegs -[r0]
- str r0, [sp+0x08] // [V06 loc3]
- add r0, sp, 8 // [V06 loc3]
+ str r0, [sp] // [V06 loc3]
+ add r0, sp, 0 // [V06 loc3]
; gcrRegs -[r0]
; byrRegs +[r0]
- ldr r3, [sp+0x08] // [V06 loc3]
+ ldr r3, [sp] // [V06 loc3]
; gcrRegs +[r3]
cmp r3, 0
bne SHORT G_M60379_IG04
@@ -76,42 +76,22 @@ G_M60379_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {r0}, b
mov r4, r0
;; size=12 bbWeight=0.50 PerfScore 3.00
G_M60379_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movs r0, 0
- str r0, [sp] // [V07 loc4]
- str r0, [sp+0x04] // [V07 loc4+0x04]
- add r0, sp, 32 // [V02 arg1]
+ add r0, sp, 24 // [V02 arg1]
; byrRegs +[r0]
- ldrb r3, [sp] // [V16 tmp8]
- cmp r3, 0
- bne SHORT G_M60379_IG07
- ;; size=16 bbWeight=1 PerfScore 7.00
-G_M60379_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {r0}, byref, isz
- ldr r3, [r0]
- str r3, [sp] // [V07 loc4]
- ldr r3, [r0+0x04]
- str r3, [sp+0x04] // [V07 loc4+0x04]
- add r0, sp, 0 // [V07 loc4]
- ldrb r3, [sp] // [V16 tmp8]
- cmp r3, 0
- bne SHORT G_M60379_IG07
- movs r3, 0
- b SHORT G_M60379_IG10
- ;; size=22 bbWeight=0.50 PerfScore 5.00
-G_M60379_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {r0}, byref, isz
ldrb r3, [r0]
cmp r3, 0
- bne SHORT G_M60379_IG09
- ;; size=6 bbWeight=0.50 PerfScore 1.50
-G_M60379_IG08: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ bne SHORT G_M60379_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M60379_IG06: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
; byrRegs -[r0]
movs r3, 0
- b SHORT G_M60379_IG10
+ b SHORT G_M60379_IG08
;; size=4 bbWeight=0.48 PerfScore 0.97
-G_M60379_IG09: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0001 {r0}, byref
+G_M60379_IG07: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0001 {r0}, byref
; byrRegs +[r0]
ldr r3, [r0+0x04]
;; size=2 bbWeight=0.02 PerfScore 0.02
-G_M60379_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M60379_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; byrRegs -[r0]
movw r0, 0xd1ff
movt r0, 0xd1ff
@@ -142,14 +122,14 @@ G_M60379_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
lsrs r3, r0, 16
eors r0, r3
;; size=96 bbWeight=1 PerfScore 28.00
-G_M60379_IG11: ; bbWeight=1, epilog, nogc, extend
- add sp, 20
+G_M60379_IG09: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
pop {r4,r11,lr}
add sp, 8
bx lr
;; size=10 bbWeight=1 PerfScore 4.00
-; Total bytes of code 210, prolog size 16, PerfScore 64.48, instruction count 80, allocated bytes for code 210 (MethodHash=6b5b1424) for method System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
+; Total bytes of code 174, prolog size 16, PerfScore 54.98, instruction count 64, allocated bytes for code 174 (MethodHash=6b5b1424) for method System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
; ============================================================
Unwind Info:
@@ -161,19 +141,19 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 105 (0x00069) Actual length = 210 (0x0000d2)
+ Function Length : 87 (0x00057) Actual length = 174 (0x0000ae)
---- 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 ----
- 05 add sp, sp, #20 ; opsize 16
+ 03 add sp, sp, #12 ; opsize 16
A8 10 pop {r4,r11,lr} ; opsize 32
EC 0C pop {r2,r3} ; opsize 16
FF end
---- Epilog start at index 6 ----
- 05 add sp, sp, #20 ; opsize 16
+ 03 add sp, sp, #12 ; opsize 16
A8 10 pop {r4,r11,lr} ; opsize 32
02 add sp, sp, #8 ; opsize 16
FD end + nop ; opsize 16
+26 (+27.08%) : 12984.dasm - Microsoft.FSharp.Core.ValueOption:ContainsSystem.__Canon:ubyte (FullOpts)
@@ -8,86 +8,102 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T00] ( 5, 3.68) int -> r0 single-def
-; V01 arg0 [V01,T02] ( 3, 2.50) ref -> r4 class-hnd single-def <System.__Canon>
-; V02 arg1 [V02,T01] ( 4, 3.50) struct ( 8) [sp+0x18] do-not-enreg[SF] ld-addr-op single-def <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 4.88) int -> r4 single-def
+; V01 arg0 [V01,T03] ( 3, 2.50) ref -> r5 class-hnd single-def <System.__Canon>
+; V02 arg1 [V02,T02] ( 4, 3.50) struct ( 8) [sp+0x18] do-not-enreg[SF] ld-addr-op single-def <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
;# 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 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T06] ( 2, 2 ) int -> r0 "argument with side effect"
-; V08 rat0 [V08,T05] ( 3, 2 ) int -> r0 "runtime lookup"
-; V09 rat1 [V09,T03] ( 3, 2.80) int -> r1 "spilling expr"
-; V10 rat2 [V10,T04] ( 3, 2.24) int -> r3 "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T07] ( 2, 2 ) int -> r0 "argument with side effect"
+;* V08 rat0 [V08,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T01] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable"
+; V10 rat2 [V10,T06] ( 3, 2 ) int -> r0 "runtime lookup"
+; V11 rat3 [V11,T04] ( 3, 2.80) int -> r0 "spilling expr"
+; V12 rat4 [V12,T05] ( 3, 2.24) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M9954_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r2,r3}
- push {r4,r11,lr}
- sub sp, 12
+ push {r2,r3,r4,r5,r11,lr}
add r11, sp, 16
str r0, [r11-0x0C]
- mov r4, r1
- ; gcrRegs +[r4]
+ mov r4, r0
+ mov r5, r1
+ ; gcrRegs +[r5]
;; size=18 bbWeight=1 PerfScore 6.00
-G_M9954_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [sp+0x1C]
- cmp r1, 1
- beq SHORT G_M9954_IG05
- ;; size=6 bbWeight=1 PerfScore 3.00
-G_M9954_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r4]
- movs r0, 0
- ;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M9954_IG04: ; bbWeight=0.50, epilog, nogc, extend
- add sp, 12
- pop {r4,r11,lr}
- add sp, 8
- bx lr
- ;; size=10 bbWeight=0.50 PerfScore 2.00
-G_M9954_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz
- ; gcrRegs +[r4]
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x04]
- cmp r3, 12
- ble SHORT G_M9954_IG08
- ;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M9954_IG06: ; bbWeight=0.40, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r3, [r1+0x0C]
- cmp r3, 0
- beq SHORT G_M9954_IG08
- ;; size=6 bbWeight=0.40 PerfScore 1.20
-G_M9954_IG07: ; bbWeight=0.32, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M9954_IG09
- ;; size=4 bbWeight=0.32 PerfScore 0.64
-G_M9954_IG08: ; bbWeight=0.18, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M9954_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ bne SHORT G_M9954_IG04
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M9954_IG03: ; bbWeight=0.20, 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
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=18 bbWeight=0.18 PerfScore 0.90
-G_M9954_IG09: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ ;; size=20 bbWeight=0.20 PerfScore 1.20
+G_M9954_IG04: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [sp+0x1C]
+ cmp r0, 1
+ beq SHORT G_M9954_IG07
+ ;; size=6 bbWeight=1 PerfScore 3.00
+G_M9954_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[r5]
+ movs r0, 0
+ ;; size=2 bbWeight=0.50 PerfScore 0.50
+G_M9954_IG06: ; bbWeight=0.50, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r11,lr}
+ add sp, 8
+ bx lr
+ ;; size=8 bbWeight=0.50 PerfScore 1.50
+G_M9954_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref, isz
+ ; gcrRegs +[r5]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M9954_IG10
+ ;; size=8 bbWeight=0.50 PerfScore 2.00
+G_M9954_IG08: ; bbWeight=0.40, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ beq SHORT G_M9954_IG10
+ ;; size=6 bbWeight=0.40 PerfScore 1.20
+G_M9954_IG09: ; bbWeight=0.32, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M9954_IG11
+ ;; size=2 bbWeight=0.32 PerfScore 0.32
+G_M9954_IG10: ; bbWeight=0.18, 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_MEMCPY
+ ; gcr arg pop 0
+ ;; size=20 bbWeight=0.18 PerfScore 1.08
+G_M9954_IG11: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
ldr r1, [sp+0x18]
; gcrRegs +[r1]
- mov r2, r4
+ mov r2, r5
; gcrRegs +[r2]
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M9954_IG10: ; bbWeight=0.50, epilog, nogc, extend
- add sp, 12
- pop {r4,r11,lr}
+G_M9954_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ add sp, 8
+ pop {r4,r5,r11,lr}
add sp, 8
bx r3 // <unknown method>
; gcr arg pop 0
;; size=10 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 96, prolog size 18, PerfScore 20.74, instruction count 37, allocated bytes for code 96 (MethodHash=3e64d91d) for method Microsoft.FSharp.Core.ValueOption:Contains[System.__Canon](System.__Canon,Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):ubyte (FullOpts)
+; Total bytes of code 122, prolog size 18, PerfScore 25.30, instruction count 46, allocated bytes for code 122 (MethodHash=3e64d91d) for method Microsoft.FSharp.Core.ValueOption:Contains[System.__Canon](System.__Canon,Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):ubyte (FullOpts)
; ============================================================
Unwind Info:
@@ -99,29 +115,29 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 48 (0x00030) Actual length = 96 (0x000060)
+ 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)
Condition : 14 (0xe) (always)
- Epilog Start Index : 6 (0x06)
+ Epilog Start Index : 5 (0x05)
---- Scope 1
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Condition : 14 (0xe) (always)
- Epilog Start Index : 11 (0x0b)
+ Epilog Start Index : 9 (0x09)
---- Unwind codes ----
- 03 add sp, sp, #12 ; opsize 16
- A8 10 pop {r4,r11,lr} ; opsize 32
+ A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
EC 0C pop {r2,r3} ; opsize 16
FF end
- ---- Epilog start at index 6 ----
- 03 add sp, sp, #12 ; opsize 16
- A8 10 pop {r4,r11,lr} ; opsize 32
+ ---- Epilog start at index 5 ----
+ A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
02 add sp, sp, #8 ; opsize 16
FD end + nop ; opsize 16
- ---- Epilog start at index 11 ----
- 03 add sp, sp, #12 ; opsize 16
- A8 10 pop {r4,r11,lr} ; opsize 32
+ ---- Epilog start at index 9 ----
+ 02 add sp, sp, #8 ; opsize 16
+ A8 30 pop {r4,r5,r11,lr} ; opsize 32
02 add sp, sp, #8 ; opsize 16
FF end
+ FF end
+ FF end
+36 (+36.00%) : 2813.dasm - Microsoft.FSharp.Control.AsyncActivation1[System.__Canon]:WithContinuation[System.__Canon](Microsoft.FSharp.Core.FSharpFunc
2[System.Canon,System.Canon]):Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:this (FullOpts)
@@ -8,69 +8,73 @@
; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T03] ( 3, 3 ) byref -> r4 this single-def
-; V01 TypeCtx [V01,T01] ( 5, 4.20) int -> r1 single-def
-; V02 arg1 [V02,T04] ( 3, 3 ) ref -> r5 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]>
+; V00 this [V00,T04] ( 3, 3 ) byref -> r5 this single-def
+; V01 TypeCtx [V01,T01] ( 7, 5.56) int -> r4 single-def
+; V02 arg1 [V02,T05] ( 3, 3 ) ref -> r6 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,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" <Microsoft.FSharp.Control.AsyncActivationContents`1[System.__Canon]>
+; V04 tmp1 [V04,T00] ( 4, 8 ) ref -> r7 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Control.AsyncActivationContents`1[System.__Canon]>
;* V05 tmp2 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp3 [V06 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]>
;* V07 tmp4 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T06] ( 2, 4 ) ref -> [sp+0x00] class-hnd exact spill-single-def "Inlining Arg" <Microsoft.FSharp.Control.AsyncActivationAux>
+; V08 tmp5 [V08,T08] ( 2, 4 ) ref -> [sp+0x00] class-hnd exact spill-single-def "Inlining Arg" <Microsoft.FSharp.Control.AsyncActivationAux>
;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref single-def "field V06.contents (fldOffset=0x0)" P-INDEP
-; V10 rat0 [V10,T05] ( 3, 4 ) int -> r0 "runtime lookup"
+; V10 rat0 [V10,T07] ( 3, 4 ) int -> r0 "runtime lookup"
; V11 rat1 [V11,T02] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V12 rat2 [V12,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V13 rat3 [V13,T03] ( 3, 5.60) int -> r0 "spilling expr"
+; V14 rat4 [V14,T06] ( 2, 3.20) int -> r0 "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 8
G_M49691_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r2,r3,r4,r5,r11,lr}
- add r11, sp, 16
- str r1, [r11-0x0C]
- mov r4, r0
- ; byrRegs +[r4]
- mov r5, r2
- ; gcrRegs +[r5]
- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M49691_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
- ldr r0, [r1+0x20]
+ push {r2,r3,r4,r5,r6,r7,r11,lr}
+ add r11, sp, 24
+ str r1, [r11-0x14]
+ mov r5, r0
+ ; byrRegs +[r5]
+ mov r4, r1
+ mov r6, r2
+ ; gcrRegs +[r6]
+ ;; size=18 bbWeight=1 PerfScore 6.00
+G_M49691_IG02: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r4+0x20]
ldr r0, [r0+0x08]
cmp r0, 0
beq SHORT G_M49691_IG04
;; size=8 bbWeight=1 PerfScore 4.00
-G_M49691_IG03: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M49691_IG03: ; bbWeight=0.80, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
b SHORT G_M49691_IG05
;; size=2 bbWeight=0.80 PerfScore 0.80
-G_M49691_IG04: ; bbWeight=0.20, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref
- mov r0, r1
+G_M49691_IG04: ; bbWeight=0.20, gcrefRegs=0040 {r6}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.20 PerfScore 1.20
-G_M49691_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref
+G_M49691_IG05: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
- mov r2, r0
- ; gcrRegs +[r2]
- ldr r1, [r4]
+ mov r7, r0
+ ; gcrRegs +[r7]
+ ldr r1, [r5]
; gcrRegs +[r1]
ldr r1, [r1+0x08]
str r1, [sp] // [V08 tmp5]
; GC ptr vars +{V08}
- adds r0, r2, 4
+ adds r0, r7, 4
; gcrRegs -[r0]
; byrRegs +[r0]
- mov r1, r5
+ mov r1, r6
movw r12, 0xd1ff
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r5]
- ; byrRegs -[r0 r4]
- add r0, r2, 8
+ ; gcrRegs -[r1 r6]
+ ; byrRegs -[r0 r5]
+ add r0, r7, 8
; byrRegs +[r0]
ldr r1, [sp] // [V08 tmp5]
; gcrRegs +[r1]
@@ -80,14 +84,33 @@ G_M49691_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, by
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1]
; byrRegs -[r0]
- mov r0, r2
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M49691_IG07
+ ;; size=56 bbWeight=1 PerfScore 21.00
+G_M49691_IG06: ; bbWeight=0.80, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M49691_IG08
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M49691_IG07: ; bbWeight=0.36, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M49691_IG08: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref
+ mov r0, r7
; gcrRegs +[r0]
- ;; size=50 bbWeight=1 PerfScore 18.00
-G_M49691_IG06: ; bbWeight=1, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
+ ;; size=2 bbWeight=1 PerfScore 1.00
+G_M49691_IG09: ; bbWeight=1, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r6,r7,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 100, prolog size 12, PerfScore 30.00, instruction count 35, allocated bytes for code 100 (MethodHash=7be33de4) for method 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)
+; Total bytes of code 136, prolog size 12, PerfScore 39.56, instruction count 49, allocated bytes for code 136 (MethodHash=7be33de4) for method 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)
; ============================================================
Unwind Info:
@@ -99,11 +122,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 50 (0x00032) Actual length = 100 (0x000064)
+ Function Length : 68 (0x00044) Actual length = 136 (0x000088)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end
FF end
+36 (+43.90%) : 10935.dasm - Microsoft.FSharp.Collections.ListModule:SingletonSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon
@@ -7,45 +7,65 @@
; No matching 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.__Canon>
+; V00 TypeCtx [V00,T00] ( 7, 5.40) int -> r4 single-def
+; V01 arg0 [V01,T03] ( 3, 3 ) ref -> r5 class-hnd single-def <System.__Canon>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03,T07] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V03 tmp1 [V03,T04] ( 3, 4 ) int -> r6 "spilling helperCall"
;* V04 tmp2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp3 [V05,T01] ( 3, 6 ) int -> r5 "argument with side effect"
-; V06 tmp4 [V06,T05] ( 2, 4 ) ref -> r2 single-def "argument with side effect"
-; V07 cse0 [V07,T06] ( 2, 2 ) int -> r5 "CSE - aggressive"
-; V08 rat0 [V08,T04] ( 3, 4 ) int -> r5 "runtime lookup"
-; V09 rat1 [V09,T02] ( 3, 5.60) int -> r5 "fgMakeTemp is creating a new local variable"
+; V05 tmp3 [V05,T07] ( 2, 4 ) int -> r7 "argument with side effect"
+; V06 tmp4 [V06,T06] ( 2, 4 ) ref -> r2 single-def "argument with side effect"
+; V07 rat0 [V07,T01] ( 3, 5.60) int -> r6 "fgMakeTemp is creating a new local variable"
+; V08 rat1 [V08,T05] ( 3, 4 ) int -> r7 "runtime lookup"
+; V09 rat2 [V09,T02] ( 3, 5.60) int -> r7 "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 8
G_M15943_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]
- mov r4, r1
- ; gcrRegs +[r4]
- ;; size=14 bbWeight=1 PerfScore 4.00
-G_M15943_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r5, [r1+0x08]
- cmp r5, 0
+ push {r2,r3,r4,r5,r6,r7,r11,lr}
+ add r11, sp, 24
+ str r0, [r11-0x14]
+ mov r4, r0
+ mov r5, r1
+ ; gcrRegs +[r5]
+ ;; size=16 bbWeight=1 PerfScore 5.00
+G_M15943_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r6, [r0+0x08]
+ cmp r6, 0
beq SHORT G_M15943_IG04
;; size=8 bbWeight=1 PerfScore 4.00
-G_M15943_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M15943_IG03: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
b SHORT G_M15943_IG05
;; size=2 bbWeight=0.80 PerfScore 0.80
-G_M15943_IG04: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M15943_IG04: ; bbWeight=0.20, 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 r5, r0
- ;; size=20 bbWeight=0.20 PerfScore 1.20
-G_M15943_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
- mov r0, r5
+ blx r3 // CORINFO_HELP_MEMCPY
+ mov r6, r0
+ ;; size=22 bbWeight=0.20 PerfScore 1.40
+G_M15943_IG05: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r7, [r0+0x08]
+ cmp r7, 0
+ beq SHORT G_M15943_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M15943_IG06: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M15943_IG08
+ ;; size=2 bbWeight=0.80 PerfScore 0.80
+G_M15943_IG07: ; bbWeight=0.20, 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_MEMCPY
+ mov r7, r0
+ ;; size=22 bbWeight=0.20 PerfScore 1.40
+G_M15943_IG08: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ mov r0, r6
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
@@ -53,21 +73,21 @@ G_M15943_IG05: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre
; gcrRegs +[r0]
mov r2, r0
; gcrRegs +[r2]
- mov r0, r5
+ mov r0, r7
; gcrRegs -[r0]
- mov r1, r4
+ mov r1, r5
; gcrRegs +[r1]
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
;; size=30 bbWeight=1 PerfScore 11.00
-G_M15943_IG06: ; bbWeight=1, epilog, nogc, extend
+G_M15943_IG09: ; bbWeight=1, epilog, nogc, extend
add sp, 8
- pop {r4,r5,r11,lr}
+ pop {r4,r5,r6,r7,r11,lr}
bx r3 // Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:Cons(System.__Canon,Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]
;; size=8 bbWeight=1 PerfScore 3.00
-; Total bytes of code 82, prolog size 12, PerfScore 24.00, instruction count 29, allocated bytes for code 82 (MethodHash=ed0ac1b8) for method Microsoft.FSharp.Collections.ListModule:Singleton[System.__Canon](System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
+; Total bytes of code 118, prolog size 12, PerfScore 31.40, instruction count 43, allocated bytes for code 118 (MethodHash=ed0ac1b8) for method Microsoft.FSharp.Collections.ListModule:Singleton[System.__Canon](System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
; ============================================================
Unwind Info:
@@ -79,18 +99,18 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 41 (0x00029) Actual length = 82 (0x000052)
+ Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
---- 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 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
+ A8 FC pop {r2,r3,r4,r5,r6,r7,r11,lr} ; opsize 32
FF end
---- Epilog start at index 3 ----
02 add sp, sp, #8 ; opsize 16
- A8 30 pop {r4,r5,r11,lr} ; opsize 32
+ A8 F0 pop {r4,r5,r6,r7,r11,lr} ; opsize 32
FF end
FF end
libraries_tests.run.linux.arm.Release.mch
-38 (-32.20%) : 1457.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable1[ubyte]](System.String,System.Nullable
1[ubyte]):this (Tier0)
@@ -7,14 +7,14 @@
;
; V00 this [V00 ] ( 1, 1 ) ref -> [sp+0x0C] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions>
; V01 arg1 [V01 ] ( 1, 1 ) ref -> [sp+0x08] do-not-enreg[] class-hnd <System.String>
-; V02 arg2 [V02 ] ( 1, 1 ) struct ( 4) [sp+0x24] do-not-enreg[XSF] addr-exposed <System.Nullable`1[ubyte]>
+; V02 arg2 [V02 ] ( 1, 1 ) struct ( 4) [sp+0x24] do-not-enreg[XS] addr-exposed <System.Nullable`1[ubyte]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V04 tmp1 [V04 ] ( 1, 1 ) ref -> [sp+0x04] do-not-enreg[] must-init "argument with side effect"
; V05 tmp2 [V05 ] ( 1, 1 ) ref -> [sp+0x00] do-not-enreg[] must-init "argument with side effect"
;
; Lcl frame size = 16
-G_M26730_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M26730_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r2}
push {r4,r5,r10,r11,lr}
sub sp, 16
@@ -25,31 +25,7 @@ G_M26730_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
str r0, [sp+0x0C] // [V00 this]
str r1, [sp+0x08] // [V01 arg1]
;; size=22 bbWeight=1 PerfScore 9.00
-G_M26730_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldrb r3, [sp+0x24]
- cmp r3, 0
- bne SHORT G_M26730_IG04
- ldr r3, [sp+0x0C]
- ; gcrRegs +[r3]
- ldr r0, [r3+0x04]
- ; gcrRegs +[r0]
- ldr r1, [sp+0x08]
- ; gcrRegs +[r1]
- movw r3, 0xd1ff
- ; gcrRegs -[r3]
- movt r3, 0xd1ff
- ldr r3, [r3]
- ldr r2, [r0]
- blx r3 // <unknown method>
- ; gcrRegs -[r0-r1]
- ;; size=28 bbWeight=1 PerfScore 11.00
-G_M26730_IG03: ; bbWeight=1, epilog, nogc, extend
- add sp, 16
- pop {r4,r5,r10,r11,lr}
- add sp, 4
- bx lr
- ;; size=10 bbWeight=1 PerfScore 4.00
-G_M26730_IG04: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M26730_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldr r3, [sp+0x0C]
; gcrRegs +[r3]
ldr r3, [r3+0x04]
@@ -60,7 +36,7 @@ G_M26730_IG04: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
movw r3, 0xd1ff
; gcrRegs -[r3]
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_BOX_NULLABLE
+ blx r3 // CORINFO_HELP_BOX
; gcrRegs +[r0]
str r0, [sp+0x04] // [V04 tmp1]
ldr r2, [sp+0x04] // [V04 tmp1]
@@ -75,35 +51,31 @@ G_M26730_IG04: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
blx r3 // <unknown method>
; gcrRegs -[r0-r2]
;; size=48 bbWeight=1 PerfScore 18.00
-G_M26730_IG05: ; bbWeight=1, epilog, nogc, extend
+G_M26730_IG03: ; bbWeight=1, epilog, nogc, extend
add sp, 16
pop {r4,r5,r10,r11,lr}
add sp, 4
bx lr
;; size=10 bbWeight=1 PerfScore 4.00
-; Total bytes of code 118, prolog size 18, PerfScore 46.00, instruction count 46, allocated bytes for code 118 (MethodHash=1fca9795) for method Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
+; Total bytes of code 80, prolog size 18, PerfScore 31.00, instruction count 31, allocated bytes for code 80 (MethodHash=1fca9795) for method Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 3
- Epilog Count : 2
+ Epilog Count : 1
F bit : 0
E bit : 0
X bit : 0
Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ Function Length : 40 (0x00028) Actual length = 80 (0x000050)
---- 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)
- ---- Scope 1
- 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 ----
04 add sp, sp, #16 ; opsize 16
AC 30 pop {r4,r5,r10,r11,lr} ; opsize 32
-22 (-12.94%) : 4438.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
@@ -9,13 +9,12 @@
; 1 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4 ) ref -> r5 class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Reflection.IReflectableType>
+; V00 arg0 [V00,T00] ( 5, 4 ) ref -> r5 class-hnd single-def <System.Type>
+; V01 loc0 [V01,T01] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Reflection.IReflectableType>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T04] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
-; V04 tmp2 [V04,T03] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
+; V03 tmp1 [V03,T03] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
+; V04 tmp2 [V04,T02] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V06 rat0 [V06,T00] ( 5, 7 ) ref -> r0 class-hnd "replacement local" <System.Reflection.IReflectableType>
;
; Lcl frame size = 0
@@ -27,60 +26,34 @@ G_M46371_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
;; size=10 bbWeight=1 PerfScore 3.00
G_M46371_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
cmp r5, 0
- beq SHORT G_M46371_IG10
- mov r0, r5
- ; gcrRegs +[r0]
- cmp r0, 0
- bne SHORT G_M46371_IG05
- ;; size=10 bbWeight=1 PerfScore 5.00
-G_M46371_IG03: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz
- cmp r0, 0
- beq SHORT G_M46371_IG08
- ldr r1, [r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- cmp r1, r3
- bne SHORT G_M46371_IG07
- ;; size=18 bbWeight=1 PerfScore 7.00
-G_M46371_IG04: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[r5]
- pop {r4,r5,r11,pc}
- ;; size=4 bbWeight=1 PerfScore 1.00
-G_M46371_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, gcvars, byref, isz
- ; gcrRegs +[r5]
- ldr r1, [r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- cmp r1, r3
- beq SHORT G_M46371_IG03
- ;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M46371_IG06: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
+ beq SHORT G_M46371_IG06
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]
- b SHORT G_M46371_IG03
- ;; size=22 bbWeight=0 PerfScore 0.00
-G_M46371_IG07: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ cmp r0, 0
+ beq SHORT G_M46371_IG04
+ ldr r1, [r0]
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ cmp r1, r3
+ bne SHORT G_M46371_IG07
+ ;; size=42 bbWeight=1 PerfScore 15.00
+G_M46371_IG03: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r5]
- movw r4, 0xd1ff
- movt r4, 0xd1ff
- ldr r3, [r4]
- blx r3 // <unknown method>
- b SHORT G_M46371_IG04
- ;; size=14 bbWeight=0 PerfScore 0.00
-G_M46371_IG08: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ pop {r4,r5,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
+G_M46371_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0] +[r5]
movw r0, 0xd1ff
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
mov r4, r0
; gcrRegs +[r4]
@@ -95,17 +68,17 @@ G_M46371_IG08: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre
mov r0, r4
; gcrRegs +[r0]
;; size=38 bbWeight=0 PerfScore 0.00
-G_M46371_IG09: ; bbWeight=0, epilog, nogc, extend
+G_M46371_IG05: ; bbWeight=0, epilog, nogc, extend
pop {r4,r5,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M46371_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0 r4]
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
@@ -114,8 +87,16 @@ G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
; gcrRegs -[r0]
bkpt
;; size=36 bbWeight=0 PerfScore 0.00
+G_M46371_IG07: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ ; gcrRegs +[r0]
+ movw r4, 0xd1ff
+ movt r4, 0xd1ff
+ ldr r3, [r4]
+ blx r3 // <unknown method>
+ b SHORT G_M46371_IG03
+ ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 170, prolog size 8, PerfScore 18.50, instruction count 58, allocated bytes for code 170 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
+; Total bytes of code 148, prolog size 8, PerfScore 19.00, instruction count 49, allocated bytes for code 148 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
; ============================================================
Unwind Info:
@@ -127,7 +108,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 85 (0x00055) Actual length = 170 (0x0000aa)
+ Function Length : 74 (0x0004a) Actual length = 148 (0x000094)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
-22 (-12.94%) : 1223.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
@@ -9,13 +9,12 @@
; 1 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4 ) ref -> r5 class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Reflection.IReflectableType>
+; V00 arg0 [V00,T00] ( 5, 4 ) ref -> r5 class-hnd single-def <System.Type>
+; V01 loc0 [V01,T01] ( 5, 4 ) ref -> r0 class-hnd single-def <System.Reflection.IReflectableType>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T04] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
-; V04 tmp2 [V04,T03] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
+; V03 tmp1 [V03,T03] ( 3, 0 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
+; V04 tmp2 [V04,T02] ( 3, 2 ) ref -> r0 "guarded devirt return temp"
;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V06 rat0 [V06,T00] ( 5, 7 ) ref -> r0 class-hnd "replacement local" <System.Reflection.IReflectableType>
;
; Lcl frame size = 0
@@ -27,60 +26,34 @@ G_M46371_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
;; size=10 bbWeight=1 PerfScore 3.00
G_M46371_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
cmp r5, 0
- beq SHORT G_M46371_IG10
- mov r0, r5
- ; gcrRegs +[r0]
- cmp r0, 0
- bne SHORT G_M46371_IG05
- ;; size=10 bbWeight=1 PerfScore 5.00
-G_M46371_IG03: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz
- cmp r0, 0
- beq SHORT G_M46371_IG08
- ldr r1, [r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- cmp r1, r3
- bne SHORT G_M46371_IG07
- ;; size=18 bbWeight=1 PerfScore 7.00
-G_M46371_IG04: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[r5]
- pop {r4,r5,r11,pc}
- ;; size=4 bbWeight=1 PerfScore 1.00
-G_M46371_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, gcvars, byref, isz
- ; gcrRegs +[r5]
- ldr r1, [r0]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- cmp r1, r3
- beq SHORT G_M46371_IG03
- ;; size=14 bbWeight=0.50 PerfScore 2.50
-G_M46371_IG06: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- ; gcrRegs -[r0]
+ beq SHORT G_M46371_IG06
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]
- b SHORT G_M46371_IG03
- ;; size=22 bbWeight=0 PerfScore 0.00
-G_M46371_IG07: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ cmp r0, 0
+ beq SHORT G_M46371_IG04
+ ldr r1, [r0]
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ cmp r1, r3
+ bne SHORT G_M46371_IG07
+ ;; size=42 bbWeight=1 PerfScore 15.00
+G_M46371_IG03: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[r5]
- movw r4, 0xd1ff
- movt r4, 0xd1ff
- ldr r3, [r4]
- blx r3 // <unknown method>
- b SHORT G_M46371_IG04
- ;; size=14 bbWeight=0 PerfScore 0.00
-G_M46371_IG08: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ pop {r4,r5,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
+G_M46371_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0] +[r5]
movw r0, 0xd1ff
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
mov r4, r0
; gcrRegs +[r4]
@@ -95,17 +68,17 @@ G_M46371_IG08: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre
mov r0, r4
; gcrRegs +[r0]
;; size=38 bbWeight=0 PerfScore 0.00
-G_M46371_IG09: ; bbWeight=0, epilog, nogc, extend
+G_M46371_IG05: ; bbWeight=0, epilog, nogc, extend
pop {r4,r5,r11,pc}
;; size=4 bbWeight=0 PerfScore 0.00
-G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M46371_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0 r4]
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
@@ -114,8 +87,16 @@ G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref
; gcrRegs -[r0]
bkpt
;; size=36 bbWeight=0 PerfScore 0.00
+G_M46371_IG07: ; bbWeight=0, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, isz
+ ; gcrRegs +[r0]
+ movw r4, 0xd1ff
+ movt r4, 0xd1ff
+ ldr r3, [r4]
+ blx r3 // <unknown method>
+ b SHORT G_M46371_IG03
+ ;; size=14 bbWeight=0 PerfScore 0.00
-; Total bytes of code 170, prolog size 8, PerfScore 18.50, instruction count 58, allocated bytes for code 170 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
+; Total bytes of code 148, prolog size 8, PerfScore 19.00, instruction count 49, allocated bytes for code 148 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
; ============================================================
Unwind Info:
@@ -127,7 +108,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 85 (0x00055) Actual length = 170 (0x0000aa)
+ Function Length : 74 (0x0004a) Actual length = 148 (0x000094)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+32 (+27.59%) : 4425.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
@@ -9,96 +9,117 @@
; 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,T06] ( 3, 3 ) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T01] ( 7, 5.72) 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"
+; V09 rat0 [V09,T09] ( 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"
+; V11 rat2 [V11,T07] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V12 rat3 [V12,T10] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V13 rat4 [V13,T05] ( 3, 5.60) int -> r0 "spilling expr"
+; V14 rat5 [V14,T08] ( 2, 3.20) 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_IG10
+ ldr r0, [r4+0x20]
; gcrRegs -[r0]
- ldr r3, [r0+0x04]
- cmp r3, 12
+ ldr r1, [r0+0x04]
+ cmp r1, 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
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, 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
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, 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
+G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=0040 {r6}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 2.16
-G_M58319_IG06: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG06: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
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]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 16
+ ble SHORT G_M58319_IG08
+ ;; size=36 bbWeight=1 PerfScore 13.00
+G_M58319_IG07: ; bbWeight=0.80, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x10]
+ cmp r0, 0
+ bne SHORT G_M58319_IG09
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M58319_IG08: ; bbWeight=0.36, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref
mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M58319_IG09: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ 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_IG10
+ mov r0, r7
+ ;; size=22 bbWeight=1 PerfScore 9.00
+G_M58319_IG10: ; 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 148, prolog size 12, PerfScore 45.76, instruction count 55, allocated bytes for code 148 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================
Unwind Info:
@@ -110,11 +131,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 58 (0x0003a) Actual length = 116 (0x000074)
+ Function Length : 74 (0x0004a) Actual length = 148 (0x000094)
--- 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
+32 (+27.59%) : 1151.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
@@ -9,96 +9,117 @@
; 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,T06] ( 3, 3 ) ref -> r6 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache>
+; V01 TypeCtx [V01,T01] ( 7, 5.72) 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"
+; V09 rat0 [V09,T09] ( 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"
+; V11 rat2 [V11,T07] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V12 rat3 [V12,T10] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V13 rat4 [V13,T05] ( 3, 5.60) int -> r0 "spilling expr"
+; V14 rat5 [V14,T08] ( 2, 3.20) 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_IG10
+ ldr r0, [r4+0x20]
; gcrRegs -[r0]
- ldr r3, [r0+0x04]
- cmp r3, 12
+ ldr r1, [r0+0x04]
+ cmp r1, 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
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, 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
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, 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
+G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=0040 {r6}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 2.16
-G_M58319_IG06: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG06: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
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]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 16
+ ble SHORT G_M58319_IG08
+ ;; size=36 bbWeight=1 PerfScore 13.00
+G_M58319_IG07: ; bbWeight=0.80, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x10]
+ cmp r0, 0
+ bne SHORT G_M58319_IG09
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M58319_IG08: ; bbWeight=0.36, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref
mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M58319_IG09: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz
+ 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_IG10
+ mov r0, r7
+ ;; size=22 bbWeight=1 PerfScore 9.00
+G_M58319_IG10: ; 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 148, prolog size 12, PerfScore 45.76, instruction count 55, allocated bytes for code 148 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================
Unwind Info:
@@ -110,11 +131,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 58 (0x0003a) Actual length = 116 (0x000074)
+ Function Length : 74 (0x0004a) Actual length = 148 (0x000094)
--- 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
+40 (+30.77%) : 969.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -9,98 +9,123 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T00] ( 7, 4.36) int -> r0 single-def
-; V01 arg0 [V01,T02] ( 4, 3 ) int -> r4 single-def
-; V02 arg1 [V02,T03] ( 3, 3 ) ubyte -> r2 single-def
-; V03 loc0 [V03,T07] ( 2, 0 ) int -> r5
+; V00 TypeCtx [V00,T00] ( 9, 5.72) int -> r4 single-def
+; V01 arg0 [V01,T03] ( 4, 3 ) int -> r5 single-def
+; V02 arg1 [V02,T04] ( 3, 3 ) ubyte -> r2 single-def
+; V03 loc0 [V03,T10] ( 2, 0 ) int -> r6
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T08] ( 3, 0 ) int -> r1 "spilling helperCall"
+; V05 tmp1 [V05,T11] ( 3, 0 ) int -> r0 "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T06] ( 2, 4 ) int -> r0 "argument with side effect"
-; V09 rat0 [V09,T05] ( 3, 4 ) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T01] ( 3, 5.60) int -> r1 "spilling expr"
-; V11 rat2 [V11,T04] ( 3, 4.48) int -> r3 "fgMakeTemp is creating a new local variable"
-; V12 rat3 [V12,T09] ( 3, 0 ) int -> r1 "spilling expr"
-; V13 rat4 [V13,T10] ( 3, 0 ) int -> r1 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T08] ( 2, 4 ) int -> r0 "argument with side effect"
+;* V09 rat0 [V09,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V10 rat1 [V10,T01] ( 3, 5.60) int -> r0 "spilling expr"
+; V11 rat2 [V11,T05] ( 2, 3.20) int -> r0 "fgMakeTemp is creating a new local variable"
+; V12 rat3 [V12,T07] ( 3, 4 ) int -> r0 "runtime lookup"
+; V13 rat4 [V13,T02] ( 3, 5.60) int -> r0 "spilling expr"
+; V14 rat5 [V14,T06] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
+; V15 rat6 [V15,T12] ( 3, 0 ) int -> r0 "spilling expr"
+; V16 rat7 [V16,T13] ( 3, 0 ) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M46119_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]
- mov r4, r1
- ;; size=14 bbWeight=1 PerfScore 4.00
+ push {r4,r5,r6,r11,lr}
+ sub sp, 12
+ add r11, sp, 24
+ str r0, [r11-0x14]
+ mov r4, r0
+ mov r5, r1
+ ;; size=18 bbWeight=1 PerfScore 6.00
G_M46119_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- uxtb r1, r2
- cmp r1, 0
- bne SHORT G_M46119_IG08
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x04]
- cmp r3, 12
- ble SHORT G_M46119_IG05
+ uxtb r0, r2
+ cmp r0, 0
+ bne SHORT G_M46119_IG11
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 16
+ ble SHORT G_M46119_IG04
;; size=14 bbWeight=1 PerfScore 7.00
G_M46119_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r3, [r1+0x0C]
- cmp r3, 0
- beq SHORT G_M46119_IG05
+ ldr r0, [r0+0x10]
+ cmp r0, 0
+ bne SHORT G_M46119_IG05
;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M46119_IG04: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.64 PerfScore 1.28
-G_M46119_IG05: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46119_IG04: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
- ;; size=18 bbWeight=0.36 PerfScore 1.80
-G_M46119_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r1, r4
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M46119_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M46119_IG08
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M46119_IG06: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ beq SHORT G_M46119_IG08
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M46119_IG07: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.64 PerfScore 0.64
+G_M46119_IG08: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWARR_1_OBJ
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M46119_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[r0]
;; size=12 bbWeight=1 PerfScore 4.00
-G_M46119_IG07: ; bbWeight=1, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=1 PerfScore 1.00
-G_M46119_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46119_IG10: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=1 PerfScore 2.00
+G_M46119_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0]
- movs r5, 80
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x04]
- cmp r3, 12
- ble SHORT G_M46119_IG09
- ldr r1, [r1+0x0C]
- cmp r1, 0
- beq SHORT G_M46119_IG09
- b SHORT G_M46119_IG10
+ movs r6, 80
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M46119_IG12
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ beq SHORT G_M46119_IG12
+ b SHORT G_M46119_IG13
;; size=18 bbWeight=0 PerfScore 0.00
-G_M46119_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46119_IG12: ; bbWeight=0, gcrefRegs=0000 {}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0 PerfScore 0.00
-G_M46119_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r0, r1
- mov r1, r4
- mov r2, r5
+G_M46119_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ mov r2, r6
movw r3, 0xd1ff
movt r3, 0xd1ff
blx r3 // <unknown method>
; gcrRegs +[r0]
- ;; size=16 bbWeight=0 PerfScore 0.00
-G_M46119_IG11: ; bbWeight=0, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0 PerfScore 0.00
+ ;; size=14 bbWeight=0 PerfScore 0.00
+G_M46119_IG14: ; bbWeight=0, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 130, prolog size 12, PerfScore 21.48, instruction count 48, allocated bytes for code 130 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
+; Total bytes of code 170, prolog size 14, PerfScore 32.76, instruction count 64, allocated bytes for code 170 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
; ============================================================
Unwind Info:
@@ -112,7 +137,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 65 (0x00041) Actual length = 130 (0x000082)
+ Function Length : 85 (0x00055) Actual length = 170 (0x0000aa)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -124,7 +149,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- Unwind codes ----
---- Epilog start at index 0 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
- FF end
+ 03 add sp, sp, #12 ; opsize 16
+ A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
FF end
librariestestsnotieredcompilation.run.linux.arm.Release.mch
-14 (-20.00%) : 2682.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:b_60(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
@@ -9,11 +9,9 @@
; Final local variable assignments
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c>
-; V01 arg1 [V01,T01] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Reflection.PropertyInfo>
+; V01 arg1 [V01,T00] ( 3, 3 ) ref -> r1 class-hnd single-def <System.Reflection.PropertyInfo>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T02] ( 3, 4.25) ref -> r1 single-def "CASTCLASS eval op1"
-; V04 tmp2 [V04,T03] ( 3, 1.25) int -> r2 "fgMakeTemp is creating a new local variable"
-; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> r0 class-hnd "spilling QMark2" <<unknown class>>
+; V03 tmp1 [V03,T01] ( 2, 4 ) ref -> r1 single-def "argument with side effect"
;
; Lcl frame size = 4
@@ -21,7 +19,7 @@ G_M28645_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
push {r3,r4,r11,lr}
add r11, sp, 8
;; size=8 bbWeight=1 PerfScore 2.00
-G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref, isz
+G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
; gcrRegs +[r1]
mov r0, r1
; gcrRegs +[r0]
@@ -35,30 +33,19 @@ G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byre
blx r3 // <unknown method>
mov r1, r0
; gcrRegs +[r1]
- mov r0, r1
- cmp r0, 0
- beq SHORT G_M28645_IG05
- ;; size=32 bbWeight=1 PerfScore 12.00
-G_M28645_IG03: ; bbWeight=0.25, gcrefRegs=0003 {r0 r1}, byrefRegs=0000 {}, byref, isz
- ldr r3, [r0]
- movw r2, 0xd1ff
- movt r2, 0xd1ff
- cmp r3, r2
- beq SHORT G_M28645_IG05
- ;; size=14 bbWeight=0.25 PerfScore 1.25
-G_M28645_IG04: ; bbWeight=0.12, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
+ movw r0, 0xd1ff
; gcrRegs -[r0]
- mov r0, r2
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1] +[r0]
- ;; size=12 bbWeight=0.12 PerfScore 0.50
-G_M28645_IG05: ; bbWeight=1, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 14.00
+G_M28645_IG03: ; bbWeight=1, epilog, nogc, extend
pop {r3,r4,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 70, prolog size 8, PerfScore 16.75, instruction count 24, allocated bytes for code 70 (MethodHash=8b27901a) for method Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
+; Total bytes of code 56, prolog size 8, PerfScore 17.00, instruction count 17, allocated bytes for code 56 (MethodHash=8b27901a) for method Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
; ============================================================
Unwind Info:
@@ -70,7 +57,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 35 (0x00023) Actual length = 70 (0x000046)
+ Function Length : 28 (0x0001c) Actual length = 56 (0x000038)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
-26 (-11.21%) : 341.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
@@ -12,7 +12,7 @@
; V01 tmp1 [V01,T00] ( 8, 16 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
; V02 tmp2 [V02,T01] ( 8, 16 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
; V03 tmp3 [V03,T02] ( 8, 16 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
-; V04 cse0 [V04,T03] ( 4, 4 ) int -> r4 "CSE - aggressive"
+; V04 cse0 [V04,T03] ( 4, 4 ) ref -> r4 "CSE - aggressive"
; V05 cse1 [V05,T04] ( 4, 4 ) int -> r6 "CSE - aggressive"
;
; Lcl frame size = 4
@@ -22,14 +22,15 @@ G_M2338_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
add r11, sp, 16
;; size=8 bbWeight=1 PerfScore 2.00
G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movw r4, 0xd1ff
- movt r4, 0xd1ff
- mov r0, r4
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
- mov r5, r0
+ mov r4, r0
+ ; gcrRegs +[r4]
+ mov r5, r4
; gcrRegs +[r5]
movs r0, 0
; gcrRegs -[r0]
@@ -59,15 +60,9 @@ G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
- mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r5, r0
+ mov r5, r4
; gcrRegs +[r5]
movs r0, 0
- ; gcrRegs -[r0]
str r0, [r5+0x08]
movs r0, 4
dmb 15
@@ -91,15 +86,7 @@ G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
- mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r4, r0
- ; gcrRegs +[r4]
movs r0, 0
- ; gcrRegs -[r0]
str r0, [r4+0x08]
movs r0, 4
dmb 15
@@ -124,12 +111,12 @@ G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r4]
- ;; size=220 bbWeight=1 PerfScore 81.00
+ ;; size=194 bbWeight=1 PerfScore 72.00
G_M2338_IG03: ; bbWeight=1, epilog, nogc, extend
pop {r3,r4,r5,r6,r11,pc}
;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 232, prolog size 8, PerfScore 84.00, instruction count 84, allocated bytes for code 232 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
+; Total bytes of code 206, prolog size 8, PerfScore 75.00, instruction count 75, allocated bytes for code 206 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
; ============================================================
Unwind Info:
@@ -141,7 +128,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 116 (0x00074) Actual length = 232 (0x0000e8)
+ Function Length : 103 (0x00067) Actual length = 206 (0x0000ce)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
-14 (-6.14%) : 2954.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
@@ -12,11 +12,10 @@
; V01 arg1 [V01,T02] ( 4, 3.50) byref -> r6 single-def
; V02 arg2 [V02,T01] ( 5, 3.50) byref -> r5 single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T04] ( 3, 1.50) ubyte -> r0 "Inline return value spill temp"
+; V04 tmp1 [V04,T03] ( 3, 1.50) ubyte -> r0 "Inline return value spill temp"
;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Collections.Generic.IReadOnlyDictionary`2[System.String,System.Object]>
-; V06 tmp3 [V06 ] ( 7, 2.88) ref -> [sp+0x04] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.Object>
-; V07 tmp4 [V07,T05] ( 3, 1.25) int -> r3 "fgMakeTemp is creating a new local variable"
-; V08 tmp5 [V08,T03] ( 3, 2.25) ref -> r1 class-hnd "spilling QMark2" <<unknown class>>
+; V06 tmp3 [V06 ] ( 4, 2 ) ref -> [sp+0x04] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.Object>
+; TEMP_01 ref -> [r11-0x18]
;
; Lcl frame size = 12
@@ -26,13 +25,14 @@ G_M30064_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
add r11, sp, 24
movs r3, 0
str r3, [sp+0x04] // [V06 tmp3]
+ str r3, [sp] // [TEMP_01]
mov r4, r0
; gcrRegs +[r4]
mov r6, r1
; byrRegs +[r6]
mov r5, r2
; byrRegs +[r5]
- ;; size=20 bbWeight=1 PerfScore 8.00
+ ;; size=22 bbWeight=1 PerfScore 9.00
G_M30064_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0060 {r5 r6}, byref, isz
mov r1, r4
; gcrRegs +[r1]
@@ -61,7 +61,7 @@ G_M30064_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0060 {r5 r6},
; gcrRegs -[r1]
; byrRegs -[r3]
cmp r0, 0
- beq SHORT G_M30064_IG10
+ beq SHORT G_M30064_IG07
;; size=68 bbWeight=1 PerfScore 21.00
G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0060 {r5 r6}, byref, isz
ldr r0, [r4+0x10]
@@ -76,49 +76,31 @@ G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=0010 {r4}, byrefRegs=0060 {r5 r
blx r3 // <unknown method>
; gcrRegs -[r0]
cmp r0, 0
- beq SHORT G_M30064_IG07
+ beq SHORT G_M30064_IG04
ldr r1, [sp+0x04]
; gcrRegs +[r1]
movw r0, 0xd1ff
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1] +[r0]
cmp r0, 0
- beq SHORT G_M30064_IG07
+ beq SHORT G_M30064_IG04
ldr r1, [sp+0x04]
; gcrRegs +[r1]
- ldr r0, [sp+0x04]
- cmp r0, 0
- beq SHORT G_M30064_IG06
- ;; size=60 bbWeight=0.50 PerfScore 11.00
-G_M30064_IG04: ; bbWeight=0.25, gcrefRegs=0002 {r1}, byrefRegs=0060 {r5 r6}, byref, isz
- ; gcrRegs -[r0]
- ldr r0, [sp+0x04]
- ; gcrRegs +[r0]
- ldr r0, [r0]
+ movw r0, 0xd1ff
; gcrRegs -[r0]
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- cmp r0, r3
- beq SHORT G_M30064_IG06
- ;; size=16 bbWeight=0.25 PerfScore 1.50
-G_M30064_IG05: ; bbWeight=0.12, gcrefRegs=0000 {}, byrefRegs=0060 {r5 r6}, byref
- ; gcrRegs -[r1]
- mov r0, r3
- ldr r1, [sp+0x04]
- ; gcrRegs +[r1]
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_CHKCASTARRAY
+ blx r3 // CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[r1] +[r0]
- mov r1, r0
+ str r0, [sp]
+ ldr r1, [sp]
; gcrRegs +[r1]
- ;; size=16 bbWeight=0.12 PerfScore 0.75
-G_M30064_IG06: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0060 {r5 r6}, byref, isz
- ; gcrRegs -[r0]
mov r0, r5
+ ; gcrRegs -[r0]
; byrRegs +[r0]
movw r12, 0xd1ff
movt r12, 0xd1ff
@@ -126,38 +108,38 @@ G_M30064_IG06: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0060 {r5 r
; gcrRegs -[r1]
; byrRegs -[r0]
movs r0, 1
- b SHORT G_M30064_IG08
- ;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M30064_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0060 {r5 r6}, byref
+ b SHORT G_M30064_IG05
+ ;; size=92 bbWeight=0.50 PerfScore 16.00
+G_M30064_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0060 {r5 r6}, byref
movs r0, 0
str r0, [r5]
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M30064_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0060 {r5 r6}, byref, isz
+G_M30064_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0060 {r5 r6}, byref, isz
movs r3, 0
str r3, [sp+0x04] // [V06 tmp3]
cmp r0, 0
- beq SHORT G_M30064_IG10
+ beq SHORT G_M30064_IG07
movs r0, 1
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M30064_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M30064_IG06: ; bbWeight=0.50, epilog, nogc, extend
add sp, 12
pop {r4,r5,r6,r11,pc}
;; size=6 bbWeight=0.50 PerfScore 1.00
-G_M30064_IG10: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0060 {r5 r6}, gcvars, byref
+G_M30064_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0060 {r5 r6}, gcvars, byref
movs r0, 0
str r0, [r6]
;; size=4 bbWeight=0.50 PerfScore 1.00
-G_M30064_IG11: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref
+G_M30064_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref
; byrRegs -[r6]
str r0, [r5]
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M30064_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M30064_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; byrRegs -[r5]
add sp, 12
pop {r4,r5,r6,r11,pc}
;; size=6 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 228, prolog size 14, PerfScore 52.25, instruction count 83, allocated bytes for code 228 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
+; Total bytes of code 214, prolog size 16, PerfScore 53.00, instruction count 76, allocated bytes for code 214 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
; ============================================================
Unwind Info:
@@ -169,7 +151,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 114 (0x00072) Actual length = 228 (0x0000e4)
+ Function Length : 107 (0x0006b) Actual length = 214 (0x0000d6)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+34 (+42.50%) : 9728.dasm - System.Linq.ImmutableArrayExtensions:WhereSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon
@@ -8,72 +8,91 @@
; 0 inlinees with PGO data; 1 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 ] ( 5, 5 ) struct ( 4) [sp+0x14] ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V02 arg1 [V02,T03] ( 3, 3 ) ref -> r4 class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V00 TypeCtx [V00,T00] ( 7, 5.56) int -> r4 single-def
+; V01 arg0 [V01 ] ( 5, 5 ) struct ( 4) [sp+0x1C] ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
+; V02 arg1 [V02,T04] ( 3, 3 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
;# 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 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V06 tmp3 [V06,T00] ( 5, 5 ) ref -> [sp+0x14] do-not-enreg[] single-def "field V01.array (fldOffset=0x0)" P-DEP
-; V07 tmp4 [V07,T06] ( 2, 4 ) int -> r0 "argument with side effect"
-; V08 rat0 [V08,T05] ( 3, 4 ) int -> r0 "runtime lookup"
-; V09 rat1 [V09,T02] ( 3, 5.60) int -> r1 "spilling expr"
-; V10 rat2 [V10,T04] ( 3, 4.48) int -> r3 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T01] ( 5, 5 ) ref -> [sp+0x1C] do-not-enreg[] single-def "field V01.array (fldOffset=0x0)" P-DEP
+; V07 tmp4 [V07,T07] ( 2, 4 ) int -> r0 "argument with side effect"
+;* V08 rat0 [V08,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T02] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable"
+; V10 rat2 [V10,T06] ( 3, 4 ) int -> r0 "runtime lookup"
+; V11 rat3 [V11,T03] ( 3, 5.60) int -> r0 "spilling expr"
+; V12 rat4 [V12,T05] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M59151_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r1}
- push {r2,r3,r4,r11,lr}
- add r11, sp, 12
- str r0, [r11-0x08]
- mov r4, r2
- ; gcrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M59151_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r1, [sp+0x14]
- ; gcrRegs +[r1]
- ldr r1, [r1+0x04]
- ; gcrRegs -[r1]
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x04]
- cmp r3, 12
- ble SHORT G_M59151_IG05
- ;; size=12 bbWeight=1 PerfScore 6.00
-G_M59151_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- ldr r3, [r1+0x0C]
- cmp r3, 0
- beq SHORT G_M59151_IG05
- ;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M59151_IG04: ; bbWeight=0.64, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M59151_IG06
- ;; size=4 bbWeight=0.64 PerfScore 1.28
-G_M59151_IG05: ; bbWeight=0.36, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ push {r4,r5,r11,lr}
+ sub sp, 12
+ add r11, sp, 20
+ str r0, [r11-0x10]
+ mov r4, r0
+ mov r5, r2
+ ; gcrRegs +[r5]
+ ;; size=20 bbWeight=1 PerfScore 7.00
+G_M59151_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ bne SHORT G_M59151_IG04
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M59151_IG03: ; bbWeight=0.20, 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
- ;; size=18 bbWeight=0.36 PerfScore 1.80
-G_M59151_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
- ldr r1, [sp+0x14]
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.20 PerfScore 1.20
+G_M59151_IG04: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [sp+0x1C]
+ ; gcrRegs +[r0]
+ ldr r0, [r0+0x04]
+ ; gcrRegs -[r0]
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M59151_IG07
+ ;; size=12 bbWeight=1 PerfScore 6.00
+G_M59151_IG05: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ beq SHORT G_M59151_IG07
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M59151_IG06: ; bbWeight=0.64, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M59151_IG08
+ ;; size=2 bbWeight=0.64 PerfScore 0.64
+G_M59151_IG07: ; bbWeight=0.36, 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_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M59151_IG08: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+ ldr r1, [sp+0x1C]
; gcrRegs +[r1]
- mov r2, r4
+ mov r2, r5
; gcrRegs +[r2]
movw r3, 0xd1ff
movt r3, 0xd1ff
ldr r3, [r3]
blx r3 // 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]
- ; gcrRegs -[r1-r2 r4] +[r0]
+ ; gcrRegs -[r1-r2 r5] +[r0]
;; size=16 bbWeight=1 PerfScore 6.00
-G_M59151_IG07: ; bbWeight=1, epilog, nogc, extend
- pop {r2,r3,r4,r11,lr}
+G_M59151_IG09: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r11,lr}
add sp, 4
bx lr
- ;; size=8 bbWeight=1 PerfScore 3.00
+ ;; size=10 bbWeight=1 PerfScore 4.00
-; Total bytes of code 80, prolog size 14, PerfScore 25.48, instruction count 30, allocated bytes for code 80 (MethodHash=70f318f0) for method System.Linq.ImmutableArrayExtensions:Where[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 114, prolog size 16, PerfScore 33.40, instruction count 43, allocated bytes for code 114 (MethodHash=70f318f0) for method System.Linq.ImmutableArrayExtensions:Where[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================
Unwind Info:
@@ -85,21 +104,21 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 40 (0x00028) Actual length = 80 (0x000050)
+ Function Length : 57 (0x00039) Actual length = 114 (0x000072)
---- 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 : 5 (0x05)
+ Epilog Start Index : 6 (0x06)
---- Unwind codes ----
- A8 1C pop {r2,r3,r4,r11,lr} ; opsize 32
+ 03 add sp, sp, #12 ; opsize 16
+ A8 30 pop {r4,r5,r11,lr} ; opsize 32
EC 02 pop {r1} ; opsize 16
FF end
- ---- Epilog start at index 5 ----
- A8 1C pop {r2,r3,r4,r11,lr} ; opsize 32
+ ---- Epilog start at index 6 ----
+ 03 add sp, sp, #12 ; opsize 16
+ A8 30 pop {r4,r5,r11,lr} ; opsize 32
01 add sp, sp, #4 ; opsize 16
FD end + nop ; opsize 16
FF end
- FF end
- FF end
+44 (+52.38%) : 7938.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingNameSystem.__Canon:Microsoft.CodeAnalysis.IncrementalValuesProvider`1System.__Canon
@@ -9,59 +9,85 @@
; Final local variable assignments
;
; V00 RetBuf [V00,T01] ( 4, 4 ) byref -> r5 single-def
-; V01 TypeCtx [V01,T00] ( 5, 4.20) int -> r1 single-def
-; V02 arg0 [V02,T02] ( 4, 4 ) struct ( 8) [sp+0x18] do-not-enreg[SF] single-def <Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]>
-; V03 arg1 [V03,T07] ( 1, 1 ) ref -> [sp+0x20] class-hnd single-def <System.String>
+; V01 TypeCtx [V01,T00] ( 7, 5.56) int -> r4 single-def
+; V02 arg0 [V02,T02] ( 4, 4 ) struct ( 8) [sp+0x20] do-not-enreg[SF] single-def <Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]>
+; V03 arg1 [V03,T10] ( 1, 1 ) ref -> [sp+0x28] class-hnd single-def <System.String>
;# 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,T03] ( 4, 6 ) int -> r4 "VirtualCall with runtime lookup"
+; V06 tmp2 [V06,T03] ( 4, 6 ) int -> r6 "VirtualCall with runtime lookup"
;* V07 tmp3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]>
;* V08 tmp4 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.IIncrementalGeneratorNode`1[System.__Canon]>
;* V10 tmp6 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V11 tmp7 [V11,T05] ( 2, 2 ) ref -> r1 single-def "field V07.Node (fldOffset=0x0)" P-INDEP
-; V12 tmp8 [V12,T06] ( 2, 2 ) ubyte -> r2 "field V07.CatchAnalyzerExceptions (fldOffset=0x4)" P-INDEP
-; V13 rat0 [V13,T04] ( 3, 5.60) int -> r4 "fgMakeTemp is creating a new local variable"
+; V11 tmp7 [V11,T07] ( 2, 2 ) ref -> r1 single-def "field V07.Node (fldOffset=0x0)" P-INDEP
+; V12 tmp8 [V12,T08] ( 2, 2 ) ubyte -> r2 "field V07.CatchAnalyzerExceptions (fldOffset=0x4)" P-INDEP
+; V13 rat0 [V13,T04] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable"
+;* V14 rat1 [V14,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V15 rat2 [V15,T05] ( 3, 5.60) int -> r0 "spilling expr"
+; V16 rat3 [V16,T06] ( 2, 3.20) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M18340_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push {r2,r3}
- push {r2,r3,r4,r5,r11,lr}
- add r11, sp, 16
- str r1, [r11-0x0C]
+ push {r4,r5,r6,r11,lr}
+ sub sp, 12
+ add r11, sp, 24
+ str r1, [r11-0x14]
mov r5, r0
; byrRegs +[r5]
- ;; size=16 bbWeight=1 PerfScore 5.00
+ mov r4, r1
+ ;; size=20 bbWeight=1 PerfScore 7.00
G_M18340_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
- ldr r0, [r1+0x20]
- ldr r4, [r0+0x08]
- cmp r4, 0
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
beq SHORT G_M18340_IG04
;; size=8 bbWeight=1 PerfScore 4.00
G_M18340_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
+ mov r6, r0
b SHORT G_M18340_IG05
- ;; size=2 bbWeight=0.80 PerfScore 0.80
+ ;; size=4 bbWeight=0.80 PerfScore 1.60
G_M18340_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, 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
- mov r4, r0
+ blx r3 // CORINFO_HELP_MEMCPY
+ mov r6, r0
;; size=22 bbWeight=0.20 PerfScore 1.40
-G_M18340_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref
- ldr r0, [sp+0x18]
+G_M18340_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M18340_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M18340_IG06: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M18340_IG08
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M18340_IG07: ; bbWeight=0.36, 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_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M18340_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref
+ ldr r0, [sp+0x20]
; gcrRegs +[r0]
- ldr r1, [sp+0x20] // [V03 arg1]
+ mov r4, r6
+ ldr r1, [sp+0x28] // [V03 arg1]
; gcrRegs +[r1]
- ldr r3, [r4]
+ ldr r3, [r6]
blx r3
; gcrRegs -[r1]
mov r1, r0
; gcrRegs +[r1]
- ldrb r2, [sp+0x1C] // [V02 arg0+0x04]
+ ldrb r2, [sp+0x24] // [V02 arg0+0x04]
mov r0, r5
; gcrRegs -[r0]
; byrRegs +[r0]
@@ -71,14 +97,15 @@ G_M18340_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byre
; gcrRegs -[r1]
; byrRegs -[r0]
strb r2, [r5+0x04]
- ;; size=28 bbWeight=1 PerfScore 11.00
-G_M18340_IG06: ; bbWeight=1, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,lr}
+ ;; size=30 bbWeight=1 PerfScore 12.00
+G_M18340_IG09: ; bbWeight=1, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,lr}
add sp, 8
bx lr
- ;; size=8 bbWeight=1 PerfScore 3.00
+ ;; size=10 bbWeight=1 PerfScore 4.00
-; Total bytes of code 84, prolog size 14, PerfScore 25.20, instruction count 31, allocated bytes for code 84 (MethodHash=1406b85b) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
+; Total bytes of code 128, prolog size 16, PerfScore 38.56, instruction count 49, allocated bytes for code 128 (MethodHash=1406b85b) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
; ============================================================
Unwind Info:
@@ -90,21 +117,21 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 42 (0x0002a) Actual length = 84 (0x000054)
+ Function Length : 64 (0x00040) Actual length = 128 (0x000080)
---- 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 : 5 (0x05)
+ Epilog Start Index : 6 (0x06)
---- Unwind codes ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
+ 03 add sp, sp, #12 ; 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 5 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
+ ---- Epilog start at index 6 ----
+ 03 add sp, sp, #12 ; 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
- FF end
- FF end
+40 (+62.50%) : 6149.dasm - System.Collections.Immutable.ImmutableArray1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray
1[System.__Canon]:this (FullOpts)
@@ -8,60 +8,83 @@
; 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 -> r4 this single-def
-; V01 TypeCtx [V01,T00] ( 5, 4.20) int -> r1 single-def
+; V00 this [V00,T03] ( 3, 3 ) byref -> r5 this single-def
+; V01 TypeCtx [V01,T00] ( 7, 5.56) int -> r4 single-def
;# 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"
+; V03 tmp1 [V03,T05] ( 3, 4 ) int -> r6 "spilling helperCall"
;* V04 tmp2 [V04 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.__Canon[]>
-; V07 tmp5 [V07,T05] ( 2, 2 ) ref -> r0 single-def "field V04.array (fldOffset=0x0)" P-INDEP
-; V08 tmp6 [V08,T04] ( 2, 4 ) int -> r0 "argument with side effect"
-; V09 rat0 [V09,T03] ( 3, 4 ) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T01] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable"
+; V07 tmp5 [V07,T06] ( 2, 2 ) ref -> r0 single-def "field V04.array (fldOffset=0x0)" P-INDEP
+; V08 rat0 [V08,T01] ( 3, 5.60) int -> r6 "fgMakeTemp is creating a new local variable"
+;* V09 rat1 [V09,T07] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V10 rat2 [V10,T02] ( 3, 5.60) int -> r0 "spilling expr"
+; V11 rat3 [V11,T04] ( 2, 3.20) int -> r0 "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 12
G_M44373_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r11,lr}
+ push {r4,r5,r6,r11,lr}
sub sp, 12
- add r11, sp, 16
- str r1, [r11-0x0C]
- mov r4, r0
- ; byrRegs +[r4]
- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M44373_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz
- ldr r0, [r1+0x20]
- ldr r0, [r0+0x08]
- cmp r0, 0
+ add r11, sp, 24
+ str r1, [r11-0x14]
+ mov r5, r0
+ ; byrRegs +[r5]
+ mov r4, r1
+ ;; size=18 bbWeight=1 PerfScore 6.00
+G_M44373_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r6, [r0+0x08]
+ cmp r6, 0
beq SHORT G_M44373_IG04
;; size=8 bbWeight=1 PerfScore 4.00
-G_M44373_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref, isz
+G_M44373_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
b SHORT G_M44373_IG05
;; size=2 bbWeight=0.80 PerfScore 0.80
-G_M44373_IG04: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
- mov r0, r1
+G_M44373_IG04: ; bbWeight=0.20, 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
- ;; size=20 bbWeight=0.20 PerfScore 1.20
-G_M44373_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0010 {r4}, byref
- ldr r1, [r4]
- ; gcrRegs +[r1]
+ blx r3 // CORINFO_HELP_MEMCPY
+ mov r6, r0
+ ;; size=22 bbWeight=0.20 PerfScore 1.40
+G_M44373_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M44373_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.00
+G_M44373_IG06: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref, isz
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M44373_IG08
+ ;; size=6 bbWeight=0.80 PerfScore 2.40
+G_M44373_IG07: ; bbWeight=0.36, 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_ISINSTANCEOFARRAY
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.36 PerfScore 2.16
+G_M44373_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0020 {r5}, byref
+ ldr r1, [r5]
+ ; gcrRegs +[r1]
+ mov r0, r6
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[r1] +[r0]
- ; byrRegs -[r4]
- ;; size=12 bbWeight=1 PerfScore 4.00
-G_M44373_IG06: ; bbWeight=1, epilog, nogc, extend
+ ; byrRegs -[r5]
+ ;; size=14 bbWeight=1 PerfScore 5.00
+G_M44373_IG09: ; bbWeight=1, epilog, nogc, extend
add sp, 12
- pop {r4,r11,pc}
+ pop {r4,r5,r6,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 64, prolog size 14, PerfScore 17.00, instruction count 22, allocated bytes for code 64 (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 104, prolog size 14, PerfScore 27.76, instruction count 38, allocated bytes for code 104 (MethodHash=e6fb52aa) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
; ============================================================
Unwind Info:
@@ -73,11 +96,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 32 (0x00020) Actual length = 64 (0x000040)
+ Function Length : 52 (0x00034) Actual length = 104 (0x000068)
--- 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
+ A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
FF end
realworld.run.linux.arm.checked.mch
-26 (-9.29%) : 18629.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
@@ -13,8 +13,8 @@
; V02 tmp2 [V02,T02] ( 3, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <System.Security.Cryptography.X509Certificates.OpenSslCachedDirectoryStoreProvider>
; V03 tmp3 [V03,T03] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <System.Security.Cryptography.X509Certificates.OpenSslCachedDirectoryStoreProvider>
; V04 tmp4 [V04,T04] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
-; V05 cse0 [V05,T00] ( 6, 6 ) int -> r6 "CSE - aggressive"
-; V06 cse1 [V06,T05] ( 4, 4 ) int -> r4 "CSE - aggressive"
+; V05 cse0 [V05,T05] ( 4, 4 ) ref -> r4 "CSE - aggressive"
+; V06 cse1 [V06,T00] ( 6, 6 ) int -> r6 "CSE - aggressive"
; TEMP_01 ref -> [r11-0x14]
;
; Lcl frame size = 20
@@ -27,14 +27,15 @@ G_M27654_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
str r0, [sp+0x0C]
;; size=14 bbWeight=1 PerfScore 5.00
G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movw r4, 0xd1ff
- movt r4, 0xd1ff
- mov r0, r4
+ movw r0, 0xd1ff
+ movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
- mov r5, r0
+ mov r4, r0
+ ; gcrRegs +[r4]
+ mov r5, r4
; gcrRegs +[r5]
mov r0, r5
movw r1, 0xd1ff
@@ -53,14 +54,10 @@ G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
- mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r5, r0
+ mov r5, r4
; gcrRegs +[r5]
mov r0, r5
+ ; gcrRegs +[r0]
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
@@ -76,13 +73,7 @@ G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r5]
mov r0, r4
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
; gcrRegs +[r0]
- mov r4, r0
- ; gcrRegs +[r4]
- mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
@@ -101,7 +92,7 @@ G_M27654_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]
mov r4, r0
; gcrRegs +[r4]
@@ -139,13 +130,13 @@ G_M27654_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1]
- ;; size=260 bbWeight=1 PerfScore 86.00
+ ;; size=234 bbWeight=1 PerfScore 77.00
G_M27654_IG03: ; bbWeight=1, epilog, nogc, extend
add sp, 20
pop {r4,r5,r6,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 280, prolog size 14, PerfScore 93.00, instruction count 93, allocated bytes for code 280 (MethodHash=9e1993f9) for method System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
+; Total bytes of code 254, prolog size 14, PerfScore 84.00, instruction count 84, allocated bytes for code 254 (MethodHash=9e1993f9) for method System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
; ============================================================
Unwind Info:
@@ -157,7 +148,7 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 140 (0x0008c) Actual length = 280 (0x000118)
+ Function Length : 127 (0x0007f) Actual length = 254 (0x0000fe)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
-16 (-8.16%) : 14575.dasm - FSharp.Compiler.Parser+fsyaccreductions@6045-371:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
@@ -15,18 +15,20 @@
; V04 tmp2 [V04 ] ( 2, 4 ) struct (16) [sp+0x00] do-not-enreg[HS] hidden-struct-arg double-align "spilled call-like call argument" <FSharp.Compiler.Text.Range>
;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
; V06 tmp4 [V06,T00] ( 7, 14 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia>
-; V07 tmp5 [V07,T02] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
-; V08 tmp6 [V08,T03] ( 3, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
+; V07 tmp5 [V07,T03] ( 2, 4 ) ref -> r0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
+; V08 tmp6 [V08,T02] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
; V09 tmp7 [V09,T04] ( 2, 4 ) long -> [sp+0x10] do-not-enreg[H] hidden-struct-arg "field V03.code1 (fldOffset=0x0)" P-DEP
; V10 tmp8 [V10,T05] ( 2, 4 ) long -> [sp+0x18] do-not-enreg[H] hidden-struct-arg "field V03.code2 (fldOffset=0x8)" P-DEP
; V11 tmp9 [V11,T06] ( 2, 4 ) long -> [sp+0x00] do-not-enreg[H] hidden-struct-arg "field V04.code1 (fldOffset=0x0)" P-DEP
; V12 tmp10 [V12,T07] ( 2, 4 ) long -> [sp+0x08] do-not-enreg[H] hidden-struct-arg "field V04.code2 (fldOffset=0x8)" P-DEP
+; V13 cse0 [V13,T08] ( 3, 3 ) ref -> r4 "CSE - aggressive"
+; V14 cse1 [V14,T09] ( 3, 3 ) byref -> r0 "CSE - aggressive"
;
-; Lcl frame size = 32
+; Lcl frame size = 36
G_M8967_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r11,lr}
- sub sp, 32
+ push {r4,r11,lr}
+ sub sp, 36
add r11, sp, 40
mov r4, r1
; gcrRegs +[r4]
@@ -56,41 +58,36 @@ G_M8967_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
mov r4, r0
; gcrRegs +[r4]
- ldr r0, [sp]
+ mov r0, r4
+ adds r0, 8
; gcrRegs -[r0]
- str r0, [r4+0x08]
- ldr r0, [sp+0x04]
- str r0, [r4+0x0C]
- ldr r0, [sp+0x08]
- str r0, [r4+0x10]
- ldr r0, [sp+0x0C]
- str r0, [r4+0x14]
+ ; byrRegs +[r0]
+ ldr r3, [sp]
+ str r3, [r0]
+ ldr r3, [sp+0x04]
+ str r3, [r0+0x04]
+ ldr r3, [sp+0x08]
+ str r3, [r0+0x08]
+ ldr r3, [sp+0x0C]
+ str r3, [r0+0x0C]
+ ldr r3, [sp+0x10]
+ str r3, [r0]
+ ldr r3, [sp+0x14]
+ str r3, [r0+0x04]
+ ldr r3, [sp+0x18]
+ str r3, [r0+0x08]
+ ldr r3, [sp+0x1C]
+ str r3, [r0+0x0C]
movw r0, 0xd1ff
+ ; byrRegs -[r0]
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r5, r0
- ; gcrRegs +[r5]
- ldr r0, [sp+0x10]
- ; gcrRegs -[r0]
- str r0, [r5+0x08]
- ldr r0, [sp+0x14]
- str r0, [r5+0x0C]
- ldr r0, [sp+0x18]
- str r0, [r5+0x10]
- ldr r0, [sp+0x1C]
- str r0, [r5+0x14]
- movw r0, 0xd1ff
- movt r0, 0xd1ff
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
mov r2, r0
; gcrRegs +[r2]
@@ -102,33 +99,33 @@ G_M8967_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
movw r12, 0xd1ff
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r4]
+ ; gcrRegs -[r1]
; byrRegs -[r0]
movs r1, 0
str r1, [r2+0x08]
add r0, r2, 12
; byrRegs +[r0]
- mov r1, r5
+ mov r1, r4
; gcrRegs +[r1]
movw r12, 0xd1ff
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1 r5]
+ ; gcrRegs -[r1 r4]
; byrRegs -[r0]
movs r0, 0
str r0, [r2+0x10]
- ;; size=174 bbWeight=1 PerfScore 64.00
+ ;; size=158 bbWeight=1 PerfScore 60.00
G_M8967_IG03: ; bbWeight=1, gcrefRegs=0004 {r2}, byrefRegs=0000 {}, byref
str r0, [r2+0x14]
mov r0, r2
; gcrRegs +[r0]
;; size=4 bbWeight=1 PerfScore 2.00
G_M8967_IG04: ; bbWeight=1, epilog, nogc, extend
- add sp, 32
- pop {r4,r5,r11,pc}
+ add sp, 36
+ pop {r4,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 196, prolog size 10, PerfScore 72.00, instruction count 72, allocated bytes for code 196 (MethodHash=e19edcf8) for method FSharp.Compiler.Parser+_fsyacc_reductions@6045-371:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
+; Total bytes of code 180, prolog size 10, PerfScore 68.00, instruction count 68, allocated bytes for code 180 (MethodHash=e19edcf8) for method FSharp.Compiler.Parser+_fsyacc_reductions@6045-371:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
; ============================================================
Unwind Info:
@@ -140,11 +137,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 98 (0x00062) Actual length = 196 (0x0000c4)
+ Function Length : 90 (0x0005a) Actual length = 180 (0x0000b4)
--- One epilog, unwind codes at 0
---- Unwind codes ----
---- Epilog start at index 0 ----
- 08 add sp, sp, #32 ; opsize 16
- A8 30 pop {r4,r5,r11,lr} ; opsize 32
+ 09 add sp, sp, #36 ; opsize 16
+ A8 10 pop {r4,r11,lr} ; opsize 32
FF end
-20 (-4.46%) : 11667.dasm - FSharp.Compiler.TypeRelations:ChooseTyparSolutionAndRange(FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.Import+ImportMap,FSharp.Compiler.TypedTree+Typar):System.Tuple`2FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range
@@ -15,39 +15,40 @@
;* V04 loc1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
;* V05 loc2 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <FSharp.Compiler.TypedTree+TType>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V07 tmp1 [V07,T29] ( 3, 2 ) ref -> r7
+; V07 tmp1 [V07,T30] ( 3, 2 ) ref -> r7
; V08 tmp2 [V08,T00] ( 7, 13 ) ref -> r8 class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.TypeRelations+ChooseTyparSolutionAndRange@142>
-; V09 tmp3 [V09,T03] ( 6, 10 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
-; V10 tmp4 [V10,T24] ( 2, 4 ) ref -> r4 class-hnd single-def "impAppendStmt" <FSharp.Compiler.TypedTree+TType>
-; V11 tmp5 [V11,T04] ( 5, 10 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
+; V09 tmp3 [V09,T03] ( 6, 10 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
+; V10 tmp4 [V10,T24] ( 2, 4 ) ref -> r1 class-hnd single-def "impAppendStmt" <FSharp.Compiler.TypedTree+TType>
+; V11 tmp5 [V11,T04] ( 5, 10 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
;* V12 tmp6 [V12 ] ( 0, 0 ) struct (16) zero-ref double-align "spilled call-like call argument" <FSharp.Compiler.Text.Range>
;* V13 tmp7 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <FSharp.Compiler.TypedTree+TyparKind>
-; V15 tmp9 [V15,T30] ( 2, 2 ) ref -> r7 class-hnd exact single-def "Inlining Arg" <FSharp.Compiler.TypedTree+Measure>
+; V15 tmp9 [V15,T31] ( 2, 2 ) ref -> r7 class-hnd exact single-def "Inlining Arg" <FSharp.Compiler.TypedTree+Measure>
; V16 tmp10 [V16,T23] ( 4, 4 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.TypedTree+TType+TType_measure>
-; V17 tmp11 [V17,T27] ( 4, 2.50) ref -> r4 class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint]>
-; V18 tmp12 [V18,T28] ( 3, 2.50) ref -> r1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>>
+; V17 tmp11 [V17,T28] ( 4, 2.50) ref -> r4 class-hnd "Inline return value spill temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint]>
+; V18 tmp12 [V18,T29] ( 3, 2.50) ref -> r1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>>
;* V19 tmp13 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <<unknown class>>
-; V20 tmp14 [V20,T22] ( 5, 4 ) ref -> r5 class-hnd "Inline return value spill temp" <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
-; V21 tmp15 [V21,T07] ( 3, 8.50) ref -> r6 class-hnd single-def "Inline stloc first use temp" <<unknown class>>
+; V20 tmp14 [V20,T22] ( 5, 4 ) ref -> registers class-hnd "Inline return value spill temp" <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
+; V21 tmp15 [V21,T07] ( 3, 8.50) ref -> r7 class-hnd single-def "Inline stloc first use temp" <<unknown class>>
; V22 tmp16 [V22,T06] ( 4, 9 ) ref -> r1 class-hnd "Inline stloc first use temp" <System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range]>
; V23 tmp17 [V23,T01] ( 5, 13 ) ref -> r4 class-hnd "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint]>
-; V24 tmp18 [V24,T02] ( 5, 13 ) ref -> r5 class-hnd "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint]>
+; V24 tmp18 [V24,T02] ( 5, 13 ) ref -> r6 class-hnd "Inline stloc first use temp" <Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint]>
;* V25 tmp19 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <FSharp.Compiler.TypedTree+TyparConstraint>
; V26 tmp20 [V26,T19] ( 5, 5 ) long -> [sp+0x18] do-not-enreg[F] single-def "field V03.code1 (fldOffset=0x0)" P-INDEP
; V27 tmp21 [V27,T20] ( 5, 5 ) long -> [sp+0x10] do-not-enreg[F] single-def "field V03.code2 (fldOffset=0x8)" P-INDEP
-; V28 tmp22 [V28,T25] ( 3, 3 ) long -> [sp+0x08] do-not-enreg[F] single-def "field V12.code1 (fldOffset=0x0)" P-INDEP
-; V29 tmp23 [V29,T26] ( 3, 3 ) long -> [sp+0x00] do-not-enreg[F] single-def "field V12.code2 (fldOffset=0x8)" P-INDEP
-; V30 rat0 [V30,T08] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
-; V31 rat1 [V31,T09] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
-; V32 rat2 [V32,T10] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
-; V33 rat3 [V33,T11] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
-; V34 rat4 [V34,T12] ( 3, 6 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
-; V35 rat5 [V35,T13] ( 3, 6 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
-; V36 rat6 [V36,T14] ( 3, 6 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
-; V37 rat7 [V37,T15] ( 3, 6 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
-; V38 rat8 [V38,T16] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
-; V39 rat9 [V39,T17] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V28 tmp22 [V28,T26] ( 3, 3 ) long -> [sp+0x08] do-not-enreg[F] single-def "field V12.code1 (fldOffset=0x0)" P-INDEP
+; V29 tmp23 [V29,T27] ( 3, 3 ) long -> [sp+0x00] do-not-enreg[F] single-def "field V12.code2 (fldOffset=0x8)" P-INDEP
+; V30 cse0 [V30,T25] ( 3, 3 ) ref -> r5 "CSE - moderate"
+; V31 rat0 [V31,T08] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V32 rat1 [V32,T09] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V33 rat2 [V33,T10] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V34 rat3 [V34,T11] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V35 rat4 [V35,T12] ( 3, 6 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
+; V36 rat5 [V36,T13] ( 3, 6 ) byref -> r1 "ReplaceWithLclVar is creating a new local variable"
+; V37 rat6 [V37,T14] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V38 rat7 [V38,T15] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V39 rat8 [V39,T16] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
+; V40 rat9 [V40,T17] ( 3, 6 ) byref -> r0 "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 36
@@ -105,7 +106,7 @@ G_M19057_IG04: ; bbWeight=0.50, gcrefRegs=0070 {r4 r5 r6}, byrefRegs=0000
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[r0]
mov r2, r0
; gcrRegs +[r2]
@@ -130,7 +131,7 @@ G_M19057_IG05: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
mov r8, r0
; gcrRegs +[r8]
@@ -178,11 +179,13 @@ G_M19057_IG05: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000
movt r0, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0]
mov r5, r0
; gcrRegs +[r5]
- adds r0, r5, 4
+ mov r6, r5
+ ; gcrRegs +[r6]
+ adds r0, r6, 4
; gcrRegs -[r0]
; byrRegs +[r0]
mov r1, r7
@@ -192,13 +195,13 @@ G_M19057_IG05: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000
blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r7]
; byrRegs -[r0]
- add r1, r5, 8
+ add r1, r6, 8
; byrRegs +[r1]
ldr r0, [sp+0x18]
str r0, [r1]
ldr r0, [sp+0x1C]
str r0, [r1+0x04]
- add r1, r5, 16
+ add r1, r6, 16
ldr r0, [sp+0x10]
str r0, [r1]
ldr r0, [sp+0x14]
@@ -208,32 +211,32 @@ G_M19057_IG05: ; bbWeight=1, gcrefRegs=00F0 {r4 r5 r6 r7}, byrefRegs=0000
; byrRegs -[r1]
cmp r1, 0
beq SHORT G_M19057_IG07
- ;; size=156 bbWeight=1 PerfScore 55.00
-G_M19057_IG06: ; bbWeight=0.50, gcrefRegs=0122 {r1 r5 r8}, byrefRegs=0000 {}, byref, isz
+ ;; size=158 bbWeight=1 PerfScore 56.00
+G_M19057_IG06: ; bbWeight=0.50, gcrefRegs=0162 {r1 r5 r6 r8}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r4]
ldr r1, [r1+0x04]
ldr r4, [r1+0x0C]
; gcrRegs +[r4]
b SHORT G_M19057_IG08
;; size=6 bbWeight=0.50 PerfScore 1.50
-G_M19057_IG07: ; bbWeight=0.50, gcrefRegs=0120 {r5 r8}, byrefRegs=0000 {}, byref
+G_M19057_IG07: ; bbWeight=0.50, gcrefRegs=0160 {r5 r6 r8}, byrefRegs=0000 {}, byref
; gcrRegs -[r1 r4]
movw r1, 0xd1ff
movt r1, 0xd1ff
ldr r4, [r1]
; gcrRegs +[r4]
;; size=10 bbWeight=0.50 PerfScore 1.50
-G_M19057_IG08: ; bbWeight=1, gcrefRegs=0130 {r4 r5 r8}, byrefRegs=0000 {}, byref, isz
+G_M19057_IG08: ; bbWeight=1, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0000 {}, byref, isz
ldr r1, [r4+0x08]
; gcrRegs +[r1]
cmp r1, 0
bne SHORT G_M19057_IG10
;; size=6 bbWeight=1 PerfScore 3.00
-G_M19057_IG09: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+G_M19057_IG09: ; bbWeight=0.50, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r1 r4 r8]
b SHORT G_M19057_IG13
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M19057_IG10: ; bbWeight=0.50, gcrefRegs=0130 {r4 r5 r8}, byrefRegs=0000 {}, byref, isz
+G_M19057_IG10: ; bbWeight=0.50, gcrefRegs=0170 {r4 r5 r6 r8}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r4 r8]
mov r1, r8
; gcrRegs +[r1]
@@ -244,95 +247,84 @@ G_M19057_IG10: ; bbWeight=0.50, gcrefRegs=0130 {r4 r5 r8}, byrefRegs=0000
ldr r3, [r3]
blx r3 // Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[System.__Canon,System.__Canon,System.__Canon]:Adapt(Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[System.__Canon,System.__Canon,System.__Canon]
; gcrRegs -[r1 r8] +[r0]
- mov r6, r0
- ; gcrRegs +[r6]
- mov r1, r5
+ mov r7, r0
+ ; gcrRegs +[r7]
+ mov r1, r6
; gcrRegs +[r1]
- ldr r5, [r4+0x08]
- cmp r5, 0
+ ldr r6, [r4+0x08]
+ cmp r6, 0
beq SHORT G_M19057_IG12
;; size=32 bbWeight=0.50 PerfScore 6.00
-G_M19057_IG11: ; bbWeight=4, gcrefRegs=0072 {r1 r4 r5 r6}, byrefRegs=0000 {}, byref, isz
+G_M19057_IG11: ; bbWeight=4, gcrefRegs=00F2 {r1 r4 r5 r6 r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0]
ldr r2, [r4+0x04]
; gcrRegs +[r2]
- mov r0, r6
+ mov r0, r7
; gcrRegs +[r0]
- ldr r3, [r6]
+ ldr r3, [r7]
ldr r3, [r3+0x2C]
ldr r3, [r3+0x14]
blx r3 // <unknown method>
; gcrRegs -[r1-r2 r4]
mov r1, r0
; gcrRegs +[r1]
- mov r4, r5
+ mov r4, r6
; gcrRegs +[r4]
- ldr r5, [r4+0x08]
- cmp r5, 0
+ ldr r6, [r4+0x08]
+ cmp r6, 0
bne SHORT G_M19057_IG11
;; size=22 bbWeight=4 PerfScore 44.00
-G_M19057_IG12: ; bbWeight=0.50, gcrefRegs=0002 {r1}, byrefRegs=0000 {}, byref
- ; gcrRegs -[r0 r4-r6]
- mov r5, r1
- ; gcrRegs +[r5]
+G_M19057_IG12: ; bbWeight=0.50, gcrefRegs=0022 {r1 r5}, byrefRegs=0000 {}, byref
+ ; gcrRegs -[r0 r4 r6-r7]
+ mov r6, r1
+ ; gcrRegs +[r6]
;; size=2 bbWeight=0.50 PerfScore 0.50
-G_M19057_IG13: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
+G_M19057_IG13: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref
; gcrRegs -[r1]
- ldr r4, [r5+0x04]
- ; gcrRegs +[r4]
- movw r0, 0xd1ff
- movt r0, 0xd1ff
- movw r3, 0xd1ff
- movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
- ; gcrRegs +[r0]
- mov r2, r0
- ; gcrRegs +[r2]
- add r1, r5, 8
- ; byrRegs +[r1]
- ldr r0, [r1]
- ; gcrRegs -[r0]
- ldr r1, [r1+0x04]
- ; byrRegs -[r1]
- str r0, [sp+0x08]
- str r1, [sp+0x0C]
- add r1, r5, 16
- ; byrRegs +[r1]
- ldr r0, [r1]
- ldr r1, [r1+0x04]
- ; byrRegs -[r1]
- str r0, [sp]
- str r1, [sp+0x04]
- adds r0, r2, 4
- ; byrRegs +[r0]
- mov r1, r4
+ ldr r1, [r6+0x04]
; gcrRegs +[r1]
+ add r0, r6, 8
+ ; byrRegs +[r0]
+ ldr r3, [r0]
+ ldr r0, [r0+0x04]
+ ; byrRegs -[r0]
+ str r3, [sp+0x08]
+ str r0, [sp+0x0C]
+ add r0, r6, 16
+ ; byrRegs +[r0]
+ ldr r3, [r0]
+ ldr r0, [r0+0x04]
+ ; byrRegs -[r0]
+ str r3, [sp]
+ str r0, [sp+0x04]
...
+32 (+25.81%) : 3097.dasm - Microsoft.FSharp.Collections.PrivateListHelpers:appendToFreshConsTailSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon
@@ -7,63 +7,80 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T09] ( 5, 7.80) int -> r5 single-def
-; V01 arg0 [V01,T06] ( 5, 11 ) ref -> r4 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V00 TypeCtx [V00,T08] ( 7, 12.60) int -> r4 single-def
+; V01 arg0 [V01,T09] ( 5, 11 ) ref -> r5 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
; V02 arg1 [V02,T02] ( 5, 18 ) ref -> r2 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V04 loc1 [V04,T10] ( 2, 8 ) ref -> r6 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V05 loc2 [V05,T11] ( 2, 8 ) ref -> r7 class-hnd <System.__Canon>
-; V06 loc3 [V06,T07] ( 3, 12 ) ref -> r1 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V04 loc1 [V04,T11] ( 2, 8 ) ref -> r6 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V05 loc2 [V05,T12] ( 2, 8 ) ref -> r7 class-hnd <System.__Canon>
+; V06 loc3 [V06,T10] ( 3, 12 ) ref -> r1 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V08 tmp1 [V08,T12] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+; V08 tmp1 [V08,T04] ( 3, 16 ) int -> r8 "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp3 [V10,T00] ( 3, 24 ) int -> r8 "argument with side effect"
-; V11 tmp4 [V11,T05] ( 2, 16 ) ref -> r2 "argument with side effect"
-; V12 cse0 [V12,T08] ( 2, 8 ) int -> r8 "CSE - aggressive"
-; V13 cse1 [V13,T03] ( 3, 20 ) ref -> r6 "CSE - aggressive"
-; V14 rat0 [V14,T04] ( 3, 16 ) int -> r8 "runtime lookup"
-; V15 rat1 [V15,T01] ( 3, 22.40) int -> r8 "fgMakeTemp is creating a new local variable"
+; V10 tmp3 [V10,T07] ( 2, 16 ) int -> r9 "argument with side effect"
+; V11 tmp4 [V11,T06] ( 2, 16 ) ref -> r2 "argument with side effect"
+; V12 cse0 [V12,T03] ( 3, 20 ) ref -> r6 "CSE - aggressive"
+; V13 rat0 [V13,T00] ( 3, 22.40) int -> r8 "fgMakeTemp is creating a new local variable"
+; V14 rat1 [V14,T05] ( 3, 16 ) int -> r9 "runtime lookup"
+; V15 rat2 [V15,T01] ( 3, 22.40) int -> r9 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 12
+; Lcl frame size = 8
G_M63806_IG01: ; bbWeight=8, 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 r5, r0
- mov r4, r1
- ; gcrRegs +[r4]
- ;; size=18 bbWeight=8 PerfScore 48.00
-G_M63806_IG02: ; bbWeight=8, gcrefRegs=0014 {r2 r4}, byrefRegs=0000 {}, byref, isz
+ mov r4, r0
+ mov r5, r1
+ ; gcrRegs +[r5]
+ ;; size=16 bbWeight=8 PerfScore 40.00
+G_M63806_IG02: ; bbWeight=8, gcrefRegs=0024 {r2 r5}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r2]
ldr r6, [r2+0x08]
; gcrRegs +[r6]
cmp r6, 0
- beq SHORT G_M63806_IG07
+ beq SHORT G_M63806_IG10
;; size=6 bbWeight=8 PerfScore 24.00
-G_M63806_IG03: ; bbWeight=4, gcrefRegs=0054 {r2 r4 r6}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG03: ; bbWeight=4, gcrefRegs=0064 {r2 r5 r6}, byrefRegs=0000 {}, byref, isz
ldr r7, [r2+0x04]
; gcrRegs +[r7]
- ldr r0, [r5+0x20]
+ ldr r0, [r4+0x20]
ldr r8, [r0+0x08]
cmp r8, 0
beq SHORT G_M63806_IG05
;; size=14 bbWeight=4 PerfScore 20.00
-G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r2]
b SHORT G_M63806_IG06
;; size=2 bbWeight=3.20 PerfScore 3.20
-G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}, byref
- mov r0, r5
+G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref
+ 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
mov r8, r0
;; size=22 bbWeight=0.80 PerfScore 5.60
-G_M63806_IG06: ; bbWeight=4, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG06: ; bbWeight=4, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r9, [r0+0x08]
+ cmp r9, 0
+ beq SHORT G_M63806_IG08
+ ;; size=12 bbWeight=4 PerfScore 16.00
+G_M63806_IG07: ; bbWeight=3.20, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M63806_IG09
+ ;; size=2 bbWeight=3.20 PerfScore 3.20
+G_M63806_IG08: ; bbWeight=0.80, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ mov r9, r0
+ ;; size=22 bbWeight=0.80 PerfScore 5.60
+G_M63806_IG09: ; bbWeight=4, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz
mov r0, r8
movw r3, 0xd1ff
movt r3, 0xd1ff
@@ -72,7 +89,7 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}
; gcrRegs +[r0]
mov r2, r0
; gcrRegs +[r2]
- mov r0, r8
+ mov r0, r9
; gcrRegs -[r0]
mov r1, r7
; gcrRegs +[r1]
@@ -83,31 +100,30 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=00D0 {r4 r6 r7}, byrefRegs=0000 {}
; gcrRegs -[r1-r2 r7] +[r0]
mov r1, r0
; gcrRegs +[r1]
- add r0, r4, 8
+ add r0, r5, 8
; gcrRegs -[r0]
; byrRegs +[r0]
movw r12, 0xd1ff
movt r12, 0xd1ff
blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r4]
+ ; gcrRegs -[r5]
; byrRegs -[r0]
mov r2, r6
; gcrRegs +[r2]
- mov r4, r1
- ; gcrRegs +[r4]
+ mov r5, r1
+ ; gcrRegs +[r5]
b SHORT G_M63806_IG02
;; size=54 bbWeight=4 PerfScore 80.00
-G_M63806_IG07: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+G_M63806_IG10: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref
; gcrRegs -[r1-r2 r6]
- mov r0, r4
+ mov r0, r5
; gcrRegs +[r0]
;; size=2 bbWeight=1 PerfScore 1.00
-G_M63806_IG08: ; bbWeight=1, epilog, nogc, extend
- add sp, 12
- pop {r4,r5,r6,r7,r8,r11,pc}
- ;; size=6 bbWeight=1 PerfScore 2.00
+G_M63806_IG11: ; bbWeight=1, epilog, nogc, extend
+ pop {r2,r3,r4,r5,r6,r7,r8,r9,r11,pc}
+ ;; size=4 bbWeight=1 PerfScore 1.00
-; Total bytes of code 124, prolog size 14, PerfScore 183.80, instruction count 45, allocated bytes for code 124 (MethodHash=873c06c1) for method 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)
+; Total bytes of code 156, prolog size 12, PerfScore 199.60, instruction count 55, allocated bytes for code 156 (MethodHash=873c06c1) for method 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)
; ============================================================
Unwind Info:
@@ -119,11 +135,11 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 62 (0x0003e) Actual length = 124 (0x00007c)
+ Function Length : 78 (0x0004e) Actual length = 156 (0x00009c)
--- One epilog, unwind codes at 0
---- 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
FF end
+40 (+33.90%) : 16710.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -8,92 +8,117 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T00] ( 7, 4.20) int -> r0 single-def
-; V01 arg0 [V01,T01] ( 4, 3 ) int -> r4 single-def
+; V00 TypeCtx [V00,T00] ( 9, 4.88) int -> r4 single-def
+; V01 arg0 [V01,T01] ( 4, 3 ) int -> r5 single-def
; V02 arg1 [V02,T02] ( 3, 3 ) ubyte -> r2 single-def
-; V03 loc0 [V03,T08] ( 2, 1 ) int -> r5
+; V03 loc0 [V03,T10] ( 2, 1 ) int -> r6
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T05] ( 3, 2 ) int -> r1 "spilling helperCall"
+; V05 tmp1 [V05,T07] ( 3, 2 ) int -> r0 "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V07 tmp3 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 2 ) int -> r0 "argument with side effect"
-; V09 rat0 [V09,T06] ( 3, 2 ) int -> r0 "runtime lookup"
-; V10 rat1 [V10,T03] ( 3, 2.80) int -> r3 "fgMakeTemp is creating a new local variable"
-; V11 rat2 [V11,T04] ( 3, 2.80) int -> r1 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T09] ( 2, 2 ) int -> r0 "argument with side effect"
+;* V09 rat0 [V09,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V10 rat1 [V10,T03] ( 3, 2.80) int -> r0 "spilling expr"
+; V11 rat2 [V11,T06] ( 2, 1.60) int -> r0 "fgMakeTemp is creating a new local variable"
+; V12 rat3 [V12,T08] ( 3, 2 ) int -> r0 "runtime lookup"
+; V13 rat4 [V13,T04] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
+; V14 rat5 [V14,T05] ( 3, 2.80) int -> r0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 12
G_M46119_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]
- mov r4, r1
- ;; size=14 bbWeight=1 PerfScore 4.00
+ push {r4,r5,r6,r11,lr}
+ sub sp, 12
+ add r11, sp, 24
+ str r0, [r11-0x14]
+ mov r4, r0
+ mov r5, r1
+ ;; size=18 bbWeight=1 PerfScore 6.00
G_M46119_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- uxtb r1, r2
- cmp r1, 0
- bne SHORT G_M46119_IG08
+ uxtb r0, r2
+ cmp r0, 0
+ bne SHORT G_M46119_IG11
;; size=6 bbWeight=1 PerfScore 3.00
G_M46119_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr r1, [r0+0x20]
- ldr r3, [r1+0x08]
- cmp r3, 0
- beq SHORT G_M46119_IG05
+ ldr r0, [r4+0x20]
+ ldr r1, [r0+0x04]
+ cmp r1, 12
+ ble SHORT G_M46119_IG05
;; size=8 bbWeight=0.50 PerfScore 2.00
G_M46119_IG04: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- mov r0, r3
- b SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.40 PerfScore 0.80
-G_M46119_IG05: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr r0, [r0+0x0C]
+ cmp r0, 0
+ bne SHORT G_M46119_IG06
+ ;; size=6 bbWeight=0.40 PerfScore 1.20
+G_M46119_IG05: ; bbWeight=0.18, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
movw r1, 0xd1ff
movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
- ;; size=18 bbWeight=0.10 PerfScore 0.50
-G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r1, r4
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.18 PerfScore 1.08
+G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG08
+ ;; size=8 bbWeight=0.50 PerfScore 2.00
+G_M46119_IG07: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.40 PerfScore 0.40
+G_M46119_IG08: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
movw r3, 0xd1ff
movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWARR_1_OBJ
+ blx r3 // CORINFO_HELP_MEMCPY
+ ;; size=20 bbWeight=0.10 PerfScore 0.60
+G_M46119_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[r0]
;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M46119_IG07: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M46119_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M46119_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0.50 PerfScore 1.00
+G_M46119_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0]
- movs r5, 80
- ldr r1, [r0+0x20]
- ldr r1, [r1+0x08]
- cmp r1, 0
- beq SHORT G_M46119_IG10
+ movs r6, 80
+ ldr r0, [r4+0x20]
+ ldr r0, [r0+0x08]
+ cmp r0, 0
+ beq SHORT G_M46119_IG13
;; size=10 bbWeight=0.50 PerfScore 2.50
-G_M46119_IG09: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- b SHORT G_M46119_IG11
+G_M46119_IG12: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M46119_IG14
;; size=2 bbWeight=0.40 PerfScore 0.40
-G_M46119_IG10: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46119_IG13: ; bbWeight=0.10, gcrefRegs=0000 {}, 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
+ blx r3 // CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.10 PerfScore 0.60
-G_M46119_IG11: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov r0, r1
- mov r1, r4
- mov r2, r5
+G_M46119_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov r1, r5
+ mov r2, r6
movw r3, 0xd1ff
movt r3, 0xd1ff
blx r3 // <unknown method>
; gcrRegs +[r0]
- ;; size=16 bbWeight=0.50 PerfScore 3.00
-G_M46119_IG12: ; bbWeight=0.50, epilog, nogc, extend
- pop {r2,r3,r4,r5,r11,pc}
- ;; size=4 bbWeight=0.50 PerfScore 0.50
+ ;; size=14 bbWeight=0.50 PerfScore 2.50
+G_M46119_IG15: ; bbWeight=0.50, epilog, nogc, extend
+ add sp, 12
+ pop {r4,r5,r6,r11,pc}
+ ;; size=6 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 118, prolog size 12, PerfScore 19.80, instruction count 42, allocated bytes for code 118 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
+; Total bytes of code 158, prolog size 14, PerfScore 26.28, instruction count 58, allocated bytes for code 158 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
; ============================================================
Unwind Info:
@@ -105,7 +130,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ Function Length : 79 (0x0004f) Actual length = 158 (0x00009e)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -117,7 +142,7 @@ Unwind Info:
Epilog Start Index : 0 (0x00)
---- Unwind codes ----
---- Epilog start at index 0 ----
- A8 3C pop {r2,r3,r4,r5,r11,lr} ; opsize 32
- FF end
+ 03 add sp, sp, #12 ; opsize 16
+ A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
FF end
+42 (+35.00%) : 6880.dasm - Internal.Utilities.Collections.QueueList:foldBackSystem.Canon,System.Canon:System.__Canon (FullOpts)
@@ -7,94 +7,114 @@
; 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] ( 7, 5.40) 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,T05] ( 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,T08] ( 2, 4 ) ref -> r8 class-hnd exact single-def "impAppendStmt" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V06 tmp2 [V06,T06] ( 3, 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,T09] ( 2, 4 ) ref -> r2 single-def "argument with side effect"
+; V09 tmp5 [V09,T11] ( 2, 4 ) int -> r10 "argument with side effect"
+; V10 tmp6 [V10,T10] ( 2, 4 ) ref -> r3 single-def "argument with side effect"
+; V11 rat0 [V11,T03] ( 3, 5.60) int -> r9 "fgMakeTemp is creating a new local variable"
+; V12 rat1 [V12,T07] ( 3, 4 ) int -> r10 "runtime lookup"
+; V13 rat2 [V13,T04] ( 3, 5.60) int -> r10 "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 12
G_M61677_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r7,r8,r11,lr}
+ push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
sub sp, 12
- add r11, sp, 32
- str r0, [r11-0x1C]
- mov r4, r1
- ; gcrRegs +[r4]
- mov r5, r2
+ add r11, sp, 40
+ str r0, [r11-0x24]
+ 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
+ ;; size=22 bbWeight=1 PerfScore 8.00
+G_M61677_IG02: ; bbWeight=1, gcrefRegs=00E0 {r5 r6 r7}, byrefRegs=0000 {}, byref, isz
+ ldr r8, [r6+0x04]
+ ; gcrRegs +[r8]
+ ldr r0, [r4+0x20]
+ ldr r9, [r0+0x0C]
+ cmp r9, 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
+ ;; size=16 bbWeight=1 PerfScore 5.00
+G_M61677_IG03: ; bbWeight=0.80, gcrefRegs=01E0 {r5 r6 r7 r8}, 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
+G_M61677_IG04: ; bbWeight=0.20, gcrefRegs=01E0 {r5 r6 r7 r8}, 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 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
+ ;; size=22 bbWeight=0.20 PerfScore 1.40
+G_M61677_IG05: ; bbWeight=1, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
+ ldr r0, [r4+0x20]
+ ldr r10, [r0+0x0C]
+ cmp r10, 0
+ beq SHORT G_M61677_IG07
+ ;; size=12 bbWeight=1 PerfScore 4.00
+G_M61677_IG06: ; bbWeight=0.80, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref, isz
+ b SHORT G_M61677_IG08
+ ;; size=2 bbWeight=0.80 PerfScore 0.80
+G_M61677_IG07: ; bbWeight=0.20, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref
+ mov r0, r4
+ movw r1, 0xd1ff
+ movt r1, 0xd1ff
+ movw r3, 0xd1ff
+ movt r3, 0xd1ff
+ blx r3 // CORINFO_HELP_MEMCPY
+ mov r10, r0
+ ;; size=22 bbWeight=0.20 PerfScore 1.40
+G_M61677_IG08: ; bbWeight=1, gcrefRegs=01E0 {r5 r6 r7 r8}, byrefRegs=0000 {}, byref
+ 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, r10
; 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
+G_M61677_IG09: ; bbWeight=1, epilog, nogc, extend
add sp, 12
- pop {r4,r5,r6,r7,r8,r11,lr}
+ pop {r4,r5,r6,r7,r8,r9,r10,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 162, prolog size 14, PerfScore 44.40, instruction count 56, allocated bytes for code 162 (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:
@@ -106,11 +126,12 @@ Unwind Info:
E bit : 1
X bit : 0
Vers : 0
- Function Length : 60 (0x0003c) Actual length = 120 (0x000078)
+ Function Length : 81 (0x00051) Actual length = 162 (0x0000a2)
--- One epilog, unwind codes at 0
---- 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
+ DF pop {r4,r5,r6,r7,r8,r9,r10,r11,lr} ; opsize 32
+ FF end
FF end
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.linux.arm.checked.mch |
2,992 |
17 |
35 |
2,940 |
-210 |
+1,008 |
benchmarks.run_pgo.linux.arm.checked.mch |
3,266 |
336 |
22 |
2,908 |
-6,038 |
+756 |
benchmarks.run_tiered.linux.arm.checked.mch |
3,851 |
15 |
19 |
3,817 |
-246 |
+738 |
coreclr_tests.run.linux.arm.checked.mch |
340 |
38 |
39 |
263 |
-126 |
+344 |
libraries.crossgen2.linux.arm.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.linux.arm.checked.mch |
4,683 |
18 |
85 |
4,580 |
-234 |
+4,938 |
libraries_tests.run.linux.arm.Release.mch |
1,930 |
19 |
19 |
1,892 |
-294 |
+1,104 |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
2,047 |
19 |
57 |
1,971 |
-172 |
+2,848 |
realworld.run.linux.arm.checked.mch |
7,528 |
59 |
75 |
7,394 |
-702 |
+4,166 |
|
26,637 |
521 |
351 |
25,765 |
-8,022 |
+15,902 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.linux.arm.checked.mch |
10,433 |
1,093 |
9,340 |
728 (4.02%) |
7,290 (40.23%) |
benchmarks.run_pgo.linux.arm.checked.mch |
18,745 |
12,310 |
6,435 |
407 (1.39%) |
10,232 (34.83%) |
benchmarks.run_tiered.linux.arm.checked.mch |
18,976 |
12,223 |
6,753 |
382 (1.50%) |
6,145 (24.08%) |
coreclr_tests.run.linux.arm.checked.mch |
2,260 |
1,374 |
886 |
44 (0.89%) |
2,310 (46.52%) |
libraries.crossgen2.linux.arm.checked.mch |
7,920 |
10 |
7,910 |
0 (0.00%) |
3,071 (26.97%) |
libraries.pmi.linux.arm.checked.mch |
16,835 |
0 |
16,835 |
100 (0.43%) |
6,246 (26.60%) |
libraries_tests.run.linux.arm.Release.mch |
8,574 |
7,278 |
1,296 |
152 (1.12%) |
4,610 (33.95%) |
librariestestsnotieredcompilation.run.linux.arm.Release.mch |
6,687 |
0 |
6,687 |
380 (3.06%) |
5,323 (42.91%) |
realworld.run.linux.arm.checked.mch |
14,152 |
134 |
14,018 |
592 (2.73%) |
7,137 (32.91%) |
|
104,582 |
34,422 |
70,160 |
2,785 (1.74%) |
52,364 (32.62%) |
jit-analyze output
benchmarks.run.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 1221696 (overridden on cmd)
Total bytes of diff: 1222494 (overridden on cmd)
Total bytes of delta: 798 (0.07 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
132 : 4506.dasm (17.28 % of base)
106 : 5166.dasm (53.00 % of base)
82 : 11205.dasm (16.53 % of base)
60 : 16339.dasm (9.20 % of base)
40 : 2728.dasm (33.90 % of base)
40 : 5441.dasm (12.42 % of base)
38 : 1182.dasm (12.03 % of base)
36 : 3850.dasm (11.61 % of base)
34 : 2162.dasm (16.67 % of base)
34 : 2459.dasm (10.56 % of base)
32 : 10508.dasm (7.48 % of base)
32 : 1452.dasm (20.00 % of base)
32 : 3380.dasm (13.56 % of base)
32 : 6174.dasm (8.51 % of base)
32 : 812.dasm (10.26 % of base)
32 : 9598.dasm (13.01 % of base)
28 : 16340.dasm (15.56 % of base)
28 : 4487.dasm (8.86 % of base)
28 : 9872.dasm (22.58 % of base)
26 : 17408.dasm (8.02 % of base)
Top file improvements (bytes):
-28 : 8646.dasm (-8.81 % of base)
-26 : 2063.dasm (-11.21 % of base)
-26 : 7492.dasm (-9.29 % of base)
-20 : 14562.dasm (-6.54 % of base)
-14 : 14747.dasm (-1.61 % of base)
-14 : 2373.dasm (-2.88 % of base)
-14 : 403.dasm (-3.66 % of base)
-14 : 96.dasm (-3.93 % of base)
-10 : 2930.dasm (-3.60 % of base)
-10 : 9384.dasm (-3.73 % of base)
-8 : 2964.dasm (-2.16 % of base)
-8 : 5329.dasm (-0.83 % of base)
-6 : 6185.dasm (-1.23 % of base)
-4 : 1005.dasm (-1.32 % of base)
-4 : 15543.dasm (-1.11 % of base)
-2 : 1008.dasm (-0.70 % of base)
-2 : 9997.dasm (-0.93 % of base)
39 total files with Code Size differences (17 improved, 22 regressed), 23 unchanged.
Top method regressions (bytes):
132 (17.28 % of base) : 4506.dasm - System.Collections.Frozen.FrozenDictionary:GetExistingFrozenOrNewDictionary[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],byref):System.Collections.Frozen.FrozenDictionary`2[System.__Canon,System.__Canon] (FullOpts)
106 (53.00 % of base) : 5166.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)
82 (16.53 % of base) : 11205.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] (FullOpts)
60 (9.20 % of base) : 16339.dasm - System.Collections.Immutable.ImmutableQueue:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
40 (12.42 % of base) : 5441.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
40 (33.90 % of base) : 2728.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
38 (12.03 % of base) : 1182.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
36 (11.61 % of base) : 3850.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.ValueTuple`2[System.__Canon,System.__Canon]](System.__Canon,System.Func`3[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon],System.__Canon],System.ValueTuple`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
34 (10.56 % of base) : 2459.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (FullOpts)
34 (16.67 % of base) : 2162.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
32 (7.48 % of base) : 10508.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
32 (20.00 % of base) : 1452.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
32 (13.56 % of base) : 3380.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
32 (10.26 % of base) : 812.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] (FullOpts)
32 (8.51 % of base) : 6174.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
32 (13.01 % of base) : 9598.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
28 (22.58 % of base) : 9872.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
28 (8.86 % of base) : 4487.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)
28 (15.56 % of base) : 16340.dasm - System.Collections.Immutable.ImmutableQueue:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
26 (8.02 % of base) : 17408.dasm - System.Collections.Immutable.ImmutableStack:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (FullOpts)
Top method improvements (bytes):
-28 (-8.81 % of base) : 8646.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
-26 (-11.21 % of base) : 2063.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
-26 (-9.29 % of base) : 7492.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
-20 (-6.54 % of base) : 14562.dasm - System.Linq.Enumerable:<AggregateByIterator>g__PopulateDictionary|75_0[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerator`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
-14 (-2.88 % of base) : 2373.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
-14 (-3.66 % of base) : 403.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
-14 (-3.93 % of base) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
-14 (-1.61 % of base) : 14747.dasm - System.Xml.Serialization.XmlReflectionImporter:CreateArrayElementsFromAttributes(System.Xml.Serialization.ArrayMapping,System.Xml.Serialization.XmlArrayItemAttributes,System.Type,System.String,System.Xml.Serialization.RecursionLimiter):this (FullOpts)
-10 (-3.60 % of base) : 2930.dasm - BenchmarkDotNet.Engines.ConsumerExtensions:Consume[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],BenchmarkDotNet.Engines.Consumer) (FullOpts)
-10 (-3.73 % of base) : 9384.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
-8 (-2.16 % of base) : 2964.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
-8 (-0.83 % of base) : 5329.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)
-6 (-1.23 % of base) : 6185.dasm - System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:Create[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.__Canon],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
-4 (-1.11 % of base) : 15543.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:Dictionary[System.__Canon,System.__Canon](int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
-4 (-1.32 % of base) : 1005.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 (-0.93 % of base) : 9997.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
-2 (-0.70 % of base) : 1008.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
Top method regressions (percentages):
106 (53.00 % of base) : 5166.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)
40 (33.90 % of base) : 2728.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
28 (22.58 % of base) : 9872.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
32 (20.00 % of base) : 1452.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
132 (17.28 % of base) : 4506.dasm - System.Collections.Frozen.FrozenDictionary:GetExistingFrozenOrNewDictionary[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],byref):System.Collections.Frozen.FrozenDictionary`2[System.__Canon,System.__Canon] (FullOpts)
34 (16.67 % of base) : 2162.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
82 (16.53 % of base) : 11205.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] (FullOpts)
28 (15.56 % of base) : 16340.dasm - System.Collections.Immutable.ImmutableQueue:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
32 (13.56 % of base) : 3380.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
32 (13.01 % of base) : 9598.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
40 (12.42 % of base) : 5441.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
38 (12.03 % of base) : 1182.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
36 (11.61 % of base) : 3850.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.ValueTuple`2[System.__Canon,System.__Canon]](System.__Canon,System.Func`3[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon],System.__Canon],System.ValueTuple`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
34 (10.56 % of base) : 2459.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (FullOpts)
10 (10.42 % of base) : 13794.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
10 (10.42 % of base) : 16727.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
32 (10.26 % of base) : 812.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] (FullOpts)
60 (9.20 % of base) : 16339.dasm - System.Collections.Immutable.ImmutableQueue:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
28 (8.86 % of base) : 4487.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)
32 (8.51 % of base) : 6174.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
Top method improvements (percentages):
-26 (-11.21 % of base) : 2063.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
-26 (-9.29 % of base) : 7492.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
-28 (-8.81 % of base) : 8646.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
-20 (-6.54 % of base) : 14562.dasm - System.Linq.Enumerable:<AggregateByIterator>g__PopulateDictionary|75_0[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerator`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
-14 (-3.93 % of base) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
-10 (-3.73 % of base) : 9384.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
-14 (-3.66 % of base) : 403.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
-10 (-3.60 % of base) : 2930.dasm - BenchmarkDotNet.Engines.ConsumerExtensions:Consume[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],BenchmarkDotNet.Engines.Consumer) (FullOpts)
-14 (-2.88 % of base) : 2373.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
-8 (-2.16 % of base) : 2964.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
-14 (-1.61 % of base) : 14747.dasm - System.Xml.Serialization.XmlReflectionImporter:CreateArrayElementsFromAttributes(System.Xml.Serialization.ArrayMapping,System.Xml.Serialization.XmlArrayItemAttributes,System.Type,System.String,System.Xml.Serialization.RecursionLimiter):this (FullOpts)
-4 (-1.32 % of base) : 1005.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-6 (-1.23 % of base) : 6185.dasm - System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:Create[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.__Canon],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
-4 (-1.11 % of base) : 15543.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:Dictionary[System.__Canon,System.__Canon](int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
-2 (-0.93 % of base) : 9997.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
-8 (-0.83 % of base) : 5329.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)
-2 (-0.70 % of base) : 1008.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
benchmarks.run_pgo.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 2429618 (overridden on cmd)
Total bytes of diff: 2424336 (overridden on cmd)
Total bytes of delta: -5282 (-0.22 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
140 : 11771.dasm (18.18 % of base)
106 : 21367.dasm (53.00 % of base)
40 : 21630.dasm (33.90 % of base)
38 : 4684.dasm (12.03 % of base)
36 : 7699.dasm (11.69 % of base)
34 : 21898.dasm (27.42 % of base)
34 : 21343.dasm (17.17 % of base)
34 : 19128.dasm (17.17 % of base)
34 : 20443.dasm (17.17 % of base)
32 : 17729.dasm (28.57 % of base)
32 : 8365.dasm (8.51 % of base)
32 : 9299.dasm (9.47 % of base)
32 : 11164.dasm (29.09 % of base)
32 : 21352.dasm (28.57 % of base)
32 : 15202.dasm (9.47 % of base)
26 : 21425.dasm (11.40 % of base)
24 : 21254.dasm (3.77 % of base)
4 : 22319.dasm (0.79 % of base)
4 : 30810.dasm (2.94 % of base)
4 : 7059.dasm (3.51 % of base)
Top file improvements (bytes):
-94 : 5855.dasm (-5.82 % of base)
-28 : 14241.dasm (-2.12 % of base)
-28 : 14796.dasm (-2.08 % of base)
-28 : 12457.dasm (-2.12 % of base)
-26 : 23666.dasm (-6.63 % of base)
-26 : 11417.dasm (-29.55 % of base)
-24 : 20255.dasm (-9.84 % of base)
-22 : 11652.dasm (-20.37 % of base)
-22 : 14200.dasm (-5.67 % of base)
-22 : 12469.dasm (-5.67 % of base)
-22 : 23679.dasm (-18.33 % of base)
-20 : 13764.dasm (-21.28 % of base)
-20 : 19057.dasm (-11.90 % of base)
-20 : 9893.dasm (-11.90 % of base)
-20 : 13361.dasm (-11.90 % of base)
-20 : 13501.dasm (-11.90 % of base)
-20 : 16013.dasm (-11.90 % of base)
-20 : 6441.dasm (-11.90 % of base)
-20 : 6489.dasm (-11.90 % of base)
-20 : 13617.dasm (-11.90 % of base)
49 total files with Code Size differences (28 improved, 21 regressed), 20 unchanged.
Top method regressions (bytes):
140 (18.18 % of base) : 11771.dasm - System.Collections.Frozen.FrozenDictionary:GetExistingFrozenOrNewDictionary[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],byref):System.Collections.Frozen.FrozenDictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
106 (53.00 % of base) : 21367.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
40 (33.90 % of base) : 21630.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
38 (12.03 % of base) : 4684.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
36 (11.69 % of base) : 7699.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] (Tier1)
34 (17.17 % of base) : 21343.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
34 (17.17 % of base) : 19128.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
34 (17.17 % of base) : 20443.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
34 (27.42 % of base) : 21898.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
32 (9.47 % of base) : 9299.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier1)
32 (9.47 % of base) : 15202.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier1)
32 (8.51 % of base) : 8365.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
32 (28.57 % of base) : 17729.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
32 (29.09 % of base) : 11164.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
32 (28.57 % of base) : 21352.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
26 (11.40 % of base) : 21425.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
24 (3.77 % of base) : 21254.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
4 (2.94 % of base) : 30810.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
4 (3.51 % of base) : 7059.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
4 (2.86 % of base) : 6063.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
Top method improvements (bytes):
-94 (-5.82 % of base) : 5855.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
-28 (-2.12 % of base) : 14241.dasm - System.IO.Strategies.OSFileStreamStrategy:ReadAsync(System.Memory`1[ubyte],System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[int]:this (Tier1)
-28 (-2.12 % of base) : 12457.dasm - System.IO.Strategies.OSFileStreamStrategy:ReadAsync(System.Memory`1[ubyte],System.Threading.CancellationToken):System.Threading.Tasks.ValueTask`1[int]:this (Tier1)
-28 (-2.08 % of base) : 14796.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
-26 (-29.55 % of base) : 11417.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Instrumented Tier0)
-26 (-6.63 % of base) : 23666.dasm - System.Threading.ThreadPoolWorkQueue:Enqueue(System.Object,ubyte):this (Tier1)
-24 (-9.84 % of base) : 20255.dasm - System.Threading.Tasks.ValueTask:AsTask():System.Threading.Tasks.Task:this (Tier1)
-22 (-20.37 % of base) : 11652.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Tier1)
-22 (-18.33 % of base) : 23679.dasm - System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)
-22 (-5.67 % of base) : 14200.dasm - System.Threading.ThreadPoolWorkQueue:Enqueue(System.Object,ubyte):this (Tier1)
-22 (-5.67 % of base) : 12469.dasm - System.Threading.ThreadPoolWorkQueue:Enqueue(System.Object,ubyte):this (Tier1)
-20 (-21.28 % of base) : 13764.dasm - System.Collections.Generic.IInternalStringEqualityComparer:GetUnderlyingEqualityComparer(System.Collections.Generic.IEqualityComparer`1[System.String]):System.Collections.Generic.IEqualityComparer`1[System.String] (Tier1)
-20 (-11.90 % of base) : 19057.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 9893.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 13361.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 13501.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 16013.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 6441.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 6489.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 13617.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
Top method regressions (percentages):
106 (53.00 % of base) : 21367.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
40 (33.90 % of base) : 21630.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
32 (29.09 % of base) : 11164.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
32 (28.57 % of base) : 17729.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
32 (28.57 % of base) : 21352.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
34 (27.42 % of base) : 21898.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
140 (18.18 % of base) : 11771.dasm - System.Collections.Frozen.FrozenDictionary:GetExistingFrozenOrNewDictionary[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],byref):System.Collections.Frozen.FrozenDictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
34 (17.17 % of base) : 21343.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
34 (17.17 % of base) : 19128.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
34 (17.17 % of base) : 20443.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
38 (12.03 % of base) : 4684.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
36 (11.69 % of base) : 7699.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] (Tier1)
26 (11.40 % of base) : 21425.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
32 (9.47 % of base) : 9299.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier1)
32 (9.47 % of base) : 15202.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier1)
32 (8.51 % of base) : 8365.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
24 (3.77 % of base) : 21254.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
4 (3.51 % of base) : 7059.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
4 (2.94 % of base) : 30810.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
4 (2.86 % of base) : 6063.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
Top method improvements (percentages):
-26 (-29.55 % of base) : 11417.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Instrumented Tier0)
-20 (-21.28 % of base) : 13764.dasm - System.Collections.Generic.IInternalStringEqualityComparer:GetUnderlyingEqualityComparer(System.Collections.Generic.IEqualityComparer`1[System.String]):System.Collections.Generic.IEqualityComparer`1[System.String] (Tier1)
-22 (-20.37 % of base) : 11652.dasm - ProtoBuf.Meta.RuntimeTypeModel:GetSerializerCore[System.DateTimeOffset](int):ProtoBuf.Serializers.ISerializer`1[System.DateTimeOffset]:this (Tier1)
-22 (-18.33 % of base) : 23679.dasm - System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)
-20 (-16.95 % of base) : 14247.dasm - System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)
-20 (-11.90 % of base) : 19057.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 9893.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 13361.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 13501.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 16013.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 6441.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 6489.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 13617.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 14693.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 15785.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 18253.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 6865.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 13865.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 18329.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-11.90 % of base) : 19221.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
benchmarks.run_tiered.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 2096812 (overridden on cmd)
Total bytes of diff: 2097304 (overridden on cmd)
Total bytes of delta: 492 (0.02 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
132 : 4121.dasm (17.28 % of base)
106 : 17317.dasm (53.00 % of base)
44 : 14240.dasm (20.37 % of base)
40 : 16512.dasm (12.42 % of base)
40 : 4655.dasm (33.90 % of base)
40 : 12196.dasm (12.42 % of base)
38 : 3332.dasm (12.03 % of base)
36 : 6225.dasm (11.69 % of base)
34 : 7423.dasm (27.42 % of base)
34 : 9656.dasm (16.67 % of base)
32 : 2973.dasm (10.26 % of base)
32 : 25621.dasm (7.48 % of base)
32 : 6012.dasm (29.09 % of base)
32 : 17312.dasm (8.51 % of base)
32 : 4179.dasm (20.00 % of base)
24 : 17467.dasm (3.77 % of base)
4 : 5111.dasm (3.51 % of base)
4 : 10967.dasm (0.79 % of base)
2 : 24457.dasm (1.33 % of base)
Top file improvements (bytes):
-94 : 5013.dasm (-5.82 % of base)
-28 : 17816.dasm (-8.81 % of base)
-28 : 16288.dasm (-2.08 % of base)
-14 : 8895.dasm (-3.12 % of base)
-14 : 2223.dasm (-3.66 % of base)
-14 : 2344.dasm (-3.93 % of base)
-10 : 10811.dasm (-3.73 % of base)
-10 : 16948.dasm (-3.60 % of base)
-8 : 15338.dasm (-0.83 % of base)
-8 : 2758.dasm (-2.16 % of base)
-6 : 21969.dasm (-1.23 % of base)
-4 : 10123.dasm (-2.38 % of base)
-4 : 2828.dasm (-1.32 % of base)
-2 : 24344.dasm (-0.93 % of base)
-2 : 2831.dasm (-0.70 % of base)
34 total files with Code Size differences (15 improved, 19 regressed), 26 unchanged.
Top method regressions (bytes):
132 (17.28 % of base) : 4121.dasm - System.Collections.Frozen.FrozenDictionary:GetExistingFrozenOrNewDictionary[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],byref):System.Collections.Frozen.FrozenDictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
106 (53.00 % of base) : 17317.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
44 (20.37 % of base) : 14240.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
40 (12.42 % of base) : 12196.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (Tier1)
40 (12.42 % of base) : 16512.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier1)
40 (33.90 % of base) : 4655.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
38 (12.03 % of base) : 3332.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
36 (11.69 % of base) : 6225.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.__Canon](System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (Tier1)
34 (27.42 % of base) : 7423.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
34 (16.67 % of base) : 9656.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
32 (7.48 % of base) : 25621.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (Tier0-FullOpts)
32 (20.00 % of base) : 4179.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
32 (10.26 % of base) : 2973.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] (Tier1)
32 (8.51 % of base) : 17312.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
32 (29.09 % of base) : 6012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
24 (3.77 % of base) : 17467.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
4 (3.51 % of base) : 5111.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
4 (0.79 % of base) : 10967.dasm - System.IO.Tests.Perf_FileStream:Read(long,int,int,int):long:this (Tier0-FullOpts)
2 (1.33 % of base) : 24457.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
Top method improvements (bytes):
-94 (-5.82 % of base) : 5013.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
-28 (-8.81 % of base) : 17816.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
-28 (-2.08 % of base) : 16288.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
-14 (-3.12 % of base) : 8895.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier0-FullOpts)
-14 (-3.66 % of base) : 2223.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
-14 (-3.93 % of base) : 2344.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-10 (-3.60 % of base) : 16948.dasm - BenchmarkDotNet.Engines.ConsumerExtensions:Consume[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],BenchmarkDotNet.Engines.Consumer) (Tier0-FullOpts)
-10 (-3.73 % of base) : 10811.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
-8 (-2.16 % of base) : 2758.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (Tier0-FullOpts)
-8 (-0.83 % of base) : 15338.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)
-6 (-1.23 % of base) : 21969.dasm - System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:Create[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.__Canon],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (Tier0-FullOpts)
-4 (-1.32 % of base) : 2828.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)
-4 (-2.38 % of base) : 10123.dasm - System.Threading.Tasks.Task:ExecuteEntryUnsafe(System.Threading.Thread):this (Tier0)
-2 (-0.93 % of base) : 24344.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (Tier0-FullOpts)
-2 (-0.70 % of base) : 2831.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
Top method regressions (percentages):
106 (53.00 % of base) : 17317.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
40 (33.90 % of base) : 4655.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
32 (29.09 % of base) : 6012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
34 (27.42 % of base) : 7423.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
44 (20.37 % of base) : 14240.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
32 (20.00 % of base) : 4179.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
132 (17.28 % of base) : 4121.dasm - System.Collections.Frozen.FrozenDictionary:GetExistingFrozenOrNewDictionary[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],byref):System.Collections.Frozen.FrozenDictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
34 (16.67 % of base) : 9656.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
40 (12.42 % of base) : 12196.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (Tier1)
40 (12.42 % of base) : 16512.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (Tier1)
38 (12.03 % of base) : 3332.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
36 (11.69 % of base) : 6225.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.__Canon](System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (Tier1)
32 (10.26 % of base) : 2973.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] (Tier1)
32 (8.51 % of base) : 17312.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
32 (7.48 % of base) : 25621.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (Tier0-FullOpts)
24 (3.77 % of base) : 17467.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
4 (3.51 % of base) : 5111.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
2 (1.33 % of base) : 24457.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
4 (0.79 % of base) : 10967.dasm - System.IO.Tests.Perf_FileStream:Read(long,int,int,int):long:this (Tier0-FullOpts)
Top method improvements (percentages):
-28 (-8.81 % of base) : 17816.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
-94 (-5.82 % of base) : 5013.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
-14 (-3.93 % of base) : 2344.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-10 (-3.73 % of base) : 10811.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
-14 (-3.66 % of base) : 2223.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
-10 (-3.60 % of base) : 16948.dasm - BenchmarkDotNet.Engines.ConsumerExtensions:Consume[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],BenchmarkDotNet.Engines.Consumer) (Tier0-FullOpts)
-14 (-3.12 % of base) : 8895.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier0-FullOpts)
-4 (-2.38 % of base) : 10123.dasm - System.Threading.Tasks.Task:ExecuteEntryUnsafe(System.Threading.Thread):this (Tier0)
-8 (-2.16 % of base) : 2758.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (Tier0-FullOpts)
-28 (-2.08 % of base) : 16288.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
-4 (-1.32 % of base) : 2828.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)
-6 (-1.23 % of base) : 21969.dasm - System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:Create[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.__Canon],System.Func`2[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Linq.Lookup`2[System.__Canon,System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (Tier0-FullOpts)
-2 (-0.93 % of base) : 24344.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (Tier0-FullOpts)
-8 (-0.83 % of base) : 15338.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)
-2 (-0.70 % of base) : 2831.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
coreclr_tests.run.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 405476 (overridden on cmd)
Total bytes of diff: 405694 (overridden on cmd)
Total bytes of delta: 218 (0.05 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
48 : 1432.dasm (13.64 % of base)
48 : 2159.dasm (13.64 % of base)
32 : 2847.dasm (9.25 % of base)
32 : 4541.dasm (27.12 % of base)
10 : 3832.dasm (10.64 % of base)
10 : 3902.dasm (10.64 % of base)
8 : 2012.dasm (4.60 % of base)
8 : 2373.dasm (0.68 % of base)
8 : 2654.dasm (4.60 % of base)
6 : 3770.dasm (7.32 % of base)
6 : 3842.dasm (6.82 % of base)
6 : 3882.dasm (7.32 % of base)
6 : 3892.dasm (6.82 % of base)
6 : 3953.dasm (6.82 % of base)
6 : 3822.dasm (7.32 % of base)
6 : 3852.dasm (6.82 % of base)
6 : 3872.dasm (7.32 % of base)
6 : 3912.dasm (6.82 % of base)
6 : 4891.dasm (6.82 % of base)
4 : 3492.dasm (4.44 % of base)
Top file improvements (bytes):
-20 : 2362.dasm (-16.95 % of base)
-20 : 2583.dasm (-20.41 % of base)
-14 : 4570.dasm (-3.80 % of base)
-4 : 510.dasm (-1.32 % of base)
-2 : 3498.dasm (-2.63 % of base)
-2 : 3529.dasm (-2.63 % of base)
-2 : 3534.dasm (-2.44 % of base)
-2 : 3557.dasm (-2.22 % of base)
-2 : 3654.dasm (-2.63 % of base)
-2 : 3665.dasm (-2.44 % of base)
-2 : 3705.dasm (-2.22 % of base)
-2 : 3789.dasm (-2.44 % of base)
-2 : 4632.dasm (-2.22 % of base)
-2 : 3522.dasm (-2.63 % of base)
-2 : 3540.dasm (-2.44 % of base)
-2 : 3545.dasm (-1.92 % of base)
-2 : 3551.dasm (-1.92 % of base)
-2 : 3604.dasm (-2.63 % of base)
-2 : 3644.dasm (-2.63 % of base)
-2 : 3675.dasm (-2.44 % of base)
50 total files with Code Size differences (28 improved, 22 regressed), 20 unchanged.
Top method regressions (bytes):
48 (13.64 % of base) : 1432.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Instrumented Tier1)
48 (13.64 % of base) : 2159.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Tier1)
32 (9.25 % of base) : 2847.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier1)
32 (27.12 % of base) : 4541.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
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)
8 (4.60 % of base) : 2012.dasm - System.IO.Directory:CreateDirectory(System.String):System.IO.DirectoryInfo (Instrumented Tier1)
8 (4.60 % of base) : 2654.dasm - System.IO.Directory:CreateDirectory(System.String):System.IO.DirectoryInfo (Tier1)
8 (0.68 % of base) : 2373.dasm - System.Threading.CancellationTokenSource:Register(System.Delegate,System.Object,System.Threading.SynchronizationContext,System.Threading.ExecutionContext):System.Threading.CancellationTokenRegistration:this (Tier1)
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) : 4891.dasm - NullableTest31:BoxUnboxToQ(System.Object):ubyte (Instrumented 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)
Top method improvements (bytes):
-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)
-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)
-4 (-1.32 % 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)
-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.85 % of base) : 4866.dasm - NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.44 % of base) : 3540.dasm - NullableTest13:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-1.92 % of base) : 3545.dasm - NullableTest14:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-1.54 % of base) : 4870.dasm - NullableTest14:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.44 % of base) : 3736.dasm - NullableTest14:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-1.92 % of base) : 3551.dasm - NullableTest15:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.44 % of base) : 3747.dasm - NullableTest15:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.22 % of base) : 4632.dasm - NullableTest16:BoxUnboxToQ(System.IComparable):ubyte (Instrumented Tier0)
-2 (-2.22 % of base) : 3557.dasm - NullableTest16:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-1.72 % of base) : 4874.dasm - NullableTest16:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
Top method regressions (percentages):
32 (27.12 % of base) : 4541.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
48 (13.64 % of base) : 1432.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Instrumented Tier1)
48 (13.64 % of base) : 2159.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Tier1)
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)
32 (9.25 % of base) : 2847.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier1)
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) : 4891.dasm - NullableTest31:BoxUnboxToQ(System.Object):ubyte (Instrumented 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)
8 (4.60 % of base) : 2012.dasm - System.IO.Directory:CreateDirectory(System.String):System.IO.DirectoryInfo (Instrumented Tier1)
8 (4.60 % of base) : 2654.dasm - System.IO.Directory:CreateDirectory(System.String):System.IO.DirectoryInfo (Tier1)
4 (4.44 % of base) : 3812.dasm - NullableTest21:BoxUnboxToQ(System.Object):ubyte (Tier0)
4 (4.44 % of base) : 3492.dasm - NullableTest5:BoxUnboxToQ(IEmpty):ubyte (Tier0)
Top method improvements (percentages):
-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)
-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) : 3540.dasm - NullableTest13:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
-2 (-2.44 % of base) : 3736.dasm - NullableTest14:BoxUnboxToQ(System.Object):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)
-2 (-2.22 % of base) : 3705.dasm - NullableTest11:BoxUnboxToQ(System.Object):ubyte (Tier0)
-2 (-2.22 % of base) : 4632.dasm - NullableTest16:BoxUnboxToQ(System.IComparable):ubyte (Instrumented Tier0)
-2 (-2.22 % of base) : 3557.dasm - NullableTest16:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
libraries.pmi.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 1144640 (overridden on cmd)
Total bytes of diff: 1149344 (overridden on cmd)
Total bytes of delta: 4704 (0.41 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
1166 : 23137.dasm (221.67 % of base)
342 : 10493.dasm (51.82 % of base)
228 : 13237.dasm (54.55 % of base)
172 : 9753.dasm (72.88 % of base)
114 : 9347.dasm (50.44 % of base)
100 : 20992.dasm (28.74 % of base)
100 : 20990.dasm (28.74 % of base)
90 : 20881.dasm (38.14 % of base)
68 : 13288.dasm (35.05 % of base)
66 : 13003.dasm (37.50 % of base)
66 : 14431.dasm (15.14 % of base)
64 : 12933.dasm (38.55 % of base)
64 : 113.dasm (11.31 % of base)
64 : 13007.dasm (40.00 % of base)
64 : 12939.dasm (55.17 % of base)
62 : 20944.dasm (18.79 % of base)
62 : 20956.dasm (18.79 % of base)
62 : 20903.dasm (24.41 % of base)
62 : 20932.dasm (18.79 % of base)
62 : 20968.dasm (18.79 % of base)
Top file improvements (bytes):
-42 : 20703.dasm (-25.30 % of base)
-38 : 20699.dasm (-30.65 % of base)
-36 : 17975.dasm (-17.14 % of base)
-26 : 134.dasm (-11.21 % of base)
-12 : 11470.dasm (-4.00 % of base)
-10 : 11463.dasm (-3.09 % of base)
-10 : 11054.dasm (-5.00 % of base)
-8 : 20843.dasm (-2.88 % of base)
-8 : 21047.dasm (-2.88 % of base)
-6 : 11477.dasm (-1.99 % of base)
-6 : 11480.dasm (-1.91 % of base)
-6 : 14506.dasm (-3.06 % of base)
-6 : 14593.dasm (-2.97 % of base)
-6 : 11061.dasm (-4.11 % of base)
-6 : 14461.dasm (-3.16 % of base)
-4 : 21067.dasm (-1.94 % of base)
-2 : 6252.dasm (-0.31 % of base)
-2 : 10900.dasm (-2.04 % of base)
45 total files with Code Size differences (18 improved, 27 regressed), 22 unchanged.
Top method regressions (bytes):
1166 (221.67 % of base) : 23137.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
342 (51.82 % of base) : 10493.dasm - Microsoft.FSharp.Collections.ArrayModule+Parallel:sortChunk@2484[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],Microsoft.FSharp.Core.FSharpFunc`2[System.ArraySegment`1[System.__Canon],System.__Canon],System.ArraySegment`1[System.__Canon],int) (FullOpts)
228 (54.55 % of base) : 13237.dasm - Microsoft.FSharp.Primitives.Basics.List:countBy[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.Dictionary`2[System.__Canon,int],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Nullable`1[int],int]] (FullOpts)
172 (72.88 % of base) : 9753.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)
114 (50.44 % of base) : 9347.dasm - Microsoft.FSharp.Collections.SetTreeModule:compare[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],Microsoft.FSharp.Collections.SetTree`1[System.__Canon],Microsoft.FSharp.Collections.SetTree`1[System.__Canon]):int (FullOpts)
100 (28.74 % of base) : 20990.dasm - System.Numerics.Vector:Max[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
100 (28.74 % of base) : 20992.dasm - System.Numerics.Vector:Min[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
90 (38.14 % of base) : 20881.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)
68 (35.05 % of base) : 13288.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
66 (15.14 % of base) : 14431.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:loop@5914-15[System.__Canon](System.__Canon,System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],int):System.__Canon (FullOpts)
66 (37.50 % of base) : 13003.dasm - Microsoft.FSharp.Core.ValueOption:Filter[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte],Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
64 (11.31 % of base) : 113.dasm - Interop+procfs:ParseMapsModules(int):System.Diagnostics.ProcessModuleCollection (FullOpts)
64 (38.55 % of base) : 12933.dasm - Microsoft.FSharp.Core.ResultModule:ToList[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
64 (55.17 % of base) : 12939.dasm - Microsoft.FSharp.Core.ResultModule:ToValueOption[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
64 (40.00 % of base) : 13007.dasm - Microsoft.FSharp.Core.ValueOption:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
62 (24.41 % of base) : 20903.dasm - System.Numerics.Vector:Dot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
62 (18.79 % of base) : 20932.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)
62 (18.79 % of base) : 20944.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)
62 (18.79 % of base) : 20956.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)
62 (18.79 % of base) : 20968.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)
Top method improvements (bytes):
-42 (-25.30 % of base) : 20703.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
-38 (-30.65 % of base) : 20699.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
-36 (-17.14 % of base) : 17975.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
-26 (-11.21 % of base) : 134.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
-12 (-4.00 % of base) : 11470.dasm - Microsoft.FSharp.Collections.SeqModule:Sum$W[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-10 (-5.00 % of base) : 11054.dasm - Microsoft.FSharp.Collections.ListModule:Sum[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon (FullOpts)
-10 (-3.09 % of base) : 11463.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-8 (-2.88 % of base) : 20843.dasm - System.Numerics.Vector:Abs[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
-8 (-2.88 % of base) : 21047.dasm - System.Numerics.Vector:SquareRoot[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
-6 (-4.11 % of base) : 11061.dasm - Microsoft.FSharp.Collections.ListModule:Sum$W[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]):System.__Canon (FullOpts)
-6 (-1.91 % of base) : 11480.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)
-6 (-1.99 % of base) : 11477.dasm - Microsoft.FSharp.Collections.SeqModule:SumBy[System.__Canon,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)
-6 (-3.16 % of base) : 14461.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice2DFixed1[System.__Canon](System.__Canon[,],int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],System.__Canon[]) (FullOpts)
-6 (-3.06 % of base) : 14506.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice3DFixedDouble2[System.__Canon](System.__Canon[,,],int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],int,System.__Canon[]) (FullOpts)
-6 (-2.97 % of base) : 14593.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice4DFixedTriple2[System.__Canon](System.__Canon[,,,],int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],int,int,System.__Canon[]) (FullOpts)
-4 (-1.94 % of base) : 21067.dasm - System.Numerics.Vector:Sum[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
-2 (-2.04 % of base) : 10900.dasm - Microsoft.FSharp.Collections.ListModule:IterateIndexed[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]) (FullOpts)
-2 (-0.31 % of base) : 6252.dasm - Microsoft.FSharp.Control.AsyncPrimitives+ResultCell`1[double]:RegisterResult(double,ubyte):Microsoft.FSharp.Control.AsyncReturn:this (FullOpts)
Top method regressions (percentages):
1166 (221.67 % of base) : 23137.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
172 (72.88 % of base) : 9753.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)
56 (56.00 % of base) : 13893.dasm - Microsoft.FSharp.Core.Operators:KeyValuePattern[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]):System.Tuple`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
64 (55.17 % of base) : 12939.dasm - Microsoft.FSharp.Core.ResultModule:ToValueOption[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
228 (54.55 % of base) : 13237.dasm - Microsoft.FSharp.Primitives.Basics.List:countBy[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.Dictionary`2[System.__Canon,int],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Nullable`1[int],int]] (FullOpts)
342 (51.82 % of base) : 10493.dasm - Microsoft.FSharp.Collections.ArrayModule+Parallel:sortChunk@2484[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],Microsoft.FSharp.Core.FSharpFunc`2[System.ArraySegment`1[System.__Canon],System.__Canon],System.ArraySegment`1[System.__Canon],int) (FullOpts)
114 (50.44 % of base) : 9347.dasm - Microsoft.FSharp.Collections.SetTreeModule:compare[System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],Microsoft.FSharp.Collections.SetTree`1[System.__Canon],Microsoft.FSharp.Collections.SetTree`1[System.__Canon]):int (FullOpts)
36 (43.90 % of base) : 10935.dasm - Microsoft.FSharp.Collections.ListModule:Singleton[System.__Canon](System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
64 (40.00 % of base) : 13007.dasm - Microsoft.FSharp.Core.ValueOption:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
64 (38.55 % of base) : 12933.dasm - Microsoft.FSharp.Core.ResultModule:ToList[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
90 (38.14 % of base) : 20881.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)
66 (37.50 % of base) : 13003.dasm - Microsoft.FSharp.Core.ValueOption:Filter[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte],Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
36 (36.00 % of base) : 2813.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)
68 (35.05 % of base) : 13288.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
100 (28.74 % of base) : 20990.dasm - System.Numerics.Vector:Max[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
100 (28.74 % of base) : 20992.dasm - System.Numerics.Vector:Min[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
26 (27.08 % of base) : 12984.dasm - Microsoft.FSharp.Core.ValueOption:Contains[System.__Canon](System.__Canon,Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):ubyte (FullOpts)
32 (25.81 % of base) : 16218.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)
24 (25.53 % of base) : 12936.dasm - Microsoft.FSharp.Core.ResultModule:ToOption[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
34 (25.00 % of base) : 20847.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 (percentages):
-38 (-30.65 % of base) : 20699.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
-42 (-25.30 % of base) : 20703.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
-36 (-17.14 % of base) : 17975.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
-26 (-11.21 % of base) : 134.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
-10 (-5.00 % of base) : 11054.dasm - Microsoft.FSharp.Collections.ListModule:Sum[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon (FullOpts)
-6 (-4.11 % of base) : 11061.dasm - Microsoft.FSharp.Collections.ListModule:Sum$W[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]):System.__Canon (FullOpts)
-12 (-4.00 % of base) : 11470.dasm - Microsoft.FSharp.Collections.SeqModule:Sum$W[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-6 (-3.16 % of base) : 14461.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice2DFixed1[System.__Canon](System.__Canon[,],int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],System.__Canon[]) (FullOpts)
-10 (-3.09 % of base) : 11463.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-6 (-3.06 % of base) : 14506.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice3DFixedDouble2[System.__Canon](System.__Canon[,,],int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],int,System.__Canon[]) (FullOpts)
-6 (-2.97 % of base) : 14593.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice4DFixedTriple2[System.__Canon](System.__Canon[,,,],int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],int,int,System.__Canon[]) (FullOpts)
-8 (-2.88 % of base) : 20843.dasm - System.Numerics.Vector:Abs[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
-8 (-2.88 % of base) : 21047.dasm - System.Numerics.Vector:SquareRoot[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
-2 (-2.04 % of base) : 10900.dasm - Microsoft.FSharp.Collections.ListModule:IterateIndexed[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]) (FullOpts)
-6 (-1.99 % of base) : 11477.dasm - Microsoft.FSharp.Collections.SeqModule:SumBy[System.__Canon,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)
-4 (-1.94 % of base) : 21067.dasm - System.Numerics.Vector:Sum[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
-6 (-1.91 % of base) : 11480.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)
-2 (-0.31 % of base) : 6252.dasm - Microsoft.FSharp.Control.AsyncPrimitives+ResultCell`1[double]:RegisterResult(double,ubyte):Microsoft.FSharp.Control.AsyncReturn:this (FullOpts)
libraries_tests.run.linux.arm.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 939238 (overridden on cmd)
Total bytes of diff: 940048 (overridden on cmd)
Total bytes of delta: 810 (0.09 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
260 : 7897.dasm (23.01 % of base)
182 : 10706.dasm (21.06 % of base)
116 : 6450.dasm (42.03 % of base)
106 : 1994.dasm (53.00 % of base)
58 : 7787.dasm (13.81 % of base)
58 : 8040.dasm (11.37 % of base)
46 : 1630.dasm (23.00 % of base)
44 : 4589.dasm (22.00 % of base)
40 : 969.dasm (30.77 % of base)
38 : 4208.dasm (11.38 % of base)
32 : 1151.dasm (27.59 % of base)
32 : 5994.dasm (8.51 % of base)
32 : 9704.dasm (9.25 % of base)
32 : 4425.dasm (27.59 % of base)
12 : 6988.dasm (1.81 % of base)
8 : 12841.dasm (4.60 % of base)
4 : 7525.dasm (0.95 % of base)
2 : 11179.dasm (0.35 % of base)
2 : 11180.dasm (0.42 % of base)
Top file improvements (bytes):
-38 : 1457.dasm (-32.20 % of base)
-36 : 2007.dasm (-12.16 % of base)
-36 : 4546.dasm (-12.16 % of base)
-26 : 11642.dasm (-7.69 % of base)
-24 : 2131.dasm (-4.04 % of base)
-22 : 4438.dasm (-12.94 % of base)
-22 : 1223.dasm (-12.94 % of base)
-20 : 14203.dasm (-10.10 % of base)
-14 : 4428.dasm (-3.91 % of base)
-14 : 1154.dasm (-3.91 % of base)
-8 : 7129.dasm (-2.45 % of base)
-8 : 6971.dasm (-0.84 % of base)
-6 : 1629.dasm (-1.29 % of base)
-6 : 859.dasm (-1.60 % of base)
-4 : 169.dasm (-1.32 % of base)
-4 : 2673.dasm (-0.40 % of base)
-2 : 1701.dasm (-2.22 % of base)
-2 : 1081.dasm (-0.70 % of base)
-2 : 1353.dasm (-0.70 % of base)
38 total files with Code Size differences (19 improved, 19 regressed), 22 unchanged.
Top method regressions (bytes):
260 (23.01 % of base) : 7897.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
182 (21.06 % of base) : 10706.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (Tier0-FullOpts)
116 (42.03 % of base) : 6450.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (Tier0-FullOpts)
106 (53.00 % of base) : 1994.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
58 (11.37 % of base) : 8040.dasm - Microsoft.CodeAnalysis.TextDocumentStates`1[System.__Canon]:UpdateStates[System.ValueTuple`2[System.__Canon,ubyte]](System.Func`3[System.__Canon,System.ValueTuple`2[System.__Canon,ubyte],System.__Canon],System.ValueTuple`2[System.__Canon,ubyte]):Microsoft.CodeAnalysis.TextDocumentStates`1[System.__Canon]:this (Tier0-FullOpts)
58 (13.81 % of base) : 7787.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (Tier0-FullOpts)
46 (23.00 % of base) : 1630.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Instrumented Tier1)
44 (22.00 % of base) : 4589.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Tier1)
40 (30.77 % of base) : 969.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
38 (11.38 % of base) : 4208.dasm - System.Linq.Enumerable:MaxInteger[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int](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],int]):int (Tier0-FullOpts)
32 (9.25 % of base) : 9704.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] (Tier1)
32 (8.51 % of base) : 5994.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
32 (27.59 % of base) : 1151.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
32 (27.59 % of base) : 4425.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
12 (1.81 % of base) : 6988.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] (Tier0-FullOpts)
8 (4.60 % of base) : 12841.dasm - System.IO.Directory:CreateDirectory(System.String):System.IO.DirectoryInfo (Instrumented Tier1)
4 (0.95 % of base) : 7525.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (Tier0-FullOpts)
2 (0.35 % of base) : 11179.dasm - System.Threading.Tasks.TaskScheduler:InternalQueueTask(System.Threading.Tasks.Task):this (Tier1)
2 (0.42 % of base) : 11180.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:QueueTask(System.Threading.Tasks.Task):this (Tier1)
Top method improvements (bytes):
-38 (-32.20 % of base) : 1457.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
-36 (-12.16 % of base) : 2007.dasm - System.Linq.Enumerable:ToArray[Internal.Microsoft.Extensions.DependencyModel.Dependency](System.Collections.Generic.IEnumerable`1[Internal.Microsoft.Extensions.DependencyModel.Dependency]):Internal.Microsoft.Extensions.DependencyModel.Dependency[] (Tier1)
-36 (-12.16 % of base) : 4546.dasm - System.Linq.Enumerable:ToArray[Internal.Microsoft.Extensions.DependencyModel.Dependency](System.Collections.Generic.IEnumerable`1[Internal.Microsoft.Extensions.DependencyModel.Dependency]):Internal.Microsoft.Extensions.DependencyModel.Dependency[] (Tier1)
-26 (-7.69 % of base) : 11642.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (Tier1)
-24 (-4.04 % of base) : 2131.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)
-22 (-12.94 % of base) : 4438.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-22 (-12.94 % of base) : 1223.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-20 (-10.10 % of base) : 14203.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[Microsoft.CodeAnalysis.Text.TextChange](System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.Text.TextChange],byref):ubyte (Tier1)
-14 (-3.91 % of base) : 4428.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-14 (-3.91 % of base) : 1154.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-8 (-2.45 % of base) : 7129.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] (Tier0-FullOpts)
-8 (-0.84 % of base) : 6971.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)
-6 (-1.60 % of base) : 859.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] (Tier0-FullOpts)
-6 (-1.29 % of base) : 1629.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] (Tier0-FullOpts)
-4 (-0.40 % of base) : 2673.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)
-4 (-1.32 % of base) : 169.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)
-2 (-0.70 % of base) : 1353.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-2 (-0.70 % of base) : 1081.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-2 (-2.22 % of base) : 1701.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
Top method regressions (percentages):
106 (53.00 % of base) : 1994.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
116 (42.03 % of base) : 6450.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (Tier0-FullOpts)
40 (30.77 % of base) : 969.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
32 (27.59 % of base) : 1151.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
32 (27.59 % of base) : 4425.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
260 (23.01 % of base) : 7897.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
46 (23.00 % of base) : 1630.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Instrumented Tier1)
44 (22.00 % of base) : 4589.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Tier1)
182 (21.06 % of base) : 10706.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (Tier0-FullOpts)
58 (13.81 % of base) : 7787.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (Tier0-FullOpts)
38 (11.38 % of base) : 4208.dasm - System.Linq.Enumerable:MaxInteger[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int](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],int]):int (Tier0-FullOpts)
58 (11.37 % of base) : 8040.dasm - Microsoft.CodeAnalysis.TextDocumentStates`1[System.__Canon]:UpdateStates[System.ValueTuple`2[System.__Canon,ubyte]](System.Func`3[System.__Canon,System.ValueTuple`2[System.__Canon,ubyte],System.__Canon],System.ValueTuple`2[System.__Canon,ubyte]):Microsoft.CodeAnalysis.TextDocumentStates`1[System.__Canon]:this (Tier0-FullOpts)
32 (9.25 % of base) : 9704.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] (Tier1)
32 (8.51 % of base) : 5994.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
8 (4.60 % of base) : 12841.dasm - System.IO.Directory:CreateDirectory(System.String):System.IO.DirectoryInfo (Instrumented Tier1)
12 (1.81 % of base) : 6988.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] (Tier0-FullOpts)
4 (0.95 % of base) : 7525.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (Tier0-FullOpts)
2 (0.42 % of base) : 11180.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:QueueTask(System.Threading.Tasks.Task):this (Tier1)
2 (0.35 % of base) : 11179.dasm - System.Threading.Tasks.TaskScheduler:InternalQueueTask(System.Threading.Tasks.Task):this (Tier1)
Top method improvements (percentages):
-38 (-32.20 % of base) : 1457.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
-22 (-12.94 % of base) : 4438.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-22 (-12.94 % of base) : 1223.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-36 (-12.16 % of base) : 2007.dasm - System.Linq.Enumerable:ToArray[Internal.Microsoft.Extensions.DependencyModel.Dependency](System.Collections.Generic.IEnumerable`1[Internal.Microsoft.Extensions.DependencyModel.Dependency]):Internal.Microsoft.Extensions.DependencyModel.Dependency[] (Tier1)
-36 (-12.16 % of base) : 4546.dasm - System.Linq.Enumerable:ToArray[Internal.Microsoft.Extensions.DependencyModel.Dependency](System.Collections.Generic.IEnumerable`1[Internal.Microsoft.Extensions.DependencyModel.Dependency]):Internal.Microsoft.Extensions.DependencyModel.Dependency[] (Tier1)
-20 (-10.10 % of base) : 14203.dasm - System.Linq.Enumerable:TryGetNonEnumeratedCount[Microsoft.CodeAnalysis.Text.TextChange](System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.Text.TextChange],byref):ubyte (Tier1)
-26 (-7.69 % of base) : 11642.dasm - System.Collections.Immutable.ImmutableExtensions:TryGetCount[System.__Canon](System.Collections.IEnumerable,byref):ubyte (Tier1)
-24 (-4.04 % of base) : 2131.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)
-14 (-3.91 % of base) : 4428.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-14 (-3.91 % of base) : 1154.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-8 (-2.45 % of base) : 7129.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] (Tier0-FullOpts)
-2 (-2.22 % of base) : 1701.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
-6 (-1.60 % of base) : 859.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] (Tier0-FullOpts)
-4 (-1.32 % of base) : 169.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)
-6 (-1.29 % of base) : 1629.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] (Tier0-FullOpts)
-8 (-0.84 % of base) : 6971.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)
-2 (-0.70 % of base) : 1353.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-2 (-0.70 % of base) : 1081.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-4 (-0.40 % of base) : 2673.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)
librariestestsnotieredcompilation.run.linux.arm.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 894282 (overridden on cmd)
Total bytes of diff: 896958 (overridden on cmd)
Total bytes of delta: 2676 (0.30 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
260 : 3413.dasm (23.01 % of base)
182 : 4101.dasm (21.06 % of base)
118 : 6050.dasm (24.38 % of base)
116 : 2895.dasm (42.03 % of base)
114 : 7773.dasm (28.79 % of base)
106 : 67.dasm (53.00 % of base)
106 : 7772.dasm (23.14 % of base)
100 : 13053.dasm (23.70 % of base)
88 : 6482.dasm (43.14 % of base)
74 : 8650.dasm (35.92 % of base)
70 : 6147.dasm (14.17 % of base)
64 : 744.dasm (11.31 % of base)
64 : 7785.dasm (21.62 % of base)
62 : 11050.dasm (21.83 % of base)
58 : 3393.dasm (13.81 % of base)
58 : 3438.dasm (11.37 % of base)
56 : 7759.dasm (17.39 % of base)
52 : 401.dasm (15.85 % of base)
50 : 1947.dasm (17.24 % of base)
48 : 2121.dasm (23.30 % of base)
Top file improvements (bytes):
-26 : 341.dasm (-11.21 % of base)
-24 : 762.dasm (-4.04 % of base)
-14 : 2954.dasm (-6.14 % of base)
-14 : 2682.dasm (-20.00 % of base)
-12 : 313.dasm (-2.21 % of base)
-10 : 6089.dasm (-3.68 % of base)
-10 : 2988.dasm (-3.73 % of base)
-8 : 3058.dasm (-0.83 % of base)
-8 : 3129.dasm (-2.35 % of base)
-8 : 7723.dasm (-0.73 % of base)
-6 : 254.dasm (-1.60 % of base)
-6 : 8162.dasm (-2.22 % of base)
-6 : 13001.dasm (-0.99 % of base)
-6 : 511.dasm (-1.29 % of base)
-4 : 1008.dasm (-0.40 % of base)
-4 : 58.dasm (-1.32 % of base)
-2 : 320.dasm (-0.70 % of base)
-2 : 10897.dasm (-0.86 % of base)
-2 : 395.dasm (-0.70 % of base)
49 total files with Code Size differences (19 improved, 30 regressed), 21 unchanged.
Top method regressions (bytes):
260 (23.01 % of base) : 3413.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)
182 (21.06 % of base) : 4101.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)
118 (24.38 % of base) : 6050.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)
116 (42.03 % of base) : 2895.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)
114 (28.79 % of base) : 7773.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
106 (23.14 % of base) : 7772.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveLessDerivedMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref) (FullOpts)
106 (53.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)
100 (23.70 % of base) : 13053.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)
88 (43.14 % of base) : 6482.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
74 (35.92 % of base) : 8650.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
70 (14.17 % of base) : 6147.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)
64 (11.31 % of base) : 744.dasm - Interop+procfs:ParseMapsModules(int):System.Diagnostics.ProcessModuleCollection (FullOpts)
64 (21.62 % of base) : 7785.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveStaticInstanceMismatches[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte) (FullOpts)
62 (21.83 % of base) : 11050.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveMethodsNotDeclaredStatic[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
58 (11.37 % of base) : 3438.dasm - Microsoft.CodeAnalysis.TextDocumentStates`1[System.__Canon]:UpdateStates[System.ValueTuple`2[System.__Canon,ubyte]](System.Func`3[System.__Canon,System.ValueTuple`2[System.__Canon,ubyte],System.__Canon],System.ValueTuple`2[System.__Canon,ubyte]):Microsoft.CodeAnalysis.TextDocumentStates`1[System.__Canon]:this (FullOpts)
58 (13.81 % of base) : 3393.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (FullOpts)
56 (17.39 % of base) : 7759.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveInaccessibleTypeArguments[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref):this (FullOpts)
52 (15.85 % of base) : 401.dasm - Xunit.ConfigReader_Json:LoadFile(System.String):Xunit.TestAssemblyConfiguration (FullOpts)
50 (17.24 % of base) : 1947.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (FullOpts)
48 (23.30 % of base) : 2121.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
Top method improvements (bytes):
-26 (-11.21 % of base) : 341.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
-24 (-4.04 % 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)
-14 (-20.00 % of base) : 2682.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
-14 (-6.14 % of base) : 2954.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
-12 (-2.21 % of base) : 313.dasm - Xunit.XunitFilters:.ctor():this (FullOpts)
-10 (-3.68 % of base) : 6089.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
-10 (-3.73 % of base) : 2988.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
-8 (-0.73 % of base) : 7723.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:PerformMemberOverloadResolution[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,ubyte,ubyte,ubyte,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,ubyte,ubyte,byref,byref,ubyte,ubyte,ubyte):this (FullOpts)
-8 (-2.35 % of base) : 3129.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)
-8 (-0.83 % of base) : 3058.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)
-6 (-1.60 % of base) : 254.dasm - DictionaryExtensions:ToDictionaryIgnoringDuplicateKeys[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
-6 (-2.22 % of base) : 8162.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
-6 (-0.99 % of base) : 13001.dasm - System.Linq.Enumerable:TryGetLast[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]],byref):System.ValueTuple`2[System.__Canon,System.__Canon] (FullOpts)
-6 (-1.29 % 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)
-4 (-0.40 % 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)
-4 (-1.32 % of base) : 58.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 (-0.86 % of base) : 10897.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
-2 (-0.70 % of base) : 395.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-2 (-0.70 % of base) : 320.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
Top method regressions (percentages):
40 (62.50 % of base) : 6149.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
106 (53.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)
44 (52.38 % of base) : 7938.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
88 (43.14 % of base) : 6482.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
34 (42.50 % of base) : 4334.dasm - System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
34 (42.50 % of base) : 9728.dasm - System.Linq.ImmutableArrayExtensions:Where[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
116 (42.03 % of base) : 2895.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)
40 (37.04 % of base) : 8002.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
74 (35.92 % of base) : 8650.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
40 (33.90 % of base) : 12287.dasm - System.GC:AllocateUninitializedArray[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](int,ubyte):System.Collections.Immutable.ImmutableArray`1[System.__Canon][] (FullOpts)
114 (28.79 % of base) : 7773.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
36 (25.35 % of base) : 12607.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]:Add[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.__Canon):ubyte:this (FullOpts)
118 (24.38 % of base) : 6050.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)
24 (24.00 % of base) : 1160.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
100 (23.70 % of base) : 13053.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)
48 (23.30 % of base) : 2121.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
106 (23.14 % of base) : 7772.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveLessDerivedMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref) (FullOpts)
260 (23.01 % of base) : 3413.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)
46 (22.77 % of base) : 23.dasm - Internal.Microsoft.Extensions.DependencyModel.FileWrapper:OpenRead(System.String):System.IO.Stream:this (FullOpts)
30 (22.73 % of base) : 8559.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Combine[System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]](Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]],Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.ValueTuple`2[System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]] (FullOpts)
Top method improvements (percentages):
-14 (-20.00 % of base) : 2682.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
-26 (-11.21 % of base) : 341.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
-14 (-6.14 % of base) : 2954.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
-24 (-4.04 % 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)
-10 (-3.73 % of base) : 2988.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
-10 (-3.68 % of base) : 6089.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
-8 (-2.35 % of base) : 3129.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)
-6 (-2.22 % of base) : 8162.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
-12 (-2.21 % of base) : 313.dasm - Xunit.XunitFilters:.ctor():this (FullOpts)
-6 (-1.60 % of base) : 254.dasm - DictionaryExtensions:ToDictionaryIgnoringDuplicateKeys[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
-4 (-1.32 % of base) : 58.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-6 (-1.29 % 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)
-6 (-0.99 % of base) : 13001.dasm - System.Linq.Enumerable:TryGetLast[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]],byref):System.ValueTuple`2[System.__Canon,System.__Canon] (FullOpts)
-2 (-0.86 % of base) : 10897.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
-8 (-0.83 % of base) : 3058.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)
-8 (-0.73 % of base) : 7723.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:PerformMemberOverloadResolution[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,ubyte,ubyte,ubyte,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,ubyte,ubyte,byref,byref,ubyte,ubyte,ubyte):this (FullOpts)
-2 (-0.70 % of base) : 395.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-2 (-0.70 % of base) : 320.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-0.40 % 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)
realworld.run.linux.arm.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os linux -target_arch arm -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 3364120 (overridden on cmd)
Total bytes of diff: 3367584 (overridden on cmd)
Total bytes of delta: 3464 (0.10 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
402 : 7284.dasm (66.12 % of base)
242 : 6189.dasm (21.61 % of base)
226 : 11535.dasm (32.29 % of base)
192 : 6933.dasm (63.58 % of base)
192 : 6944.dasm (63.58 % of base)
184 : 6954.dasm (62.16 % of base)
182 : 21330.dasm (21.06 % of base)
176 : 6957.dasm (58.28 % of base)
122 : 10533.dasm (17.94 % of base)
108 : 14473.dasm (15.70 % of base)
108 : 11453.dasm (14.25 % of base)
106 : 19142.dasm (53.00 % of base)
84 : 10751.dasm (6.77 % of base)
84 : 8147.dasm (15.67 % of base)
78 : 6955.dasm (33.05 % of base)
70 : 6952.dasm (28.00 % of base)
68 : 9973.dasm (11.97 % of base)
68 : 5578.dasm (35.05 % of base)
64 : 9987.dasm (27.59 % of base)
62 : 8082.dasm (3.46 % of base)
Top file improvements (bytes):
-72 : 13430.dasm (-2.91 % of base)
-30 : 13941.dasm (-1.00 % of base)
-30 : 14208.dasm (-1.14 % of base)
-26 : 18629.dasm (-9.29 % of base)
-24 : 17800.dasm (-4.04 % of base)
-24 : 13948.dasm (-1.21 % of base)
-20 : 11667.dasm (-4.46 % of base)
-18 : 20287.dasm (-4.29 % of base)
-18 : 10119.dasm (-1.96 % of base)
-16 : 13232.dasm (-1.94 % of base)
-16 : 13956.dasm (-3.01 % of base)
-16 : 14575.dasm (-8.16 % of base)
-16 : 13949.dasm (-3.01 % of base)
-16 : 9072.dasm (-3.01 % of base)
-14 : 13462.dasm (-1.45 % of base)
-14 : 96.dasm (-3.93 % of base)
-14 : 13441.dasm (-1.37 % of base)
-14 : 14901.dasm (-1.44 % of base)
-14 : 13386.dasm (-0.62 % of base)
-14 : 401.dasm (-3.66 % of base)
52 total files with Code Size differences (25 improved, 27 regressed), 20 unchanged.
Top method regressions (bytes):
402 (66.12 % of base) : 7284.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)
242 (21.61 % of base) : 6189.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)
226 (32.29 % of base) : 11535.dasm - FSharp.Compiler.CheckDeclarations+MutRecShapes:expandTyconsWithEnv[System.__Canon,System.__Canon,System.__Canon,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)
192 (63.58 % of base) : 6944.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
192 (63.58 % of base) : 6933.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
184 (62.16 % of base) : 6954.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
182 (21.06 % of base) : 21330.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)
176 (58.28 % of base) : 6957.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)
122 (17.94 % of base) : 10533.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)
108 (15.70 % of base) : 14473.dasm - Internal.Utilities.Collections.Tagged.MapTreeModule:add[System.__Canon,int](System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon,int,Internal.Utilities.Collections.Tagged.MapTree`2[System.__Canon,int]):Internal.Utilities.Collections.Tagged.MapTree`2[System.__Canon,int] (FullOpts)
108 (14.25 % of base) : 11453.dasm - Internal.Utilities.Collections.Tagged.MapTreeModule:add[System.__Canon,System.__Canon](System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon,System.__Canon,Internal.Utilities.Collections.Tagged.MapTree`2[System.__Canon,System.__Canon]):Internal.Utilities.Collections.Tagged.MapTree`2[System.__Canon,System.__Canon] (FullOpts)
106 (53.00 % of base) : 19142.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
84 (6.77 % of base) : 10751.dasm - FSharp.Compiler.NameResolution:AddResults[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
84 (15.67 % of base) : 8147.dasm - Internal.Utilities.Collections.Tagged.SetTreeModule:add[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)
78 (33.05 % of base) : 6955.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
70 (28.00 % of base) : 6952.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
68 (11.97 % of base) : 9973.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)
68 (35.05 % of base) : 5578.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
64 (27.59 % of base) : 9987.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
62 (3.46 % of base) : 8082.dasm - FSharp.Compiler.PostTypeCheckSemanticChecks:CheckEntityDefn$cont@2424-1(FSharp.Compiler.PostTypeCheckSemanticChecks+cenv,FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Infos+MethInfo],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Infos+MethInfo],Microsoft.FSharp.Core.Unit) (FullOpts)
Top method improvements (bytes):
-72 (-2.91 % of base) : 13430.dasm - FSharp.Compiler.AugmentWithHashCompare:mkAddToHashAcc(FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.Text.Range,FSharp.Compiler.TypedTree+Expr,FSharp.Compiler.TypedTree+ValRef,FSharp.Compiler.TypedTree+Expr):FSharp.Compiler.TypedTree+Expr (FullOpts)
-30 (-1.00 % of base) : 13941.dasm - FSharp.Compiler.CheckComputationExpressions:tryTcSequenceExprBody$cont@1932-1(FSharp.Compiler.CheckExpressions+TcFileState,FSharp.Compiler.CheckExpressions+TcEnv,FSharp.Compiler.ConstraintSolver+OverallTy,FSharp.Compiler.Text.Range,FSharp.Compiler.TcGlobals+TcGlobals,ubyte,ubyte,FSharp.Compiler.CheckExpressions+TcEnv,FSharp.Compiler.TypedTree+TType,FSharp.Compiler.CheckExpressions+UnscopedTyparEnv,FSharp.Compiler.Syntax.DebugPointAtWhile,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.Unit):Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.TypedTree+Expr,FSharp.Compiler.CheckExpressions+UnscopedTyparEnv]] (FullOpts)
-30 (-1.14 % of base) : 14208.dasm - FSharp.Compiler.MethodCalls:BuildNewDelegateExpr(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Infos+EventInfo],FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.Import+ImportMap,FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Infos+MethInfo,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TType],FSharp.Compiler.TypedTree+Expr,FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range):FSharp.Compiler.TypedTree+Expr (FullOpts)
-26 (-9.29 % of base) : 18629.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
-24 (-1.21 % of base) : 13948.dasm - FSharp.Compiler.CheckExpressions:ConvertArbitraryExprToEnumerable(FSharp.Compiler.CheckExpressions+TcFileState,FSharp.Compiler.TypedTree+TType,FSharp.Compiler.CheckExpressions+TcEnv,FSharp.Compiler.TypedTree+Expr):System.Tuple`2[FSharp.Compiler.TypedTree+Expr,FSharp.Compiler.TypedTree+TType] (FullOpts)
-24 (-4.04 % of base) : 17800.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)
-20 (-4.46 % of base) : 11667.dasm - FSharp.Compiler.TypeRelations:ChooseTyparSolutionAndRange(FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.Import+ImportMap,FSharp.Compiler.TypedTree+Typar):System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range] (FullOpts)
-18 (-1.96 % of base) : 10119.dasm - FSharp.Compiler.CheckComputationExpressions:mkSynCall@238(System.String,System.String,FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr]):FSharp.Compiler.Syntax.SynExpr (FullOpts)
-18 (-4.29 % of base) : 20287.dasm - Microsoft.ML.Data.MulticlassClassificationEvaluator:GetAggregatorCore(Microsoft.ML.Data.RoleMappedSchema,System.String):Microsoft.ML.Data.MulticlassClassificationEvaluator+Aggregator:this (FullOpts)
-16 (-3.01 % of base) : 9072.dasm - FSharp.Compiler.ConstraintSolver+AddCxTypeEqualsTypeUndoIfFailed@3306:Invoke(FSharp.Compiler.ConstraintSolver+Trace):FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]:this (FullOpts)
-16 (-3.01 % of base) : 13956.dasm - FSharp.Compiler.ConstraintSolver+AddCxTypeEqualsTypeUndoIfFailedOrWarnings@3312:Invoke(FSharp.Compiler.ConstraintSolver+Trace):FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]:this (FullOpts)
-16 (-3.01 % of base) : 13949.dasm - FSharp.Compiler.ConstraintSolver+AddCxTypeMustSubsumeTypeUndoIfFailed@3324:Invoke(FSharp.Compiler.ConstraintSolver+Trace):FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]:this (FullOpts)
-16 (-8.16 % of base) : 14575.dasm - FSharp.Compiler.Parser+_fsyacc_reductions@6045-371:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
-16 (-1.94 % of base) : 13232.dasm - FSharp.Compiler.SyntaxTreeOps:mkSynLidGet(FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String):FSharp.Compiler.Syntax.SynExpr (FullOpts)
-14 (-0.62 % of base) : 13386.dasm - FSharp.Compiler.AugmentWithHashCompare:mkCompare$cont@943(FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.TypedTree+Entity,FSharp.Compiler.TypedTree+EntityRef,FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+Typar],Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.TcGlobals+TcGlobals,Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.TypedTree+EntityRef,Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.TypedTree+Entity,System.Tuple`3[FSharp.Compiler.TypedTree+Val,FSharp.Compiler.TypedTree+Val,FSharp.Compiler.TypedTree+Expr]]]],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.TypedTree+ValRef,FSharp.Compiler.TypedTree+ValRef]],Microsoft.FSharp.Core.Unit):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+Binding] (FullOpts)
-14 (-1.44 % of base) : 14901.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@254-2:Invoke(FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
-14 (-1.45 % of base) : 13462.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@477-11:Invoke(int,FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
-14 (-1.37 % of base) : 13441.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@537-13:Invoke(int,FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
-14 (-1.39 % of base) : 11715.dasm - FSharp.Compiler.PostTypeCheckSemanticChecks:action@1-37(FSharp.Compiler.PostTypeCheckSemanticChecks+cenv,FSharp.Compiler.TypedTree+Val,FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.TypedTree+EntityRef,System.String,FSharp.Compiler.TypedTree+Val) (FullOpts)
-14 (-3.66 % of base) : 401.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
Top method regressions (percentages):
402 (66.12 % of base) : 7284.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)
192 (63.58 % of base) : 6944.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
192 (63.58 % of base) : 6933.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
184 (62.16 % of base) : 6954.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
176 (58.28 % of base) : 6957.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)
106 (53.00 % of base) : 19142.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
68 (35.05 % of base) : 5578.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
42 (35.00 % of base) : 6880.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)
40 (33.90 % of base) : 16710.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
78 (33.05 % of base) : 6955.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
226 (32.29 % of base) : 11535.dasm - FSharp.Compiler.CheckDeclarations+MutRecShapes:expandTyconsWithEnv[System.__Canon,System.__Canon,System.__Canon,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)
70 (28.00 % of base) : 6952.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
64 (27.59 % of base) : 9987.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
32 (25.81 % of base) : 3097.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)
24 (21.82 % of base) : 7687.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
242 (21.61 % of base) : 6189.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)
30 (21.43 % of base) : 15038.dasm - Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
182 (21.06 % of base) : 21330.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)
32 (20.00 % of base) : 3310.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
40 (19.42 % of base) : 5632.dasm - Microsoft.FSharp.Collections.MapTreeModule:mkIterator[System.__Canon,System.__Canon](Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.__Canon] (FullOpts)
Top method improvements (percentages):
-26 (-9.29 % of base) : 18629.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
-16 (-8.16 % of base) : 14575.dasm - FSharp.Compiler.Parser+_fsyacc_reductions@6045-371:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
-20 (-4.46 % of base) : 11667.dasm - FSharp.Compiler.TypeRelations:ChooseTyparSolutionAndRange(FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.Import+ImportMap,FSharp.Compiler.TypedTree+Typar):System.Tuple`2[FSharp.Compiler.TypedTree+TType,FSharp.Compiler.Text.Range] (FullOpts)
-18 (-4.29 % of base) : 20287.dasm - Microsoft.ML.Data.MulticlassClassificationEvaluator:GetAggregatorCore(Microsoft.ML.Data.RoleMappedSchema,System.String):Microsoft.ML.Data.MulticlassClassificationEvaluator+Aggregator:this (FullOpts)
-24 (-4.04 % of base) : 17800.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)
-14 (-3.93 % of base) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
-14 (-3.66 % of base) : 401.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
-6 (-3.06 % of base) : 13178.dasm - FSharp.Compiler.ConstraintSolver+results@1879-1:Invoke(FSharp.Compiler.Infos+MethInfo):ubyte:this (FullOpts)
-16 (-3.01 % of base) : 9072.dasm - FSharp.Compiler.ConstraintSolver+AddCxTypeEqualsTypeUndoIfFailed@3306:Invoke(FSharp.Compiler.ConstraintSolver+Trace):FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]:this (FullOpts)
-16 (-3.01 % of base) : 13956.dasm - FSharp.Compiler.ConstraintSolver+AddCxTypeEqualsTypeUndoIfFailedOrWarnings@3312:Invoke(FSharp.Compiler.ConstraintSolver+Trace):FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]:this (FullOpts)
-16 (-3.01 % of base) : 13949.dasm - FSharp.Compiler.ConstraintSolver+AddCxTypeMustSubsumeTypeUndoIfFailed@3324:Invoke(FSharp.Compiler.ConstraintSolver+Trace):FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]:this (FullOpts)
-72 (-2.91 % of base) : 13430.dasm - FSharp.Compiler.AugmentWithHashCompare:mkAddToHashAcc(FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.Text.Range,FSharp.Compiler.TypedTree+Expr,FSharp.Compiler.TypedTree+ValRef,FSharp.Compiler.TypedTree+Expr):FSharp.Compiler.TypedTree+Expr (FullOpts)
-6 (-2.21 % of base) : 9727.dasm - FSharp.Compiler.ConstraintSolver:eliminateRedundant@2131(FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.TypedTreeOps+TypeEquivEnv,FSharp.Compiler.Import+ImportMap,FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint]):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.TypedTree+TyparConstraint] (FullOpts)
-6 (-2.14 % of base) : 11814.dasm - FSharp.Compiler.ConstraintSolver+bestMethods@3115:Invoke(System.Tuple`2[int,System.Tuple`4[FSharp.Compiler.MethodCalls+CalledMeth`1[FSharp.Compiler.TypedTree+Expr],Microsoft.FSharp.Collections.FSharpList`1[System.Exception],FSharp.Compiler.ConstraintSolver+Trace,FSharp.Compiler.MethodCalls+TypeDirectedConversionUsed]]):Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.MethodCalls+CalledMeth`1[FSharp.Compiler.TypedTree+Expr],Microsoft.FSharp.Collections.FSharpList`1[System.Exception],FSharp.Compiler.ConstraintSolver+Trace,FSharp.Compiler.MethodCalls+TypeDirectedConversionUsed]]:this (FullOpts)
-18 (-1.96 % of base) : 10119.dasm - FSharp.Compiler.CheckComputationExpressions:mkSynCall@238(System.String,System.String,FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr]):FSharp.Compiler.Syntax.SynExpr (FullOpts)
-16 (-1.94 % of base) : 13232.dasm - FSharp.Compiler.SyntaxTreeOps:mkSynLidGet(FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String):FSharp.Compiler.Syntax.SynExpr (FullOpts)
-8 (-1.67 % of base) : 9541.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)
-14 (-1.45 % of base) : 13462.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@477-11:Invoke(int,FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
-14 (-1.44 % of base) : 14901.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@254-2:Invoke(FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
-14 (-1.39 % of base) : 11715.dasm - FSharp.Compiler.PostTypeCheckSemanticChecks:action@1-37(FSharp.Compiler.PostTypeCheckSemanticChecks+cenv,FSharp.Compiler.TypedTree+Val,FSharp.Compiler.TcGlobals+TcGlobals,FSharp.Compiler.TypedTree+EntityRef,System.String,FSharp.Compiler.TypedTree+Val) (FullOpts)
windows x86
Diffs are based on 64,348 contexts (22,203 MinOpts, 42,145 FullOpts).
MISSED contexts: base: 3 (0.00%), diff: 74,344 (52.26%)
Overall (+6,474 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run.windows.x86.checked.mch |
378,560 |
+506 |
benchmarks.run_pgo.windows.x86.checked.mch |
841,834 |
-1,320 |
benchmarks.run_tiered.windows.x86.checked.mch |
777,492 |
+343 |
coreclr_tests.run.windows.x86.checked.mch |
88,890 |
-11 |
libraries.pmi.windows.x86.checked.mch |
1,533,349 |
+3,178 |
libraries_tests.run.windows.x86.Release.mch |
796,580 |
+860 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
359,330 |
+1,657 |
realworld.run.windows.x86.checked.mch |
559,958 |
+1,261 |
MinOpts (-42 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run_tiered.windows.x86.checked.mch |
571,759 |
-8 |
libraries_tests.run.windows.x86.Release.mch |
703,554 |
-34 |
FullOpts (+6,516 bytes)
Collection |
Base size (bytes) |
Diff size (bytes) |
benchmarks.run.windows.x86.checked.mch |
378,435 |
+506 |
benchmarks.run_pgo.windows.x86.checked.mch |
334,595 |
-1,320 |
benchmarks.run_tiered.windows.x86.checked.mch |
205,733 |
+351 |
coreclr_tests.run.windows.x86.checked.mch |
88,890 |
-11 |
libraries.pmi.windows.x86.checked.mch |
1,533,349 |
+3,178 |
libraries_tests.run.windows.x86.Release.mch |
93,026 |
+894 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
359,330 |
+1,657 |
realworld.run.windows.x86.checked.mch |
559,901 |
+1,261 |
Example diffs
benchmarks.run.windows.x86.checked.mch
-30 (-11.81%) : 9048.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute
@@ -8,20 +8,16 @@
; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4.50) ref -> esi class-hnd single-def <System.Type>
-; V01 loc0 [V01,T04] ( 5, 4 ) ref -> edi class-hnd single-def <System.Collections.Hashtable>
-; V02 loc1 [V02,T02] ( 7, 5 ) ref -> [ebp-0x28] class-hnd <System.Attribute[]>
-; V03 loc2 [V03,T11] ( 4, 1 ) ref -> [ebp-0x2C] class-hnd exact EH-live spill-single-def <System.Object>
+; V00 arg0 [V00,T00] ( 6, 4.50) ref -> esi class-hnd single-def <System.Type>
+; V01 loc0 [V01,T02] ( 5, 4 ) ref -> edi class-hnd single-def <System.Collections.Hashtable>
+; V02 loc1 [V02,T01] ( 7, 5 ) ref -> [ebp-0x28] class-hnd <System.Attribute[]>
+; V03 loc2 [V03,T07] ( 4, 1 ) ref -> [ebp-0x2C] class-hnd exact EH-live spill-single-def <System.Object>
; V04 loc3 [V04 ] ( 6, 2.50) ubyte -> [ebp-0x24] do-not-enreg[X] addr-exposed ld-addr-op
-; V05 tmp0 [V05,T03] ( 3, 4.25) ref -> eax single-def "CASTCLASS eval op1"
-; V06 tmp1 [V06,T09] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable"
-; V07 tmp2 [V07,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.Attribute[]>
-; V08 tmp3 [V08,T07] ( 3, 2.25) ref -> eax single-def "CASTCLASS eval op1"
-; V09 tmp4 [V09,T10] ( 3, 1.25) int -> edx "fgMakeTemp is creating a new local variable"
-; V10 tmp5 [V10,T05] ( 5, 3.75) ref -> ecx class-hnd "spilling QMark2" <System.Attribute[]>
-; V11 tmp6 [V11,T08] ( 2, 2 ) ubyte -> ecx "Inlining Arg"
-; V12 EHSlots [V12 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
-; V13 cse0 [V13,T06] ( 4, 3 ) int -> ebx "CSE - moderate"
+; V05 tmp0 [V05,T06] ( 2, 2 ) ubyte -> ecx "Inlining Arg"
+; V06 tmp1 [V06,T03] ( 2, 4 ) ref -> edx single-def "argument with side effect"
+; V07 tmp2 [V07,T05] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V08 EHSlots [V08 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] addr-exposed "lvaShadowSPslotsVar"
+; V09 cse0 [V09,T04] ( 4, 3 ) int -> ebx "CSE - aggressive"
;
; Lcl frame size = 32
@@ -53,38 +49,20 @@ G_M8794_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs -[ecx edx] +[eax]
mov edx, eax
; gcrRegs +[edx]
- test edx, edx
- je SHORT G_M8794_IG05
- ;; size=26 bbWeight=1 PerfScore 12.25
-G_M8794_IG03: ; bbWeight=0.25, gcrefRegs=000000C5 {eax edx esi edi}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Attribute[]
- cmp dword ptr [edx], ecx
- je SHORT G_M8794_IG05
- ;; size=9 bbWeight=0.25 PerfScore 1.06
-G_M8794_IG04: ; bbWeight=0.12, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[edx]
- mov edx, eax
- ; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx]
mov ecx, eax
; gcrRegs +[ecx]
- mov edx, ecx
- ; gcrRegs +[edx]
- ;; size=11 bbWeight=0.12 PerfScore 0.22
-G_M8794_IG05: ; bbWeight=1, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax ecx]
- mov ecx, edx
- ; gcrRegs +[ecx]
test ecx, ecx
- je SHORT G_M8794_IG08
- ;; size=6 bbWeight=1 PerfScore 1.50
-G_M8794_IG06: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[edx esi edi]
+ je SHORT G_M8794_IG05
+ ;; size=38 bbWeight=1 PerfScore 13.75
+G_M8794_IG03: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref
+ ; gcrRegs -[eax esi edi]
mov eax, ecx
; gcrRegs +[eax]
;; size=2 bbWeight=1 PerfScore 0.25
-G_M8794_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M8794_IG04: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -92,7 +70,7 @@ G_M8794_IG07: ; bbWeight=1, epilog, nogc, extend
pop ebp
ret
;; size=8 bbWeight=1 PerfScore 3.50
-G_M8794_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
+G_M8794_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax ecx] +[esi edi]
mov ecx, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[ecx]
@@ -101,23 +79,23 @@ G_M8794_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C0 {es
xor edx, edx
mov dword ptr [ebp-0x24], edx
;; size=14 bbWeight=0.50 PerfScore 2.12
-G_M8794_IG09: ; bbWeight=0.50, gcVars=00000800 {V03}, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M8794_IG06: ; bbWeight=0.50, gcVars=00000080 {V03}, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
cmp byte ptr [ebp-0x24], 0
- je SHORT G_M8794_IG11
+ je SHORT G_M8794_IG08
;; size=6 bbWeight=0.50 PerfScore 1.50
-G_M8794_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M8794_IG07: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; gcrRegs -[ecx esi edi]
call [System.Threading.Monitor:ThrowLockTakenException()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M8794_IG08: ; bbWeight=0.50, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[ecx esi edi]
lea edx, [ebp-0x24]
call <unknown method>
; gcrRegs -[ecx]
movzx ecx, byte ptr [ebp-0x24]
test ecx, ecx
- jne SHORT G_M8794_IG12
+ jne SHORT G_M8794_IG09
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
mov edx, 0xD1FFAB1E
@@ -125,41 +103,23 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=000000C2 {ecx esi edi}, byrefReg
call [<unknown method>]
; gcrRegs -[ecx edx]
;; size=32 bbWeight=0.50 PerfScore 3.62
-G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M8794_IG09: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
mov ecx, edi
; gcrRegs +[ecx]
mov edx, esi
; gcrRegs +[edx]
call [ebx+0x10]<unknown method>
; gcrRegs -[ecx edx] +[eax]
- mov ecx, eax
- ; gcrRegs +[ecx]
- test ecx, ecx
- je SHORT G_M8794_IG15
- ;; size=13 bbWeight=0.50 PerfScore 2.50
-G_M8794_IG13: ; bbWeight=0.25, gcrefRegs=000000C3 {eax ecx esi edi}, byrefRegs=00000000 {}, byref, isz
- mov edx, 0xD1FFAB1E ; System.Attribute[]
- cmp dword ptr [ecx], edx
- je SHORT G_M8794_IG15
- ;; size=9 bbWeight=0.25 PerfScore 1.06
-G_M8794_IG14: ; bbWeight=0.12, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[ecx]
- mov ecx, edx
mov edx, eax
; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
+ mov ecx, 0xD1FFAB1E ; System.Attribute[]
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx]
- mov ecx, eax
- ; gcrRegs +[ecx]
- ;; size=11 bbWeight=0.12 PerfScore 0.22
-G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=000000C2 {ecx esi edi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax]
- mov eax, ecx
- ; gcrRegs +[eax]
test eax, eax
- jne SHORT G_M8794_IG16
+ jne SHORT G_M8794_IG10
push 0
mov ecx, esi
+ ; gcrRegs +[ecx]
mov edx, 0xD1FFAB1E
; gcrRegs +[edx]
call [<unknown method>]
@@ -175,11 +135,11 @@ G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=000000C2 {ecx esi edi}, byrefReg
; gcrRegs -[eax ecx edx esi edi]
mov eax, gword ptr [ebp-0x28]
; gcrRegs +[eax]
- ;; size=35 bbWeight=0.50 PerfScore 6.25
-G_M8794_IG16: ; bbWeight=0.50, gcVars=00000800 {V03}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=52 bbWeight=0.50 PerfScore 8.62
+G_M8794_IG10: ; bbWeight=0.50, gcVars=00000080 {V03}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
; GC ptr vars -{V02}
cmp byte ptr [ebp-0x24], 0
- je SHORT G_M8794_IG17
+ je SHORT G_M8794_IG11
mov gword ptr [ebp-0x28], eax
; GC ptr vars +{V02}
mov ecx, gword ptr [ebp-0x2C]
@@ -189,34 +149,34 @@ G_M8794_IG16: ; bbWeight=0.50, gcVars=00000800 {V03}, gcrefRegs=00000001
; gcrRegs -[eax ecx]
mov ecx, gword ptr [ebp-0x28]
; gcrRegs +[ecx]
- jmp G_M8794_IG06
+ jmp G_M8794_IG03
;; size=25 bbWeight=0.50 PerfScore 4.50
-G_M8794_IG17: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref
+G_M8794_IG11: ; bbWeight=0.25, gcVars=00000000 {}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[ecx] +[eax]
; GC ptr vars -{V02}
mov ecx, eax
; gcrRegs +[ecx]
- jmp G_M8794_IG06
+ jmp G_M8794_IG03
;; size=7 bbWeight=0.25 PerfScore 0.56
-G_M8794_IG18: ; bbWeight=0, gcVars=00000800 {V03}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M8794_IG12: ; bbWeight=0, gcVars=00000080 {V03}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax ecx]
- ; GC ptr vars +{V03 V11}
+ ; GC ptr vars +{V03 V07}
cmp byte ptr [ebp-0x24], 0
- je SHORT G_M8794_IG19
+ je SHORT G_M8794_IG13
mov ecx, gword ptr [ebp-0x2C]
; gcrRegs +[ecx]
- ; GC ptr vars -{V03 V11}
+ ; GC ptr vars -{V03 V07}
call <unknown method>
; gcrRegs -[ecx]
;; size=14 bbWeight=0 PerfScore 0.00
-G_M8794_IG19: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M8794_IG13: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
pop eax
jmp eax
;; size=3 bbWeight=0 PerfScore 0.00
-; Total bytes of code 254, prolog size 14, PerfScore 47.12, instruction count 93, allocated bytes for code 254 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
+; Total bytes of code 224, prolog size 14, PerfScore 44.44, instruction count 78, allocated bytes for code 224 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
; ============================================================
*************** EH table for System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[]
1 EH table entries, 1 total EH entries reported to VM
-EH#0: try [G_M8794_IG09..G_M8794_IG16) handled by [G_M8794_IG18..END) (fault)
+EH#0: try [G_M8794_IG06..G_M8794_IG10) handled by [G_M8794_IG12..END) (fault)
-17 (-6.27%) : 372.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
@@ -10,21 +10,19 @@
;
; V00 arg0 [V00,T00] ( 9, 6 ) ref -> esi class-hnd single-def <System.RuntimeType>
; V01 arg1 [V01,T01] ( 8, 5 ) int -> edi single-def
-;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref
-; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> ebx
+;* V02 loc0 [V02,T10] ( 0, 0 ) ubyte -> zero-ref
+; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> ebx
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]>
-; V05 tmp0 [V05,T05] ( 3, 2.25) ref -> eax single-def "CASTCLASS eval op1"
-; V06 tmp1 [V06,T12] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable"
-; V07 tmp2 [V07,T03] ( 5, 3.75) ref -> registers class-hnd "spilling QMark2" <System.Object[]>
-; V08 tmp3 [V08,T07] ( 3, 1.50) ref -> eax
-; V09 tmp4 [V09,T08] ( 3, 1.50) ref -> edi class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache>
-; V10 tmp5 [V10,T04] ( 4, 2 ) ref -> edi class-hnd single-def "Inline stloc first use temp" <System.Object>
-;* V11 tmp6 [V11,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache>
-;* V12 tmp7 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache>
-;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp10 [V15,T02] ( 6, 7 ) ref -> eax "Single return block return value"
-; V16 cse0 [V16,T09] ( 3, 1.50) int -> ecx "CSE - moderate"
+; V05 tmp0 [V05,T06] ( 3, 1.50) ref -> eax
+; V06 tmp1 [V06,T07] ( 3, 1.50) ref -> edi class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache>
+; V07 tmp2 [V07,T03] ( 4, 2 ) ref -> edi class-hnd single-def "Inline stloc first use temp" <System.Object>
+;* V08 tmp3 [V08,T09] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache>
+;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache>
+;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+; V12 tmp7 [V12,T02] ( 6, 7 ) ref -> eax "Single return block return value"
+; V13 tmp8 [V13,T05] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V14 cse0 [V14,T08] ( 3, 1.50) int -> ecx "CSE - moderate"
;
; Lcl frame size = 0
@@ -76,7 +74,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000
je SHORT G_M32569_IG06
mov edx, edi
mov ecx, 0xD1FFAB1E ; <unknown class>
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
jmp SHORT G_M32569_IG07
;; size=18 bbWeight=0.50 PerfScore 2.38
@@ -84,12 +82,14 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000
; gcrRegs -[eax]
mov ecx, 0xD1FFAB1E
mov edx, 26
- call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS
+ ; byrRegs +[eax]
mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
+ ; byrRegs -[eax]
;; size=20 bbWeight=0.50 PerfScore 1.75
G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
- jmp G_M32569_IG18
+ jmp G_M32569_IG15
;; size=5 bbWeight=0.50 PerfScore 1.00
G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] +[esi]
@@ -99,23 +99,25 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
je SHORT G_M32569_IG09
mov edx, edi
mov ecx, 0xD1FFAB1E ; System.Object[]
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[esi] +[eax]
- jmp G_M32569_IG18
- ;; size=25 bbWeight=0.50 PerfScore 3.00
+ jmp SHORT G_M32569_IG15
+ ;; size=22 bbWeight=0.50 PerfScore 3.00
G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov ecx, 0xD1FFAB1E
mov edx, 27
- call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS
+ ; byrRegs +[eax]
mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
- jmp SHORT G_M32569_IG18
+ ; byrRegs -[eax]
+ jmp SHORT G_M32569_IG15
;; size=22 bbWeight=0.50 PerfScore 2.75
G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] +[esi]
test edi, edi
- je SHORT G_M32569_IG14
+ je SHORT G_M32569_IG11
mov ecx, esi
; gcrRegs +[ecx]
mov edx, edi
@@ -123,42 +125,24 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
; gcrRegs -[ecx esi] +[eax]
mov edx, eax
; gcrRegs +[edx]
- test edx, edx
- je SHORT G_M32569_IG13
- ;; size=20 bbWeight=0.50 PerfScore 3.12
-G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Object[]
- cmp dword ptr [edx], ecx
- je SHORT G_M32569_IG13
- ;; size=9 bbWeight=0.25 PerfScore 1.06
-G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx]
- mov edx, eax
- ; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
- ; gcrRegs -[edx]
- mov edx, eax
- ; gcrRegs +[edx]
- ;; size=9 bbWeight=0.12 PerfScore 0.19
-G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax]
- mov eax, edx
- ; gcrRegs +[eax]
- jmp SHORT G_M32569_IG18
- ;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax edx] +[esi]
+ jmp SHORT G_M32569_IG15
+ ;; size=28 bbWeight=0.50 PerfScore 4.12
+G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[eax] +[esi]
mov ecx, dword ptr [esi+0x08]
test ecx, ecx
- je SHORT G_M32569_IG16
+ je SHORT G_M32569_IG13
call <unknown method>
; gcrRegs +[eax]
mov edi, eax
; gcrRegs +[edi]
test edi, edi
- je SHORT G_M32569_IG16
+ je SHORT G_M32569_IG13
cmp dword ptr [edi], 0xD1FFAB1E
- je SHORT G_M32569_IG15
+ je SHORT G_M32569_IG12
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
mov edx, 0xD1FFAB1E
@@ -166,10 +150,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
call [<unknown method>]
; gcrRegs -[eax ecx edx esi]
;; size=42 bbWeight=0.50 PerfScore 6.62
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M32569_IG14
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[edi] +[esi]
mov ecx, esi
; gcrRegs +[ecx]
@@ -178,7 +162,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
mov edi, eax
; gcrRegs +[edi]
;; size=10 bbWeight=0.50 PerfScore 1.75
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax]
mov ecx, edi
; gcrRegs +[ecx]
@@ -186,7 +170,7 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000
call [System.RuntimeType+RuntimeTypeCache:GetEmptyArray():System.Object[]:this]
; gcrRegs -[ecx edi] +[eax]
;; size=10 bbWeight=0.50 PerfScore 3.12
-G_M32569_IG18: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M32569_IG15: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ebx
pop esi
pop edi
@@ -194,6 +178,6 @@ G_M32569_IG18: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000
ret
;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 271, prolog size 6, PerfScore 47.62, instruction count 90, allocated bytes for code 271 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
+; Total bytes of code 254, prolog size 6, PerfScore 46.25, instruction count 83, allocated bytes for code 254 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
; ============================================================
-11 (-3.70%) : 680.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)
@@ -7,26 +7,24 @@
; 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]>
-; 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,T11] ( 5, 3.56) int -> ebx 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>
+; V00 arg0 [V00,T07] ( 4, 4 ) ref -> ebx class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V01 arg1 [V01,T03] ( 5, 19 ) ref -> esi class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V02 arg2 [V02,T10] ( 2, 2 ) byref -> [ebp+0x0C] single-def
+; V03 TypeCtx [V03,T06] ( 5, 13.08) int -> edi single-def
+; V04 loc0 [V04,T04] ( 7, 20 ) ref -> [ebp-0x24] class-hnd EH-live spill-single-def <<unknown class>>
+; V05 loc1 [V05,T05] ( 3, 17 ) ref -> ebx class-hnd <System.__Canon>
+; V06 loc2 [V06,T11] ( 2, 2 ) ref -> [ebp-0x28] 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,T09] ( 3, 4 ) int -> registers "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"
+; V11 tmp3 [V11,T02] ( 3, 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, 9 ) int -> ebx hoist "CSE - aggressive"
-; V14 rat0 [V14,T06] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
-; V15 rat1 [V15,T10] ( 3, 4 ) int -> ebx "runtime lookup"
-; V16 rat2 [V16,T07] ( 3, 5.60) int -> ecx "spilling expr"
-; V17 rat3 [V17,T08] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V13 rat0 [V13,T08] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V14 rat1 [V14,T00] ( 3, 44.80) int -> ecx "spilling expr"
+; V15 rat2 [V15,T01] ( 3, 35.84) int -> eax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 28
G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -34,154 +32,145 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 32
+ sub esp, 28
xor eax, eax
- mov dword ptr [ebp-0x2C], eax
+ mov dword ptr [ebp-0x28], eax
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_IG21
- test esi, esi
+G_M62024_IG02: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
+ test ebx, ebx
je G_M62024_IG22
- mov ecx, dword ptr [ebx+0x20]
+ test esi, esi
+ je G_M62024_IG23
+ mov ecx, dword ptr [edi+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
+G_M62024_IG03: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, 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
+G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.20 PerfScore 0.35
-G_M62024_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, edi
+G_M62024_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ 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 gword ptr [ebp-0x24], eax
; 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
- ; gcrRegs -[eax]
- ; GC ptr vars -{V13}
- mov ecx, edi
+ ;; size=12 bbWeight=1 PerfScore 4.75
+G_M62024_IG06: ; bbWeight=1, gcVars=00000810 {V04 V06}, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars -{V11}
+ mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[eax ecx]
test eax, eax
- je SHORT G_M62024_IG13
- mov ecx, dword ptr [ebx+0x20]
+ je SHORT G_M62024_IG14
+ ;; size=12 bbWeight=1 PerfScore 4.50
+G_M62024_IG07: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M62024_IG09
- ;; size=21 bbWeight=1 PerfScore 10.50
-G_M62024_IG07: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ jle SHORT G_M62024_IG10
+ ;; size=9 bbWeight=8 PerfScore 48.00
+G_M62024_IG08: ; bbWeight=6.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx+0x0C]
test eax, eax
- je SHORT G_M62024_IG09
- ;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M62024_IG08: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov ebx, eax
- jmp SHORT G_M62024_IG10
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M62024_IG09: ; bbWeight=0.36, 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.36 PerfScore 0.63
-G_M62024_IG10: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov eax, ebx
+ je SHORT G_M62024_IG10
+ ;; size=7 bbWeight=6.40 PerfScore 20.80
+G_M62024_IG09: ; bbWeight=5.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M62024_IG11
+ ;; size=2 bbWeight=5.12 PerfScore 10.24
+G_M62024_IG10: ; bbWeight=2.88, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=2.88 PerfScore 4.32
+G_M62024_IG11: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
nop
call [eax]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x28], eax
- ; GC ptr vars +{V05}
- mov edx, eax
+ mov ebx, eax
+ ; gcrRegs +[ebx]
+ mov edx, ebx
; gcrRegs +[edx]
mov ecx, gword ptr [esi+0x04]
; gcrRegs +[ecx]
call [esi+0x0C]<unknown method>
; gcrRegs -[eax ecx edx]
test eax, eax
- jne SHORT G_M62024_IG12
- mov ecx, edi
+ jne SHORT G_M62024_IG13
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
- ; GC ptr vars -{V05}
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[ecx ebx]
test eax, eax
- jne SHORT G_M62024_IG10
- ;; size=36 bbWeight=8 PerfScore 126.00
-G_M62024_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M62024_IG07
+ ;; size=35 bbWeight=8 PerfScore 130.00
+G_M62024_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
- jmp SHORT G_M62024_IG13
+ jmp SHORT G_M62024_IG14
;; size=2 bbWeight=1 PerfScore 2.00
-G_M62024_IG12: ; bbWeight=1, gcVars=0000200C {V04 V05 V06}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V03 V05}
+G_M62024_IG13: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[ebx]
mov esi, bword ptr [ebp+0x0C]
; byrRegs +[esi]
mov byte ptr [esi], 1
- mov esi, gword ptr [ebp-0x28]
- ; gcrRegs +[esi]
- ; byrRegs -[esi]
- mov gword ptr [ebp-0x2C], esi
+ mov gword ptr [ebp-0x28], ebx
mov dword ptr [ebp-0x1C], 0
mov dword ptr [ebp-0x18], 252
- push G_M62024_IG14
- jmp SHORT G_M62024_IG15
- ;; size=33 bbWeight=1 PerfScore 9.00
-G_M62024_IG13: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[esi]
- ; GC ptr vars -{V03 V05 V06}
- mov ecx, edi
+ push G_M62024_IG15
+ jmp SHORT G_M62024_IG16
+ ;; size=30 bbWeight=1 PerfScore 8.00
+G_M62024_IG14: ; bbWeight=1, gcVars=00000010 {V04}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; gcrRegs -[ebx]
+ ; byrRegs -[esi]
+ ; GC ptr vars -{V06}
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
; GC ptr vars -{V04}
call [<unknown method>]
- ; gcrRegs -[ecx edi]
- jmp SHORT G_M62024_IG17
- ;; size=10 bbWeight=1 PerfScore 5.25
-G_M62024_IG14: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V06 V13}
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M62024_IG18
+ ;; size=11 bbWeight=1 PerfScore 6.00
+G_M62024_IG15: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
mov dword ptr [ebp-0x18], 0
- jmp SHORT G_M62024_IG19
+ jmp SHORT G_M62024_IG20
;; size=9 bbWeight=1 PerfScore 3.00
-G_M62024_IG15: ; 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_IG16
- mov ecx, edi
...
+24 (+18.18%) : 3886.dasm - System.Array:SortSystem.__Canon (FullOpts)
@@ -8,23 +8,25 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 5, 5 ) ref -> ecx class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T01] ( 4, 4 ) ref -> esi class-hnd single-def <System.Comparison`1[System.__Canon]>
-; V02 TypeCtx [V02,T08] ( 3, 2.36) int -> edi single-def
+; V00 arg0 [V00,T00] ( 5, 5 ) ref -> esi class-hnd single-def <System.__Canon[]>
+; V01 arg1 [V01,T01] ( 4, 4 ) ref -> edi class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V02 TypeCtx [V02,T09] ( 5, 3.56) int -> ebx single-def
;* V03 loc0 [V03 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[System.__Canon]>
;* V04 loc1 [V04 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T06] ( 2, 4 ) int -> [ebp-0x14] spill-single-def "Inlining Arg"
-; V08 tmp4 [V08,T05] ( 2, 4 ) byref -> ebx single-def "Inlining Arg"
+; V07 tmp3 [V07,T07] ( 2, 4 ) int -> esi "Inlining Arg"
+; V08 tmp4 [V08,T06] ( 2, 4 ) byref -> [ebp-0x14] spill-single-def "Inlining Arg"
;* V09 tmp5 [V09 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
;* V10 tmp6 [V10 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x4)" P-INDEP
-; V11 tmp7 [V11,T09] ( 2, 2 ) byref -> ebx single-def "field V04._reference (fldOffset=0x0)" P-INDEP
-; V12 tmp8 [V12,T10] ( 2, 2 ) int -> [ebp-0x18] spill-single-def "field V04._length (fldOffset=0x4)" P-INDEP
-; V13 tmp9 [V13,T07] ( 2, 4 ) int -> edx "argument with side effect"
-; V14 rat0 [V14,T04] ( 3, 4 ) int -> edx "runtime lookup"
-; V15 rat1 [V15,T02] ( 3, 5.60) int -> ecx "spilling expr"
-; V16 rat2 [V16,T03] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
+; V11 tmp7 [V11,T10] ( 2, 2 ) byref -> [ebp-0x18] spill-single-def "field V04._reference (fldOffset=0x0)" P-INDEP
+; V12 tmp8 [V12,T11] ( 2, 2 ) int -> esi "field V04._length (fldOffset=0x4)" P-INDEP
+; V13 tmp9 [V13,T08] ( 2, 4 ) int -> edx "argument with side effect"
+;* V14 rat0 [V14,T12] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V15 rat1 [V15,T02] ( 2, 4 ) int -> ecx "fgMakeTemp is creating a new local variable"
+; V16 rat2 [V16,T05] ( 3, 4 ) int -> edx "runtime lookup"
+; V17 rat3 [V17,T03] ( 3, 5.60) int -> ecx "spilling expr"
+; V18 rat4 [V18,T04] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 12
@@ -37,53 +39,71 @@ G_M37190_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
sub esp, 12
mov eax, dword ptr [ebp+0x08]
mov dword ptr [ebp-0x10], eax
- mov esi, edx
+ mov esi, ecx
; gcrRegs +[esi]
- mov edi, dword ptr [ebp+0x08]
- ;; size=20 bbWeight=1 PerfScore 8.75
-G_M37190_IG02: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs +[ecx]
- test ecx, ecx
- je SHORT G_M37190_IG08
+ mov edi, edx
+ ; gcrRegs +[edi]
+ mov ebx, dword ptr [ebp+0x08]
+ ;; size=22 bbWeight=1 PerfScore 9.00
+G_M37190_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je SHORT G_M37190_IG09
- lea ebx, bword ptr [ecx+0x08]
- ; byrRegs +[ebx]
- mov eax, dword ptr [ecx+0x04]
- mov dword ptr [ebp-0x14], eax
+ je SHORT G_M37190_IG10
+ test edi, edi
+ je SHORT G_M37190_IG11
+ mov ecx, dword ptr [ebx+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ jne SHORT G_M37190_IG04
+ ;; size=18 bbWeight=1 PerfScore 7.75
+G_M37190_IG03: ; bbWeight=0.20, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.20 PerfScore 0.30
+G_M37190_IG04: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ lea eax, bword ptr [esi+0x08]
+ ; byrRegs +[eax]
+ mov bword ptr [ebp-0x14], eax
+ ; GC ptr vars +{V08}
+ mov esi, dword ptr [esi+0x04]
+ ; gcrRegs -[esi]
mov ecx, 1
- ; gcrRegs -[ecx]
call [<unknown method>]
- mov eax, dword ptr [ebp-0x14]
- mov dword ptr [ebp-0x18], eax
- mov ecx, dword ptr [edi+0x20]
+ ; byrRegs -[eax]
+ mov eax, bword ptr [ebp-0x14]
+ ; byrRegs +[eax]
+ mov bword ptr [ebp-0x18], eax
+ ; GC ptr vars +{V11}
+ mov ecx, dword ptr [ebx+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M37190_IG05
- ;; size=43 bbWeight=1 PerfScore 17.25
-G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=00000040 {esi}, byrefRegs=00000008 {ebx}, byref, isz
+ jle SHORT G_M37190_IG07
+ ;; size=35 bbWeight=1 PerfScore 14.75
+G_M37190_IG05: ; bbWeight=0.80, gcVars=00000400 {V11}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; byrRegs -[eax]
+ ; GC ptr vars -{V08}
mov edx, dword ptr [ecx+0x0C]
test edx, edx
- je SHORT G_M37190_IG05
+ je SHORT G_M37190_IG07
;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=00000040 {esi}, byrefRegs=00000008 {ebx}, byref, isz
- jmp SHORT G_M37190_IG06
+G_M37190_IG06: ; bbWeight=0.64, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M37190_IG08
;; size=2 bbWeight=0.64 PerfScore 1.28
-G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=00000040 {esi}, byrefRegs=00000008 {ebx}, byref
- mov ecx, edi
+G_M37190_IG07: ; bbWeight=0.36, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.36 PerfScore 0.63
-G_M37190_IG06: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000008 {ebx}, byref
- push dword ptr [ebp-0x18]
- push ebx
- mov ecx, esi
+G_M37190_IG08: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ push esi
+ push bword ptr [ebp-0x18]
+ mov ecx, edi
; gcrRegs +[ecx]
+ ; GC ptr vars -{V11}
call [<unknown method>]
- ; gcrRegs -[ecx esi]
- ; byrRegs -[ebx]
+ ; gcrRegs -[ecx edi]
;; size=12 bbWeight=1 PerfScore 5.25
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M37190_IG09: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -91,17 +111,17 @@ G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend
pop ebp
ret 4
;; size=10 bbWeight=1 PerfScore 4.50
-G_M37190_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M37190_IG10: ; 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_M37190_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M37190_IG11: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 29
call [System.ThrowHelper:ThrowArgumentNullException(int)]
int3
;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 132, prolog size 15, PerfScore 40.26, instruction count 48, allocated bytes for code 132 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
+; Total bytes of code 156, prolog size 15, PerfScore 46.06, instruction count 56, allocated bytes for code 156 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
; ============================================================
+27 (+20.15%) : 1012.dasm - System.Array:IndexOfSystem.__Canon:int (FullOpts)
@@ -9,10 +9,10 @@
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 5, 5 ) ref -> esi class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T03] ( 3, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T06] ( 3, 3 ) int -> ebx single-def
-; V03 arg3 [V03,T09] ( 2, 2 ) int -> [ebp+0x0C] single-def
-; V04 TypeCtx [V04,T08] ( 3, 2.36) int -> ecx single-def
+; V01 arg1 [V01,T04] ( 3, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon>
+; V02 arg2 [V02,T08] ( 3, 3 ) int -> [ebp+0x10] single-def
+; V03 arg3 [V03,T10] ( 2, 2 ) int -> [ebp+0x0C] single-def
+; V04 TypeCtx [V04,T07] ( 5, 3.56) int -> ebx 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,12 @@
;* 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,T09] ( 3, 3 ) int -> ecx "CSE - aggressive"
+;* V18 rat0 [V18,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V19 rat1 [V19,T02] ( 2, 4 ) int -> ecx "fgMakeTemp is creating a new local variable"
+; V20 rat2 [V20,T06] ( 3, 4 ) int -> ecx "runtime lookup"
+; V21 rat3 [V21,T03] ( 3, 5.60) int -> ecx "spilling expr"
+; V22 rat4 [V22,T05] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -45,43 +47,55 @@ G_M13831_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
; gcrRegs +[esi]
mov edi, edx
; gcrRegs +[edi]
- mov ebx, dword ptr [ebp+0x10]
- mov eax, dword ptr [ebp+0x0C]
- mov ecx, dword ptr [ebp+0x08]
+ mov eax, dword ptr [ebp+0x10]
+ mov edx, dword ptr [ebp+0x0C]
+ mov ebx, 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_IG10
+ mov ecx, dword ptr [esi+0x04]
+ cmp ecx, eax
+ jb SHORT G_M13831_IG11
+ mov dword ptr [ebp+0x10], eax
+ sub ecx, eax
+ mov dword ptr [ebp+0x0C], edx
+ cmp ecx, edx
+ jb SHORT G_M13831_IG12
+ mov ecx, dword ptr [ebx+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ jne SHORT G_M13831_IG04
+ ;; size=33 bbWeight=1 PerfScore 13.25
+G_M13831_IG03: ; 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=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
+ ;; size=12 bbWeight=0.20 PerfScore 0.30
+G_M13831_IG04: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ebx+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M13831_IG07
+ ;; size=9 bbWeight=1 PerfScore 6.00
+G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ je SHORT G_M13831_IG07
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M13831_IG08
+ ;; size=2 bbWeight=0.64 PerfScore 1.28
+G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0.36 PerfScore 0.63
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
call [System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]]
; gcrRegs +[eax]
push edi
- push ebx
+ push dword ptr [ebp+0x10]
push dword ptr [ebp+0x0C]
mov ecx, eax
; gcrRegs +[ecx]
@@ -92,8 +106,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=24 bbWeight=1 PerfScore 13.50
+G_M13831_IG09: ; bbWeight=1, epilog, nogc, extend
pop ecx
pop ebx
pop esi
@@ -101,20 +115,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_IG10: ; 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_IG11: ; 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_IG12: ; 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 161, prolog size 13, PerfScore 53.81, instruction count 63, allocated bytes for code 161 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================
+31 (+28.97%) : 3350.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -10,15 +10,18 @@
;
; V00 arg0 [V00,T00] ( 4, 3 ) int -> esi single-def
; V01 arg1 [V01,T01] ( 3, 3 ) ubyte -> edx single-def
-; V02 TypeCtx [V02,T04] ( 5, 2.20) int -> ecx single-def
-; V03 loc0 [V03,T08] ( 2, 1 ) int -> edi
-; V04 loc1 [V04,T05] ( 3, 2 ) int -> edx "spilling helperCall"
+; V02 TypeCtx [V02,T02] ( 7, 2.88) int -> edi single-def
+; V03 loc0 [V03,T10] ( 2, 1 ) int -> ebx
+; V04 loc1 [V04,T07] ( 3, 2 ) int -> ecx "spilling helperCall"
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T07] ( 2, 2 ) int -> ecx "argument with side effect"
-; V08 rat0 [V08,T06] ( 3, 2 ) int -> ecx "runtime lookup"
-; V09 rat1 [V09,T02] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V10 rat2 [V10,T03] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T09] ( 2, 2 ) int -> ecx "argument with side effect"
+;* V08 rat0 [V08,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T03] ( 3, 2.80) int -> ecx "spilling expr"
+; V10 rat2 [V10,T06] ( 2, 1.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T08] ( 3, 2 ) int -> ecx "runtime lookup"
+; V12 rat4 [V12,T04] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
+; V13 rat5 [V13,T05] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -27,74 +30,92 @@ G_M46119_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
mov eax, dword ptr [ebp+0x08]
- mov dword ptr [ebp-0x0C], eax
+ mov dword ptr [ebp-0x10], eax
mov esi, ecx
- mov ecx, dword ptr [ebp+0x08]
- ;; size=17 bbWeight=1 PerfScore 8.50
+ mov edi, dword ptr [ebp+0x08]
+ ;; size=18 bbWeight=1 PerfScore 9.50
G_M46119_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
test dl, dl
- jne SHORT G_M46119_IG08
+ jne SHORT G_M46119_IG11
;; size=4 bbWeight=1 PerfScore 1.25
G_M46119_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov edx, dword ptr [ecx+0x20]
- mov eax, dword ptr [edx+0x08]
- test eax, eax
- je SHORT G_M46119_IG05
- ;; size=10 bbWeight=0.50 PerfScore 2.62
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG05
+ ;; size=9 bbWeight=0.50 PerfScore 3.00
G_M46119_IG04: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov ecx, eax
- jmp SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.40 PerfScore 0.90
-G_M46119_IG05: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M46119_IG06
+ ;; size=7 bbWeight=0.40 PerfScore 1.30
+G_M46119_IG05: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.18 PerfScore 0.27
+G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG08
+ ;; size=10 bbWeight=0.50 PerfScore 2.62
+G_M46119_IG07: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.40 PerfScore 0.80
+G_M46119_IG08: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
- ;; size=12 bbWeight=0.10 PerfScore 0.15
-G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M46119_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, esi
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
;; size=7 bbWeight=0.50 PerfScore 0.62
-G_M46119_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M46119_IG10: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0.50 PerfScore 2.00
-G_M46119_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=8 bbWeight=0.50 PerfScore 2.25
+G_M46119_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edi, 80
- mov edx, dword ptr [ecx+0x20]
- mov edx, dword ptr [edx+0x08]
- test edx, edx
- je SHORT G_M46119_IG10
+ mov ebx, 80
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG13
;; size=15 bbWeight=0.50 PerfScore 2.75
-G_M46119_IG09: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M46119_IG11
+G_M46119_IG12: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG14
;; size=2 bbWeight=0.40 PerfScore 0.80
-G_M46119_IG10: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG13: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- ;; size=12 bbWeight=0.10 PerfScore 0.15
-G_M46119_IG11: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- push edi
- mov ecx, edx
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M46119_IG14: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ push ebx
mov edx, esi
call <unknown method>
; gcrRegs +[eax]
- ;; size=10 bbWeight=0.50 PerfScore 1.25
-G_M46119_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=8 bbWeight=0.50 PerfScore 1.12
+G_M46119_IG15: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0.50 PerfScore 2.00
+ ;; size=8 bbWeight=0.50 PerfScore 2.25
-; Total bytes of code 107, prolog size 12, PerfScore 23.00, instruction count 45, allocated bytes for code 107 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
+; Total bytes of code 138, prolog size 13, PerfScore 28.89, instruction count 57, allocated bytes for code 138 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
; ============================================================
benchmarks.run_pgo.windows.x86.checked.mch
-14 (-18.42%) : 16618.dasm - System.Threading.ThreadPool+<>c:<.cctor>b_610(System.Object):this (Tier1)
@@ -10,10 +10,9 @@
; 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 -> esi class-hnd single-def <System.Object>
-; V02 loc0 [V02,T02] ( 5, 4 ) ref -> ecx class-hnd single-def <System.Runtime.CompilerServices.IAsyncStateMachineBox>
+; V01 arg1 [V01,T00] ( 4, 3 ) ref -> esi class-hnd single-def <System.Object>
+; V02 loc0 [V02,T01] ( 5, 4 ) ref -> eax class-hnd single-def <System.Runtime.CompilerServices.IAsyncStateMachineBox>
;* V03 tmp0 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1+AsyncStateMachineBox`1[long,System.IO.Tests.Perf_FileStream+<ReadAsync>d__33]>
-; V04 rat0 [V04,T00] ( 5, 7 ) ref -> ecx class-hnd "replacement local" <System.Runtime.CompilerServices.IAsyncStateMachineBox>
;
; Lcl frame size = 0
@@ -25,49 +24,28 @@ G_M20063_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
; gcrRegs +[esi]
;; size=6 bbWeight=1 PerfScore 2.50
G_M20063_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- mov ecx, esi
- ; gcrRegs +[ecx]
- test ecx, ecx
+ mov edx, esi
+ ; gcrRegs +[edx]
+ mov ecx, 0xD1FFAB1E ; System.Runtime.CompilerServices.IAsyncStateMachineBox
+ call CORINFO_HELP_INITINSTCLASS
+ ; gcrRegs -[edx] +[eax]
+ test eax, eax
+ je SHORT G_M20063_IG04
+ cmp dword ptr [eax], 0xD1FFAB1E
jne SHORT G_M20063_IG05
- ;; size=6 bbWeight=1 PerfScore 1.50
-G_M20063_IG03: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- test ecx, ecx
- je SHORT G_M20063_IG08
- cmp dword ptr [ecx], 0xD1FFAB1E
- jne SHORT G_M20063_IG07
+ mov ecx, eax
+ ; gcrRegs +[ecx]
xor edx, edx
; gcrRegs +[edx]
call [<unknown method>]
- ; gcrRegs -[ecx edx esi]
- ;; size=20 bbWeight=1 PerfScore 8.50
-G_M20063_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcrRegs -[eax ecx edx esi]
+ ;; size=34 bbWeight=1 PerfScore 10.25
+G_M20063_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
pop esi
pop ebp
ret
;; size=3 bbWeight=1 PerfScore 2.00
-G_M20063_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs +[ecx esi]
- cmp dword ptr [ecx], 0xD1FFAB1E
- je SHORT G_M20063_IG03
- ;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M20063_IG06: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[ecx]
- mov edx, esi
- ; gcrRegs +[edx]
- mov ecx, 0xD1FFAB1E ; System.Runtime.CompilerServices.IAsyncStateMachineBox
- call CORINFO_HELP_ISINSTANCEOFINTERFACE
- ; gcrRegs -[edx] +[eax]
- mov ecx, eax
- ; gcrRegs +[ecx]
- jmp SHORT G_M20063_IG03
- ;; size=16 bbWeight=0 PerfScore 0.00
-G_M20063_IG07: ; bbWeight=0, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax esi]
- call [<unknown method>]
- ; gcrRegs -[ecx]
- jmp SHORT G_M20063_IG04
- ;; size=8 bbWeight=0 PerfScore 0.00
-G_M20063_IG08: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M20063_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs +[esi]
mov ecx, esi
; gcrRegs +[ecx]
@@ -75,7 +53,15 @@ G_M20063_IG08: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000
; gcrRegs -[ecx esi]
int3
;; size=9 bbWeight=0 PerfScore 0.00
+G_M20063_IG05: ; bbWeight=0, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[eax]
+ mov ecx, eax
+ ; gcrRegs +[ecx]
+ call [<unknown method>]
+ ; gcrRegs -[eax ecx]
+ jmp SHORT G_M20063_IG03
+ ;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 76, prolog size 4, PerfScore 16.50, instruction count 28, allocated bytes for code 76 (MethodHash=2150b1a0) for method System.Threading.ThreadPool+<>c:<.cctor>b__61_0(System.Object):this (Tier1)
+; Total bytes of code 62, prolog size 4, PerfScore 14.75, instruction count 23, allocated bytes for code 62 (MethodHash=2150b1a0) for method System.Threading.ThreadPool+<>c:<.cctor>b__61_0(System.Object):this (Tier1)
; ============================================================
-16 (-13.68%) : 8877.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
@@ -9,12 +9,11 @@
; 1 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4 ) ref -> esi class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 5, 4 ) ref -> ecx class-hnd single-def <System.Reflection.IReflectableType>
-; V02 tmp0 [V02,T04] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
-; V03 tmp1 [V03,T03] ( 3, 2 ) ref -> eax "guarded devirt return temp"
+; V00 arg0 [V00,T00] ( 5, 4 ) ref -> esi class-hnd single-def <System.Type>
+; V01 loc0 [V01,T01] ( 5, 4 ) ref -> eax class-hnd single-def <System.Reflection.IReflectableType>
+; V02 tmp0 [V02,T03] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
+; V03 tmp1 [V03,T02] ( 3, 2 ) ref -> eax "guarded devirt return temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V05 rat0 [V05,T00] ( 5, 7 ) ref -> ecx class-hnd "replacement local" <System.Reflection.IReflectableType>
;
; Lcl frame size = 0
@@ -28,46 +27,28 @@ G_M46371_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
;; size=7 bbWeight=1 PerfScore 3.50
G_M46371_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je SHORT G_M46371_IG09
- mov ecx, esi
- ; gcrRegs +[ecx]
- test ecx, ecx
- je SHORT G_M46371_IG05
- ;; size=10 bbWeight=1 PerfScore 2.75
-G_M46371_IG03: ; bbWeight=0.50, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- cmp dword ptr [ecx], 0xD1FFAB1E
- je SHORT G_M46371_IG05
- ;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M46371_IG04: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[ecx]
+ je SHORT G_M46371_IG06
mov edx, esi
; gcrRegs +[edx]
mov ecx, 0xD1FFAB1E ; System.Reflection.IReflectableType
- call CORINFO_HELP_ISINSTANCEOFINTERFACE
+ call CORINFO_HELP_INITINSTCLASS
; gcrRegs -[edx] +[eax]
- mov ecx, eax
- ; gcrRegs +[ecx]
- ;; size=14 bbWeight=0 PerfScore 0.00
-G_M46371_IG05: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax]
- test ecx, ecx
- je SHORT G_M46371_IG07
- cmp dword ptr [ecx], 0xD1FFAB1E
- jne SHORT G_M46371_IG10
- mov eax, ecx
- ; gcrRegs +[eax]
- ;; size=14 bbWeight=1 PerfScore 5.50
-G_M46371_IG06: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
- ; gcrRegs -[ecx esi]
+ test eax, eax
+ je SHORT G_M46371_IG04
+ cmp dword ptr [eax], 0xD1FFAB1E
+ jne SHORT G_M46371_IG07
+ ;; size=28 bbWeight=1 PerfScore 8.00
+G_M46371_IG03: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcrRegs -[esi]
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=1 PerfScore 2.50
-G_M46371_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M46371_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] +[esi]
mov ecx, 0xD1FFAB1E ; System.Reflection.TypeDelegator
- call CORINFO_HELP_NEWSFAST
+ call CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[eax]
mov edi, eax
; gcrRegs +[edi]
@@ -80,17 +61,17 @@ G_M46371_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}
mov eax, edi
; gcrRegs +[eax]
;; size=24 bbWeight=0 PerfScore 0.00
-G_M46371_IG08: ; bbWeight=0, epilog, nogc, extend
+G_M46371_IG05: ; bbWeight=0, epilog, nogc, extend
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=0 PerfScore 0.00
-G_M46371_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M46371_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax edi]
mov ecx, 0xC40
mov edx, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
+ call CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[eax]
mov ecx, eax
; gcrRegs +[ecx]
@@ -98,13 +79,15 @@ G_M46371_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
; gcrRegs -[eax ecx]
int3
;; size=24 bbWeight=0 PerfScore 0.00
-G_M46371_IG10: ; bbWeight=0, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+G_M46371_IG07: ; bbWeight=0, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[eax]
+ mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx] +[eax]
- jmp SHORT G_M46371_IG06
- ;; size=8 bbWeight=0 PerfScore 0.00
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M46371_IG03
+ ;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 117, prolog size 5, PerfScore 16.25, instruction count 44, allocated bytes for code 117 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
+; Total bytes of code 101, prolog size 5, PerfScore 14.00, instruction count 38, allocated bytes for code 101 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
; ============================================================
-16 (-13.68%) : 8893.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
@@ -9,12 +9,11 @@
; 1 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4 ) ref -> esi class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 5, 4 ) ref -> ecx class-hnd single-def <System.Reflection.IReflectableType>
-; V02 tmp0 [V02,T04] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
-; V03 tmp1 [V03,T03] ( 3, 2 ) ref -> eax "guarded devirt return temp"
+; V00 arg0 [V00,T00] ( 5, 4 ) ref -> esi class-hnd single-def <System.Type>
+; V01 loc0 [V01,T01] ( 5, 4 ) ref -> eax class-hnd single-def <System.Reflection.IReflectableType>
+; V02 tmp0 [V02,T03] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
+; V03 tmp1 [V03,T02] ( 3, 2 ) ref -> eax "guarded devirt return temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V05 rat0 [V05,T00] ( 5, 7 ) ref -> ecx class-hnd "replacement local" <System.Reflection.IReflectableType>
;
; Lcl frame size = 0
@@ -28,46 +27,28 @@ G_M46371_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
;; size=7 bbWeight=1 PerfScore 3.50
G_M46371_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je SHORT G_M46371_IG09
- mov ecx, esi
- ; gcrRegs +[ecx]
- test ecx, ecx
- je SHORT G_M46371_IG05
- ;; size=10 bbWeight=1 PerfScore 2.75
-G_M46371_IG03: ; bbWeight=0.50, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- cmp dword ptr [ecx], 0xD1FFAB1E
- je SHORT G_M46371_IG05
- ;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M46371_IG04: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[ecx]
+ je SHORT G_M46371_IG06
mov edx, esi
; gcrRegs +[edx]
mov ecx, 0xD1FFAB1E ; System.Reflection.IReflectableType
- call CORINFO_HELP_ISINSTANCEOFINTERFACE
+ call CORINFO_HELP_INITINSTCLASS
; gcrRegs -[edx] +[eax]
- mov ecx, eax
- ; gcrRegs +[ecx]
- ;; size=14 bbWeight=0 PerfScore 0.00
-G_M46371_IG05: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax]
- test ecx, ecx
- je SHORT G_M46371_IG07
- cmp dword ptr [ecx], 0xD1FFAB1E
- jne SHORT G_M46371_IG10
- mov eax, ecx
- ; gcrRegs +[eax]
- ;; size=14 bbWeight=1 PerfScore 5.50
-G_M46371_IG06: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
- ; gcrRegs -[ecx esi]
+ test eax, eax
+ je SHORT G_M46371_IG04
+ cmp dword ptr [eax], 0xD1FFAB1E
+ jne SHORT G_M46371_IG07
+ ;; size=28 bbWeight=1 PerfScore 8.00
+G_M46371_IG03: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcrRegs -[esi]
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=1 PerfScore 2.50
-G_M46371_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
+G_M46371_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] +[esi]
mov ecx, 0xD1FFAB1E ; System.Reflection.TypeDelegator
- call CORINFO_HELP_NEWSFAST
+ call CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[eax]
mov edi, eax
; gcrRegs +[edi]
@@ -80,17 +61,17 @@ G_M46371_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}
mov eax, edi
; gcrRegs +[eax]
;; size=24 bbWeight=0 PerfScore 0.00
-G_M46371_IG08: ; bbWeight=0, epilog, nogc, extend
+G_M46371_IG05: ; bbWeight=0, epilog, nogc, extend
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=0 PerfScore 0.00
-G_M46371_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M46371_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax edi]
mov ecx, 0xC40
mov edx, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
+ call CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[eax]
mov ecx, eax
; gcrRegs +[ecx]
@@ -98,13 +79,15 @@ G_M46371_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
; gcrRegs -[eax ecx]
int3
;; size=24 bbWeight=0 PerfScore 0.00
-G_M46371_IG10: ; bbWeight=0, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
+G_M46371_IG07: ; bbWeight=0, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[eax]
+ mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx] +[eax]
- jmp SHORT G_M46371_IG06
- ;; size=8 bbWeight=0 PerfScore 0.00
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M46371_IG03
+ ;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 117, prolog size 5, PerfScore 16.25, instruction count 44, allocated bytes for code 117 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
+; Total bytes of code 101, prolog size 5, PerfScore 14.00, instruction count 38, allocated bytes for code 101 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
; ============================================================
+47 (+20.80%) : 11863.dasm - System.Array:SortSystem.__Canon (Tier1)
@@ -9,27 +9,30 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 5, 4.58) ref -> ecx class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T01] ( 5, 4.58) int -> edx single-def
-; V02 arg2 [V02,T02] ( 4, 3.58) int -> esi single-def
-; V03 arg3 [V03,T14] ( 1, 0.58) ref -> [ebp+0x0C] class-hnd single-def <System.Collections.Generic.IComparer`1[System.__Canon]>
-; V04 TypeCtx [V04,T07] ( 5, 2.57) int -> edi single-def
+; V00 arg0 [V00,T00] ( 5, 4.58) ref -> esi class-hnd single-def <System.__Canon[]>
+; V01 arg1 [V01,T01] ( 5, 4.58) int -> edi single-def
+; V02 arg2 [V02,T02] ( 4, 3.58) int -> ebx single-def
+; V03 arg3 [V03,T17] ( 1, 0.58) ref -> [ebp+0x0C] class-hnd single-def <System.Collections.Generic.IComparer`1[System.__Canon]>
+; V04 TypeCtx [V04,T03] ( 7, 3.36) int -> [ebp+0x08] single-def
;* V05 loc0 [V05 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[System.__Canon]>
;* V06 loc1 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp2 [V08,T08] ( 3, 2.32) int -> [ebp-0x14] "spilling helperCall"
+; V08 tmp2 [V08,T10] ( 3, 2.32) int -> [ebp-0x14] "spilling helperCall"
;* V09 tmp3 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp4 [V10,T09] ( 3, 2.32) int -> edi "VirtualCall with runtime lookup"
-; V11 tmp5 [V11,T10] ( 2, 2.32) byref -> ebx single-def "Inlining Arg"
+; V10 tmp4 [V10,T11] ( 3, 2.32) int -> edi "VirtualCall with runtime lookup"
+; V11 tmp5 [V11,T12] ( 2, 2.32) byref -> esi single-def "Inlining Arg"
;* V12 tmp6 [V12 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V13 tmp7 [V13 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x4)" P-INDEP
-; V14 tmp8 [V14,T12] ( 2, 1.16) byref -> ebx single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-; V15 tmp9 [V15,T13] ( 2, 1.16) int -> esi "field V06._length (fldOffset=0x4)" P-INDEP
-; V16 tmp10 [V16,T11] ( 2, 2.32) ref -> ecx single-def "argument with side effect"
-; V17 rat0 [V17,T03] ( 3, 3.24) int -> ecx "spilling expr"
-; V18 rat1 [V18,T05] ( 3, 2.59) int -> eax "fgMakeTemp is creating a new local variable"
-; V19 rat2 [V19,T04] ( 3, 3.24) int -> ecx "spilling expr"
-; V20 rat3 [V20,T06] ( 3, 2.59) int -> edx "fgMakeTemp is creating a new local variable"
+; V14 tmp8 [V14,T14] ( 2, 1.16) byref -> esi single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+; V15 tmp9 [V15,T15] ( 2, 1.16) int -> ebx "field V06._length (fldOffset=0x4)" P-INDEP
+; V16 tmp10 [V16,T13] ( 2, 2.32) ref -> ecx single-def "argument with side effect"
+;* V17 rat0 [V17,T16] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V18 rat1 [V18,T04] ( 3, 3.24) int -> ecx "spilling expr"
+; V19 rat2 [V19,T07] ( 2, 1.85) int -> ecx "fgMakeTemp is creating a new local variable"
+; V20 rat3 [V20,T05] ( 3, 3.24) int -> ecx "spilling expr"
+; V21 rat4 [V21,T08] ( 3, 2.59) int -> eax "fgMakeTemp is creating a new local variable"
+; V22 rat5 [V22,T06] ( 3, 3.24) int -> ecx "spilling expr"
+; V23 rat6 [V23,T09] ( 3, 2.59) int -> edx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 8
@@ -42,84 +45,111 @@ G_M58455_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
sub esp, 8
mov eax, dword ptr [ebp+0x08]
mov dword ptr [ebp-0x10], eax
- mov esi, dword ptr [ebp+0x10]
- mov edi, dword ptr [ebp+0x08]
- ;; size=21 bbWeight=1 PerfScore 9.50
-G_M58455_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs +[ecx]
- test ecx, ecx
- je G_M58455_IG15
- test edx, edx
- jl G_M58455_IG16
+ mov esi, ecx
+ ; gcrRegs +[esi]
+ mov edi, edx
+ mov ebx, dword ptr [ebp+0x10]
+ mov eax, dword ptr [ebp+0x08]
+ ;; size=25 bbWeight=1 PerfScore 10.00
+G_M58455_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
test esi, esi
- jl G_M58455_IG17
- mov eax, dword ptr [ecx+0x04]
- sub eax, edx
- cmp eax, esi
- jl G_M58455_IG18
- cmp esi, 1
- jle SHORT G_M58455_IG14
- ;; size=42 bbWeight=1 PerfScore 8.50
-G_M58455_IG03: ; bbWeight=0.58, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
- lea ebx, bword ptr [ecx+4*edx+0x08]
- ; byrRegs +[ebx]
+ je G_M58455_IG19
+ test edi, edi
+ jl G_M58455_IG20
+ test ebx, ebx
+ jl G_M58455_IG21
+ mov ecx, dword ptr [esi+0x04]
+ sub ecx, edi
+ cmp ecx, ebx
+ jl G_M58455_IG22
+ cmp ebx, 1
+ jle G_M58455_IG18
+ ;; size=46 bbWeight=1 PerfScore 8.50
+G_M58455_IG03: ; bbWeight=0.58, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [eax+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M58455_IG05
+ ;; size=9 bbWeight=0.58 PerfScore 3.47
+G_M58455_IG04: ; bbWeight=0.46, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M58455_IG09
+ ;; size=7 bbWeight=0.46 PerfScore 1.51
+G_M58455_IG05: ; bbWeight=0.21, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+ mov dword ptr [ebp+0x08], eax
+ mov ecx, eax
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=15 bbWeight=0.21 PerfScore 0.52
+G_M58455_IG06: ; bbWeight=0.58, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ lea esi, bword ptr [esi+4*edi+0x08]
+ ; gcrRegs -[esi]
+ ; byrRegs +[esi]
mov ecx, 1
- ; gcrRegs -[ecx]
call [<unknown method>]
+ mov edi, dword ptr [ebp+0x08]
mov ecx, dword ptr [edi+0x20]
cmp dword ptr [ecx+0x04], 16
- jle SHORT G_M58455_IG06
- ;; size=24 bbWeight=0.58 PerfScore 5.93
-G_M58455_IG04: ; bbWeight=0.46, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
+ jle SHORT G_M58455_IG10
+ ;; size=27 bbWeight=0.58 PerfScore 6.51
+G_M58455_IG07: ; bbWeight=0.46, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
mov eax, dword ptr [ecx+0x10]
test eax, eax
- je SHORT G_M58455_IG06
- ;; size=7 bbWeight=0.46 PerfScore 1.51
-G_M58455_IG05: ; bbWeight=0.37, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- jmp SHORT G_M58455_IG07
- ;; size=2 bbWeight=0.37 PerfScore 0.74
-G_M58455_IG06: ; bbWeight=0.21, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
- mov ecx, edi
- mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov dword ptr [ebp-0x14], eax
- ;; size=15 bbWeight=0.21 PerfScore 0.52
-G_M58455_IG07: ; bbWeight=0.58, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov ecx, dword ptr [edi+0x20]
- cmp dword ptr [ecx+0x04], 20
- jle SHORT G_M58455_IG11
- ;; size=9 bbWeight=0.58 PerfScore 3.47
-G_M58455_IG08: ; bbWeight=0.46, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov edx, dword ptr [ecx+0x14]
- test edx, edx
je SHORT G_M58455_IG10
;; size=7 bbWeight=0.46 PerfScore 1.51
-G_M58455_IG09: ; bbWeight=0.37, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov edi, edx
- jmp SHORT G_M58455_IG13
- ;; size=4 bbWeight=0.37 PerfScore 0.83
-G_M58455_IG10: ; bbWeight=0.23, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov dword ptr [ebp-0x14], eax
- jmp SHORT G_M58455_IG12
+G_M58455_IG08: ; bbWeight=0.37, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ jmp SHORT G_M58455_IG11
+ ;; size=2 bbWeight=0.37 PerfScore 0.74
+G_M58455_IG09: ; bbWeight=0.23, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[esi]
+ ; byrRegs -[esi]
+ mov dword ptr [ebp+0x08], eax
+ jmp SHORT G_M58455_IG06
;; size=5 bbWeight=0.23 PerfScore 0.69
-G_M58455_IG11: ; bbWeight=0.29, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
- mov dword ptr [ebp-0x14], eax
- ;; size=3 bbWeight=0.29 PerfScore 0.29
-G_M58455_IG12: ; bbWeight=0.21, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
+G_M58455_IG10: ; bbWeight=0.21, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ ; gcrRegs -[esi]
+ ; byrRegs +[esi]
mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
+ mov dword ptr [ebp-0x14], eax
+ ;; size=15 bbWeight=0.21 PerfScore 0.52
+G_M58455_IG11: ; bbWeight=0.58, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 20
+ jle SHORT G_M58455_IG15
+ ;; size=9 bbWeight=0.58 PerfScore 3.47
+G_M58455_IG12: ; bbWeight=0.46, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov edx, dword ptr [ecx+0x14]
+ test edx, edx
+ je SHORT G_M58455_IG14
+ ;; size=7 bbWeight=0.46 PerfScore 1.51
+G_M58455_IG13: ; bbWeight=0.37, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov edi, edx
+ jmp SHORT G_M58455_IG17
+ ;; size=4 bbWeight=0.37 PerfScore 0.83
+G_M58455_IG14: ; bbWeight=0.23, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov dword ptr [ebp-0x14], eax
+ jmp SHORT G_M58455_IG16
+ ;; size=5 bbWeight=0.23 PerfScore 0.69
+G_M58455_IG15: ; bbWeight=0.29, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ mov dword ptr [ebp-0x14], eax
+ ;; size=3 bbWeight=0.29 PerfScore 0.29
+G_M58455_IG16: ; bbWeight=0.21, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov edi, eax
mov eax, dword ptr [ebp-0x14]
;; size=17 bbWeight=0.21 PerfScore 0.57
-G_M58455_IG13: ; bbWeight=0.58, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
+G_M58455_IG17: ; bbWeight=0.58, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov ecx, eax
call [System.Collections.Generic.ArraySortHelper`1[System.__Canon]:get_Default():System.Collections.Generic.IArraySortHelper`1[System.__Canon]]
; gcrRegs +[eax]
mov ecx, eax
; gcrRegs +[ecx]
- push esi
push ebx
+ push esi
mov edx, gword ptr [ebp+0x0C]
; gcrRegs +[edx]
mov eax, edi
@@ -127,9 +157,9 @@ G_M58455_IG13: ; bbWeight=0.58, gcrefRegs=00000000 {}, byrefRegs=00000008
nop
call [eax]
; gcrRegs -[ecx edx]
- ; byrRegs -[ebx]
+ ; byrRegs -[esi]
;; size=22 bbWeight=0.58 PerfScore 5.79
-G_M58455_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M58455_IG18: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -137,25 +167,25 @@ G_M58455_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
pop ebp
ret 12
;; size=10 bbWeight=1 PerfScore 4.50
-G_M58455_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M58455_IG19: ; 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_M58455_IG16: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58455_IG20: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowIndexArgumentOutOfRange_NeedNonNegNumException()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-G_M58455_IG17: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58455_IG21: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowLengthArgumentOutOfRange_ArgumentOutOfRange_NeedNonNegNum()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-G_M58455_IG18: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58455_IG22: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 16
...
+41 (+25.79%) : 8650.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)
@@ -10,10 +10,10 @@
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 6, 5 ) ref -> esi class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T03] ( 4, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon>
-; V02 arg2 [V02,T06] ( 4, 3 ) int -> ebx single-def
-; V03 arg3 [V03,T09] ( 3, 2 ) int -> [ebp+0x0C] single-def
-; V04 TypeCtx [V04,T08] ( 3, 2.36) int -> ecx single-def
+; V01 arg1 [V01,T04] ( 4, 3 ) ref -> edi ld-addr-op class-hnd single-def <System.__Canon>
+; V02 arg2 [V02,T08] ( 4, 3 ) int -> [ebp+0x10] single-def
+; V03 arg3 [V03,T10] ( 3, 2 ) int -> [ebp+0x0C] single-def
+; V04 TypeCtx [V04,T07] ( 5, 3.56) int -> ebx 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
@@ -22,16 +22,18 @@
;* V10 tmp1 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
; V11 tmp2 [V11,T01] ( 5, 6.36) ref -> eax class-hnd single-def "spilling ret_expr" <System.Collections.Generic.EqualityComparer`1[System.__Canon]>
;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref
-; V13 tmp4 [V13,T10] ( 3, 2 ) int -> eax "guarded devirt return temp"
+; V13 tmp4 [V13,T11] ( 3, 2 ) int -> eax "guarded devirt return temp"
;* V14 tmp5 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Collections.Generic.ObjectEqualityComparer`1[System.Type]>
;* V15 tmp6 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V16 tmp7 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V17 tmp8 [V17 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp"
;* V18 tmp9 [V18 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inlining Arg"
-; V19 cse0 [V19,T07] ( 3, 3 ) int -> edx "CSE - aggressive"
-; V20 rat0 [V20,T05] ( 3, 4 ) int -> edx "runtime lookup"
-; V21 rat1 [V21,T02] ( 3, 5.60) int -> edx "spilling expr"
-; V22 rat2 [V22,T04] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
+; V19 cse0 [V19,T09] ( 3, 3 ) int -> ecx "CSE - aggressive"
+;* V20 rat0 [V20,T12] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V21 rat1 [V21,T02] ( 2, 4 ) int -> ecx "fgMakeTemp is creating a new local variable"
+; V22 rat2 [V22,T06] ( 3, 4 ) int -> ecx "runtime lookup"
+; V23 rat3 [V23,T03] ( 3, 5.60) int -> ecx "spilling expr"
+; V24 rat4 [V24,T05] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -48,47 +50,59 @@ G_M13831_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
; gcrRegs +[esi]
mov edi, edx
; gcrRegs +[edi]
- mov ebx, dword ptr [ebp+0x10]
- mov eax, dword ptr [ebp+0x0C]
- mov ecx, dword ptr [ebp+0x08]
+ mov eax, dword ptr [ebp+0x10]
+ mov edx, dword ptr [ebp+0x0C]
+ mov ebx, 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_IG10
- mov edx, dword ptr [esi+0x04]
- cmp edx, ebx
- jb SHORT G_M13831_IG11
- sub edx, ebx
- mov dword ptr [ebp+0x0C], eax
- cmp edx, eax
- jb SHORT G_M13831_IG12
- 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 G_M13831_IG12
+ mov ecx, dword ptr [esi+0x04]
+ cmp ecx, eax
+ jb G_M13831_IG13
+ mov dword ptr [ebp+0x10], eax
+ sub ecx, eax
+ mov dword ptr [ebp+0x0C], edx
+ cmp ecx, edx
+ jb G_M13831_IG14
+ mov ecx, dword ptr [ebx+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ jne SHORT G_M13831_IG04
+ ;; size=45 bbWeight=1 PerfScore 13.25
+G_M13831_IG03: ; 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=12 bbWeight=0.36 PerfScore 0.54
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov ecx, edx
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.20 PerfScore 0.30
+G_M13831_IG04: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ebx+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M13831_IG07
+ ;; size=9 bbWeight=1 PerfScore 6.00
+G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ je SHORT G_M13831_IG07
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M13831_IG08
+ ;; size=2 bbWeight=0.64 PerfScore 1.28
+G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0.36 PerfScore 0.63
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
call [System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon]]
; gcrRegs +[eax]
cmp dword ptr [eax], 0xD1FFAB1E
- jne SHORT G_M13831_IG09
- ;; size=16 bbWeight=1 PerfScore 7.25
-G_M13831_IG07: ; bbWeight=0.82, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, byref
+ jne SHORT G_M13831_IG11
+ ;; size=14 bbWeight=1 PerfScore 7.00
+G_M13831_IG09: ; bbWeight=0.82, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, byref
push edi
- push ebx
+ push dword ptr [ebp+0x10]
push dword ptr [ebp+0x0C]
mov ecx, eax
; gcrRegs +[ecx]
@@ -96,8 +110,8 @@ G_M13831_IG07: ; bbWeight=0.82, gcrefRegs=000000C1 {eax esi edi}, byrefRe
; gcrRegs +[edx]
call [System.Collections.Generic.ObjectEqualityComparer`1[System.__Canon]:IndexOf(System.__Canon[],System.__Canon,int,int):int:this]
; gcrRegs -[eax ecx edx esi edi]
- ;; size=15 bbWeight=0.82 PerfScore 5.33
-G_M13831_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=17 bbWeight=0.82 PerfScore 5.33
+G_M13831_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ecx
pop ebx
pop esi
@@ -105,10 +119,10 @@ G_M13831_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
pop ebp
ret 12
;; size=8 bbWeight=1 PerfScore 4.50
-G_M13831_IG09: ; bbWeight=0.18, gcVars=00000000 {}, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+G_M13831_IG11: ; bbWeight=0.18, gcVars=00000000 {}, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs +[eax esi edi]
push edi
- push ebx
+ push dword ptr [ebp+0x10]
push dword ptr [ebp+0x0C]
mov ecx, eax
; gcrRegs +[ecx]
@@ -119,22 +133,22 @@ G_M13831_IG09: ; bbWeight=0.18, gcVars=00000000 {}, gcrefRegs=000000C1 {e
mov eax, dword ptr [eax+0x30]
call [eax]<unknown method>
; gcrRegs -[ecx edx esi edi]
- jmp SHORT G_M13831_IG08
- ;; size=18 bbWeight=0.18 PerfScore 2.25
-G_M13831_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ jmp SHORT G_M13831_IG10
+ ;; size=20 bbWeight=0.18 PerfScore 2.25
+G_M13831_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 2
call [System.ThrowHelper:ThrowArgumentNullException(int)]
int3
;; size=12 bbWeight=0 PerfScore 0.00
-G_M13831_IG11: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13831_IG13: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-G_M13831_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13831_IG14: ; 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 159, prolog size 13, PerfScore 48.50, instruction count 64, allocated bytes for code 159 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 200, prolog size 13, PerfScore 54.89, instruction count 72, allocated bytes for code 200 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================
+31 (+28.97%) : 11888.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -9,17 +9,20 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 4, 3 ) int -> esi single-def
-; V01 arg1 [V01,T02] ( 3, 3 ) ubyte -> edx single-def
-; V02 TypeCtx [V02,T05] ( 5, 2.20) int -> ecx single-def
-; V03 loc0 [V03,T06] ( 2, 0 ) int -> edi
-; V04 loc1 [V04,T07] ( 3, 0 ) int -> edx "spilling helperCall"
+; V00 arg0 [V00,T02] ( 4, 3 ) int -> esi single-def
+; V01 arg1 [V01,T03] ( 3, 3 ) ubyte -> edx single-def
+; V02 TypeCtx [V02,T07] ( 7, 3.56) int -> edi single-def
+; V03 loc0 [V03,T09] ( 2, 0 ) int -> ebx
+; V04 loc1 [V04,T10] ( 3, 0 ) int -> ecx "spilling helperCall"
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T04] ( 2, 4 ) int -> ecx "argument with side effect"
-; V08 rat0 [V08,T03] ( 3, 4 ) int -> ecx "runtime lookup"
-; V09 rat1 [V09,T00] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V10 rat2 [V10,T08] ( 3, 0 ) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T06] ( 2, 4 ) int -> ecx "argument with side effect"
+;* V08 rat0 [V08,T08] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T00] ( 3, 5.60) int -> ecx "spilling expr"
+; V10 rat2 [V10,T04] ( 2, 3.20) int -> ecx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T05] ( 3, 4 ) int -> ecx "runtime lookup"
+; V12 rat4 [V12,T01] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V13 rat5 [V13,T11] ( 3, 0 ) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -28,70 +31,88 @@ G_M46119_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
mov eax, dword ptr [ebp+0x08]
- mov dword ptr [ebp-0x0C], eax
+ mov dword ptr [ebp-0x10], eax
mov esi, ecx
- mov ecx, dword ptr [ebp+0x08]
- ;; size=17 bbWeight=1 PerfScore 8.50
+ mov edi, dword ptr [ebp+0x08]
+ ;; size=18 bbWeight=1 PerfScore 9.50
G_M46119_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
test dl, dl
- jne SHORT G_M46119_IG07
- mov edx, dword ptr [ecx+0x20]
- mov eax, dword ptr [edx+0x08]
- test eax, eax
- je SHORT G_M46119_IG04
- ;; size=14 bbWeight=1 PerfScore 6.50
+ jne SHORT G_M46119_IG10
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG04
+ ;; size=13 bbWeight=1 PerfScore 7.25
G_M46119_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov ecx, eax
- jmp SHORT G_M46119_IG05
- ;; size=4 bbWeight=0.80 PerfScore 1.80
-G_M46119_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M46119_IG05
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M46119_IG04: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.36 PerfScore 0.54
+G_M46119_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG07
+ ;; size=10 bbWeight=1 PerfScore 5.25
+G_M46119_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG08
+ ;; size=2 bbWeight=0.80 PerfScore 1.60
+G_M46119_IG07: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
- ;; size=12 bbWeight=0.20 PerfScore 0.30
-G_M46119_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=14 bbWeight=0.20 PerfScore 0.35
+G_M46119_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, esi
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
;; size=7 bbWeight=1 PerfScore 1.25
-G_M46119_IG06: ; bbWeight=1, epilog, nogc, extend
+G_M46119_IG09: ; bbWeight=1, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=1 PerfScore 4.00
-G_M46119_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=8 bbWeight=1 PerfScore 4.50
+G_M46119_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edi, 80
- mov edx, dword ptr [ecx+0x20]
- mov edx, dword ptr [edx+0x08]
- test edx, edx
- je SHORT G_M46119_IG08
- jmp SHORT G_M46119_IG09
+ mov ebx, 80
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG11
+ jmp SHORT G_M46119_IG12
;; size=17 bbWeight=0 PerfScore 0.00
-G_M46119_IG08: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG11: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- ;; size=12 bbWeight=0 PerfScore 0.00
-G_M46119_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- push edi
- mov ecx, edx
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0 PerfScore 0.00
+G_M46119_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ push ebx
mov edx, esi
call <unknown method>
; gcrRegs +[eax]
- ;; size=10 bbWeight=0 PerfScore 0.00
-G_M46119_IG10: ; bbWeight=0, epilog, nogc, extend
+ ;; size=8 bbWeight=0 PerfScore 0.00
+G_M46119_IG13: ; bbWeight=0, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0 PerfScore 0.00
+ ;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 107, prolog size 12, PerfScore 22.35, instruction count 45, allocated bytes for code 107 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
+; Total bytes of code 138, prolog size 13, PerfScore 32.84, instruction count 57, allocated bytes for code 138 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
; ============================================================
benchmarks.run_tiered.windows.x86.checked.mch
-8 (-13.56%) : 3715.dasm - System.Runtime.Intrinsics.Tests.Perf_Vector128:ConvertULongToDoubleBenchmark():System.Runtime.Intrinsics.Vector128`1[double]:this (Tier0)
@@ -21,21 +21,18 @@ G_M48353_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
G_M48353_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 0xD1FFAB1E
mov edx, 409
- call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
- vmovups xmm0, xmmword ptr [D1FFAB1EH] ; static handle
- sub esp, 16
- vmovups xmmword ptr [esp], xmm0
- mov ecx, bword ptr [ebp-0x08]
- ; byrRegs +[ecx]
- call [<unknown method>]
- ; byrRegs -[ecx]
- ;; size=40 bbWeight=1 PerfScore 11.75
+ call CORINFO_HELP_GETSHARED_GCSTATIC_BASE
+ ; byrRegs +[eax]
+ vcvtuqq2pd xmm0, xmmword ptr [D1FFAB1EH] ; static handle
+ mov eax, bword ptr [ebp-0x08]
+ vmovups xmmword ptr [eax], xmm0
+ ;; size=32 bbWeight=1 PerfScore 10.50
G_M48353_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp
pop ebp
ret
;; size=4 bbWeight=1 PerfScore 1.75
-; Total bytes of code 59, prolog size 9, PerfScore 18.00, instruction count 17, allocated bytes for code 59 (MethodHash=2751431e) for method System.Runtime.Intrinsics.Tests.Perf_Vector128:ConvertULongToDoubleBenchmark():System.Runtime.Intrinsics.Vector128`1[double]:this (Tier0)
+; Total bytes of code 51, prolog size 9, PerfScore 16.75, instruction count 15, allocated bytes for code 51 (MethodHash=2751431e) for method System.Runtime.Intrinsics.Tests.Perf_Vector128:ConvertULongToDoubleBenchmark():System.Runtime.Intrinsics.Vector128`1[double]:this (Tier0)
; ============================================================
-34 (-11.15%) : 17156.dasm - System.Text.Json.Serialization.JsonConverter1[System.Nullable
1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier1)
@@ -5,30 +5,27 @@
; ebp based frame
; partially interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 11 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 9 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 12, 7 ) ref -> esi this class-hnd single-def <System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]>
-; V01 arg1 [V01,T01] ( 8, 5.50) ref -> edi class-hnd single-def <System.Text.Json.Utf8JsonWriter>
-; V02 arg2 [V02,T05] ( 4, 2 ) byref -> [ebp+0x10] single-def
-; V03 arg3 [V03,T06] ( 4, 2 ) ref -> [ebp+0x0C] class-hnd single-def <System.Text.Json.JsonSerializerOptions>
+; V00 this [V00,T00] ( 11, 6.50) ref -> esi this class-hnd single-def <System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]>
+; V01 arg1 [V01,T01] ( 7, 5 ) ref -> edi class-hnd single-def <System.Text.Json.Utf8JsonWriter>
+; V02 arg2 [V02,T09] ( 3, 1.50) byref -> [ebp+0x10] single-def
+; V03 arg3 [V03,T05] ( 4, 2 ) ref -> [ebp+0x0C] class-hnd single-def <System.Text.Json.JsonSerializerOptions>
; V04 arg4 [V04,T02] ( 9, 4.50) byref -> ebx single-def
;* V05 loc0 [V05 ] ( 0, 0 ) ubyte -> zero-ref
-; V06 loc1 [V06,T07] ( 4, 2 ) ubyte -> [ebp-0x10] spill-single-def
-;* V07 loc2 [V07 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] ld-addr-op <System.Nullable`1[System.DateTimeOffset]>
+; V06 loc1 [V06,T06] ( 4, 2 ) ubyte -> [ebp-0x10] spill-single-def
+;* V07 loc2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Nullable`1[System.DateTimeOffset]>
; V08 loc3 [V08,T10] ( 2, 1 ) int -> [ebp-0x14] spill-single-def
;* V09 loc4 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>>
;* V10 loc5 [V10 ] ( 0, 0 ) ubyte -> zero-ref
;* V11 loc6 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Text.Json.Serialization.JsonConverter>
;* V12 tmp0 [V12 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
-; V13 tmp1 [V13,T09] ( 2, 2 ) struct (16) mm0 "impAppendStmt" <System.Nullable`1[System.DateTimeOffset]>
-;* V14 tmp2 [V14 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "Inlining Arg" <System.Nullable`1[System.DateTimeOffset]>
-;* V15 tmp3 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V16 tmp4 [V16,T08] ( 2, 2 ) byref -> ebx single-def "Inlining Arg"
-;* V17 tmp5 [V17 ] ( 0, 0 ) ubyte -> zero-ref "V07.[000..001)"
-;* V18 tmp6 [V18 ] ( 0, 0 ) ubyte -> zero-ref "V14.[000..001)"
-; V19 tmp7 [V19,T03] ( 3, 3 ) ref -> ecx single-def "argument with side effect"
-; V20 cse0 [V20,T04] ( 3, 2.50) int -> ecx "CSE - moderate"
+; V13 tmp1 [V13,T08] ( 2, 2 ) struct (16) mm0 "impAppendStmt" <System.Nullable`1[System.DateTimeOffset]>
+;* V14 tmp2 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+; V15 tmp3 [V15,T07] ( 2, 2 ) byref -> ebx single-def "Inlining Arg"
+; V16 tmp4 [V16,T03] ( 3, 3 ) ref -> ecx single-def "argument with side effect"
+; V17 cse0 [V17,T04] ( 3, 2.50) int -> ecx "CSE - moderate"
;
; Lcl frame size = 8
@@ -44,50 +41,28 @@ G_M45721_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
; gcrRegs +[esi]
mov edi, edx
; gcrRegs +[edi]
- mov eax, bword ptr [ebp+0x10]
- ; byrRegs +[eax]
- mov edx, gword ptr [ebp+0x0C]
- ; gcrRegs +[edx]
+ mov edx, bword ptr [ebp+0x10]
+ ; byrRegs +[edx]
+ mov eax, gword ptr [ebp+0x0C]
+ ; gcrRegs +[eax]
mov ebx, bword ptr [ebp+0x08]
; byrRegs +[ebx]
;; size=25 bbWeight=1 PerfScore 9.00
-G_M45721_IG02: ; bbWeight=1, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000009 {eax ebx}, byref, isz
+G_M45721_IG02: ; bbWeight=1, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=0000000C {edx ebx}, byref, isz
mov ecx, dword ptr [edi+0x18]
and ecx, 0xD1FFAB1E
- cmp ecx, dword ptr [edx+0x50]
- jge G_M45721_IG12
- cmp byte ptr [esi+0x0E], 0
- jne SHORT G_M45721_IG05
- ;; size=24 bbWeight=1 PerfScore 10.25
-G_M45721_IG03: ; bbWeight=0.50, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000009 {eax ebx}, byref, isz
- cmp byte ptr [eax], 0
- jne SHORT G_M45721_IG05
- mov ecx, edi
- ; gcrRegs +[ecx]
- call [System.Text.Json.Utf8JsonWriter:WriteNullValue():this]
- ; gcrRegs -[ecx edx esi edi]
- ; byrRegs -[eax ebx]
- mov eax, 1
- ;; size=18 bbWeight=0.50 PerfScore 3.75
-G_M45721_IG04: ; bbWeight=0.50, epilog, nogc, extend
- lea esp, [ebp-0x0C]
- pop ebx
- pop esi
- pop edi
- pop ebp
- ret 12
- ;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M45721_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000009 {eax ebx}, gcvars, byref, isz
- ; gcrRegs +[edx esi edi]
- ; byrRegs +[eax ebx]
+ cmp ecx, dword ptr [eax+0x50]
+ jge G_M45721_IG10
cmp byte ptr [esi+0x08], 2
- jne SHORT G_M45721_IG09
+ jne SHORT G_M45721_IG07
+ ;; size=24 bbWeight=1 PerfScore 10.25
+G_M45721_IG03: ; bbWeight=0.50, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=0000000C {edx ebx}, byref, isz
mov dword ptr [ebp-0x14], ecx
cmp byte ptr [ebx+0x54], 0
- je SHORT G_M45721_IG06
+ je SHORT G_M45721_IG04
cmp byte ptr [esi+0x11], 0
- je SHORT G_M45721_IG06
- vmovups xmm0, xmmword ptr [eax]
+ je SHORT G_M45721_IG04
+ vmovups xmm0, xmmword ptr [edx]
add ebx, 84
sub esp, 16
vmovups xmmword ptr [esp], xmm0
@@ -95,38 +70,42 @@ G_M45721_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C4 {e
mov ecx, esi
; gcrRegs +[ecx]
mov edx, edi
+ ; gcrRegs +[edx]
+ ; byrRegs -[edx]
mov eax, dword ptr [esi]
- ; byrRegs -[eax]
+ ; gcrRegs -[eax]
mov eax, dword ptr [eax+0x40]
call [eax]<unknown method>
; gcrRegs -[ecx edx]
; byrRegs -[ebx]
- jmp SHORT G_M45721_IG07
- ;; size=52 bbWeight=0.50 PerfScore 15.50
-G_M45721_IG06: ; bbWeight=0.50, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000001 {eax}, byref
- ; gcrRegs +[edx]
- ; byrRegs +[eax]
- vmovups xmm0, xmmword ptr [eax]
+ jmp SHORT G_M45721_IG05
+ ;; size=46 bbWeight=0.50 PerfScore 13.50
+G_M45721_IG04: ; bbWeight=0.50, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=00000004 {edx}, byref
+ ; gcrRegs +[eax]
+ ; byrRegs +[edx]
+ vmovups xmm0, xmmword ptr [edx]
sub esp, 16
vmovups xmmword ptr [esp], xmm0
- push edx
+ push eax
mov ecx, esi
; gcrRegs +[ecx]
mov edx, edi
+ ; gcrRegs +[edx]
+ ; byrRegs -[edx]
mov eax, dword ptr [esi]
- ; byrRegs -[eax]
+ ; gcrRegs -[eax]
mov eax, dword ptr [eax+0x3C]
call [eax+0x08]<unknown method>
; gcrRegs -[ecx edx]
;; size=25 bbWeight=0.50 PerfScore 7.38
-G_M45721_IG07: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+G_M45721_IG05: ; bbWeight=0.50, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
mov eax, dword ptr [edi+0x18]
and eax, 0xD1FFAB1E
cmp dword ptr [ebp-0x14], eax
- jne G_M45721_IG13
+ jne G_M45721_IG11
mov eax, 1
;; size=22 bbWeight=0.50 PerfScore 2.75
-G_M45721_IG08: ; bbWeight=0.50, epilog, nogc, extend
+G_M45721_IG06: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -134,17 +113,17 @@ G_M45721_IG08: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret 12
;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M45721_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C4 {edx esi edi}, byrefRegs=00000009 {eax ebx}, gcvars, byref, isz
- ; gcrRegs +[edx]
- ; byrRegs +[eax ebx]
- mov bword ptr [ebp+0x10], eax
- mov gword ptr [ebp+0x0C], edx
+G_M45721_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C1 {eax esi edi}, byrefRegs=0000000C {edx ebx}, gcvars, byref, isz
+ ; gcrRegs +[eax]
+ ; byrRegs +[edx ebx]
+ mov gword ptr [ebp+0x0C], eax
+ mov bword ptr [ebp+0x10], edx
cmp byte ptr [ebx], bl
mov ecx, ebx
; byrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[edx]
- ; byrRegs -[eax ecx]
+ ; gcrRegs -[eax]
+ ; byrRegs -[ecx edx]
mov ecx, bword ptr [ebp+0x10]
; byrRegs +[ecx]
vmovups xmm0, xmmword ptr [ecx]
@@ -169,9 +148,9 @@ G_M45721_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C4 {e
; byrRegs -[ecx]
mov esi, dword ptr [ebp-0x10]
test esi, esi
- je SHORT G_M45721_IG10
+ je SHORT G_M45721_IG08
cmp byte ptr [ebx+0x53], 0
- je SHORT G_M45721_IG10
+ je SHORT G_M45721_IG08
mov ecx, gword ptr [ebx+0x0C]
; gcrRegs +[ecx]
mov eax, dword ptr [ecx]
@@ -180,11 +159,11 @@ G_M45721_IG09: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=000000C4 {e
; gcrRegs -[ecx]
mov byte ptr [ebx+0x53], 0
;; size=88 bbWeight=0.50 PerfScore 22.88
-G_M45721_IG10: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M45721_IG08: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
; byrRegs -[ebx]
mov eax, esi
;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M45721_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M45721_IG09: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -192,14 +171,14 @@ G_M45721_IG11: ; bbWeight=0.50, epilog, nogc, extend
pop ebp
ret 12
;; size=10 bbWeight=0.50 PerfScore 2.25
-G_M45721_IG12: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, gcvars, byref
- ; gcrRegs +[edx]
- mov ecx, dword ptr [edx+0x50]
+G_M45721_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref
+ ; gcrRegs +[eax]
+ mov ecx, dword ptr [eax+0x50]
call [System.Text.Json.ThrowHelper:ThrowJsonException_SerializerCycleDetected(int)]
- ; gcrRegs -[edx]
+ ; gcrRegs -[eax]
int3
;; size=10 bbWeight=0 PerfScore 0.00
-G_M45721_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M45721_IG11: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs +[esi]
mov ecx, esi
; gcrRegs +[ecx]
@@ -208,6 +187,6 @@ G_M45721_IG13: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000
int3
;; size=9 bbWeight=0 PerfScore 0.00
-; Total bytes of code 305, prolog size 12, PerfScore 78.38, instruction count 110, allocated bytes for code 305 (MethodHash=14814d66) for method System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier1)
+; Total bytes of code 271, prolog size 12, PerfScore 70.38, instruction count 97, allocated bytes for code 271 (MethodHash=14814d66) for method System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier1)
; ============================================================
-17 (-6.27%) : 1246.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object
@@ -10,21 +10,19 @@
;
; V00 arg0 [V00,T00] ( 9, 6 ) ref -> esi class-hnd single-def <System.RuntimeType>
; V01 arg1 [V01,T01] ( 8, 5 ) int -> edi single-def
-;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref
-; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> ebx
+;* V02 loc0 [V02,T10] ( 0, 0 ) ubyte -> zero-ref
+; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> ebx
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]>
-; V05 tmp0 [V05,T05] ( 3, 2.25) ref -> eax single-def "CASTCLASS eval op1"
-; V06 tmp1 [V06,T12] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable"
-; V07 tmp2 [V07,T03] ( 5, 3.75) ref -> registers class-hnd "spilling QMark2" <System.Object[]>
-; V08 tmp3 [V08,T07] ( 3, 1.50) ref -> eax
-; V09 tmp4 [V09,T08] ( 3, 1.50) ref -> edi class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache>
-; V10 tmp5 [V10,T04] ( 4, 2 ) ref -> edi class-hnd single-def "Inline stloc first use temp" <System.Object>
-;* V11 tmp6 [V11,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache>
-;* V12 tmp7 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache>
-;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp10 [V15,T02] ( 6, 7 ) ref -> eax "Single return block return value"
-; V16 cse0 [V16,T09] ( 3, 1.50) int -> ecx "CSE - moderate"
+; V05 tmp0 [V05,T06] ( 3, 1.50) ref -> eax
+; V06 tmp1 [V06,T07] ( 3, 1.50) ref -> edi class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache>
+; V07 tmp2 [V07,T03] ( 4, 2 ) ref -> edi class-hnd single-def "Inline stloc first use temp" <System.Object>
+;* V08 tmp3 [V08,T09] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache>
+;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache>
+;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+; V12 tmp7 [V12,T02] ( 6, 7 ) ref -> eax "Single return block return value"
+; V13 tmp8 [V13,T05] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V14 cse0 [V14,T08] ( 3, 1.50) int -> ecx "CSE - moderate"
;
; Lcl frame size = 0
@@ -76,7 +74,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000
je SHORT G_M32569_IG06
mov edx, edi
mov ecx, 0xD1FFAB1E ; <unknown class>
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
jmp SHORT G_M32569_IG07
;; size=18 bbWeight=0.50 PerfScore 2.38
@@ -84,12 +82,14 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000
; gcrRegs -[eax]
mov ecx, 0xD1FFAB1E
mov edx, 25
- call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS
+ ; byrRegs +[eax]
mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
+ ; byrRegs -[eax]
;; size=20 bbWeight=0.50 PerfScore 1.75
G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
- jmp G_M32569_IG18
+ jmp G_M32569_IG15
;; size=5 bbWeight=0.50 PerfScore 1.00
G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] +[esi]
@@ -99,23 +99,25 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
je SHORT G_M32569_IG09
mov edx, edi
mov ecx, 0xD1FFAB1E ; System.Object[]
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[esi] +[eax]
- jmp G_M32569_IG18
- ;; size=25 bbWeight=0.50 PerfScore 3.00
+ jmp SHORT G_M32569_IG15
+ ;; size=22 bbWeight=0.50 PerfScore 3.00
G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov ecx, 0xD1FFAB1E
mov edx, 26
- call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS
+ ; byrRegs +[eax]
mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
- jmp SHORT G_M32569_IG18
+ ; byrRegs -[eax]
+ jmp SHORT G_M32569_IG15
;; size=22 bbWeight=0.50 PerfScore 2.75
G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] +[esi]
test edi, edi
- je SHORT G_M32569_IG14
+ je SHORT G_M32569_IG11
mov ecx, esi
; gcrRegs +[ecx]
mov edx, edi
@@ -123,42 +125,24 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
; gcrRegs -[ecx esi] +[eax]
mov edx, eax
; gcrRegs +[edx]
- test edx, edx
- je SHORT G_M32569_IG13
- ;; size=20 bbWeight=0.50 PerfScore 3.12
-G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Object[]
- cmp dword ptr [edx], ecx
- je SHORT G_M32569_IG13
- ;; size=9 bbWeight=0.25 PerfScore 1.06
-G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx]
- mov edx, eax
- ; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
- ; gcrRegs -[edx]
- mov edx, eax
- ; gcrRegs +[edx]
- ;; size=9 bbWeight=0.12 PerfScore 0.19
-G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax]
- mov eax, edx
- ; gcrRegs +[eax]
- jmp SHORT G_M32569_IG18
- ;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax edx] +[esi]
+ jmp SHORT G_M32569_IG15
+ ;; size=28 bbWeight=0.50 PerfScore 4.12
+G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[eax] +[esi]
mov ecx, dword ptr [esi+0x08]
test ecx, ecx
- je SHORT G_M32569_IG16
+ je SHORT G_M32569_IG13
call <unknown method>
; gcrRegs +[eax]
mov edi, eax
; gcrRegs +[edi]
test edi, edi
- je SHORT G_M32569_IG16
+ je SHORT G_M32569_IG13
cmp dword ptr [edi], 0xD1FFAB1E
- je SHORT G_M32569_IG15
+ je SHORT G_M32569_IG12
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
mov edx, 0xD1FFAB1E
@@ -166,10 +150,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
call [<unknown method>]
; gcrRegs -[eax ecx edx esi]
;; size=42 bbWeight=0.50 PerfScore 6.62
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M32569_IG14
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[edi] +[esi]
mov ecx, esi
; gcrRegs +[ecx]
@@ -178,7 +162,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
mov edi, eax
; gcrRegs +[edi]
;; size=10 bbWeight=0.50 PerfScore 1.75
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax]
mov ecx, edi
; gcrRegs +[ecx]
@@ -186,7 +170,7 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000
call [System.RuntimeType+RuntimeTypeCache:GetEmptyArray():System.Object[]:this]
; gcrRegs -[ecx edi] +[eax]
;; size=10 bbWeight=0.50 PerfScore 3.12
-G_M32569_IG18: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M32569_IG15: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ebx
pop esi
pop edi
@@ -194,6 +178,6 @@ G_M32569_IG18: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000
ret
;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 271, prolog size 6, PerfScore 47.62, instruction count 90, allocated bytes for code 271 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
+; Total bytes of code 254, prolog size 6, PerfScore 46.25, instruction count 83, allocated bytes for code 254 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
; ============================================================
+47 (+20.80%) : 10755.dasm - System.Array:SortSystem.__Canon (Tier1)
@@ -8,27 +8,30 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 5, 4.50) ref -> ecx class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T01] ( 5, 4.50) int -> edx single-def
-; V02 arg2 [V02,T02] ( 4, 3.50) int -> esi single-def
-; V03 arg3 [V03,T14] ( 1, 0.50) ref -> [ebp+0x0C] class-hnd single-def <System.Collections.Generic.IComparer`1[System.__Canon]>
-; V04 TypeCtx [V04,T05] ( 5, 2.36) int -> edi single-def
+; V00 arg0 [V00,T00] ( 5, 4.50) ref -> esi class-hnd single-def <System.__Canon[]>
+; V01 arg1 [V01,T01] ( 5, 4.50) int -> edi single-def
+; V02 arg2 [V02,T02] ( 4, 3.50) int -> ebx single-def
+; V03 arg3 [V03,T17] ( 1, 0.50) ref -> [ebp+0x0C] class-hnd single-def <System.Collections.Generic.IComparer`1[System.__Canon]>
+; V04 TypeCtx [V04,T03] ( 7, 3.04) int -> [ebp+0x08] single-def
;* V05 loc0 [V05 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[System.__Canon]>
;* V06 loc1 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp2 [V08,T08] ( 3, 2 ) int -> [ebp-0x14] "spilling helperCall"
+; V08 tmp2 [V08,T10] ( 3, 2 ) int -> [ebp-0x14] "spilling helperCall"
;* V09 tmp3 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp4 [V10,T09] ( 3, 2 ) int -> edi "VirtualCall with runtime lookup"
-; V11 tmp5 [V11,T10] ( 2, 2 ) byref -> ebx single-def "Inlining Arg"
+; V10 tmp4 [V10,T11] ( 3, 2 ) int -> edi "VirtualCall with runtime lookup"
+; V11 tmp5 [V11,T12] ( 2, 2 ) byref -> esi single-def "Inlining Arg"
;* V12 tmp6 [V12 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V13 tmp7 [V13 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x4)" P-INDEP
-; V14 tmp8 [V14,T12] ( 2, 1 ) byref -> ebx single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-; V15 tmp9 [V15,T13] ( 2, 1 ) int -> esi "field V06._length (fldOffset=0x4)" P-INDEP
-; V16 tmp10 [V16,T11] ( 2, 2 ) ref -> ecx single-def "argument with side effect"
-; V17 rat0 [V17,T03] ( 3, 2.80) int -> ecx "spilling expr"
-; V18 rat1 [V18,T06] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
-; V19 rat2 [V19,T04] ( 3, 2.80) int -> ecx "spilling expr"
-; V20 rat3 [V20,T07] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
+; V14 tmp8 [V14,T14] ( 2, 1 ) byref -> esi single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+; V15 tmp9 [V15,T15] ( 2, 1 ) int -> ebx "field V06._length (fldOffset=0x4)" P-INDEP
+; V16 tmp10 [V16,T13] ( 2, 2 ) ref -> ecx single-def "argument with side effect"
+;* V17 rat0 [V17,T16] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V18 rat1 [V18,T04] ( 3, 2.80) int -> ecx "spilling expr"
+; V19 rat2 [V19,T07] ( 2, 1.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V20 rat3 [V20,T05] ( 3, 2.80) int -> ecx "spilling expr"
+; V21 rat4 [V21,T08] ( 3, 2.24) int -> eax "fgMakeTemp is creating a new local variable"
+; V22 rat5 [V22,T06] ( 3, 2.80) int -> ecx "spilling expr"
+; V23 rat6 [V23,T09] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 8
@@ -41,84 +44,111 @@ G_M58455_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
sub esp, 8
mov eax, dword ptr [ebp+0x08]
mov dword ptr [ebp-0x10], eax
- mov esi, dword ptr [ebp+0x10]
- mov edi, dword ptr [ebp+0x08]
- ;; size=21 bbWeight=1 PerfScore 9.50
-G_M58455_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs +[ecx]
- test ecx, ecx
- je G_M58455_IG15
- test edx, edx
- jl G_M58455_IG16
+ mov esi, ecx
+ ; gcrRegs +[esi]
+ mov edi, edx
+ mov ebx, dword ptr [ebp+0x10]
+ mov eax, dword ptr [ebp+0x08]
+ ;; size=25 bbWeight=1 PerfScore 10.00
+G_M58455_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
test esi, esi
- jl G_M58455_IG17
- mov eax, dword ptr [ecx+0x04]
- sub eax, edx
- cmp eax, esi
- jl G_M58455_IG18
- cmp esi, 1
- jle SHORT G_M58455_IG14
- ;; size=42 bbWeight=1 PerfScore 8.50
-G_M58455_IG03: ; bbWeight=0.50, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
- lea ebx, bword ptr [ecx+4*edx+0x08]
- ; byrRegs +[ebx]
+ je G_M58455_IG19
+ test edi, edi
+ jl G_M58455_IG20
+ test ebx, ebx
+ jl G_M58455_IG21
+ mov ecx, dword ptr [esi+0x04]
+ sub ecx, edi
+ cmp ecx, ebx
+ jl G_M58455_IG22
+ cmp ebx, 1
+ jle G_M58455_IG18
+ ;; size=46 bbWeight=1 PerfScore 8.50
+G_M58455_IG03: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [eax+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M58455_IG05
+ ;; size=9 bbWeight=0.50 PerfScore 3.00
+G_M58455_IG04: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M58455_IG09
+ ;; size=7 bbWeight=0.40 PerfScore 1.30
+G_M58455_IG05: ; bbWeight=0.18, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+ mov dword ptr [ebp+0x08], eax
+ mov ecx, eax
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=15 bbWeight=0.18 PerfScore 0.45
+G_M58455_IG06: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ lea esi, bword ptr [esi+4*edi+0x08]
+ ; gcrRegs -[esi]
+ ; byrRegs +[esi]
mov ecx, 1
- ; gcrRegs -[ecx]
call [<unknown method>]
+ mov edi, dword ptr [ebp+0x08]
mov ecx, dword ptr [edi+0x20]
cmp dword ptr [ecx+0x04], 16
- jle SHORT G_M58455_IG06
- ;; size=24 bbWeight=0.50 PerfScore 5.12
-G_M58455_IG04: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
+ jle SHORT G_M58455_IG10
+ ;; size=27 bbWeight=0.50 PerfScore 5.62
+G_M58455_IG07: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
mov eax, dword ptr [ecx+0x10]
test eax, eax
- je SHORT G_M58455_IG06
- ;; size=7 bbWeight=0.40 PerfScore 1.30
-G_M58455_IG05: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- jmp SHORT G_M58455_IG07
- ;; size=2 bbWeight=0.32 PerfScore 0.64
-G_M58455_IG06: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
- mov ecx, edi
- mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov dword ptr [ebp-0x14], eax
- ;; size=15 bbWeight=0.18 PerfScore 0.45
-G_M58455_IG07: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov ecx, dword ptr [edi+0x20]
- cmp dword ptr [ecx+0x04], 20
- jle SHORT G_M58455_IG11
- ;; size=9 bbWeight=0.50 PerfScore 3.00
-G_M58455_IG08: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov edx, dword ptr [ecx+0x14]
- test edx, edx
je SHORT G_M58455_IG10
;; size=7 bbWeight=0.40 PerfScore 1.30
-G_M58455_IG09: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov edi, edx
- jmp SHORT G_M58455_IG13
- ;; size=4 bbWeight=0.32 PerfScore 0.72
-G_M58455_IG10: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref, isz
- mov dword ptr [ebp-0x14], eax
- jmp SHORT G_M58455_IG12
+G_M58455_IG08: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ jmp SHORT G_M58455_IG11
+ ;; size=2 bbWeight=0.32 PerfScore 0.64
+G_M58455_IG09: ; bbWeight=0.20, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[esi]
+ ; byrRegs -[esi]
+ mov dword ptr [ebp+0x08], eax
+ jmp SHORT G_M58455_IG06
;; size=5 bbWeight=0.20 PerfScore 0.60
-G_M58455_IG11: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
- mov dword ptr [ebp-0x14], eax
- ;; size=3 bbWeight=0.25 PerfScore 0.25
-G_M58455_IG12: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
+G_M58455_IG10: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ ; gcrRegs -[esi]
+ ; byrRegs +[esi]
mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
+ mov dword ptr [ebp-0x14], eax
+ ;; size=15 bbWeight=0.18 PerfScore 0.45
+G_M58455_IG11: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 20
+ jle SHORT G_M58455_IG15
+ ;; size=9 bbWeight=0.50 PerfScore 3.00
+G_M58455_IG12: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov edx, dword ptr [ecx+0x14]
+ test edx, edx
+ je SHORT G_M58455_IG14
+ ;; size=7 bbWeight=0.40 PerfScore 1.30
+G_M58455_IG13: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov edi, edx
+ jmp SHORT G_M58455_IG17
+ ;; size=4 bbWeight=0.32 PerfScore 0.72
+G_M58455_IG14: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov dword ptr [ebp-0x14], eax
+ jmp SHORT G_M58455_IG16
+ ;; size=5 bbWeight=0.20 PerfScore 0.60
+G_M58455_IG15: ; bbWeight=0.25, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ mov dword ptr [ebp-0x14], eax
+ ;; size=3 bbWeight=0.25 PerfScore 0.25
+G_M58455_IG16: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov edi, eax
mov eax, dword ptr [ebp-0x14]
;; size=17 bbWeight=0.18 PerfScore 0.49
-G_M58455_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000008 {ebx}, byref
+G_M58455_IG17: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov ecx, eax
call [System.Collections.Generic.ArraySortHelper`1[System.__Canon]:get_Default():System.Collections.Generic.IArraySortHelper`1[System.__Canon]]
; gcrRegs +[eax]
mov ecx, eax
; gcrRegs +[ecx]
- push esi
push ebx
+ push esi
mov edx, gword ptr [ebp+0x0C]
; gcrRegs +[edx]
mov eax, edi
@@ -126,9 +156,9 @@ G_M58455_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000008
nop
call [eax]
; gcrRegs -[ecx edx]
- ; byrRegs -[ebx]
+ ; byrRegs -[esi]
;; size=22 bbWeight=0.50 PerfScore 5.00
-G_M58455_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M58455_IG18: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -136,25 +166,25 @@ G_M58455_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
pop ebp
ret 12
;; size=10 bbWeight=1 PerfScore 4.50
-G_M58455_IG15: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M58455_IG19: ; 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_M58455_IG16: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58455_IG20: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowIndexArgumentOutOfRange_NeedNonNegNumException()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-G_M58455_IG17: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58455_IG21: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
call [System.ThrowHelper:ThrowLengthArgumentOutOfRange_ArgumentOutOfRange_NeedNonNegNum()]
int3
;; size=7 bbWeight=0 PerfScore 0.00
-G_M58455_IG18: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M58455_IG22: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 16
...
+31 (+28.97%) : 9447.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -10,15 +10,18 @@
;
; V00 arg0 [V00,T00] ( 4, 3 ) int -> esi single-def
; V01 arg1 [V01,T01] ( 3, 3 ) ubyte -> edx single-def
-; V02 TypeCtx [V02,T04] ( 5, 2.20) int -> ecx single-def
-; V03 loc0 [V03,T08] ( 2, 1 ) int -> edi
-; V04 loc1 [V04,T05] ( 3, 2 ) int -> edx "spilling helperCall"
+; V02 TypeCtx [V02,T02] ( 7, 2.88) int -> edi single-def
+; V03 loc0 [V03,T10] ( 2, 1 ) int -> ebx
+; V04 loc1 [V04,T07] ( 3, 2 ) int -> ecx "spilling helperCall"
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T07] ( 2, 2 ) int -> ecx "argument with side effect"
-; V08 rat0 [V08,T06] ( 3, 2 ) int -> ecx "runtime lookup"
-; V09 rat1 [V09,T02] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V10 rat2 [V10,T03] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T09] ( 2, 2 ) int -> ecx "argument with side effect"
+;* V08 rat0 [V08,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T03] ( 3, 2.80) int -> ecx "spilling expr"
+; V10 rat2 [V10,T06] ( 2, 1.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T08] ( 3, 2 ) int -> ecx "runtime lookup"
+; V12 rat4 [V12,T04] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
+; V13 rat5 [V13,T05] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -27,74 +30,92 @@ G_M46119_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
mov eax, dword ptr [ebp+0x08]
- mov dword ptr [ebp-0x0C], eax
+ mov dword ptr [ebp-0x10], eax
mov esi, ecx
- mov ecx, dword ptr [ebp+0x08]
- ;; size=17 bbWeight=1 PerfScore 8.50
+ mov edi, dword ptr [ebp+0x08]
+ ;; size=18 bbWeight=1 PerfScore 9.50
G_M46119_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
test dl, dl
- jne SHORT G_M46119_IG08
+ jne SHORT G_M46119_IG11
;; size=4 bbWeight=1 PerfScore 1.25
G_M46119_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov edx, dword ptr [ecx+0x20]
- mov eax, dword ptr [edx+0x08]
- test eax, eax
- je SHORT G_M46119_IG05
- ;; size=10 bbWeight=0.50 PerfScore 2.62
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG05
+ ;; size=9 bbWeight=0.50 PerfScore 3.00
G_M46119_IG04: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov ecx, eax
- jmp SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.40 PerfScore 0.90
-G_M46119_IG05: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M46119_IG06
+ ;; size=7 bbWeight=0.40 PerfScore 1.30
+G_M46119_IG05: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.18 PerfScore 0.27
+G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG08
+ ;; size=10 bbWeight=0.50 PerfScore 2.62
+G_M46119_IG07: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.40 PerfScore 0.80
+G_M46119_IG08: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
- ;; size=12 bbWeight=0.10 PerfScore 0.15
-G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M46119_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, esi
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
;; size=7 bbWeight=0.50 PerfScore 0.62
-G_M46119_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M46119_IG10: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0.50 PerfScore 2.00
-G_M46119_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=8 bbWeight=0.50 PerfScore 2.25
+G_M46119_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edi, 80
- mov edx, dword ptr [ecx+0x20]
- mov edx, dword ptr [edx+0x08]
- test edx, edx
- je SHORT G_M46119_IG10
+ mov ebx, 80
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG13
;; size=15 bbWeight=0.50 PerfScore 2.75
-G_M46119_IG09: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M46119_IG11
+G_M46119_IG12: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG14
;; size=2 bbWeight=0.40 PerfScore 0.80
-G_M46119_IG10: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG13: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- ;; size=12 bbWeight=0.10 PerfScore 0.15
-G_M46119_IG11: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- push edi
- mov ecx, edx
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M46119_IG14: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ push ebx
mov edx, esi
call <unknown method>
; gcrRegs +[eax]
- ;; size=10 bbWeight=0.50 PerfScore 1.25
-G_M46119_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=8 bbWeight=0.50 PerfScore 1.12
+G_M46119_IG15: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0.50 PerfScore 2.00
+ ;; size=8 bbWeight=0.50 PerfScore 2.25
-; Total bytes of code 107, prolog size 12, PerfScore 23.00, instruction count 45, allocated bytes for code 107 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
+; Total bytes of code 138, prolog size 13, PerfScore 28.89, instruction count 57, allocated bytes for code 138 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
; ============================================================
+37 (+34.26%) : 3328.dasm - System.Array:SortSystem.__Canon (Tier1)
@@ -8,27 +8,30 @@
; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 5, 5 ) ref -> ecx class-hnd single-def <System.__Canon[]>
-; V01 arg1 [V01,T01] ( 4, 4 ) ref -> esi class-hnd single-def <System.Comparison`1[System.__Canon]>
-; V02 TypeCtx [V02,T08] ( 3, 2.36) int -> edx single-def
+; V00 arg0 [V00,T00] ( 5, 5 ) ref -> esi class-hnd single-def <System.__Canon[]>
+; V01 arg1 [V01,T01] ( 4, 4 ) ref -> edi class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V02 TypeCtx [V02,T10] ( 5, 3.72) int -> ebx single-def
;* V03 loc0 [V03 ] ( 0, 0 ) struct ( 8) zero-ref <System.Span`1[System.__Canon]>
;* V04 loc1 [V04 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T06] ( 2, 4 ) int -> ebx "Inlining Arg"
-; V08 tmp4 [V08,T05] ( 2, 4 ) byref -> edi single-def "Inlining Arg"
+; V07 tmp3 [V07,T08] ( 2, 4 ) int -> esi "Inlining Arg"
+; V08 tmp4 [V08,T07] ( 2, 4 ) byref -> eax single-def "Inlining Arg"
;* V09 tmp5 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V10 tmp6 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V11 tmp7 [V11 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x4)" P-INDEP
-; V13 tmp9 [V13,T09] ( 2, 2 ) byref -> edi single-def "field V04._reference (fldOffset=0x0)" P-INDEP
-; V14 tmp10 [V14,T10] ( 2, 2 ) int -> ebx "field V04._length (fldOffset=0x4)" P-INDEP
-; V15 tmp11 [V15,T07] ( 2, 4 ) int -> edx "argument with side effect"
-; V16 rat0 [V16,T04] ( 3, 4 ) int -> edx "runtime lookup"
+; V13 tmp9 [V13,T11] ( 2, 2 ) byref -> [ebp-0x14] spill-single-def "field V04._reference (fldOffset=0x0)" P-INDEP
+; V14 tmp10 [V14,T12] ( 2, 2 ) int -> esi "field V04._length (fldOffset=0x4)" P-INDEP
+; V15 tmp11 [V15,T09] ( 2, 4 ) int -> edx "argument with side effect"
+;* V16 rat0 [V16,T13] ( 0, 0 ) int -> zero-ref "runtime lookup"
; V17 rat1 [V17,T02] ( 3, 5.60) int -> ecx "spilling expr"
-; V18 rat2 [V18,T03] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V18 rat2 [V18,T04] ( 2, 3.20) int -> ecx "fgMakeTemp is creating a new local variable"
+; V19 rat3 [V19,T06] ( 3, 4 ) int -> edx "runtime lookup"
+; V20 rat4 [V20,T03] ( 3, 5.60) int -> ecx "spilling expr"
+; V21 rat5 [V21,T05] ( 3, 4.48) int -> edx "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 4
+; Lcl frame size = 8
G_M37190_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -36,70 +39,88 @@ G_M37190_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- push eax
+ sub esp, 8
mov eax, dword ptr [ebp+0x08]
mov dword ptr [ebp-0x10], eax
- mov esi, edx
+ mov esi, ecx
; gcrRegs +[esi]
- mov edx, dword ptr [ebp+0x08]
- ;; size=18 bbWeight=1 PerfScore 9.50
-G_M37190_IG02: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs +[ecx]
- test ecx, ecx
- je SHORT G_M37190_IG08
+ mov edi, edx
+ ; gcrRegs +[edi]
+ mov ebx, dword ptr [ebp+0x08]
+ ;; size=22 bbWeight=1 PerfScore 9.00
+G_M37190_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je SHORT G_M37190_IG09
- lea edi, bword ptr [ecx+0x08]
- ; byrRegs +[edi]
- mov ebx, dword ptr [ecx+0x04]
- mov ecx, dword ptr [edx+0x20]
- ; gcrRegs -[ecx]
- cmp dword ptr [ecx+0x04], 16
- jle SHORT G_M37190_IG05
- ;; size=23 bbWeight=1 PerfScore 11.00
-G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz
- mov eax, dword ptr [ecx+0x10]
- test eax, eax
- je SHORT G_M37190_IG05
+ je SHORT G_M37190_IG11
+ test edi, edi
+ je SHORT G_M37190_IG12
+ mov ecx, dword ptr [ebx+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M37190_IG04
+ ;; size=17 bbWeight=1 PerfScore 8.50
+G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M37190_IG05
;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref, isz
- mov edx, eax
- jmp SHORT G_M37190_IG06
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
- mov ecx, edx
+G_M37190_IG04: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.36 PerfScore 0.54
+G_M37190_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ lea eax, bword ptr [esi+0x08]
+ ; byrRegs +[eax]
+ mov esi, dword ptr [esi+0x04]
+ ; gcrRegs -[esi]
+ mov bword ptr [ebp-0x14], eax
+ ; GC ptr vars +{V13}
+ mov ecx, dword ptr [ebx+0x20]
+ cmp dword ptr [ecx+0x04], 16
+ jle SHORT G_M37190_IG08
+ ;; size=18 bbWeight=1 PerfScore 9.50
+G_M37190_IG06: ; bbWeight=0.80, gcVars=00000800 {V13}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; byrRegs -[eax]
+ mov edx, dword ptr [ecx+0x10]
+ test edx, edx
+ je SHORT G_M37190_IG08
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M37190_IG07: ; bbWeight=0.64, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M37190_IG09
+ ;; size=2 bbWeight=0.64 PerfScore 1.28
+G_M37190_IG08: ; bbWeight=0.36, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.36 PerfScore 0.63
-G_M37190_IG06: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000080 {edi}, byref
- push ebx
- push edi
- mov ecx, esi
+G_M37190_IG09: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ push esi
+ push bword ptr [ebp-0x14]
+ mov ecx, edi
; gcrRegs +[ecx]
+ ; GC ptr vars -{V13}
call [<unknown method>]
- ; gcrRegs -[ecx esi]
- ; byrRegs -[edi]
- ;; size=10 bbWeight=1 PerfScore 5.25
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend
- pop ecx
+ ; gcrRegs -[ecx edi]
+ ;; size=12 bbWeight=1 PerfScore 5.25
+G_M37190_IG10: ; bbWeight=1, epilog, nogc, extend
+ lea esp, [ebp-0x0C]
pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=8 bbWeight=1 PerfScore 4.50
-G_M37190_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+ ;; size=10 bbWeight=1 PerfScore 4.50
+G_M37190_IG11: ; 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_M37190_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M37190_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, 29
call [System.ThrowHelper:ThrowArgumentNullException(int)]
int3
;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 108, prolog size 13, PerfScore 34.92, instruction count 44, allocated bytes for code 108 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
+; Total bytes of code 145, prolog size 15, PerfScore 44.40, instruction count 54, allocated bytes for code 145 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
; ============================================================
coreclr_tests.run.windows.x86.checked.mch
-11 (-3.70%) : 480.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)
@@ -7,26 +7,24 @@
; 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]>
-; 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,T11] ( 5, 3.56) int -> ebx 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>
+; V00 arg0 [V00,T07] ( 4, 4 ) ref -> ebx class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V01 arg1 [V01,T03] ( 5, 19 ) ref -> esi class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V02 arg2 [V02,T10] ( 2, 2 ) byref -> [ebp+0x0C] single-def
+; V03 TypeCtx [V03,T06] ( 5, 13.08) int -> edi single-def
+; V04 loc0 [V04,T04] ( 7, 20 ) ref -> [ebp-0x24] class-hnd EH-live spill-single-def <<unknown class>>
+; V05 loc1 [V05,T05] ( 3, 17 ) ref -> ebx class-hnd <System.__Canon>
+; V06 loc2 [V06,T11] ( 2, 2 ) ref -> [ebp-0x28] 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,T09] ( 3, 4 ) int -> registers "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"
+; V11 tmp3 [V11,T02] ( 3, 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, 9 ) int -> ebx hoist "CSE - aggressive"
-; V14 rat0 [V14,T06] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
-; V15 rat1 [V15,T10] ( 3, 4 ) int -> ebx "runtime lookup"
-; V16 rat2 [V16,T07] ( 3, 5.60) int -> ecx "spilling expr"
-; V17 rat3 [V17,T08] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V13 rat0 [V13,T08] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V14 rat1 [V14,T00] ( 3, 44.80) int -> ecx "spilling expr"
+; V15 rat2 [V15,T01] ( 3, 35.84) int -> eax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 28
G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -34,154 +32,145 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 32
+ sub esp, 28
xor eax, eax
- mov dword ptr [ebp-0x2C], eax
+ mov dword ptr [ebp-0x28], eax
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_IG21
- test esi, esi
+G_M62024_IG02: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
+ test ebx, ebx
je G_M62024_IG22
- mov ecx, dword ptr [ebx+0x20]
+ test esi, esi
+ je G_M62024_IG23
+ mov ecx, dword ptr [edi+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
+G_M62024_IG03: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, 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
+G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.20 PerfScore 0.35
-G_M62024_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, edi
+G_M62024_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ 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 gword ptr [ebp-0x24], eax
; 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
- ; gcrRegs -[eax]
- ; GC ptr vars -{V13}
- mov ecx, edi
+ ;; size=12 bbWeight=1 PerfScore 4.75
+G_M62024_IG06: ; bbWeight=1, gcVars=00000810 {V04 V06}, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars -{V11}
+ mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[eax ecx]
test eax, eax
- je SHORT G_M62024_IG13
- mov ecx, dword ptr [ebx+0x20]
+ je SHORT G_M62024_IG14
+ ;; size=12 bbWeight=1 PerfScore 4.50
+G_M62024_IG07: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M62024_IG09
- ;; size=21 bbWeight=1 PerfScore 10.50
-G_M62024_IG07: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ jle SHORT G_M62024_IG10
+ ;; size=9 bbWeight=8 PerfScore 48.00
+G_M62024_IG08: ; bbWeight=6.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx+0x0C]
test eax, eax
- je SHORT G_M62024_IG09
- ;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M62024_IG08: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov ebx, eax
- jmp SHORT G_M62024_IG10
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M62024_IG09: ; bbWeight=0.36, 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.36 PerfScore 0.63
-G_M62024_IG10: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov eax, ebx
+ je SHORT G_M62024_IG10
+ ;; size=7 bbWeight=6.40 PerfScore 20.80
+G_M62024_IG09: ; bbWeight=5.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M62024_IG11
+ ;; size=2 bbWeight=5.12 PerfScore 10.24
+G_M62024_IG10: ; bbWeight=2.88, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=2.88 PerfScore 4.32
+G_M62024_IG11: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
nop
call [eax]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x28], eax
- ; GC ptr vars +{V05}
- mov edx, eax
+ mov ebx, eax
+ ; gcrRegs +[ebx]
+ mov edx, ebx
; gcrRegs +[edx]
mov ecx, gword ptr [esi+0x04]
; gcrRegs +[ecx]
call [esi+0x0C]<unknown method>
; gcrRegs -[eax ecx edx]
test eax, eax
- jne SHORT G_M62024_IG12
- mov ecx, edi
+ jne SHORT G_M62024_IG13
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
- ; GC ptr vars -{V05}
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[ecx ebx]
test eax, eax
- jne SHORT G_M62024_IG10
- ;; size=36 bbWeight=8 PerfScore 126.00
-G_M62024_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M62024_IG07
+ ;; size=35 bbWeight=8 PerfScore 130.00
+G_M62024_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
- jmp SHORT G_M62024_IG13
+ jmp SHORT G_M62024_IG14
;; size=2 bbWeight=1 PerfScore 2.00
-G_M62024_IG12: ; bbWeight=1, gcVars=0000200C {V04 V05 V06}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V03 V05}
+G_M62024_IG13: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[ebx]
mov esi, bword ptr [ebp+0x0C]
; byrRegs +[esi]
mov byte ptr [esi], 1
- mov esi, gword ptr [ebp-0x28]
- ; gcrRegs +[esi]
- ; byrRegs -[esi]
- mov gword ptr [ebp-0x2C], esi
+ mov gword ptr [ebp-0x28], ebx
mov dword ptr [ebp-0x1C], 0
mov dword ptr [ebp-0x18], 252
- push G_M62024_IG14
- jmp SHORT G_M62024_IG15
- ;; size=33 bbWeight=1 PerfScore 9.00
-G_M62024_IG13: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[esi]
- ; GC ptr vars -{V03 V05 V06}
- mov ecx, edi
+ push G_M62024_IG15
+ jmp SHORT G_M62024_IG16
+ ;; size=30 bbWeight=1 PerfScore 8.00
+G_M62024_IG14: ; bbWeight=1, gcVars=00000010 {V04}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; gcrRegs -[ebx]
+ ; byrRegs -[esi]
+ ; GC ptr vars -{V06}
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
; GC ptr vars -{V04}
call [<unknown method>]
- ; gcrRegs -[ecx edi]
- jmp SHORT G_M62024_IG17
- ;; size=10 bbWeight=1 PerfScore 5.25
-G_M62024_IG14: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V06 V13}
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M62024_IG18
+ ;; size=11 bbWeight=1 PerfScore 6.00
+G_M62024_IG15: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
mov dword ptr [ebp-0x18], 0
- jmp SHORT G_M62024_IG19
+ jmp SHORT G_M62024_IG20
;; size=9 bbWeight=1 PerfScore 3.00
-G_M62024_IG15: ; 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_IG16
- mov ecx, edi
...
libraries.pmi.windows.x86.checked.mch
-32 (-57.14%) : 4131.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector1[long]):System.Numerics.Vector
1double
@@ -5,41 +5,27 @@
; esp based frame
; partially interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 RetBuf [V00,T00] ( 3, 3 ) byref -> ecx single-def
-; V01 arg0 [V01,T01] ( 2, 2 ) simd32 -> mm0 single-def <System.Numerics.Vector`1[long]>
-;* V02 loc0 [V02 ] ( 0, 0 ) simd32 -> zero-ref "spilled call-like call argument"
-;* V03 tmp1 [V03 ] ( 0, 0 ) simd32 -> zero-ref "Inline return value spill temp" <System.Runtime.Intrinsics.Vector256`1[double]>
-;* V04 tmp2 [V04 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[int]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[long]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[double]>
+; V01 arg0 [V01,T01] ( 1, 1 ) simd32 -> [esp+0x04] single-def <System.Numerics.Vector`1[long]>
;
; Lcl frame size = 0
G_M18713_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
vzeroupper
- vmovups ymm0, ymmword ptr [esp+0x04]
- ;; size=9 bbWeight=1 PerfScore 5.00
+ ;; size=3 bbWeight=1 PerfScore 1.00
G_M18713_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
; byrRegs +[ecx]
- vpblendd ymm1, ymm0, ymmword ptr [@RWD00], -86
- vpsrlq ymm0, ymm0, 32
- vpxor ymm0, ymm0, ymmword ptr [@RWD32]
- vsubpd ymm0, ymm0, qword ptr [@RWD64] {1to4}
- vaddpd ymm0, ymm0, ymm1
+ vcvtqq2pd ymm0, ymmword ptr [esp+0x04]
vmovups ymmword ptr [ecx], ymm0
- ;; size=41 bbWeight=1 PerfScore 17.00
+ ;; size=15 bbWeight=1 PerfScore 7.00
G_M18713_IG03: ; bbWeight=1, epilog, nogc, extend
vzeroupper
ret 32
;; size=6 bbWeight=1 PerfScore 3.00
-RWD00 dq 4330000000000000h, 4330000000000000h, 4330000000000000h, 4330000000000000h
-RWD32 dq 4530000080000000h, 4530000080000000h, 4530000080000000h, 4530000080000000h
-RWD64 dq 4530000080100000h ; 1.93428223e+25
-
-; Total bytes of code 56, prolog size 3, PerfScore 25.00, instruction count 10, allocated bytes for code 56 (MethodHash=94cdb6e6) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[long]):System.Numerics.Vector`1[double] (FullOpts)
+; Total bytes of code 24, prolog size 3, PerfScore 11.00, instruction count 5, allocated bytes for code 24 (MethodHash=94cdb6e6) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[long]):System.Numerics.Vector`1[double] (FullOpts)
; ============================================================
-32 (-57.14%) : 4132.dasm - System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector1[ulong]):System.Numerics.Vector
1double
@@ -5,41 +5,27 @@
; esp based frame
; partially interruptible
; No matching PGO data
-; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 RetBuf [V00,T00] ( 3, 3 ) byref -> ecx single-def
-; V01 arg0 [V01,T01] ( 2, 2 ) simd32 -> mm0 single-def <System.Numerics.Vector`1[ulong]>
-;* V02 loc0 [V02 ] ( 0, 0 ) simd32 -> zero-ref "spilled call-like call argument"
-;* V03 tmp1 [V03 ] ( 0, 0 ) simd32 -> zero-ref "Inline return value spill temp" <System.Runtime.Intrinsics.Vector256`1[double]>
-;* V04 tmp2 [V04 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[uint]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[ulong]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) simd32 -> zero-ref "Inline stloc first use temp" <System.Runtime.Intrinsics.Vector256`1[double]>
+; V01 arg0 [V01,T01] ( 1, 1 ) simd32 -> [esp+0x04] single-def <System.Numerics.Vector`1[ulong]>
;
; Lcl frame size = 0
G_M56524_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
vzeroupper
- vmovups ymm0, ymmword ptr [esp+0x04]
- ;; size=9 bbWeight=1 PerfScore 5.00
+ ;; size=3 bbWeight=1 PerfScore 1.00
G_M56524_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000002 {ecx}, byref
; byrRegs +[ecx]
- vpblendd ymm1, ymm0, ymmword ptr [@RWD00], -86
- vpsrlq ymm0, ymm0, 32
- vpxor ymm0, ymm0, ymmword ptr [@RWD32]
- vsubpd ymm0, ymm0, qword ptr [@RWD64] {1to4}
- vaddpd ymm0, ymm0, ymm1
+ vcvtuqq2pd ymm0, ymmword ptr [esp+0x04]
vmovups ymmword ptr [ecx], ymm0
- ;; size=41 bbWeight=1 PerfScore 17.00
+ ;; size=15 bbWeight=1 PerfScore 7.00
G_M56524_IG03: ; bbWeight=1, epilog, nogc, extend
vzeroupper
ret 32
;; size=6 bbWeight=1 PerfScore 3.00
-RWD00 dq 4330000000000000h, 4330000000000000h, 4330000000000000h, 4330000000000000h
-RWD32 dq 4530000000000000h, 4530000000000000h, 4530000000000000h, 4530000000000000h
-RWD64 dq 4530000000100000h ; 1.93428131e+25
-
-; Total bytes of code 56, prolog size 3, PerfScore 25.00, instruction count 10, allocated bytes for code 56 (MethodHash=23b22333) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[ulong]):System.Numerics.Vector`1[double] (FullOpts)
+; Total bytes of code 24, prolog size 3, PerfScore 11.00, instruction count 5, allocated bytes for code 24 (MethodHash=23b22333) for method System.Numerics.Vector:ConvertToDouble(System.Numerics.Vector`1[ulong]):System.Numerics.Vector`1[double] (FullOpts)
; ============================================================
-44 (-35.20%) : 3932.dasm - System.ValueTuple2[System.__Canon,System.Nullable
1[int]]:GetHashCode():int:this (FullOpts)
@@ -11,34 +11,34 @@
; V00 this [V00,T00] ( 6, 5.50) byref -> esi this single-def
;* V01 TypeCtx [V01 ] ( 0, 0 ) int -> zero-ref single-def
; V02 loc0 [V02 ] ( 4, 2.50) ref -> [ebp-0x0C] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [ebp-0x14] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;* V04 loc2 [V04 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
-; V05 tmp1 [V05,T04] ( 3, 2 ) byref -> ecx
-; V06 tmp2 [V06,T05] ( 3, 2 ) int -> ecx
-; V07 tmp3 [V07,T01] ( 3, 5 ) byref -> esi single-def "impAppendStmt"
+; V05 tmp1 [V05,T03] ( 3, 2 ) byref -> ecx
+; V06 tmp2 [V06,T04] ( 3, 2 ) int -> ecx
+; V07 tmp3 [V07,T01] ( 3, 4.03) byref -> esi single-def "impAppendStmt"
;* V08 tmp4 [V08 ] ( 0, 0 ) int -> zero-ref
-; V09 tmp5 [V09,T03] ( 4, 2.02) byref -> edx
+;* V09 tmp5 [V09 ] ( 0, 0 ) byref -> zero-ref single-def
;* V10 tmp6 [V10 ] ( 0, 0 ) int -> zero-ref
-; V11 tmp7 [V11,T06] ( 3, 2 ) int -> edx
-; V12 tmp8 [V12,T07] ( 3, 1 ) int -> edx "Inline return value spill temp"
+;* V11 tmp7 [V11 ] ( 0, 0 ) int -> zero-ref
+; V12 tmp8 [V12,T05] ( 3, 1.50) int -> edx "Inline return value spill temp"
;* V13 tmp9 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V14 tmp10 [V14 ] ( 5, 3.50) ubyte -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP
-; V15 tmp11 [V15 ] ( 3, 2 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V03.value (fldOffset=0x4)" P-DEP
+;* V14 tmp10 [V14 ] ( 0, 0 ) ubyte -> zero-ref "field V03.hasValue (fldOffset=0x0)" P-INDEP
+;* V15 tmp11 [V15 ] ( 0, 0 ) int -> zero-ref "field V03.value (fldOffset=0x4)" P-INDEP
; V16 tmp12 [V16,T02] ( 3, 3 ) ref -> ecx single-def "argument with side effect"
;
-; Lcl frame size = 12
+; Lcl frame size = 4
G_M34277_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
mov ebp, esp
push esi
push ebx
- sub esp, 12
+ push eax
xor eax, eax
mov dword ptr [ebp-0x0C], eax
mov esi, ecx
; byrRegs +[esi]
- ;; size=15 bbWeight=1 PerfScore 5.00
+ ;; size=13 bbWeight=1 PerfScore 5.75
G_M34277_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
mov ebx, esi
; byrRegs +[ebx]
@@ -75,54 +75,30 @@ G_M34277_IG04: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000042
;; size=12 bbWeight=0.50 PerfScore 4.62
G_M34277_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
add esi, 4
- xor edx, edx
- mov dword ptr [ebp-0x14], edx
- mov dword ptr [ebp-0x10], edx
- mov edx, esi
- ; byrRegs +[edx]
- cmp byte ptr [ebp-0x14], 0
- jne SHORT G_M34277_IG07
- ;; size=19 bbWeight=1 PerfScore 5.75
-G_M34277_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
- ; byrRegs -[edx]
- mov edx, dword ptr [esi]
- mov dword ptr [ebp-0x14], edx
- mov edx, dword ptr [esi+0x04]
- mov dword ptr [ebp-0x10], edx
- lea edx, bword ptr [ebp-0x14]
- ; byrRegs +[edx]
- cmp byte ptr [ebp-0x14], 0
+ cmp byte ptr [esi], 0
jne SHORT G_M34277_IG07
+ ;; size=8 bbWeight=1 PerfScore 4.25
+G_M34277_IG06: ; bbWeight=0.48, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ ; byrRegs -[esi]
xor edx, edx
- ; byrRegs -[edx]
- jmp SHORT G_M34277_IG10
- ;; size=24 bbWeight=0.50 PerfScore 5.88
-G_M34277_IG07: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref, isz
- ; byrRegs -[esi] +[edx]
- cmp byte ptr [edx], 0
- jne SHORT G_M34277_IG09
- ;; size=5 bbWeight=0.50 PerfScore 2.00
-G_M34277_IG08: ; bbWeight=0.48, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- ; byrRegs -[edx]
- xor edx, edx
- jmp SHORT G_M34277_IG10
+ jmp SHORT G_M34277_IG08
;; size=4 bbWeight=0.48 PerfScore 1.09
-G_M34277_IG09: ; bbWeight=0.02, gcrefRegs=00000000 {}, byrefRegs=00000004 {edx}, byref
- ; byrRegs +[edx]
- mov edx, dword ptr [edx+0x04]
- ; byrRegs -[edx]
+G_M34277_IG07: ; bbWeight=0.02, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ ; byrRegs +[esi]
+ mov edx, dword ptr [esi+0x04]
;; size=3 bbWeight=0.02 PerfScore 0.03
-G_M34277_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M34277_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ; byrRegs -[esi]
call [<unknown method>]
;; size=6 bbWeight=1 PerfScore 3.00
-G_M34277_IG11: ; bbWeight=1, epilog, nogc, extend
- lea esp, [ebp-0x08]
+G_M34277_IG09: ; bbWeight=1, epilog, nogc, extend
+ pop ecx
pop ebx
pop esi
pop ebp
ret
- ;; size=7 bbWeight=1 PerfScore 3.00
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 125, prolog size 13, PerfScore 41.25, instruction count 52, allocated bytes for code 125 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
+; Total bytes of code 81, prolog size 11, PerfScore 32.62, instruction count 37, allocated bytes for code 81 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
; ============================================================
+27 (+24.77%) : 26027.dasm - Microsoft.FSharp.Core.OptionModule:ToListSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon
@@ -8,18 +8,17 @@
; Final local variable assignments
;
; V00 arg0 [V00,T01] ( 4, 3.50) ref -> ecx class-hnd single-def <Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]>
-; V01 TypeCtx [V01,T00] ( 7, 4.20) int -> eax single-def
+; V01 TypeCtx [V01,T00] ( 9, 4.80) int -> esi single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]>
-; V03 loc1 [V03,T09] ( 2, 1 ) ref -> esi class-hnd single-def <System.__Canon>
+; V03 loc1 [V03,T09] ( 2, 1 ) ref -> edi class-hnd single-def <System.__Canon>
;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-;* V05 tmp1 [V05,T10] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V06 tmp2 [V06,T02] ( 3, 3 ) int -> edi "spilling helperCall"
+; V05 tmp1 [V05,T05] ( 3, 2 ) int -> ebx "spilling helperCall"
+; V06 tmp2 [V06,T06] ( 3, 2 ) int -> esi "spilling helperCall"
; V07 tmp3 [V07,T08] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V08 cse0 [V08,T05] ( 4, 2 ) int -> registers multi-def "CSE - moderate"
-; V09 rat0 [V09,T06] ( 3, 2 ) int -> ecx "runtime lookup"
-; V10 rat1 [V10,T03] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-; V11 rat2 [V11,T07] ( 3, 2 ) int -> registers "runtime lookup"
-; V12 rat3 [V12,T04] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V08 rat0 [V08,T07] ( 3, 2 ) int -> ecx "runtime lookup"
+; V09 rat1 [V09,T02] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
+; V10 rat2 [V10,T03] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T04] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -28,10 +27,11 @@ G_M43867_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
- mov dword ptr [ebp-0x0C], edx
- mov eax, edx
- ;; size=11 bbWeight=1 PerfScore 5.50
+ mov dword ptr [ebp-0x10], edx
+ mov esi, edx
+ ;; size=12 bbWeight=1 PerfScore 6.50
G_M43867_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[ecx]
test ecx, ecx
@@ -39,7 +39,7 @@ G_M43867_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000
;; size=4 bbWeight=1 PerfScore 1.25
G_M43867_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ecx]
- mov ecx, dword ptr [eax+0x20]
+ mov ecx, dword ptr [esi+0x20]
mov ecx, dword ptr [ecx+0x08]
test ecx, ecx
je SHORT G_M43867_IG05
@@ -48,63 +48,79 @@ G_M43867_IG04: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000
jmp SHORT G_M43867_IG06
;; size=2 bbWeight=0.40 PerfScore 0.80
G_M43867_IG05: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- mov ecx, eax
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
;; size=14 bbWeight=0.10 PerfScore 0.18
G_M43867_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- mov esi, ecx
call [Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:get_Empty():Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]]
; gcrRegs +[eax]
- ;; size=8 bbWeight=0.50 PerfScore 1.62
+ ;; size=6 bbWeight=0.50 PerfScore 1.50
G_M43867_IG07: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.50
+ ;; size=6 bbWeight=0.50 PerfScore 1.75
G_M43867_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[ecx]
- mov esi, gword ptr [ecx+0x04]
- ; gcrRegs +[esi]
- mov ecx, dword ptr [eax+0x20]
+ mov edi, gword ptr [ecx+0x04]
+ ; gcrRegs +[edi]
+ mov ecx, dword ptr [esi+0x20]
; gcrRegs -[ecx]
- mov edx, dword ptr [ecx+0x08]
- test edx, edx
+ mov ebx, dword ptr [ecx+0x08]
+ test ebx, ebx
je SHORT G_M43867_IG10
;; size=13 bbWeight=0.50 PerfScore 3.62
-G_M43867_IG09: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M43867_IG09: ; bbWeight=0.40, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
jmp SHORT G_M43867_IG11
;; size=2 bbWeight=0.40 PerfScore 0.80
-G_M43867_IG10: ; bbWeight=0.10, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- mov ecx, eax
+G_M43867_IG10: ; bbWeight=0.10, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
+ call CORINFO_HELP_MEMCPY
+ mov ebx, eax
;; size=14 bbWeight=0.10 PerfScore 0.18
-G_M43867_IG11: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- mov edi, edx
- mov ecx, edi
+G_M43867_IG11: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [esi+0x20]
+ mov eax, dword ptr [ecx+0x08]
+ test eax, eax
+ je SHORT G_M43867_IG13
+ ;; size=10 bbWeight=0.50 PerfScore 2.62
+G_M43867_IG12: ; bbWeight=0.40, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ mov esi, eax
+ jmp SHORT G_M43867_IG14
+ ;; size=4 bbWeight=0.40 PerfScore 0.90
+G_M43867_IG13: ; bbWeight=0.10, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov esi, eax
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M43867_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
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 edi
- mov ecx, esi
+ push esi
+ mov ecx, edi
; 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]]
- ; gcrRegs -[ecx edx esi]
- ;; size=21 bbWeight=0.50 PerfScore 4.00
-G_M43867_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ ; gcrRegs -[ecx edx edi]
+ ;; size=19 bbWeight=0.50 PerfScore 3.88
+G_M43867_IG15: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.50
+ ;; size=6 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 109, prolog size 9, PerfScore 23.57, instruction count 47, allocated bytes for code 109 (MethodHash=da3254a4) for method Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
+; Total bytes of code 136, prolog size 10, PerfScore 28.52, instruction count 58, allocated bytes for code 136 (MethodHash=da3254a4) for method Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
; ============================================================
+27 (+40.91%) : 25901.dasm - Microsoft.FSharp.Core.ResultModule:ToOption[System.Canon,System.Nullable1[int]](Microsoft.FSharp.Core.FSharpResult
2[System.Canon,System.Nullable1[int]]):Microsoft.FSharp.Core.FSharpOption
1System.__Canon
@@ -8,68 +8,86 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T05] ( 2, 1.50) struct (16) [ebp+0x08] do-not-enreg[SF] ld-addr-op single-def <Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]>
-; V01 TypeCtx [V01,T00] ( 5, 3.68) int -> ecx single-def
+; V00 arg0 [V00,T07] ( 2, 1.50) struct (16) [ebp+0x08] do-not-enreg[SF] ld-addr-op single-def <Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]>
+; V01 TypeCtx [V01,T00] ( 7, 4.88) int -> esi single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
;* V03 loc1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T04] ( 2, 2 ) int -> edx "argument with side effect"
-; V06 rat0 [V06,T03] ( 3, 2 ) int -> edx "runtime lookup"
-; V07 rat1 [V07,T01] ( 3, 2.80) int -> edx "spilling expr"
-; V08 rat2 [V08,T02] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T05] ( 2, 2 ) int -> edx "argument with side effect"
+;* V06 rat0 [V06,T06] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V07 rat1 [V07,T01] ( 2, 4 ) int -> ecx "fgMakeTemp is creating a new local variable"
+; V08 rat2 [V08,T04] ( 3, 2 ) int -> edx "runtime lookup"
+; V09 rat3 [V09,T02] ( 3, 2.80) int -> ecx "spilling expr"
+; V10 rat4 [V10,T03] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
G_M13766_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
mov ebp, esp
+ push esi
push eax
- mov dword ptr [ebp-0x04], ecx
- ;; size=7 bbWeight=1 PerfScore 3.25
+ mov dword ptr [ebp-0x08], ecx
+ mov esi, ecx
+ ;; size=10 bbWeight=1 PerfScore 4.50
G_M13766_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [esi+0x20]
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M13766_IG04
+ ;; size=10 bbWeight=1 PerfScore 5.25
+G_M13766_IG03: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.20 PerfScore 0.30
+G_M13766_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
cmp dword ptr [ebp+0x0C], 0
- je SHORT G_M13766_IG05
+ je SHORT G_M13766_IG07
;; size=6 bbWeight=1 PerfScore 3.00
-G_M13766_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13766_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
xor eax, eax
; gcrRegs +[eax]
;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M13766_IG04: ; bbWeight=0.50, epilog, nogc, extend
- mov esp, ebp
+G_M13766_IG06: ; bbWeight=0.50, epilog, nogc, extend
+ pop ecx
+ pop esi
pop ebp
ret 16
- ;; size=6 bbWeight=0.50 PerfScore 1.38
-G_M13766_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=6 bbWeight=0.50 PerfScore 1.75
+G_M13766_IG07: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edx, dword ptr [ecx+0x20]
- cmp dword ptr [edx+0x08], 16
- jle SHORT G_M13766_IG08
+ mov ecx, dword ptr [esi+0x20]
+ cmp dword ptr [ecx+0x08], 16
+ jle SHORT G_M13766_IG10
;; size=9 bbWeight=0.50 PerfScore 3.00
-G_M13766_IG06: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov edx, dword ptr [edx+0x10]
+G_M13766_IG08: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov edx, dword ptr [ecx+0x10]
test edx, edx
- je SHORT G_M13766_IG08
+ je SHORT G_M13766_IG10
;; size=7 bbWeight=0.40 PerfScore 1.30
-G_M13766_IG07: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M13766_IG09
+G_M13766_IG09: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M13766_IG11
;; size=2 bbWeight=0.32 PerfScore 0.64
-G_M13766_IG08: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M13766_IG10: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
- ;; size=12 bbWeight=0.18 PerfScore 0.27
-G_M13766_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=14 bbWeight=0.18 PerfScore 0.32
+G_M13766_IG11: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, gword ptr [ebp+0x08]
; gcrRegs +[ecx]
call [Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]:Some(System.__Canon):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]]
; gcrRegs -[ecx] +[eax]
;; size=9 bbWeight=0.50 PerfScore 2.00
-G_M13766_IG10: ; bbWeight=0.50, epilog, nogc, extend
- mov esp, ebp
+G_M13766_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ pop ecx
+ pop esi
pop ebp
ret 16
- ;; size=6 bbWeight=0.50 PerfScore 1.38
+ ;; size=6 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 66, prolog size 7, PerfScore 16.34, instruction count 25, allocated bytes for code 66 (MethodHash=9b43ca39) for method Microsoft.FSharp.Core.ResultModule:ToOption[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
+; Total bytes of code 93, prolog size 8, PerfScore 23.93, instruction count 37, allocated bytes for code 93 (MethodHash=9b43ca39) for method Microsoft.FSharp.Core.ResultModule:ToOption[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
; ============================================================
+32 (+52.46%) : 23932.dasm - Microsoft.FSharp.Collections.ListModule:SingletonSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon
@@ -7,14 +7,13 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T03] ( 3, 3 ) ref -> esi class-hnd single-def <System.__Canon>
-; V01 TypeCtx [V01,T00] ( 5, 4.20) int -> edx single-def
-;* V02 loc0 [V02,T07] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V03 tmp1 [V03,T01] ( 3, 6 ) int -> edi "spilling helperCall"
-; V04 tmp2 [V04,T05] ( 2, 4 ) ref -> edx single-def "argument with side effect"
-; V05 cse0 [V05,T06] ( 2, 2 ) int -> edi "CSE - moderate"
-; V06 rat0 [V06,T04] ( 3, 4 ) int -> edi "runtime lookup"
-; V07 rat1 [V07,T02] ( 3, 5.60) int -> edi "fgMakeTemp is creating a new local variable"
+; V00 arg0 [V00,T03] ( 3, 3 ) ref -> edi class-hnd single-def <System.__Canon>
+; V01 TypeCtx [V01,T00] ( 7, 5.40) int -> esi single-def
+; V02 loc0 [V02,T04] ( 3, 4 ) int -> ebx "spilling helperCall"
+; V03 tmp1 [V03,T05] ( 3, 4 ) int -> esi "spilling helperCall"
+; V04 tmp2 [V04,T06] ( 2, 4 ) ref -> edx single-def "argument with side effect"
+; V05 rat0 [V05,T01] ( 3, 5.60) int -> ebx "fgMakeTemp is creating a new local variable"
+; V06 rat1 [V06,T02] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -23,46 +22,65 @@ G_M15943_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
- mov dword ptr [ebp-0x0C], edx
- mov esi, ecx
- ; gcrRegs +[esi]
- ;; size=11 bbWeight=1 PerfScore 5.50
-G_M15943_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- mov ecx, dword ptr [edx+0x20]
- mov edi, dword ptr [ecx+0x08]
- test edi, edi
+ mov dword ptr [ebp-0x10], edx
+ mov edi, ecx
+ ; gcrRegs +[edi]
+ mov esi, edx
+ ;; size=14 bbWeight=1 PerfScore 6.75
+G_M15943_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_M15943_IG04
;; size=10 bbWeight=1 PerfScore 5.25
-G_M15943_IG03: ; bbWeight=0.80, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M15943_IG03: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
jmp SHORT G_M15943_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
-G_M15943_IG04: ; bbWeight=0.20, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- mov ecx, edx
+G_M15943_IG04: ; bbWeight=0.20, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edi, eax
+ call CORINFO_HELP_MEMCPY
+ mov ebx, eax
;; size=14 bbWeight=0.20 PerfScore 0.35
-G_M15943_IG05: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- mov ecx, edi
+G_M15943_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [esi+0x20]
+ mov eax, dword ptr [ecx+0x08]
+ test eax, eax
+ je SHORT G_M15943_IG07
+ ;; size=10 bbWeight=1 PerfScore 5.25
+G_M15943_IG06: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ mov esi, eax
+ jmp SHORT G_M15943_IG08
+ ;; size=4 bbWeight=0.80 PerfScore 1.80
+G_M15943_IG07: ; bbWeight=0.20, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov esi, eax
+ ;; size=14 bbWeight=0.20 PerfScore 0.35
+G_M15943_IG08: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
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 edi
- mov ecx, esi
+ push esi
+ mov ecx, edi
; 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]]
- ; gcrRegs -[ecx edx esi]
+ ; gcrRegs -[ecx edx edi]
;; size=19 bbWeight=1 PerfScore 7.75
-G_M15943_IG06: ; bbWeight=1, epilog, nogc, extend
+G_M15943_IG09: ; bbWeight=1, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret
- ;; size=5 bbWeight=1 PerfScore 3.00
+ ;; size=6 bbWeight=1 PerfScore 3.50
-; Total bytes of code 61, prolog size 9, PerfScore 23.45, instruction count 27, allocated bytes for code 61 (MethodHash=ed0ac1b8) for method Microsoft.FSharp.Collections.ListModule:Singleton[System.__Canon](System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
+; Total bytes of code 93, prolog size 10, PerfScore 32.60, instruction count 40, allocated bytes for code 93 (MethodHash=ed0ac1b8) for method Microsoft.FSharp.Collections.ListModule:Singleton[System.__Canon](System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
; ============================================================
libraries_tests.run.windows.x86.Release.mch
-31 (-34.07%) : 1183.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable1[ubyte]](System.String,System.Nullable
1[ubyte]):this (Tier0)
@@ -7,12 +7,12 @@
;
; V00 this [V00 ] ( 1, 1 ) ref -> [ebp-0x04] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions>
; V01 arg1 [V01 ] ( 1, 1 ) ref -> [ebp-0x08] do-not-enreg[] class-hnd <System.String>
-; V02 arg2 [V02 ] ( 1, 1 ) struct ( 4) [ebp+0x08] do-not-enreg[XSF] addr-exposed <System.Nullable`1[ubyte]>
+; V02 arg2 [V02 ] ( 1, 1 ) struct ( 4) [ebp+0x08] do-not-enreg[XS] addr-exposed <System.Nullable`1[ubyte]>
; V03 tmp0 [V03 ] ( 1, 1 ) ref -> [ebp-0x0C] do-not-enreg[] must-init "argument with side effect"
;
; Lcl frame size = 12
-G_M26730_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M26730_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
mov ebp, esp
sub esp, 12
@@ -21,33 +21,14 @@ G_M26730_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
mov gword ptr [ebp-0x04], ecx
mov gword ptr [ebp-0x08], edx
;; size=17 bbWeight=1 PerfScore 4.75
-G_M26730_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- movzx eax, byte ptr [ebp+0x08]
- test eax, eax
- jne SHORT G_M26730_IG04
- mov eax, gword ptr [ebp-0x04]
- ; gcrRegs +[eax]
- mov ecx, gword ptr [eax+0x04]
- ; gcrRegs +[ecx]
- mov edx, gword ptr [ebp-0x08]
- ; gcrRegs +[edx]
- cmp dword ptr [ecx], ecx
- call [<unknown method>]
- ; gcrRegs -[eax ecx edx]
- ;; size=25 bbWeight=1 PerfScore 12.25
-G_M26730_IG03: ; bbWeight=1, epilog, nogc, extend
- mov esp, ebp
- pop ebp
- ret 4
- ;; size=6 bbWeight=1 PerfScore 2.75
-G_M26730_IG04: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M26730_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, gword ptr [ebp-0x04]
; gcrRegs +[eax]
mov eax, gword ptr [eax+0x04]
mov gword ptr [ebp-0x0C], eax
lea edx, [ebp+0x08]
mov ecx, 0xD1FFAB1E ; System.Nullable`1[ubyte]
- call CORINFO_HELP_BOX_NULLABLE
+ call CORINFO_HELP_BOX
push eax
mov ecx, gword ptr [ebp-0x0C]
; gcrRegs +[ecx]
@@ -57,12 +38,12 @@ G_M26730_IG04: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
call [<unknown method>]
; gcrRegs -[eax ecx edx]
;; size=37 bbWeight=1 PerfScore 14.75
-G_M26730_IG05: ; bbWeight=1, epilog, nogc, extend
+G_M26730_IG03: ; bbWeight=1, epilog, nogc, extend
mov esp, ebp
pop ebp
ret 4
;; size=6 bbWeight=1 PerfScore 2.75
-; Total bytes of code 91, prolog size 11, PerfScore 37.25, instruction count 32, allocated bytes for code 91 (MethodHash=1fca9795) for method Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
+; Total bytes of code 60, prolog size 11, PerfScore 22.25, instruction count 21, allocated bytes for code 60 (MethodHash=1fca9795) for method Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
; ============================================================
-18 (-15.13%) : 929.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
@@ -9,12 +9,11 @@
; 1 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4 ) ref -> esi class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 5, 4 ) ref -> ecx class-hnd single-def <System.Reflection.IReflectableType>
-; V02 tmp0 [V02,T04] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
-; V03 tmp1 [V03,T03] ( 3, 2 ) ref -> eax "guarded devirt return temp"
+; V00 arg0 [V00,T00] ( 5, 4 ) ref -> esi class-hnd single-def <System.Type>
+; V01 loc0 [V01,T01] ( 5, 4 ) ref -> eax class-hnd single-def <System.Reflection.IReflectableType>
+; V02 tmp0 [V02,T03] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
+; V03 tmp1 [V03,T02] ( 3, 2 ) ref -> eax "guarded devirt return temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V05 rat0 [V05,T00] ( 5, 7 ) ref -> ecx class-hnd "replacement local" <System.Reflection.IReflectableType>
;
; Lcl frame size = 0
@@ -28,53 +27,28 @@ G_M46371_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
;; size=7 bbWeight=1 PerfScore 3.50
G_M46371_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je SHORT G_M46371_IG10
- mov ecx, esi
- ; gcrRegs +[ecx]
- test ecx, ecx
- jne SHORT G_M46371_IG05
- ;; size=10 bbWeight=1 PerfScore 2.75
-G_M46371_IG03: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- test ecx, ecx
- je SHORT G_M46371_IG08
- cmp dword ptr [ecx], 0xD1FFAB1E
+ je SHORT G_M46371_IG06
+ mov edx, esi
+ ; gcrRegs +[edx]
+ mov ecx, 0xD1FFAB1E ; System.Reflection.IReflectableType
+ call CORINFO_HELP_INITINSTCLASS
+ ; gcrRegs -[edx] +[eax]
+ test eax, eax
+ je SHORT G_M46371_IG04
+ cmp dword ptr [eax], 0xD1FFAB1E
jne SHORT G_M46371_IG07
- mov eax, ecx
- ; gcrRegs +[eax]
- ;; size=14 bbWeight=1 PerfScore 5.50
-G_M46371_IG04: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
- ; gcrRegs -[ecx esi]
+ ;; size=28 bbWeight=1 PerfScore 8.00
+G_M46371_IG03: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcrRegs -[esi]
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=1 PerfScore 2.50
-G_M46371_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[eax] +[ecx esi]
- cmp dword ptr [ecx], 0xD1FFAB1E
- je SHORT G_M46371_IG03
- ;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M46371_IG06: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[ecx]
- mov edx, esi
- ; gcrRegs +[edx]
- mov ecx, 0xD1FFAB1E ; System.Reflection.IReflectableType
- call CORINFO_HELP_ISINSTANCEOFINTERFACE
- ; gcrRegs -[edx] +[eax]
- mov ecx, eax
- ; gcrRegs +[ecx]
- jmp SHORT G_M46371_IG03
- ;; size=16 bbWeight=0 PerfScore 0.00
-G_M46371_IG07: ; bbWeight=0, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax esi]
- call [<unknown method>]
- ; gcrRegs -[ecx] +[eax]
- jmp SHORT G_M46371_IG04
- ;; size=8 bbWeight=0 PerfScore 0.00
-G_M46371_IG08: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M46371_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] +[esi]
mov ecx, 0xD1FFAB1E ; System.Reflection.TypeDelegator
- call CORINFO_HELP_NEWSFAST
+ call CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[eax]
mov edi, eax
; gcrRegs +[edi]
@@ -87,17 +61,17 @@ G_M46371_IG08: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000
mov eax, edi
; gcrRegs +[eax]
;; size=24 bbWeight=0 PerfScore 0.00
-G_M46371_IG09: ; bbWeight=0, epilog, nogc, extend
+G_M46371_IG05: ; bbWeight=0, epilog, nogc, extend
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=0 PerfScore 0.00
-G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M46371_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax edi]
mov ecx, 0xC40
mov edx, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
+ call CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[eax]
mov ecx, eax
; gcrRegs +[ecx]
@@ -105,7 +79,15 @@ G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
; gcrRegs -[eax ecx]
int3
;; size=24 bbWeight=0 PerfScore 0.00
+G_M46371_IG07: ; bbWeight=0, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[eax]
+ mov ecx, eax
+ ; gcrRegs +[ecx]
+ call [<unknown method>]
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M46371_IG03
+ ;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 119, prolog size 5, PerfScore 16.25, instruction count 45, allocated bytes for code 119 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
+; Total bytes of code 101, prolog size 5, PerfScore 14.00, instruction count 38, allocated bytes for code 101 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
; ============================================================
-18 (-15.13%) : 4426.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
@@ -9,12 +9,11 @@
; 1 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 6, 4 ) ref -> esi class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 5, 4 ) ref -> ecx class-hnd single-def <System.Reflection.IReflectableType>
-; V02 tmp0 [V02,T04] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
-; V03 tmp1 [V03,T03] ( 3, 2 ) ref -> eax "guarded devirt return temp"
+; V00 arg0 [V00,T00] ( 5, 4 ) ref -> esi class-hnd single-def <System.Type>
+; V01 loc0 [V01,T01] ( 5, 4 ) ref -> eax class-hnd single-def <System.Reflection.IReflectableType>
+; V02 tmp0 [V02,T03] ( 3, 0 ) ref -> edi class-hnd exact single-def "NewObj constructor temp" <System.Reflection.TypeDelegator>
+; V03 tmp1 [V03,T02] ( 3, 2 ) ref -> eax "guarded devirt return temp"
;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V05 rat0 [V05,T00] ( 5, 7 ) ref -> ecx class-hnd "replacement local" <System.Reflection.IReflectableType>
;
; Lcl frame size = 0
@@ -28,53 +27,28 @@ G_M46371_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
;; size=7 bbWeight=1 PerfScore 3.50
G_M46371_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je SHORT G_M46371_IG10
- mov ecx, esi
- ; gcrRegs +[ecx]
- test ecx, ecx
- jne SHORT G_M46371_IG05
- ;; size=10 bbWeight=1 PerfScore 2.75
-G_M46371_IG03: ; bbWeight=1, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, byref, isz
- test ecx, ecx
- je SHORT G_M46371_IG08
- cmp dword ptr [ecx], 0xD1FFAB1E
+ je SHORT G_M46371_IG06
+ mov edx, esi
+ ; gcrRegs +[edx]
+ mov ecx, 0xD1FFAB1E ; System.Reflection.IReflectableType
+ call CORINFO_HELP_INITINSTCLASS
+ ; gcrRegs -[edx] +[eax]
+ test eax, eax
+ je SHORT G_M46371_IG04
+ cmp dword ptr [eax], 0xD1FFAB1E
jne SHORT G_M46371_IG07
- mov eax, ecx
- ; gcrRegs +[eax]
- ;; size=14 bbWeight=1 PerfScore 5.50
-G_M46371_IG04: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
- ; gcrRegs -[ecx esi]
+ ;; size=28 bbWeight=1 PerfScore 8.00
+G_M46371_IG03: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ; gcrRegs -[esi]
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=1 PerfScore 2.50
-G_M46371_IG05: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000042 {ecx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[eax] +[ecx esi]
- cmp dword ptr [ecx], 0xD1FFAB1E
- je SHORT G_M46371_IG03
- ;; size=8 bbWeight=0.50 PerfScore 2.00
-G_M46371_IG06: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[ecx]
- mov edx, esi
- ; gcrRegs +[edx]
- mov ecx, 0xD1FFAB1E ; System.Reflection.IReflectableType
- call CORINFO_HELP_ISINSTANCEOFINTERFACE
- ; gcrRegs -[edx] +[eax]
- mov ecx, eax
- ; gcrRegs +[ecx]
- jmp SHORT G_M46371_IG03
- ;; size=16 bbWeight=0 PerfScore 0.00
-G_M46371_IG07: ; bbWeight=0, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax esi]
- call [<unknown method>]
- ; gcrRegs -[ecx] +[eax]
- jmp SHORT G_M46371_IG04
- ;; size=8 bbWeight=0 PerfScore 0.00
-G_M46371_IG08: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M46371_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax] +[esi]
mov ecx, 0xD1FFAB1E ; System.Reflection.TypeDelegator
- call CORINFO_HELP_NEWSFAST
+ call CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[eax]
mov edi, eax
; gcrRegs +[edi]
@@ -87,17 +61,17 @@ G_M46371_IG08: ; bbWeight=0, gcrefRegs=00000040 {esi}, byrefRegs=00000000
mov eax, edi
; gcrRegs +[eax]
;; size=24 bbWeight=0 PerfScore 0.00
-G_M46371_IG09: ; bbWeight=0, epilog, nogc, extend
+G_M46371_IG05: ; bbWeight=0, epilog, nogc, extend
pop esi
pop edi
pop ebp
ret
;; size=4 bbWeight=0 PerfScore 0.00
-G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M46371_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax edi]
mov ecx, 0xC40
mov edx, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
+ call CORINFO_HELP_NEWARR_1_ALIGN8
; gcrRegs +[eax]
mov ecx, eax
; gcrRegs +[ecx]
@@ -105,7 +79,15 @@ G_M46371_IG10: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, b
; gcrRegs -[eax ecx]
int3
;; size=24 bbWeight=0 PerfScore 0.00
+G_M46371_IG07: ; bbWeight=0, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[eax]
+ mov ecx, eax
+ ; gcrRegs +[ecx]
+ call [<unknown method>]
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M46371_IG03
+ ;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 119, prolog size 5, PerfScore 16.25, instruction count 45, allocated bytes for code 119 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
+; Total bytes of code 101, prolog size 5, PerfScore 14.00, instruction count 38, allocated bytes for code 101 (MethodHash=88ec4adc) for method System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
; ============================================================
+48 (+21.05%) : 17432.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:ClearContainingTypeMapSystem.__Canon (Tier0-FullOpts)
@@ -8,48 +8,50 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T02] ( 5, 4 ) byref -> esi single-def
-; V01 TypeCtx [V01,T01] ( 9, 4.28) int -> [ebp-0x20] EH-live single-def
-; V02 loc0 [V02 ] ( 6, 9.50) struct (16) [ebp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.Dictionary`2+ValueCollection+Enumerator[System.__Canon,System.__Canon]>
+; V00 arg0 [V00,T06] ( 5, 4 ) byref -> esi single-def
+; V01 TypeCtx [V01,T04] ( 13, 13.88) int -> [ebp-0x1C] EH-live single-def
+; V02 loc0 [V02 ] ( 6, 9.50) struct (16) [ebp-0x2C] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Collections.Generic.Dictionary`2+ValueCollection+Enumerator[System.__Canon,System.__Canon]>
;* V03 loc1 [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,T07] ( 6, 2 ) int -> edx "Indirect call through function pointer"
-; V07 tmp4 [V07 ] ( 5, 5.50) ref -> [ebp-0x30] do-not-enreg[X] addr-exposed "field V02._dictionary (fldOffset=0x0)" P-DEP
-; V08 tmp5 [V08 ] ( 6, 9.50) ref -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V02._currentValue (fldOffset=0x4)" P-DEP
-; V09 tmp6 [V09 ] ( 5, 5.50) int -> [ebp-0x28] do-not-enreg[X] addr-exposed "field V02._index (fldOffset=0x8)" P-DEP
-; V10 tmp7 [V10 ] ( 5, 5.50) int -> [ebp-0x24] do-not-enreg[X] addr-exposed "field V02._version (fldOffset=0xc)" P-DEP
-; V11 tmp8 [V11,T09] ( 2, 2 ) ref -> ecx single-def "argument with side effect"
-; V12 tmp9 [V12,T00] ( 4, 18 ) int -> edx "argument with side effect"
-; V13 EHSlots [V13 ] ( 1, 1 ) struct (16) [ebp-0x1C] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V14 cse0 [V14,T03] ( 3, 5 ) int -> edi "CSE - aggressive"
-; V15 rat0 [V15,T08] ( 3, 2 ) int -> edi "runtime lookup"
-; V16 rat1 [V16,T04] ( 3, 2.80) int -> edi "fgMakeTemp is creating a new local variable"
-; V17 rat2 [V17,T05] ( 3, 2.80) int -> ecx "spilling expr"
-; V18 rat3 [V18,T06] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
-; V19 rat4 [V19,T10] ( 3, 0 ) int -> ecx "spilling expr"
-; V20 rat5 [V20,T11] ( 3, 0 ) int -> edx "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T10] ( 6, 2 ) int -> edx "Indirect call through function pointer"
+; V07 tmp4 [V07 ] ( 5, 5.50) ref -> [ebp-0x2C] do-not-enreg[X] addr-exposed "field V02._dictionary (fldOffset=0x0)" P-DEP
+; V08 tmp5 [V08 ] ( 6, 9.50) ref -> [ebp-0x28] do-not-enreg[X] addr-exposed "field V02._currentValue (fldOffset=0x4)" P-DEP
+; V09 tmp6 [V09 ] ( 5, 5.50) int -> [ebp-0x24] do-not-enreg[X] addr-exposed "field V02._index (fldOffset=0x8)" P-DEP
+; V10 tmp7 [V10 ] ( 5, 5.50) int -> [ebp-0x20] do-not-enreg[X] addr-exposed "field V02._version (fldOffset=0xc)" P-DEP
+; V11 tmp8 [V11,T12] ( 2, 2 ) ref -> ecx single-def "argument with side effect"
+; V12 tmp9 [V12,T02] ( 4, 18 ) int -> edx "argument with side effect"
+; V13 EHSlots [V13 ] ( 1, 1 ) struct (16) [ebp-0x18] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
+; V14 rat0 [V14,T11] ( 3, 2 ) int -> edx "runtime lookup"
+; V15 rat1 [V15,T07] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+;* V16 rat2 [V16,T05] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V17 rat3 [V17,T00] ( 2, 16 ) int -> ecx "fgMakeTemp is creating a new local variable"
+; V18 rat4 [V18,T03] ( 3, 16 ) int -> edx "runtime lookup"
+; V19 rat5 [V19,T01] ( 3, 22.40) int -> edx "fgMakeTemp is creating a new local variable"
+; V20 rat6 [V20,T08] ( 3, 2.80) int -> ecx "spilling expr"
+; V21 rat7 [V21,T09] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
+; V22 rat8 [V22,T13] ( 3, 0 ) int -> ecx "spilling expr"
+; V23 rat9 [V23,T14] ( 3, 0 ) int -> edx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 40
G_M33150_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
mov ebp, esp
- push edi
push esi
sub esp, 40
vxorps xmm4, xmm4, xmm4
- vmovdqu ymmword ptr [ebp-0x30], ymm4
+ vmovdqu ymmword ptr [ebp-0x2C], ymm4
xor eax, eax
- mov dword ptr [ebp-0x10], eax
- mov dword ptr [ebp-0x0C], edx
- mov dword ptr [ebp-0x20], edx
+ mov dword ptr [ebp-0x0C], eax
+ mov dword ptr [ebp-0x08], edx
+ mov dword ptr [ebp-0x1C], edx
mov esi, ecx
; byrRegs +[esi]
- ;; size=30 bbWeight=1 PerfScore 9.33
+ ;; size=29 bbWeight=1 PerfScore 8.33
G_M33150_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
cmp gword ptr [esi], 0
- je G_M33150_IG18
+ je G_M33150_IG23
;; size=9 bbWeight=1 PerfScore 4.00
G_M33150_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov ecx, gword ptr [esi]
@@ -59,16 +61,16 @@ G_M33150_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040
; gcrRegs -[ecx] +[eax]
mov ecx, eax
; gcrRegs +[ecx]
- lea edx, [ebp-0x30]
+ lea edx, [ebp-0x2C]
cmp dword ptr [ecx], ecx
call [System.Collections.Generic.Dictionary`2+ValueCollection[System.__Canon,System.__Canon]:GetEnumerator():System.Collections.Generic.Dictionary`2+ValueCollection+Enumerator[System.__Canon,System.__Canon]:this]
; gcrRegs -[eax ecx]
;; size=23 bbWeight=0.50 PerfScore 7.38
G_M33150_IG04: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
- mov eax, dword ptr [ebp-0x20]
+ mov eax, dword ptr [ebp-0x1C]
mov ecx, dword ptr [eax+0x20]
- mov edi, dword ptr [ecx+0x08]
- test edi, edi
+ mov edx, dword ptr [ecx+0x08]
+ test edx, edx
je SHORT G_M33150_IG06
;; size=13 bbWeight=0.50 PerfScore 3.12
G_M33150_IG05: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
@@ -77,95 +79,120 @@ G_M33150_IG05: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000040
G_M33150_IG06: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov ecx, eax
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edi, eax
+ call CORINFO_HELP_MEMCPY
+ mov edx, eax
;; size=14 bbWeight=0.10 PerfScore 0.18
G_M33150_IG07: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
- mov edx, edi
- lea ecx, [ebp-0x30]
+ lea ecx, [ebp-0x2C]
call [<unknown method>]
test eax, eax
- je SHORT G_M33150_IG09
- ;; size=15 bbWeight=0.50 PerfScore 2.50
+ je SHORT G_M33150_IG14
+ ;; size=13 bbWeight=0.50 PerfScore 2.38
G_M33150_IG08: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
- mov ecx, gword ptr [ebp-0x2C]
+ mov eax, dword ptr [ebp-0x1C]
+ mov ecx, dword ptr [eax+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ jne SHORT G_M33150_IG10
+ ;; size=13 bbWeight=4 PerfScore 25.00
+G_M33150_IG09: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ mov ecx, eax
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.80 PerfScore 1.20
+G_M33150_IG10: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov ecx, gword ptr [ebp-0x28]
; gcrRegs +[ecx]
cmp dword ptr [ecx], ecx
call [Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon]:Free():this]
; gcrRegs -[ecx]
- mov edx, edi
- lea ecx, [ebp-0x30]
+ mov eax, dword ptr [ebp-0x1C]
+ mov ecx, dword ptr [eax+0x20]
+ mov edx, dword ptr [ecx+0x08]
+ test edx, edx
+ je SHORT G_M33150_IG12
+ ;; size=24 bbWeight=4 PerfScore 53.00
+G_M33150_IG11: ; bbWeight=3.20, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ jmp SHORT G_M33150_IG13
+ ;; size=2 bbWeight=3.20 PerfScore 6.40
+G_M33150_IG12: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ mov ecx, eax
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov edx, eax
+ ;; size=14 bbWeight=0.80 PerfScore 1.40
+G_M33150_IG13: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ lea ecx, [ebp-0x2C]
call [<unknown method>]
test eax, eax
jne SHORT G_M33150_IG08
- ;; size=26 bbWeight=4 PerfScore 48.00
-G_M33150_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
- mov eax, dword ptr [ebp-0x20]
+ ;; size=13 bbWeight=4 PerfScore 19.00
+G_M33150_IG14: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ mov eax, dword ptr [ebp-0x1C]
mov ecx, dword ptr [eax+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M33150_IG12
+ jle SHORT G_M33150_IG17
;; size=12 bbWeight=0.50 PerfScore 3.50
-G_M33150_IG10: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+G_M33150_IG15: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
mov edx, dword ptr [ecx+0x0C]
test edx, edx
- je SHORT G_M33150_IG12
+ je SHORT G_M33150_IG17
;; size=7 bbWeight=0.40 PerfScore 1.30
-G_M33150_IG11: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
- jmp SHORT G_M33150_IG13
+G_M33150_IG16: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ jmp SHORT G_M33150_IG18
;; size=2 bbWeight=0.32 PerfScore 0.64
-G_M33150_IG12: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M33150_IG17: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov ecx, eax
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.18 PerfScore 0.32
-G_M33150_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
- lea ecx, [ebp-0x30]
+G_M33150_IG18: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref, isz
+ lea ecx, [ebp-0x2C]
call edx
- jmp SHORT G_M33150_IG17
+ jmp SHORT G_M33150_IG22
;; size=7 bbWeight=0.50 PerfScore 2.75
-G_M33150_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+G_M33150_IG19: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; byrRegs -[esi]
- mov eax, dword ptr [ebp-0x20]
+ mov eax, dword ptr [ebp-0x1C]
mov ecx, dword ptr [eax+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M33150_IG15
+ jle SHORT G_M33150_IG20
mov edx, dword ptr [ecx+0x0C]
test edx, edx
- je SHORT G_M33150_IG15
- jmp SHORT G_M33150_IG16
+ je SHORT G_M33150_IG20
+ jmp SHORT G_M33150_IG21
;; size=21 bbWeight=0 PerfScore 0.00
-G_M33150_IG15: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M33150_IG20: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, eax
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0 PerfScore 0.00
-G_M33150_IG16: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- lea ecx, [ebp-0x30]
+G_M33150_IG21: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ lea ecx, [ebp-0x2C]
call edx
pop eax
jmp eax
;; size=8 bbWeight=0 PerfScore 0.00
-G_M33150_IG17: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M33150_IG22: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
; byrRegs +[esi]
xor ecx, ecx
; gcrRegs +[ecx]
mov gword ptr [esi], ecx
;; size=4 bbWeight=0.50 PerfScore 0.62
-G_M33150_IG18: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M33150_IG23: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, epilog, nogc
; gcrRegs -[ecx]
; byrRegs -[esi]
- lea esp, [ebp-0x08]
+ lea esp, [ebp-0x04]
pop esi
- pop edi
pop ebp
ret
- ;; size=7 bbWeight=1 PerfScore 3.00
+ ;; size=6 bbWeight=1 PerfScore 2.50
-; Total bytes of code 228, prolog size 25, PerfScore 87.44, instruction count 82, allocated bytes for code 228 (MethodHash=59737e81) for method Microsoft.CodeAnalysis.CSharp.OverloadResolution:ClearContainingTypeMap[System.__Canon](byref) (Tier0-FullOpts)
+; Total bytes of code 276, prolog size 24, PerfScore 143.81, instruction count 96, allocated bytes for code 276 (MethodHash=59737e81) for method Microsoft.CodeAnalysis.CSharp.OverloadResolution:ClearContainingTypeMap[System.__Canon](byref) (Tier0-FullOpts)
...
+31 (+26.05%) : 3549.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -9,19 +9,22 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 4, 3 ) int -> esi single-def
-; V01 arg1 [V01,T02] ( 3, 3 ) ubyte -> edx single-def
-; V02 TypeCtx [V02,T06] ( 5, 2.36) int -> ecx single-def
-; V03 loc0 [V03,T07] ( 2, 0 ) int -> edi
-; V04 loc1 [V04,T08] ( 3, 0 ) int -> edx "spilling helperCall"
+; V00 arg0 [V00,T02] ( 4, 3 ) int -> esi single-def
+; V01 arg1 [V01,T03] ( 3, 3 ) ubyte -> edx single-def
+; V02 TypeCtx [V02,T08] ( 7, 3.72) int -> edi single-def
+; V03 loc0 [V03,T10] ( 2, 0 ) int -> ebx
+; V04 loc1 [V04,T11] ( 3, 0 ) int -> ecx "spilling helperCall"
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T05] ( 2, 4 ) int -> ecx "argument with side effect"
-; V08 rat0 [V08,T04] ( 3, 4 ) int -> ecx "runtime lookup"
-; V09 rat1 [V09,T00] ( 3, 5.60) int -> edx "spilling expr"
-; V10 rat2 [V10,T03] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
-; V11 rat3 [V11,T09] ( 3, 0 ) int -> edx "spilling expr"
-; V12 rat4 [V12,T10] ( 3, 0 ) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T07] ( 2, 4 ) int -> ecx "argument with side effect"
+;* V08 rat0 [V08,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T00] ( 3, 5.60) int -> ecx "spilling expr"
+; V10 rat2 [V10,T04] ( 2, 3.20) int -> ecx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T06] ( 3, 4 ) int -> ecx "runtime lookup"
+; V12 rat4 [V12,T01] ( 3, 5.60) int -> ecx "spilling expr"
+; V13 rat5 [V13,T05] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable"
+; V14 rat6 [V14,T12] ( 3, 0 ) int -> ecx "spilling expr"
+; V15 rat7 [V15,T13] ( 3, 0 ) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -30,76 +33,94 @@ G_M46119_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
mov eax, dword ptr [ebp+0x08]
- mov dword ptr [ebp-0x0C], eax
+ mov dword ptr [ebp-0x10], eax
mov esi, ecx
- mov ecx, dword ptr [ebp+0x08]
- ;; size=17 bbWeight=1 PerfScore 8.50
+ mov edi, dword ptr [ebp+0x08]
+ ;; size=18 bbWeight=1 PerfScore 9.50
G_M46119_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
test dl, dl
- jne SHORT G_M46119_IG08
- mov edx, dword ptr [ecx+0x20]
- cmp dword ptr [edx+0x04], 12
- jle SHORT G_M46119_IG05
+ jne SHORT G_M46119_IG11
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 16
+ jle SHORT G_M46119_IG04
;; size=13 bbWeight=1 PerfScore 7.25
G_M46119_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov eax, dword ptr [edx+0x0C]
- test eax, eax
- je SHORT G_M46119_IG05
+ mov ecx, dword ptr [ecx+0x10]
+ test ecx, ecx
+ jne SHORT G_M46119_IG05
;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M46119_IG04: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov ecx, eax
- jmp SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M46119_IG05: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG04: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov ecx, eax
+ call CORINFO_HELP_MEMCPY
;; size=12 bbWeight=0.36 PerfScore 0.54
-G_M46119_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG08
+ ;; size=9 bbWeight=1 PerfScore 6.00
+G_M46119_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ je SHORT G_M46119_IG08
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M46119_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.64 PerfScore 1.28
+G_M46119_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0.36 PerfScore 0.63
+G_M46119_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, esi
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
;; size=7 bbWeight=1 PerfScore 1.25
-G_M46119_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M46119_IG10: ; bbWeight=1, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=1 PerfScore 4.00
-G_M46119_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=8 bbWeight=1 PerfScore 4.50
+G_M46119_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edi, 80
- mov edx, dword ptr [ecx+0x20]
- cmp dword ptr [edx+0x04], 12
- jle SHORT G_M46119_IG09
- mov edx, dword ptr [edx+0x0C]
- test edx, edx
- je SHORT G_M46119_IG09
- jmp SHORT G_M46119_IG10
+ mov ebx, 80
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG12
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ je SHORT G_M46119_IG12
+ jmp SHORT G_M46119_IG13
;; size=23 bbWeight=0 PerfScore 0.00
-G_M46119_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- ;; size=12 bbWeight=0 PerfScore 0.00
-G_M46119_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- push edi
- mov ecx, edx
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0 PerfScore 0.00
+G_M46119_IG13: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ push ebx
mov edx, esi
call <unknown method>
; gcrRegs +[eax]
- ;; size=10 bbWeight=0 PerfScore 0.00
-G_M46119_IG11: ; bbWeight=0, epilog, nogc, extend
+ ;; size=8 bbWeight=0 PerfScore 0.00
+G_M46119_IG14: ; bbWeight=0, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0 PerfScore 0.00
+ ;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 119, prolog size 12, PerfScore 25.58, instruction count 49, allocated bytes for code 119 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
+; Total bytes of code 150, prolog size 13, PerfScore 36.15, instruction count 61, allocated bytes for code 150 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
; ============================================================
+31 (+26.05%) : 4946.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -9,19 +9,22 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 4, 3 ) int -> esi single-def
-; V01 arg1 [V01,T02] ( 3, 3 ) ubyte -> edx single-def
-; V02 TypeCtx [V02,T06] ( 5, 2.36) int -> ecx single-def
-; V03 loc0 [V03,T07] ( 2, 0 ) int -> edi
-; V04 loc1 [V04,T08] ( 3, 0 ) int -> edx "spilling helperCall"
+; V00 arg0 [V00,T02] ( 4, 3 ) int -> esi single-def
+; V01 arg1 [V01,T03] ( 3, 3 ) ubyte -> edx single-def
+; V02 TypeCtx [V02,T08] ( 7, 3.72) int -> edi single-def
+; V03 loc0 [V03,T10] ( 2, 0 ) int -> ebx
+; V04 loc1 [V04,T11] ( 3, 0 ) int -> ecx "spilling helperCall"
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T05] ( 2, 4 ) int -> ecx "argument with side effect"
-; V08 rat0 [V08,T04] ( 3, 4 ) int -> ecx "runtime lookup"
-; V09 rat1 [V09,T00] ( 3, 5.60) int -> edx "spilling expr"
-; V10 rat2 [V10,T03] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
-; V11 rat3 [V11,T09] ( 3, 0 ) int -> edx "spilling expr"
-; V12 rat4 [V12,T10] ( 3, 0 ) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T07] ( 2, 4 ) int -> ecx "argument with side effect"
+;* V08 rat0 [V08,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T00] ( 3, 5.60) int -> ecx "spilling expr"
+; V10 rat2 [V10,T04] ( 2, 3.20) int -> ecx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T06] ( 3, 4 ) int -> ecx "runtime lookup"
+; V12 rat4 [V12,T01] ( 3, 5.60) int -> ecx "spilling expr"
+; V13 rat5 [V13,T05] ( 3, 4.48) int -> ecx "fgMakeTemp is creating a new local variable"
+; V14 rat6 [V14,T12] ( 3, 0 ) int -> ecx "spilling expr"
+; V15 rat7 [V15,T13] ( 3, 0 ) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -30,76 +33,94 @@ G_M46119_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
mov eax, dword ptr [ebp+0x08]
- mov dword ptr [ebp-0x0C], eax
+ mov dword ptr [ebp-0x10], eax
mov esi, ecx
- mov ecx, dword ptr [ebp+0x08]
- ;; size=17 bbWeight=1 PerfScore 8.50
+ mov edi, dword ptr [ebp+0x08]
+ ;; size=18 bbWeight=1 PerfScore 9.50
G_M46119_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
test dl, dl
- jne SHORT G_M46119_IG08
- mov edx, dword ptr [ecx+0x20]
- cmp dword ptr [edx+0x04], 12
- jle SHORT G_M46119_IG05
+ jne SHORT G_M46119_IG11
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 16
+ jle SHORT G_M46119_IG04
;; size=13 bbWeight=1 PerfScore 7.25
G_M46119_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov eax, dword ptr [edx+0x0C]
- test eax, eax
- je SHORT G_M46119_IG05
+ mov ecx, dword ptr [ecx+0x10]
+ test ecx, ecx
+ jne SHORT G_M46119_IG05
;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M46119_IG04: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov ecx, eax
- jmp SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M46119_IG05: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG04: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov ecx, eax
+ call CORINFO_HELP_MEMCPY
;; size=12 bbWeight=0.36 PerfScore 0.54
-G_M46119_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG08
+ ;; size=9 bbWeight=1 PerfScore 6.00
+G_M46119_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ je SHORT G_M46119_IG08
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M46119_IG07: ; bbWeight=0.64, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.64 PerfScore 1.28
+G_M46119_IG08: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0.36 PerfScore 0.63
+G_M46119_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, esi
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
;; size=7 bbWeight=1 PerfScore 1.25
-G_M46119_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M46119_IG10: ; bbWeight=1, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=1 PerfScore 4.00
-G_M46119_IG08: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=8 bbWeight=1 PerfScore 4.50
+G_M46119_IG11: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edi, 80
- mov edx, dword ptr [ecx+0x20]
- cmp dword ptr [edx+0x04], 12
- jle SHORT G_M46119_IG09
- mov edx, dword ptr [edx+0x0C]
- test edx, edx
- je SHORT G_M46119_IG09
- jmp SHORT G_M46119_IG10
+ mov ebx, 80
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG12
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ je SHORT G_M46119_IG12
+ jmp SHORT G_M46119_IG13
;; size=23 bbWeight=0 PerfScore 0.00
-G_M46119_IG09: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG12: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- ;; size=12 bbWeight=0 PerfScore 0.00
-G_M46119_IG10: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- push edi
- mov ecx, edx
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0 PerfScore 0.00
+G_M46119_IG13: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ push ebx
mov edx, esi
call <unknown method>
; gcrRegs +[eax]
- ;; size=10 bbWeight=0 PerfScore 0.00
-G_M46119_IG11: ; bbWeight=0, epilog, nogc, extend
+ ;; size=8 bbWeight=0 PerfScore 0.00
+G_M46119_IG14: ; bbWeight=0, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0 PerfScore 0.00
+ ;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 119, prolog size 12, PerfScore 25.58, instruction count 49, allocated bytes for code 119 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
+; Total bytes of code 150, prolog size 13, PerfScore 36.15, instruction count 61, allocated bytes for code 150 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
; ============================================================
librariestestsnotieredcompilation.run.windows.x86.Release.mch
-38 (-27.14%) : 15050.dasm - Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerable1[Microsoft.CodeAnalysis.SyntaxToken]:GetEnumerator():Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerator
1[Microsoft.CodeAnalysis.SyntaxToken]:this (FullOpts)
@@ -2,7 +2,7 @@
; Emitting BLENDED_CODE for X86 with AVX512 - Windows
; FullOpts code
; optimized code
-; ebp based frame
+; esp based frame
; partially interruptible
; No matching PGO data
; 0 inlinees with PGO data; 6 single block inlinees; 0 inlinees without PGO data
@@ -10,116 +10,81 @@
;
; V00 this [V00,T01] ( 7, 7 ) byref -> edi this single-def
; V01 RetBuf [V01,T00] ( 14, 14 ) byref -> esi single-def
-; V02 loc0 [V02,T04] ( 3, 4.25) ref -> edx single-def "CASTCLASS eval op1"
-; V03 tmp1 [V03,T09] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable"
-; V04 tmp2 [V04,T02] ( 5, 6.75) ref -> ebx class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.SyntaxToken[][]>
-; V05 tmp3 [V05,T06] ( 2, 4 ) int -> [ebp-0x10] spill-single-def "impAppendStmt"
-; V06 tmp4 [V06,T05] ( 3, 4.25) ref -> edx single-def "CASTCLASS eval op1"
-; V07 tmp5 [V07,T10] ( 3, 1.25) int -> eax "fgMakeTemp is creating a new local variable"
-; V08 tmp6 [V08,T03] ( 5, 6.75) ref -> ecx class-hnd "spilling QMark2" <Microsoft.CodeAnalysis.SyntaxToken[][]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) struct (48) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerator`1[Microsoft.CodeAnalysis.SyntaxToken]>
-;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V11 tmp9 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V12 tmp10 [V12,T07] ( 2, 4 ) int -> [ebp-0x14] spill-single-def "Inlining Arg"
-; V13 tmp11 [V13,T08] ( 2, 4 ) int -> edi "Inlining Arg"
-;* V14 tmp12 [V14 ] ( 0, 0 ) struct (12) zero-ref "impAppendStmt" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) struct (24) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken],System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]]>
-;* V16 tmp14 [V16 ] ( 0, 0 ) struct (12) zero-ref "spilled call-like call argument" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
-;* V17 tmp15 [V17 ] ( 0, 0 ) struct (12) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
-;* V18 tmp16 [V18 ] ( 0, 0 ) struct (12) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
-;* V19 tmp17 [V19 ] ( 0, 0 ) ref -> zero-ref single-def "field V14._object (fldOffset=0x0)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) int -> zero-ref "field V14._index (fldOffset=0x4)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
-;* V22 tmp20 [V22 ] ( 0, 0 ) ref -> zero-ref single-def "field V16._object (fldOffset=0x0)" P-INDEP
-;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "field V16._index (fldOffset=0x4)" P-INDEP
-;* V24 tmp22 [V24 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) ref -> zero-ref single-def "field V17._object (fldOffset=0x0)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) int -> zero-ref "field V17._index (fldOffset=0x4)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
-;* V28 tmp26 [V28 ] ( 0, 0 ) ref -> zero-ref single-def "field V18._object (fldOffset=0x0)" P-INDEP
-;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref "field V18._index (fldOffset=0x4)" P-INDEP
-;* V30 tmp28 [V30 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
-;* V31 tmp29 [V31 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[000..004)"
-;* V32 tmp30 [V32 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[004..008)"
-;* V33 tmp31 [V33 ] ( 0, 0 ) int -> zero-ref "V09.[008..012)"
-;* V34 tmp32 [V34 ] ( 0, 0 ) int -> zero-ref "V09.[012..016)"
-;* V35 tmp33 [V35 ] ( 0, 0 ) int -> zero-ref "V09.[016..020)"
-;* V36 tmp34 [V36 ] ( 0, 0 ) int -> zero-ref "V09.[020..024)"
-;* V37 tmp35 [V37 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[024..028)"
-;* V38 tmp36 [V38 ] ( 0, 0 ) int -> zero-ref "V09.[028..032)"
-;* V39 tmp37 [V39 ] ( 0, 0 ) int -> zero-ref "V09.[032..036)"
-;* V40 tmp38 [V40 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[036..040)"
-;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "V09.[040..044)"
-;* V42 tmp40 [V42 ] ( 0, 0 ) int -> zero-ref "V09.[044..048)"
-;* V43 tmp41 [V43 ] ( 0, 0 ) ref -> zero-ref single-def "V15.[000..004)"
-;* V44 tmp42 [V44 ] ( 0, 0 ) int -> zero-ref "V15.[004..008)"
-;* V45 tmp43 [V45 ] ( 0, 0 ) int -> zero-ref "V15.[008..012)"
-;* V46 tmp44 [V46 ] ( 0, 0 ) ref -> zero-ref single-def "V15.[012..016)"
-;* V47 tmp45 [V47 ] ( 0, 0 ) int -> zero-ref "V15.[016..020)"
-;* V48 tmp46 [V48 ] ( 0, 0 ) int -> zero-ref "V15.[020..024)"
+; V02 loc0 [V02,T02] ( 2, 4 ) ref -> ebx class-hnd exact single-def "impAppendStmt" <Microsoft.CodeAnalysis.SyntaxToken[][]>
+; V03 tmp1 [V03,T04] ( 2, 4 ) int -> [esp+0x00] spill-single-def "impAppendStmt"
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (48) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerator`1[Microsoft.CodeAnalysis.SyntaxToken]>
+;* V05 tmp3 [V05 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V06 tmp4 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+; V07 tmp5 [V07,T03] ( 2, 4 ) ref -> eax class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.SyntaxToken[][]>
+; V08 tmp6 [V08,T05] ( 2, 4 ) int -> ecx "Inlining Arg"
+; V09 tmp7 [V09,T06] ( 2, 4 ) int -> edi "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) struct (12) zero-ref "impAppendStmt" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
+;* V11 tmp9 [V11 ] ( 0, 0 ) struct (24) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken],System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]]>
+;* V12 tmp10 [V12 ] ( 0, 0 ) struct (12) zero-ref "spilled call-like call argument" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
+;* V13 tmp11 [V13 ] ( 0, 0 ) struct (12) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
+;* V14 tmp12 [V14 ] ( 0, 0 ) struct (12) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Memory`1[Microsoft.CodeAnalysis.SyntaxToken]>
+;* V15 tmp13 [V15 ] ( 0, 0 ) ref -> zero-ref single-def "field V10._object (fldOffset=0x0)" P-INDEP
+;* V16 tmp14 [V16 ] ( 0, 0 ) int -> zero-ref "field V10._index (fldOffset=0x4)" P-INDEP
+;* V17 tmp15 [V17 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
+;* V18 tmp16 [V18 ] ( 0, 0 ) ref -> zero-ref single-def "field V12._object (fldOffset=0x0)" P-INDEP
+;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V12._index (fldOffset=0x4)" P-INDEP
+;* V20 tmp18 [V20 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
+;* V21 tmp19 [V21 ] ( 0, 0 ) ref -> zero-ref single-def "field V13._object (fldOffset=0x0)" P-INDEP
+;* V22 tmp20 [V22 ] ( 0, 0 ) int -> zero-ref "field V13._index (fldOffset=0x4)" P-INDEP
+;* V23 tmp21 [V23 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
+;* V24 tmp22 [V24 ] ( 0, 0 ) ref -> zero-ref single-def "field V14._object (fldOffset=0x0)" P-INDEP
+;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V14._index (fldOffset=0x4)" P-INDEP
+;* V26 tmp24 [V26 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
+;* V27 tmp25 [V27 ] ( 0, 0 ) ref -> zero-ref single-def "V04.[000..004)"
+;* V28 tmp26 [V28 ] ( 0, 0 ) ref -> zero-ref single-def "V04.[004..008)"
+;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref "V04.[008..012)"
+;* V30 tmp28 [V30 ] ( 0, 0 ) int -> zero-ref "V04.[012..016)"
+;* V31 tmp29 [V31 ] ( 0, 0 ) int -> zero-ref "V04.[016..020)"
+;* V32 tmp30 [V32 ] ( 0, 0 ) int -> zero-ref "V04.[020..024)"
+;* V33 tmp31 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "V04.[024..028)"
+;* V34 tmp32 [V34 ] ( 0, 0 ) int -> zero-ref "V04.[028..032)"
+;* V35 tmp33 [V35 ] ( 0, 0 ) int -> zero-ref "V04.[032..036)"
+;* V36 tmp34 [V36 ] ( 0, 0 ) ref -> zero-ref single-def "V04.[036..040)"
+;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "V04.[040..044)"
+;* V38 tmp36 [V38 ] ( 0, 0 ) int -> zero-ref "V04.[044..048)"
+;* V39 tmp37 [V39 ] ( 0, 0 ) ref -> zero-ref single-def "V11.[000..004)"
+;* V40 tmp38 [V40 ] ( 0, 0 ) int -> zero-ref "V11.[004..008)"
+;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "V11.[008..012)"
+;* V42 tmp40 [V42 ] ( 0, 0 ) ref -> zero-ref single-def "V11.[012..016)"
+;* V43 tmp41 [V43 ] ( 0, 0 ) int -> zero-ref "V11.[016..020)"
+;* V44 tmp42 [V44 ] ( 0, 0 ) int -> zero-ref "V11.[020..024)"
;
-; Lcl frame size = 8
+; Lcl frame size = 4
G_M44191_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
- push ebp
- mov ebp, esp
push edi
push esi
push ebx
- sub esp, 8
+ push eax
mov edi, ecx
; byrRegs +[edi]
mov esi, edx
; byrRegs +[esi]
- ;; size=13 bbWeight=1 PerfScore 5.00
-G_M44191_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=000000C0 {esi edi}, byref, isz
+ ;; size=8 bbWeight=1 PerfScore 4.50
+G_M44191_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=000000C0 {esi edi}, byref
mov edx, gword ptr [edi+0x0C]
; gcrRegs +[edx]
- mov ebx, edx
- ; gcrRegs +[ebx]
- test ebx, ebx
- je SHORT G_M44191_IG05
- ;; size=9 bbWeight=1 PerfScore 3.50
-G_M44191_IG03: ; bbWeight=0.25, gcrefRegs=0000000C {edx ebx}, byrefRegs=000000C0 {esi edi}, byref, isz
mov ecx, 0xD1FFAB1E ; Microsoft.CodeAnalysis.SyntaxToken[][]
- cmp dword ptr [ebx], ecx
- je SHORT G_M44191_IG05
- ;; size=9 bbWeight=0.25 PerfScore 1.06
-G_M44191_IG04: ; bbWeight=0.12, gcrefRegs=00000004 {edx}, byrefRegs=000000C0 {esi edi}, byref
- ; gcrRegs -[ebx]
- call CORINFO_HELP_CHKCASTARRAY
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx] +[eax]
+ ; gcr arg pop 0
mov ebx, eax
; gcrRegs +[ebx]
- ;; size=7 bbWeight=0.12 PerfScore 0.16
-G_M44191_IG05: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=000000C0 {esi edi}, byref, isz
- ; gcrRegs -[eax]
mov eax, dword ptr [edi]
- mov dword ptr [ebp-0x10], eax
+ ; gcrRegs -[eax]
+ mov dword ptr [esp], eax
mov edx, gword ptr [edi+0x14]
; gcrRegs +[edx]
- mov ecx, edx
- ; gcrRegs +[ecx]
- test ecx, ecx
- je SHORT G_M44191_IG08
- ;; size=14 bbWeight=1 PerfScore 6.50
-G_M44191_IG06: ; bbWeight=0.25, gcrefRegs=0000000E {ecx edx ebx}, byrefRegs=000000C0 {esi edi}, byref, isz
- mov eax, 0xD1FFAB1E ; Microsoft.CodeAnalysis.SyntaxToken[][]
- cmp dword ptr [ecx], eax
- je SHORT G_M44191_IG08
- ;; size=9 bbWeight=0.25 PerfScore 1.06
-G_M44191_IG07: ; bbWeight=0.12, gcrefRegs=0000000C {edx ebx}, byrefRegs=000000C0 {esi edi}, byref
- ; gcrRegs -[ecx]
- mov ecx, eax
- call CORINFO_HELP_CHKCASTARRAY
+ mov ecx, 0xD1FFAB1E ; Microsoft.CodeAnalysis.SyntaxToken[][]
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx] +[eax]
- mov ecx, eax
- ; gcrRegs +[ecx]
- ;; size=9 bbWeight=0.12 PerfScore 0.19
-G_M44191_IG08: ; bbWeight=1, gcrefRegs=0000000A {ecx ebx}, byrefRegs=000000C0 {esi edi}, byref
- ; gcrRegs -[eax]
- mov edx, dword ptr [edi+0x04]
- mov dword ptr [ebp-0x14], edx
+ ; gcr arg pop 0
+ mov ecx, dword ptr [edi+0x04]
mov edi, dword ptr [edi+0x08]
; byrRegs -[edi]
mov edx, esi
@@ -129,44 +94,42 @@ G_M44191_IG08: ; bbWeight=1, gcrefRegs=0000000A {ecx ebx}, byrefRegs=0000
; byrRegs -[edx]
lea edx, bword ptr [esi+0x04]
; byrRegs +[edx]
- call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX
- ; gcrRegs -[ecx]
+ call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX
+ ; gcrRegs -[eax]
; byrRegs -[edx]
- mov eax, dword ptr [ebp-0x10]
- mov dword ptr [esi+0x08], eax
- mov eax, dword ptr [ebp-0x14]
- mov dword ptr [esi+0x0C], eax
+ mov ebx, dword ptr [esp]
+ mov dword ptr [esi+0x08], ebx
+ mov dword ptr [esi+0x0C], ecx
mov dword ptr [esi+0x10], edi
xor eax, eax
mov dword ptr [esi+0x14], eax
- ;; size=44 bbWeight=1 PerfScore 14.00
-G_M44191_IG09: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+ ;; size=71 bbWeight=1 PerfScore 21.75
+G_M44191_IG03: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov gword ptr [esi+0x18], eax
;; size=3 bbWeight=1 PerfScore 1.00
-G_M44191_IG10: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M44191_IG04: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov dword ptr [esi+0x1C], eax
;; size=3 bbWeight=1 PerfScore 1.00
-G_M44191_IG11: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M44191_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov dword ptr [esi+0x20], eax
;; size=3 bbWeight=1 PerfScore 1.00
-G_M44191_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M44191_IG06: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov gword ptr [esi+0x24], eax
;; size=3 bbWeight=1 PerfScore 1.00
-G_M44191_IG13: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M44191_IG07: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov dword ptr [esi+0x28], eax
;; size=3 bbWeight=1 PerfScore 1.00
-G_M44191_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
+G_M44191_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000040 {esi}, byref
mov dword ptr [esi+0x2C], eax
;; size=3 bbWeight=1 PerfScore 1.00
-G_M44191_IG15: ; bbWeight=1, epilog, nogc, extend
- lea esp, [ebp-0x0C]
+G_M44191_IG09: ; bbWeight=1, epilog, nogc, extend
+ pop ecx
pop ebx
pop esi
pop edi
- pop ebp
ret
- ;; size=8 bbWeight=1 PerfScore 3.50
+ ;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 140, prolog size 9, PerfScore 40.97, instruction count 55, allocated bytes for code 140 (MethodHash=623d5360) for method Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerable`1[Microsoft.CodeAnalysis.SyntaxToken]:GetEnumerator():Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerator`1[Microsoft.CodeAnalysis.SyntaxToken]:this (FullOpts)
+; Total bytes of code 102, prolog size 4, PerfScore 35.25, instruction count 38, allocated bytes for code 102 (MethodHash=623d5360) for method Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerable`1[Microsoft.CodeAnalysis.SyntaxToken]:GetEnumerator():Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerator`1[Microsoft.CodeAnalysis.SyntaxToken]:this (FullOpts)
; ============================================================
-11 (-3.70%) : 58.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)
@@ -7,26 +7,24 @@
; 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]>
-; 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,T11] ( 5, 3.56) int -> ebx 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>
+; V00 arg0 [V00,T07] ( 4, 4 ) ref -> ebx class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V01 arg1 [V01,T03] ( 5, 19 ) ref -> esi class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V02 arg2 [V02,T10] ( 2, 2 ) byref -> [ebp+0x0C] single-def
+; V03 TypeCtx [V03,T06] ( 5, 13.08) int -> edi single-def
+; V04 loc0 [V04,T04] ( 7, 20 ) ref -> [ebp-0x24] class-hnd EH-live spill-single-def <<unknown class>>
+; V05 loc1 [V05,T05] ( 3, 17 ) ref -> ebx class-hnd <System.__Canon>
+; V06 loc2 [V06,T11] ( 2, 2 ) ref -> [ebp-0x28] 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,T09] ( 3, 4 ) int -> registers "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"
+; V11 tmp3 [V11,T02] ( 3, 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, 9 ) int -> ebx hoist "CSE - aggressive"
-; V14 rat0 [V14,T06] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
-; V15 rat1 [V15,T10] ( 3, 4 ) int -> ebx "runtime lookup"
-; V16 rat2 [V16,T07] ( 3, 5.60) int -> ecx "spilling expr"
-; V17 rat3 [V17,T08] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V13 rat0 [V13,T08] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V14 rat1 [V14,T00] ( 3, 44.80) int -> ecx "spilling expr"
+; V15 rat2 [V15,T01] ( 3, 35.84) int -> eax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 28
G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -34,154 +32,145 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 32
+ sub esp, 28
xor eax, eax
- mov dword ptr [ebp-0x2C], eax
+ mov dword ptr [ebp-0x28], eax
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_IG21
- test esi, esi
+G_M62024_IG02: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
+ test ebx, ebx
je G_M62024_IG22
- mov ecx, dword ptr [ebx+0x20]
+ test esi, esi
+ je G_M62024_IG23
+ mov ecx, dword ptr [edi+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
+G_M62024_IG03: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, 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
+G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.20 PerfScore 0.35
-G_M62024_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, edi
+G_M62024_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ 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 gword ptr [ebp-0x24], eax
; 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
- ; gcrRegs -[eax]
- ; GC ptr vars -{V13}
- mov ecx, edi
+ ;; size=12 bbWeight=1 PerfScore 4.75
+G_M62024_IG06: ; bbWeight=1, gcVars=00000810 {V04 V06}, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars -{V11}
+ mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[eax ecx]
test eax, eax
- je SHORT G_M62024_IG13
- mov ecx, dword ptr [ebx+0x20]
+ je SHORT G_M62024_IG14
+ ;; size=12 bbWeight=1 PerfScore 4.50
+G_M62024_IG07: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M62024_IG09
- ;; size=21 bbWeight=1 PerfScore 10.50
-G_M62024_IG07: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ jle SHORT G_M62024_IG10
+ ;; size=9 bbWeight=8 PerfScore 48.00
+G_M62024_IG08: ; bbWeight=6.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx+0x0C]
test eax, eax
- je SHORT G_M62024_IG09
- ;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M62024_IG08: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov ebx, eax
- jmp SHORT G_M62024_IG10
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M62024_IG09: ; bbWeight=0.36, 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.36 PerfScore 0.63
-G_M62024_IG10: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov eax, ebx
+ je SHORT G_M62024_IG10
+ ;; size=7 bbWeight=6.40 PerfScore 20.80
+G_M62024_IG09: ; bbWeight=5.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M62024_IG11
+ ;; size=2 bbWeight=5.12 PerfScore 10.24
+G_M62024_IG10: ; bbWeight=2.88, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=2.88 PerfScore 4.32
+G_M62024_IG11: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
nop
call [eax]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x28], eax
- ; GC ptr vars +{V05}
- mov edx, eax
+ mov ebx, eax
+ ; gcrRegs +[ebx]
+ mov edx, ebx
; gcrRegs +[edx]
mov ecx, gword ptr [esi+0x04]
; gcrRegs +[ecx]
call [esi+0x0C]<unknown method>
; gcrRegs -[eax ecx edx]
test eax, eax
- jne SHORT G_M62024_IG12
- mov ecx, edi
+ jne SHORT G_M62024_IG13
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
- ; GC ptr vars -{V05}
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[ecx ebx]
test eax, eax
- jne SHORT G_M62024_IG10
- ;; size=36 bbWeight=8 PerfScore 126.00
-G_M62024_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M62024_IG07
+ ;; size=35 bbWeight=8 PerfScore 130.00
+G_M62024_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
- jmp SHORT G_M62024_IG13
+ jmp SHORT G_M62024_IG14
;; size=2 bbWeight=1 PerfScore 2.00
-G_M62024_IG12: ; bbWeight=1, gcVars=0000200C {V04 V05 V06}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V03 V05}
+G_M62024_IG13: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[ebx]
mov esi, bword ptr [ebp+0x0C]
; byrRegs +[esi]
mov byte ptr [esi], 1
- mov esi, gword ptr [ebp-0x28]
- ; gcrRegs +[esi]
- ; byrRegs -[esi]
- mov gword ptr [ebp-0x2C], esi
+ mov gword ptr [ebp-0x28], ebx
mov dword ptr [ebp-0x1C], 0
mov dword ptr [ebp-0x18], 252
- push G_M62024_IG14
- jmp SHORT G_M62024_IG15
- ;; size=33 bbWeight=1 PerfScore 9.00
-G_M62024_IG13: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[esi]
- ; GC ptr vars -{V03 V05 V06}
- mov ecx, edi
+ push G_M62024_IG15
+ jmp SHORT G_M62024_IG16
+ ;; size=30 bbWeight=1 PerfScore 8.00
+G_M62024_IG14: ; bbWeight=1, gcVars=00000010 {V04}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; gcrRegs -[ebx]
+ ; byrRegs -[esi]
+ ; GC ptr vars -{V06}
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
; GC ptr vars -{V04}
call [<unknown method>]
- ; gcrRegs -[ecx edi]
- jmp SHORT G_M62024_IG17
- ;; size=10 bbWeight=1 PerfScore 5.25
-G_M62024_IG14: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V06 V13}
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M62024_IG18
+ ;; size=11 bbWeight=1 PerfScore 6.00
+G_M62024_IG15: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
mov dword ptr [ebp-0x18], 0
- jmp SHORT G_M62024_IG19
+ jmp SHORT G_M62024_IG20
;; size=9 bbWeight=1 PerfScore 3.00
-G_M62024_IG15: ; 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_IG16
- mov ecx, edi
...
-5 (-2.62%) : 11458.dasm - Microsoft.Interop.HashCode:SequentialValuesHashSystem.__Canon:int (FullOpts)
@@ -8,23 +8,21 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T07] ( 3, 3 ) ref -> edi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V01 TypeCtx [V01,T04] ( 7, 5.56) int -> esi single-def
-; V02 loc0 [V02,T03] ( 4, 10 ) int -> ebx
-; V03 loc1 [V03,T02] ( 7, 10 ) ref -> [ebp-0x24] class-hnd EH-live single-def <<unknown class>>
+; V00 arg0 [V00,T08] ( 3, 3 ) ref -> edi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V01 TypeCtx [V01,T04] ( 7, 9.64) int -> esi single-def
+; V02 loc0 [V02,T06] ( 4, 10 ) int -> ebx
+; V03 loc1 [V03,T05] ( 7, 10 ) ref -> [ebp-0x24] class-hnd EH-live spill-single-def <<unknown class>>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon>
;* V05 loc3 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V06 tmp1 [V06,T10] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
+; V06 tmp1 [V06,T09] ( 3, 4 ) int -> eax "VirtualCall with runtime lookup"
;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp3 [V08,T01] ( 2, 16 ) int -> eax "VirtualCall with runtime lookup"
+; V08 tmp3 [V08,T03] ( 3, 16 ) int -> eax "VirtualCall with runtime lookup"
;* V09 tmp4 [V09 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V10 tmp5 [V10,T00] ( 3, 24 ) ref -> eax "argument with side effect"
; V11 EHSlots [V11 ] ( 1, 1 ) struct (16) [ebp-0x20] do-not-enreg[XS] must-init addr-exposed "lvaShadowSPslotsVar"
-; V12 cse0 [V12,T08] ( 2, 5 ) int -> esi hoist "CSE - moderate"
-; V13 rat0 [V13,T05] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V14 rat1 [V14,T11] ( 3, 4 ) int -> esi "runtime lookup"
-; V15 rat2 [V15,T06] ( 3, 5.60) int -> ecx "spilling expr"
-; V16 rat3 [V16,T09] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V12 rat0 [V12,T07] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
+; V13 rat1 [V13,T01] ( 3, 22.40) int -> ecx "spilling expr"
+; V14 rat2 [V14,T02] ( 3, 17.92) int -> eax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 24
@@ -58,7 +56,7 @@ G_M7378_IG03: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=000000
G_M7378_IG04: ; bbWeight=0.20, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
;; size=12 bbWeight=0.20 PerfScore 0.30
G_M7378_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
mov ecx, edi
@@ -66,41 +64,37 @@ G_M7378_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000
nop
call [eax]
; gcrRegs -[ecx edi] +[eax]
- mov edi, eax
- ; gcrRegs +[edi]
- mov gword ptr [ebp-0x24], edi
+ mov gword ptr [ebp-0x24], eax
; GC ptr vars +{V03}
- ;; size=12 bbWeight=1 PerfScore 4.75
-G_M7378_IG06: ; bbWeight=1, gcVars=00000004 {V03}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[eax]
- mov ecx, edi
+ ;; size=10 bbWeight=1 PerfScore 4.50
+G_M7378_IG06: ; bbWeight=1, gcVars=00000020 {V03}, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, gcvars, byref, isz
+ mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[eax ecx]
test eax, eax
- je SHORT G_M7378_IG11
+ je SHORT G_M7378_IG12
+ ;; size=12 bbWeight=1 PerfScore 4.50
+G_M7378_IG07: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M7378_IG09
- ;; size=21 bbWeight=1 PerfScore 10.50
-G_M7378_IG07: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jle SHORT G_M7378_IG10
+ ;; size=9 bbWeight=4 PerfScore 24.00
+G_M7378_IG08: ; bbWeight=3.20, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx+0x0C]
test eax, eax
- je SHORT G_M7378_IG09
- ;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M7378_IG08: ; bbWeight=0.64, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
- mov esi, eax
- jmp SHORT G_M7378_IG10
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M7378_IG09: ; bbWeight=0.36, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ je SHORT G_M7378_IG10
+ ;; size=7 bbWeight=3.20 PerfScore 10.40
+G_M7378_IG09: ; bbWeight=2.56, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M7378_IG11
+ ;; size=2 bbWeight=2.56 PerfScore 5.12
+G_M7378_IG10: ; bbWeight=1.44, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov esi, eax
- ;; size=14 bbWeight=0.36 PerfScore 0.63
-G_M7378_IG10: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
- mov eax, esi
- mov ecx, edi
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=1.44 PerfScore 2.16
+G_M7378_IG11: ; bbWeight=4, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
nop
call [eax]
@@ -114,39 +108,39 @@ G_M7378_IG10: ; bbWeight=4, gcrefRegs=00000080 {edi}, byrefRegs=00000000
; gcrRegs -[ecx]
imul ecx, eax, 0xD1FFAB1E
add ebx, ecx
- mov ecx, edi
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
call [<unknown method>]
; gcrRegs -[ecx]
test eax, eax
- jne SHORT G_M7378_IG10
- ;; size=39 bbWeight=4 PerfScore 71.00
-G_M7378_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
- mov ecx, edi
+ jne SHORT G_M7378_IG07
+ ;; size=39 bbWeight=4 PerfScore 76.00
+G_M7378_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
; GC ptr vars -{V03}
call [<unknown method>]
- ; gcrRegs -[ecx edi]
- jmp SHORT G_M7378_IG14
- ;; size=10 bbWeight=1 PerfScore 5.25
-G_M7378_IG12: ; bbWeight=0, gcVars=00000004 {V03}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V02 V03}
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M7378_IG15
+ ;; size=11 bbWeight=1 PerfScore 6.00
+G_M7378_IG13: ; bbWeight=0, gcVars=00000020 {V03}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V03}
cmp gword ptr [ebp-0x24], 0
- je SHORT G_M7378_IG13
+ je SHORT G_M7378_IG14
mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
- ; GC ptr vars -{V02 V03}
+ ; GC ptr vars -{V03}
call [<unknown method>]
; gcrRegs -[ecx]
;; size=15 bbWeight=0 PerfScore 0.00
-G_M7378_IG13: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M7378_IG14: ; bbWeight=0, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
pop eax
jmp eax
;; size=3 bbWeight=0 PerfScore 0.00
-G_M7378_IG14: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M7378_IG15: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov eax, ebx
;; size=2 bbWeight=1 PerfScore 0.25
-G_M7378_IG15: ; bbWeight=1, epilog, nogc, extend
+G_M7378_IG16: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -155,9 +149,9 @@ G_M7378_IG15: ; bbWeight=1, epilog, nogc, extend
ret
;; size=8 bbWeight=1 PerfScore 3.50
-; Total bytes of code 191, prolog size 26, PerfScore 117.57, instruction count 74, allocated bytes for code 191 (MethodHash=ba2ee32d) for method Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
+; Total bytes of code 186, prolog size 26, PerfScore 154.08, instruction count 70, allocated bytes for code 186 (MethodHash=ba2ee32d) for method Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
; ============================================================
*************** EH table for Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int
1 EH table entries, 1 total EH entries reported to VM
-EH#0: try [G_M7378_IG06..G_M7378_IG11) handled by [G_M7378_IG12..G_M7378_IG14) (fault)
+EH#0: try [G_M7378_IG06..G_M7378_IG12) handled by [G_M7378_IG13..G_M7378_IG15) (fault)
+26 (+40.00%) : 4521.dasm - System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
@@ -9,14 +9,16 @@
; Final local variable assignments
;
;* V00 arg0 [V00 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V01 arg1 [V01,T02] ( 3, 3 ) ref -> esi class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
-; V02 TypeCtx [V02,T00] ( 5, 4.36) int -> edx single-def
+; V01 arg1 [V01,T03] ( 3, 3 ) ref -> edi class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
+; V02 TypeCtx [V02,T00] ( 7, 5.56) 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,T05] ( 2, 2 ) ref -> edi single-def "field V00.array (fldOffset=0x0)" P-INDEP
-; V06 rat0 [V06,T04] ( 3, 4 ) int -> eax "runtime lookup"
-; V07 rat1 [V07,T01] ( 3, 5.60) int -> ecx "spilling expr"
-; V08 rat2 [V08,T03] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T06] ( 2, 2 ) ref -> ebx single-def "field V00.array (fldOffset=0x0)" P-INDEP
+;* V06 rat0 [V06,T07] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V07 rat1 [V07,T01] ( 2, 4 ) int -> ecx "fgMakeTemp is creating a new local variable"
+; V08 rat2 [V08,T05] ( 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
@@ -25,49 +27,63 @@ G_M61273_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
- mov dword ptr [ebp-0x0C], edx
- mov esi, ecx
- ; gcrRegs +[esi]
- mov edi, gword ptr [ebp+0x08]
+ mov dword ptr [ebp-0x10], edx
+ mov edi, ecx
; gcrRegs +[edi]
- ;; size=14 bbWeight=1 PerfScore 6.50
-G_M61273_IG02: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov ecx, dword ptr [edi+0x04]
- mov ecx, dword ptr [edx+0x20]
+ mov esi, edx
+ mov ebx, gword ptr [ebp+0x08]
+ ; gcrRegs +[ebx]
+ ;; size=17 bbWeight=1 PerfScore 7.75
+G_M61273_IG02: ; bbWeight=1, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [esi+0x20]
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M61273_IG04
+ ;; size=10 bbWeight=1 PerfScore 5.25
+G_M61273_IG03: ; bbWeight=0.20, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.20 PerfScore 0.30
+G_M61273_IG04: ; bbWeight=1, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ebx+0x04]
+ mov ecx, dword ptr [esi+0x20]
cmp dword ptr [ecx+0x08], 16
- jle SHORT G_M61273_IG05
+ jle SHORT G_M61273_IG07
;; size=12 bbWeight=1 PerfScore 8.00
-G_M61273_IG03: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+G_M61273_IG05: ; bbWeight=0.80, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx+0x10]
test eax, eax
- je SHORT G_M61273_IG05
+ je SHORT G_M61273_IG07
;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M61273_IG04: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M61273_IG06
+G_M61273_IG06: ; bbWeight=0.64, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M61273_IG08
;; size=2 bbWeight=0.64 PerfScore 1.28
-G_M61273_IG05: ; bbWeight=0.36, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, edx
+G_M61273_IG07: ; bbWeight=0.36, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
;; size=12 bbWeight=0.36 PerfScore 0.54
-G_M61273_IG06: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
+G_M61273_IG08: ; bbWeight=1, gcrefRegs=00000088 {ebx edi}, byrefRegs=00000000 {}, byref
push eax
- mov edx, esi
+ mov edx, edi
; gcrRegs +[edx]
- mov ecx, edi
+ mov ecx, ebx
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx edx esi edi] +[eax]
+ ; gcrRegs -[ecx edx ebx edi] +[eax]
;; size=11 bbWeight=1 PerfScore 4.50
-G_M61273_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M61273_IG09: ; bbWeight=1, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=1 PerfScore 4.00
+ ;; size=8 bbWeight=1 PerfScore 4.50
-; Total bytes of code 65, prolog size 9, PerfScore 27.42, instruction count 28, allocated bytes for code 65 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 91, prolog size 10, PerfScore 34.72, instruction count 38, allocated bytes for code 91 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================
+29 (+40.85%) : 1119.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTrackerSystem.__Canon:Xunit.Sdk.CollectionTracker`1System.__Canon
@@ -8,33 +8,35 @@
; Final local variable assignments
;
; V00 arg0 [V00,T00] ( 6, 4.50) ref -> esi class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V01 TypeCtx [V01,T01] ( 5, 3.60) int -> edx single-def
-; V02 loc0 [V02,T03] ( 4, 2 ) ref -> eax
-; V03 tmp1 [V03,T06] ( 2, 2 ) int -> ecx "spilling helperCall"
-; V04 tmp2 [V04,T05] ( 2, 2 ) ref -> eax class-hnd "spilling QMark2" <Xunit.Sdk.CollectionTracker`1[System.__Canon]>
+; V01 TypeCtx [V01,T01] ( 7, 4.20) int -> edi single-def
+; V02 loc0 [V02,T04] ( 4, 2 ) ref -> eax
+; V03 tmp1 [V03,T05] ( 3, 2 ) int -> eax "spilling helperCall"
+; V04 tmp2 [V04,T07] ( 2, 2 ) ref -> eax class-hnd "spilling QMark2" <Xunit.Sdk.CollectionTracker`1[System.__Canon]>
;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V06 tmp4 [V06,T07] ( 2, 2 ) int -> edx "argument with side effect"
-; V07 cse0 [V07,T08] ( 3, 1.50) int -> edx "CSE - moderate"
-; V08 rat0 [V08,T04] ( 3, 2 ) int -> eax "runtime lookup"
-; V09 rat1 [V09,T02] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V06 tmp4 [V06,T08] ( 2, 2 ) int -> edx "argument with side effect"
+; V07 rat0 [V07,T02] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
+; V08 rat1 [V08,T06] ( 3, 2 ) int -> edx "runtime lookup"
+; V09 rat2 [V09,T03] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
G_M4963_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
mov ebp, esp
+ push edi
push esi
push eax
- mov dword ptr [ebp-0x08], edx
+ mov dword ptr [ebp-0x0C], edx
mov esi, ecx
; gcrRegs +[esi]
- ;; size=10 bbWeight=1 PerfScore 4.50
+ mov edi, edx
+ ;; size=13 bbWeight=1 PerfScore 5.75
G_M4963_IG02: ; bbWeight=1, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
test esi, esi
- je SHORT G_M4963_IG08
+ je SHORT G_M4963_IG11
;; size=4 bbWeight=1 PerfScore 1.25
G_M4963_IG03: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- mov ecx, dword ptr [edx+0x20]
+ mov ecx, dword ptr [edi+0x20]
mov eax, dword ptr [ecx+0x08]
test eax, eax
je SHORT G_M4963_IG05
@@ -43,42 +45,61 @@ G_M4963_IG04: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=000000
jmp SHORT G_M4963_IG06
;; size=2 bbWeight=0.40 PerfScore 0.80
G_M4963_IG05: ; bbWeight=0.10, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- mov ecx, edx
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
;; size=12 bbWeight=0.10 PerfScore 0.15
G_M4963_IG06: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- mov edx, eax
- mov ecx, edx
- xor eax, eax
+ xor ecx, ecx
+ ; gcrRegs +[ecx]
+ cmp dword ptr [esi], eax
+ mov eax, ecx
; gcrRegs +[eax]
- cmp dword ptr [esi], ecx
cmove eax, esi
test eax, eax
- jne SHORT G_M4963_IG09
+ jne SHORT G_M4963_IG12
+ mov ecx, dword ptr [edi+0x20]
+ ; gcrRegs -[ecx]
+ mov edx, dword ptr [ecx+0x08]
+ test edx, edx
+ je SHORT G_M4963_IG08
+ ;; size=23 bbWeight=0.50 PerfScore 5.12
+G_M4963_IG07: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[eax]
+ jmp SHORT G_M4963_IG09
+ ;; size=2 bbWeight=0.40 PerfScore 0.80
+G_M4963_IG08: ; bbWeight=0.10, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov edx, eax
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M4963_IG09: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, esi
; gcrRegs +[ecx]
call [Xunit.Sdk.CollectionTracker`1[System.__Canon]:Wrap(System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon]]
- ; gcrRegs -[ecx esi]
- ;; size=23 bbWeight=0.50 PerfScore 4.25
-G_M4963_IG07: ; bbWeight=0.50, epilog, nogc, extend
+ ; gcrRegs -[ecx esi] +[eax]
+ ;; size=8 bbWeight=0.50 PerfScore 1.62
+G_M4963_IG10: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
pop esi
+ pop edi
pop ebp
ret
- ;; size=4 bbWeight=0.50 PerfScore 1.25
-G_M4963_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+ ;; size=5 bbWeight=0.50 PerfScore 1.50
+G_M4963_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax]
xor eax, eax
; gcrRegs +[eax]
;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M4963_IG09: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M4963_IG12: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ecx
pop esi
+ pop edi
pop ebp
ret
- ;; size=4 bbWeight=0.50 PerfScore 1.25
+ ;; size=5 bbWeight=0.50 PerfScore 1.50
-; Total bytes of code 71, prolog size 8, PerfScore 16.20, instruction count 34, allocated bytes for code 71 (MethodHash=027eec9c) for method Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
+; Total bytes of code 100, prolog size 9, PerfScore 21.42, instruction count 46, allocated bytes for code 100 (MethodHash=027eec9c) for method Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
; ============================================================
+36 (+76.60%) : 6462.dasm - System.Collections.Immutable.ImmutableArray1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray
1[System.__Canon]:this (FullOpts)
@@ -8,57 +8,79 @@
; 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,T03] ( 3, 3 ) byref -> edi this single-def
+; V01 TypeCtx [V01,T00] ( 7, 5.56) int -> esi single-def
+; V02 loc0 [V02,T05] ( 3, 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,T06] ( 2, 2 ) ref -> eax single-def "field V03.array (fldOffset=0x0)" P-INDEP
+; V07 rat0 [V07,T01] ( 3, 5.60) int -> ebx "fgMakeTemp is creating a new local variable"
+;* V08 rat1 [V08,T07] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat2 [V09,T02] ( 3, 5.60) int -> ecx "spilling expr"
+; V10 rat3 [V10,T04] ( 2, 3.20) int -> ecx "fgMakeTemp is creating a new local variable"
;
; 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
+ 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, isz
+ mov ecx, dword ptr [esi+0x20]
+ mov ebx, dword ptr [ecx+0x08]
+ test ebx, ebx
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
+G_M44373_IG03: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, 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
+G_M44373_IG04: ; bbWeight=0.20, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov ecx, eax
+ call CORINFO_HELP_MEMCPY
+ mov ebx, 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]
+G_M44373_IG05: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref, isz
+ mov ecx, dword ptr [esi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M44373_IG07
+ ;; size=9 bbWeight=1 PerfScore 6.00
+G_M44373_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M44373_IG08
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M44373_IG07: ; bbWeight=0.36, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.36 PerfScore 0.54
+G_M44373_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000080 {edi}, byref
+ 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=9 bbWeight=1 PerfScore 3.25
+G_M44373_IG09: ; 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 83, prolog size 10, PerfScore 29.84, instruction count 36, allocated bytes for code 83 (MethodHash=e6fb52aa) for method System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
; ============================================================
realworld.run.windows.x86.checked.mch
-17 (-6.27%) : 372.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object
@@ -10,21 +10,19 @@
;
; V00 arg0 [V00,T00] ( 9, 6 ) ref -> esi class-hnd single-def <System.RuntimeType>
; V01 arg1 [V01,T01] ( 8, 5 ) int -> edi single-def
-;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref
-; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> ebx
+;* V02 loc0 [V02,T10] ( 0, 0 ) ubyte -> zero-ref
+; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> ebx
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]>
-; V05 tmp0 [V05,T05] ( 3, 2.25) ref -> eax single-def "CASTCLASS eval op1"
-; V06 tmp1 [V06,T12] ( 3, 1.25) int -> ecx "fgMakeTemp is creating a new local variable"
-; V07 tmp2 [V07,T03] ( 5, 3.75) ref -> registers class-hnd "spilling QMark2" <System.Object[]>
-; V08 tmp3 [V08,T07] ( 3, 1.50) ref -> eax
-; V09 tmp4 [V09,T08] ( 3, 1.50) ref -> edi class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache>
-; V10 tmp5 [V10,T04] ( 4, 2 ) ref -> edi class-hnd single-def "Inline stloc first use temp" <System.Object>
-;* V11 tmp6 [V11,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache>
-;* V12 tmp7 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache>
-;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp10 [V15,T02] ( 6, 7 ) ref -> eax "Single return block return value"
-; V16 cse0 [V16,T09] ( 3, 1.50) int -> ecx "CSE - moderate"
+; V05 tmp0 [V05,T06] ( 3, 1.50) ref -> eax
+; V06 tmp1 [V06,T07] ( 3, 1.50) ref -> edi class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache>
+; V07 tmp2 [V07,T03] ( 4, 2 ) ref -> edi class-hnd single-def "Inline stloc first use temp" <System.Object>
+;* V08 tmp3 [V08,T09] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache>
+;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache>
+;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+; V12 tmp7 [V12,T02] ( 6, 7 ) ref -> eax "Single return block return value"
+; V13 tmp8 [V13,T05] ( 2, 2 ) ref -> edx single-def "argument with side effect"
+; V14 cse0 [V14,T08] ( 3, 1.50) int -> ecx "CSE - moderate"
;
; Lcl frame size = 0
@@ -76,7 +74,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000
je SHORT G_M32569_IG06
mov edx, edi
mov ecx, 0xD1FFAB1E ; <unknown class>
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
jmp SHORT G_M32569_IG07
;; size=18 bbWeight=0.50 PerfScore 2.38
@@ -84,12 +82,14 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000
; gcrRegs -[eax]
mov ecx, 0xD1FFAB1E
mov edx, 26
- call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS
+ ; byrRegs +[eax]
mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
+ ; byrRegs -[eax]
;; size=20 bbWeight=0.50 PerfScore 1.75
G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
- jmp G_M32569_IG18
+ jmp G_M32569_IG15
;; size=5 bbWeight=0.50 PerfScore 1.00
G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] +[esi]
@@ -99,23 +99,25 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
je SHORT G_M32569_IG09
mov edx, edi
mov ecx, 0xD1FFAB1E ; System.Object[]
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[esi] +[eax]
- jmp G_M32569_IG18
- ;; size=25 bbWeight=0.50 PerfScore 3.00
+ jmp SHORT G_M32569_IG15
+ ;; size=22 bbWeight=0.50 PerfScore 3.00
G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax]
mov ecx, 0xD1FFAB1E
mov edx, 27
- call CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS
+ ; byrRegs +[eax]
mov eax, gword ptr [D1FFAB1EH] ; static handle
; gcrRegs +[eax]
- jmp SHORT G_M32569_IG18
+ ; byrRegs -[eax]
+ jmp SHORT G_M32569_IG15
;; size=22 bbWeight=0.50 PerfScore 2.75
G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[eax] +[esi]
test edi, edi
- je SHORT G_M32569_IG14
+ je SHORT G_M32569_IG11
mov ecx, esi
; gcrRegs +[ecx]
mov edx, edi
@@ -123,42 +125,24 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
; gcrRegs -[ecx esi] +[eax]
mov edx, eax
; gcrRegs +[edx]
- test edx, edx
- je SHORT G_M32569_IG13
- ;; size=20 bbWeight=0.50 PerfScore 3.12
-G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=00000005 {eax edx}, byrefRegs=00000000 {}, byref, isz
mov ecx, 0xD1FFAB1E ; System.Object[]
- cmp dword ptr [edx], ecx
- je SHORT G_M32569_IG13
- ;; size=9 bbWeight=0.25 PerfScore 1.06
-G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx]
- mov edx, eax
- ; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
- ; gcrRegs -[edx]
- mov edx, eax
- ; gcrRegs +[edx]
- ;; size=9 bbWeight=0.12 PerfScore 0.19
-G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=00000004 {edx}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax]
- mov eax, edx
- ; gcrRegs +[eax]
- jmp SHORT G_M32569_IG18
- ;; size=4 bbWeight=0.50 PerfScore 1.12
-G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
- ; gcrRegs -[eax edx] +[esi]
+ jmp SHORT G_M32569_IG15
+ ;; size=28 bbWeight=0.50 PerfScore 4.12
+G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs -[eax] +[esi]
mov ecx, dword ptr [esi+0x08]
test ecx, ecx
- je SHORT G_M32569_IG16
+ je SHORT G_M32569_IG13
call <unknown method>
; gcrRegs +[eax]
mov edi, eax
; gcrRegs +[edi]
test edi, edi
- je SHORT G_M32569_IG16
+ je SHORT G_M32569_IG13
cmp dword ptr [edi], 0xD1FFAB1E
- je SHORT G_M32569_IG15
+ je SHORT G_M32569_IG12
mov ecx, 0xD1FFAB1E
; gcrRegs +[ecx]
mov edx, 0xD1FFAB1E
@@ -166,10 +150,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
call [<unknown method>]
; gcrRegs -[eax ecx edx esi]
;; size=42 bbWeight=0.50 PerfScore 6.62
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M32569_IG14
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
; gcrRegs -[edi] +[esi]
mov ecx, esi
; gcrRegs +[ecx]
@@ -178,7 +162,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000
mov edi, eax
; gcrRegs +[edi]
;; size=10 bbWeight=0.50 PerfScore 1.75
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
; gcrRegs -[eax]
mov ecx, edi
; gcrRegs +[ecx]
@@ -186,7 +170,7 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000
call [System.RuntimeType+RuntimeTypeCache:GetEmptyArray():System.Object[]:this]
; gcrRegs -[ecx edi] +[eax]
;; size=10 bbWeight=0.50 PerfScore 3.12
-G_M32569_IG18: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
+G_M32569_IG15: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000 {}, byref, epilog, nogc
pop ebx
pop esi
pop edi
@@ -194,6 +178,6 @@ G_M32569_IG18: ; bbWeight=1, gcrefRegs=00000001 {eax}, byrefRegs=00000000
ret
;; size=5 bbWeight=1 PerfScore 3.00
-; Total bytes of code 271, prolog size 6, PerfScore 47.62, instruction count 90, allocated bytes for code 271 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
+; Total bytes of code 254, prolog size 6, PerfScore 46.25, instruction count 83, allocated bytes for code 254 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
; ============================================================
-11 (-3.70%) : 735.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)
@@ -7,26 +7,24 @@
; 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]>
-; 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,T11] ( 5, 3.56) int -> ebx 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>
+; V00 arg0 [V00,T07] ( 4, 4 ) ref -> ebx class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
+; V01 arg1 [V01,T03] ( 5, 19 ) ref -> esi class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V02 arg2 [V02,T10] ( 2, 2 ) byref -> [ebp+0x0C] single-def
+; V03 TypeCtx [V03,T06] ( 5, 13.08) int -> edi single-def
+; V04 loc0 [V04,T04] ( 7, 20 ) ref -> [ebp-0x24] class-hnd EH-live spill-single-def <<unknown class>>
+; V05 loc1 [V05,T05] ( 3, 17 ) ref -> ebx class-hnd <System.__Canon>
+; V06 loc2 [V06,T11] ( 2, 2 ) ref -> [ebp-0x28] 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,T09] ( 3, 4 ) int -> registers "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"
+; V11 tmp3 [V11,T02] ( 3, 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, 9 ) int -> ebx hoist "CSE - aggressive"
-; V14 rat0 [V14,T06] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
-; V15 rat1 [V15,T10] ( 3, 4 ) int -> ebx "runtime lookup"
-; V16 rat2 [V16,T07] ( 3, 5.60) int -> ecx "spilling expr"
-; V17 rat3 [V17,T08] ( 3, 4.48) int -> eax "fgMakeTemp is creating a new local variable"
+; V13 rat0 [V13,T08] ( 3, 5.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V14 rat1 [V14,T00] ( 3, 44.80) int -> ecx "spilling expr"
+; V15 rat2 [V15,T01] ( 3, 35.84) int -> eax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 28
G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG
push ebp
@@ -34,154 +32,145 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
push edi
push esi
push ebx
- sub esp, 32
+ sub esp, 28
xor eax, eax
- mov dword ptr [ebp-0x2C], eax
+ mov dword ptr [ebp-0x28], eax
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_IG21
- test esi, esi
+G_M62024_IG02: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
+ test ebx, ebx
je G_M62024_IG22
- mov ecx, dword ptr [ebx+0x20]
+ test esi, esi
+ je G_M62024_IG23
+ mov ecx, dword ptr [edi+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
+G_M62024_IG03: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, 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
+G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.20 PerfScore 0.35
-G_M62024_IG05: ; bbWeight=1, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref
- mov ecx, edi
+G_M62024_IG05: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
+ 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 gword ptr [ebp-0x24], eax
; 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
- ; gcrRegs -[eax]
- ; GC ptr vars -{V13}
- mov ecx, edi
+ ;; size=12 bbWeight=1 PerfScore 4.75
+G_M62024_IG06: ; bbWeight=1, gcVars=00000810 {V04 V06}, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars -{V11}
+ mov ecx, eax
; gcrRegs +[ecx]
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[eax ecx]
test eax, eax
- je SHORT G_M62024_IG13
- mov ecx, dword ptr [ebx+0x20]
+ je SHORT G_M62024_IG14
+ ;; size=12 bbWeight=1 PerfScore 4.50
+G_M62024_IG07: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
cmp dword ptr [ecx+0x04], 12
- jle SHORT G_M62024_IG09
- ;; size=21 bbWeight=1 PerfScore 10.50
-G_M62024_IG07: ; bbWeight=0.80, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
+ jle SHORT G_M62024_IG10
+ ;; size=9 bbWeight=8 PerfScore 48.00
+G_M62024_IG08: ; bbWeight=6.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
mov eax, dword ptr [ecx+0x0C]
test eax, eax
- je SHORT G_M62024_IG09
- ;; size=7 bbWeight=0.80 PerfScore 2.60
-G_M62024_IG08: ; bbWeight=0.64, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov ebx, eax
- jmp SHORT G_M62024_IG10
- ;; size=4 bbWeight=0.64 PerfScore 1.44
-G_M62024_IG09: ; bbWeight=0.36, 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.36 PerfScore 0.63
-G_M62024_IG10: ; bbWeight=8, gcrefRegs=000000C0 {esi edi}, byrefRegs=00000000 {}, byref, isz
- mov eax, ebx
+ je SHORT G_M62024_IG10
+ ;; size=7 bbWeight=6.40 PerfScore 20.80
+G_M62024_IG09: ; bbWeight=5.12, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M62024_IG11
+ ;; size=2 bbWeight=5.12 PerfScore 10.24
+G_M62024_IG10: ; bbWeight=2.88, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=2.88 PerfScore 4.32
+G_M62024_IG11: ; bbWeight=8, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
nop
call [eax]
; gcrRegs -[ecx] +[eax]
- mov gword ptr [ebp-0x28], eax
- ; GC ptr vars +{V05}
- mov edx, eax
+ mov ebx, eax
+ ; gcrRegs +[ebx]
+ mov edx, ebx
; gcrRegs +[edx]
mov ecx, gword ptr [esi+0x04]
; gcrRegs +[ecx]
call [esi+0x0C]<unknown method>
; gcrRegs -[eax ecx edx]
test eax, eax
- jne SHORT G_M62024_IG12
- mov ecx, edi
+ jne SHORT G_M62024_IG13
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
- ; GC ptr vars -{V05}
call [<unknown method>]
- ; gcrRegs -[ecx]
+ ; gcrRegs -[ecx ebx]
test eax, eax
- jne SHORT G_M62024_IG10
- ;; size=36 bbWeight=8 PerfScore 126.00
-G_M62024_IG11: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ jne SHORT G_M62024_IG07
+ ;; size=35 bbWeight=8 PerfScore 130.00
+G_M62024_IG12: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[esi]
- jmp SHORT G_M62024_IG13
+ jmp SHORT G_M62024_IG14
;; size=2 bbWeight=1 PerfScore 2.00
-G_M62024_IG12: ; bbWeight=1, gcVars=0000200C {V04 V05 V06}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V03 V05}
+G_M62024_IG13: ; bbWeight=1, gcrefRegs=00000008 {ebx}, byrefRegs=00000000 {}, byref, isz
+ ; gcrRegs +[ebx]
mov esi, bword ptr [ebp+0x0C]
; byrRegs +[esi]
mov byte ptr [esi], 1
- mov esi, gword ptr [ebp-0x28]
- ; gcrRegs +[esi]
- ; byrRegs -[esi]
- mov gword ptr [ebp-0x2C], esi
+ mov gword ptr [ebp-0x28], ebx
mov dword ptr [ebp-0x1C], 0
mov dword ptr [ebp-0x18], 252
- push G_M62024_IG14
- jmp SHORT G_M62024_IG15
- ;; size=33 bbWeight=1 PerfScore 9.00
-G_M62024_IG13: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; gcrRegs -[esi]
- ; GC ptr vars -{V03 V05 V06}
- mov ecx, edi
+ push G_M62024_IG15
+ jmp SHORT G_M62024_IG16
+ ;; size=30 bbWeight=1 PerfScore 8.00
+G_M62024_IG14: ; bbWeight=1, gcVars=00000010 {V04}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; gcrRegs -[ebx]
+ ; byrRegs -[esi]
+ ; GC ptr vars -{V06}
+ mov ecx, gword ptr [ebp-0x24]
; gcrRegs +[ecx]
; GC ptr vars -{V04}
call [<unknown method>]
- ; gcrRegs -[ecx edi]
- jmp SHORT G_M62024_IG17
- ;; size=10 bbWeight=1 PerfScore 5.25
-G_M62024_IG14: ; bbWeight=1, gcVars=00002000 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
- ; GC ptr vars +{V06 V13}
+ ; gcrRegs -[ecx]
+ jmp SHORT G_M62024_IG18
+ ;; size=11 bbWeight=1 PerfScore 6.00
+G_M62024_IG15: ; bbWeight=1, gcVars=00000800 {V06}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ; GC ptr vars +{V06 V11}
mov dword ptr [ebp-0x18], 0
- jmp SHORT G_M62024_IG19
+ jmp SHORT G_M62024_IG20
;; size=9 bbWeight=1 PerfScore 3.00
-G_M62024_IG15: ; 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_IG16
- mov ecx, edi
...
-10 (-3.19%) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (FullOpts)
@@ -9,22 +9,22 @@
; Final local variable assignments
;
; V00 this [V00,T00] ( 10, 6.50) ref -> esi this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T05] ( 3, 2.50) int -> edx single-def
+; V01 arg1 [V01,T04] ( 3, 2.50) int -> edx single-def
; V02 arg2 [V02,T11] ( 2, 1.50) int -> ecx single-def
; V03 arg3 [V03,T12] ( 2, 1.50) int -> ebx single-def
; V04 arg4 [V04,T13] ( 2, 1.50) int -> [ebp+0x10] single-def
; V05 arg5 [V05,T14] ( 1, 1 ) int -> [ebp+0x0C] single-def
; V06 arg6 [V06,T08] ( 2, 2 ) int -> edi single-def
-; V07 loc0 [V07,T02] ( 10, 6.50) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> ebx class-hnd <<unknown class>>
-; V09 tmp0 [V09,T07] ( 4, 2.75) int -> edx "spilling helperCall"
-;* V10 tmp1 [V10 ] ( 0, 0 ) int -> zero-ref "fgMakeTemp is creating a new local variable"
-; V11 tmp2 [V11,T01] ( 5, 6.75) ref -> eax class-hnd "spilling QMark2" <System.__Canon[]>
-;* V12 tmp3 [V12 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String>
-; V13 tmp4 [V13,T09] ( 2, 2 ) int -> ebx "field V12.m_pStringHeap (fldOffset=0x0)" P-INDEP
-; V14 tmp5 [V14,T10] ( 2, 2 ) int -> eax "field V12.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP
-; V15 rat0 [V15,T06] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
-; V16 rat1 [V16,T04] ( 3, 5.60) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 loc0 [V07,T01] ( 10, 6.50) struct (12) [ebp-0x18] do-not-enreg[SF] ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> ebx class-hnd <<unknown class>>
+;* V09 tmp0 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
+;* V10 tmp1 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String>
+; V11 tmp2 [V11,T09] ( 2, 2 ) int -> ebx "field V10.m_pStringHeap (fldOffset=0x0)" P-INDEP
+; V12 tmp3 [V12,T10] ( 2, 2 ) int -> eax "field V10.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP
+; V13 tmp4 [V13,T07] ( 2, 4 ) int -> ecx "argument with side effect"
+; V14 rat0 [V14,T05] ( 3, 4.40) int -> ecx "Spilling to split statement for tree"
+; V15 rat1 [V15,T06] ( 3, 4 ) int -> ecx "runtime lookup"
+; V16 rat2 [V16,T02] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 12
@@ -176,37 +176,26 @@ G_M33863_IG13: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=0000
mov ecx, dword ptr [esi]
mov edx, dword ptr [ecx+0x24]
mov edx, dword ptr [edx]
- mov edx, dword ptr [edx+0x0C]
- test edx, edx
+ mov eax, dword ptr [edx+0x0C]
+ test eax, eax
je SHORT G_M33863_IG15
;; size=14 bbWeight=1 PerfScore 9.25
G_M33863_IG14: ; bbWeight=0.80, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, eax
jmp SHORT G_M33863_IG16
- ;; size=2 bbWeight=0.80 PerfScore 1.60
+ ;; size=4 bbWeight=0.80 PerfScore 1.80
G_M33863_IG15: ; bbWeight=0.20, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov edx, eax
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
+ mov ecx, eax
;; size=12 bbWeight=0.20 PerfScore 0.30
-G_M33863_IG16: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref, isz
- mov eax, ebx
- ; gcrRegs +[eax]
- test eax, eax
- je SHORT G_M33863_IG19
- ;; size=6 bbWeight=1 PerfScore 1.50
-G_M33863_IG17: ; bbWeight=0.25, gcrefRegs=00000049 {eax ebx esi}, byrefRegs=00000000 {}, byref, isz
- cmp dword ptr [eax], edx
- je SHORT G_M33863_IG19
- ;; size=4 bbWeight=0.25 PerfScore 1.00
-G_M33863_IG18: ; bbWeight=0.12, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
- ; gcrRegs -[eax]
- mov ecx, edx
+G_M33863_IG16: ; bbWeight=1, gcrefRegs=00000048 {ebx esi}, byrefRegs=00000000 {}, byref
mov edx, ebx
; gcrRegs +[edx]
- call CORINFO_HELP_CHKCASTARRAY
+ call CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[edx ebx] +[eax]
- ;; size=9 bbWeight=0.12 PerfScore 0.19
-G_M33863_IG19: ; bbWeight=1, gcrefRegs=00000041 {eax esi}, byrefRegs=00000000 {}, byref, epilog, nogc
+ ;; size=7 bbWeight=1 PerfScore 1.25
+G_M33863_IG17: ; bbWeight=1, epilog, nogc, extend
lea esp, [ebp-0x0C]
pop ebx
pop esi
@@ -223,6 +212,6 @@ RWD00 dd G_M33863_IG05 - G_M33863_IG02
dd G_M33863_IG10 - G_M33863_IG02
-; Total bytes of code 313, prolog size 9, PerfScore 76.09, instruction count 108, allocated bytes for code 313 (MethodHash=14bb7bb8) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
+; Total bytes of code 303, prolog size 9, PerfScore 74.85, instruction count 103, allocated bytes for code 303 (MethodHash=14bb7bb8) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
; ============================================================
+28 (+22.95%) : 4919.dasm - Microsoft.FSharp.Collections.ListModule:TryLastSystem.__Canon:Microsoft.FSharp.Core.FSharpOption`1System.__Canon
@@ -8,18 +8,21 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T02] ( 3, 3 ) ref -> edi class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V01 TypeCtx [V01,T00] ( 7, 4.88) int -> esi single-def
+; V00 arg0 [V00,T03] ( 3, 3 ) ref -> edi class-hnd single-def <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V01 TypeCtx [V01,T00] ( 9, 6.24) int -> esi single-def
; V02 loc0 [V02 ] ( 3, 2.50) struct ( 8) [ebp-0x14] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
;* V03 loc1 [V03 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T06] ( 3, 2 ) int -> edx "spilling helperCall"
+; V05 tmp2 [V05,T08] ( 3, 2 ) int -> edx "spilling helperCall"
; V06 tmp3 [V06 ] ( 2, 1.50) ref -> [ebp-0x14] do-not-enreg[X] addr-exposed "field V02.item (fldOffset=0x0)" P-DEP
; V07 tmp4 [V07 ] ( 2, 2 ) int -> [ebp-0x10] do-not-enreg[X] addr-exposed "field V02._tag (fldOffset=0x4)" P-DEP
-; V08 rat0 [V08,T03] ( 3, 4 ) int -> eax "runtime lookup"
+; V08 rat0 [V08,T05] ( 3, 4 ) int -> eax "runtime lookup"
; V09 rat1 [V09,T01] ( 3, 5.60) int -> eax "fgMakeTemp is creating a new local variable"
-; V10 rat2 [V10,T04] ( 3, 2.80) int -> ecx "spilling expr"
-; V11 rat3 [V11,T05] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
+;* V10 rat2 [V10,T09] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V11 rat3 [V11,T02] ( 3, 5.60) int -> ecx "spilling expr"
+; V12 rat4 [V12,T04] ( 2, 3.20) int -> ecx "fgMakeTemp is creating a new local variable"
+; V13 rat5 [V13,T06] ( 3, 2.80) int -> ecx "spilling expr"
+; V14 rat6 [V14,T07] ( 3, 2.24) int -> edx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 12
@@ -49,7 +52,7 @@ G_M28200_IG03: ; bbWeight=0.80, gcrefRegs=00000080 {edi}, byrefRegs=00000
G_M28200_IG04: ; bbWeight=0.20, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
;; size=12 bbWeight=0.20 PerfScore 0.30
G_M28200_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
push eax
@@ -58,47 +61,62 @@ G_M28200_IG05: ; bbWeight=1, gcrefRegs=00000080 {edi}, byrefRegs=00000000
; gcrRegs +[edx]
call [Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]]
; gcrRegs -[edx edi]
- cmp dword ptr [ebp-0x10], 0
- je SHORT G_M28200_IG12
- ;; size=18 bbWeight=1 PerfScore 7.75
-G_M28200_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
mov ecx, dword ptr [esi+0x20]
- cmp dword ptr [ecx+0x04], 16
- jle SHORT G_M28200_IG09
- ;; size=9 bbWeight=0.50 PerfScore 3.00
-G_M28200_IG07: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov edx, dword ptr [ecx+0x10]
- test edx, edx
- je SHORT G_M28200_IG09
- ;; size=7 bbWeight=0.40 PerfScore 1.30
-G_M28200_IG08: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M28200_IG10
- ;; size=2 bbWeight=0.32 PerfScore 0.64
-G_M28200_IG09: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M28200_IG07
+ ;; size=21 bbWeight=1 PerfScore 10.75
+G_M28200_IG06: ; bbWeight=0.80, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M28200_IG08
+ ;; size=7 bbWeight=0.80 PerfScore 2.60
+G_M28200_IG07: ; 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
+ ;; size=12 bbWeight=0.36 PerfScore 0.54
+G_M28200_IG08: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ cmp dword ptr [ebp-0x10], 0
+ je SHORT G_M28200_IG15
+ ;; size=6 bbWeight=1 PerfScore 3.00
+G_M28200_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [esi+0x20]
+ cmp dword ptr [ecx+0x04], 16
+ jle SHORT G_M28200_IG12
+ ;; size=9 bbWeight=0.50 PerfScore 3.00
+G_M28200_IG10: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov edx, dword ptr [ecx+0x10]
+ test edx, edx
+ je SHORT G_M28200_IG12
+ ;; size=7 bbWeight=0.40 PerfScore 1.30
+G_M28200_IG11: ; bbWeight=0.32, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M28200_IG13
+ ;; size=2 bbWeight=0.32 PerfScore 0.64
+G_M28200_IG12: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov edx, eax
;; size=14 bbWeight=0.18 PerfScore 0.32
-G_M28200_IG10: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M28200_IG13: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov ecx, gword ptr [ebp-0x14]
; gcrRegs +[ecx]
call [Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]:Some(System.__Canon):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]]
; gcrRegs -[ecx] +[eax]
;; size=9 bbWeight=0.50 PerfScore 2.00
-G_M28200_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M28200_IG14: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x08]
pop esi
pop edi
pop ebp
ret
;; size=7 bbWeight=0.50 PerfScore 1.50
-G_M28200_IG12: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
+G_M28200_IG15: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref
; gcrRegs -[eax]
xor eax, eax
; gcrRegs +[eax]
;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M28200_IG13: ; bbWeight=0.50, epilog, nogc, extend
+G_M28200_IG16: ; bbWeight=0.50, epilog, nogc, extend
lea esp, [ebp-0x08]
pop esi
pop edi
@@ -106,6 +124,6 @@ G_M28200_IG13: ; bbWeight=0.50, epilog, nogc, extend
ret
;; size=7 bbWeight=0.50 PerfScore 1.50
-; Total bytes of code 122, prolog size 19, PerfScore 32.53, instruction count 49, allocated bytes for code 122 (MethodHash=59b491d7) for method Microsoft.FSharp.Collections.ListModule:TryLast[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
+; Total bytes of code 150, prolog size 19, PerfScore 41.67, instruction count 58, allocated bytes for code 150 (MethodHash=59b491d7) for method Microsoft.FSharp.Collections.ListModule:TryLast[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
; ============================================================
+27 (+24.77%) : 13222.dasm - Microsoft.FSharp.Core.OptionModule:ToListSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon
@@ -8,18 +8,17 @@
; Final local variable assignments
;
; V00 arg0 [V00,T01] ( 4, 3.50) ref -> ecx class-hnd single-def <Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]>
-; V01 TypeCtx [V01,T00] ( 7, 4.20) int -> eax single-def
+; V01 TypeCtx [V01,T00] ( 9, 4.80) int -> esi single-def
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]>
-; V03 loc1 [V03,T09] ( 2, 1 ) ref -> esi class-hnd single-def <System.__Canon>
+; V03 loc1 [V03,T09] ( 2, 1 ) ref -> edi class-hnd single-def <System.__Canon>
;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-;* V05 tmp1 [V05,T10] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V06 tmp2 [V06,T02] ( 3, 3 ) int -> edi "spilling helperCall"
+; V05 tmp1 [V05,T05] ( 3, 2 ) int -> ebx "spilling helperCall"
+; V06 tmp2 [V06,T06] ( 3, 2 ) int -> esi "spilling helperCall"
; V07 tmp3 [V07,T08] ( 2, 2 ) ref -> edx single-def "argument with side effect"
-; V08 cse0 [V08,T05] ( 4, 2 ) int -> registers multi-def "CSE - moderate"
-; V09 rat0 [V09,T06] ( 3, 2 ) int -> ecx "runtime lookup"
-; V10 rat1 [V10,T03] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
-; V11 rat2 [V11,T07] ( 3, 2 ) int -> registers "runtime lookup"
-; V12 rat3 [V12,T04] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V08 rat0 [V08,T07] ( 3, 2 ) int -> ecx "runtime lookup"
+; V09 rat1 [V09,T02] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
+; V10 rat2 [V10,T03] ( 3, 2.80) int -> ebx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T04] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -28,10 +27,11 @@ G_M43867_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
- mov dword ptr [ebp-0x0C], edx
- mov eax, edx
- ;; size=11 bbWeight=1 PerfScore 5.50
+ mov dword ptr [ebp-0x10], edx
+ mov esi, edx
+ ;; size=12 bbWeight=1 PerfScore 6.50
G_M43867_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz
; gcrRegs +[ecx]
test ecx, ecx
@@ -39,7 +39,7 @@ G_M43867_IG02: ; bbWeight=1, gcrefRegs=00000002 {ecx}, byrefRegs=00000000
;; size=4 bbWeight=1 PerfScore 1.25
G_M43867_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
; gcrRegs -[ecx]
- mov ecx, dword ptr [eax+0x20]
+ mov ecx, dword ptr [esi+0x20]
mov ecx, dword ptr [ecx+0x08]
test ecx, ecx
je SHORT G_M43867_IG05
@@ -48,63 +48,79 @@ G_M43867_IG04: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000
jmp SHORT G_M43867_IG06
;; size=2 bbWeight=0.40 PerfScore 0.80
G_M43867_IG05: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- mov ecx, eax
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
;; size=14 bbWeight=0.10 PerfScore 0.18
G_M43867_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- mov esi, ecx
call [Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:get_Empty():Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]]
; gcrRegs +[eax]
- ;; size=8 bbWeight=0.50 PerfScore 1.62
+ ;; size=6 bbWeight=0.50 PerfScore 1.50
G_M43867_IG07: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.50
+ ;; size=6 bbWeight=0.50 PerfScore 1.75
G_M43867_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax] +[ecx]
- mov esi, gword ptr [ecx+0x04]
- ; gcrRegs +[esi]
- mov ecx, dword ptr [eax+0x20]
+ mov edi, gword ptr [ecx+0x04]
+ ; gcrRegs +[edi]
+ mov ecx, dword ptr [esi+0x20]
; gcrRegs -[ecx]
- mov edx, dword ptr [ecx+0x08]
- test edx, edx
+ mov ebx, dword ptr [ecx+0x08]
+ test ebx, ebx
je SHORT G_M43867_IG10
;; size=13 bbWeight=0.50 PerfScore 3.62
-G_M43867_IG09: ; bbWeight=0.40, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref, isz
+G_M43867_IG09: ; bbWeight=0.40, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
jmp SHORT G_M43867_IG11
;; size=2 bbWeight=0.40 PerfScore 0.80
-G_M43867_IG10: ; bbWeight=0.10, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- mov ecx, eax
+G_M43867_IG10: ; bbWeight=0.10, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
+ call CORINFO_HELP_MEMCPY
+ mov ebx, eax
;; size=14 bbWeight=0.10 PerfScore 0.18
-G_M43867_IG11: ; bbWeight=0.50, gcrefRegs=00000040 {esi}, byrefRegs=00000000 {}, byref
- mov edi, edx
- mov ecx, edi
+G_M43867_IG11: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [esi+0x20]
+ mov eax, dword ptr [ecx+0x08]
+ test eax, eax
+ je SHORT G_M43867_IG13
+ ;; size=10 bbWeight=0.50 PerfScore 2.62
+G_M43867_IG12: ; bbWeight=0.40, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref, isz
+ mov esi, eax
+ jmp SHORT G_M43867_IG14
+ ;; size=4 bbWeight=0.40 PerfScore 0.90
+G_M43867_IG13: ; bbWeight=0.10, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, esi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
+ mov esi, eax
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M43867_IG14: ; bbWeight=0.50, gcrefRegs=00000080 {edi}, byrefRegs=00000000 {}, byref
+ mov ecx, ebx
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 edi
- mov ecx, esi
+ push esi
+ mov ecx, edi
; 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]]
- ; gcrRegs -[ecx edx esi]
- ;; size=21 bbWeight=0.50 PerfScore 4.00
-G_M43867_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ ; gcrRegs -[ecx edx edi]
+ ;; size=19 bbWeight=0.50 PerfScore 3.88
+G_M43867_IG15: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret
- ;; size=5 bbWeight=0.50 PerfScore 1.50
+ ;; size=6 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 109, prolog size 9, PerfScore 23.57, instruction count 47, allocated bytes for code 109 (MethodHash=da3254a4) for method Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
+; Total bytes of code 136, prolog size 10, PerfScore 28.52, instruction count 58, allocated bytes for code 136 (MethodHash=da3254a4) for method Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
; ============================================================
+31 (+28.97%) : 14302.dasm - System.GC:AllocateUninitializedArraySystem.__Canon:System.__Canon
@@ -10,15 +10,18 @@
;
; V00 arg0 [V00,T00] ( 4, 3 ) int -> esi single-def
; V01 arg1 [V01,T01] ( 3, 3 ) ubyte -> edx single-def
-; V02 TypeCtx [V02,T04] ( 5, 2.20) int -> ecx single-def
-; V03 loc0 [V03,T08] ( 2, 1 ) int -> edi
-; V04 loc1 [V04,T05] ( 3, 2 ) int -> edx "spilling helperCall"
+; V02 TypeCtx [V02,T02] ( 7, 2.88) int -> edi single-def
+; V03 loc0 [V03,T10] ( 2, 1 ) int -> ebx
+; V04 loc1 [V04,T07] ( 3, 2 ) int -> ecx "spilling helperCall"
;* V05 tmp1 [V05 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T07] ( 2, 2 ) int -> ecx "argument with side effect"
-; V08 rat0 [V08,T06] ( 3, 2 ) int -> ecx "runtime lookup"
-; V09 rat1 [V09,T02] ( 3, 2.80) int -> eax "fgMakeTemp is creating a new local variable"
-; V10 rat2 [V10,T03] ( 3, 2.80) int -> edx "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T09] ( 2, 2 ) int -> ecx "argument with side effect"
+;* V08 rat0 [V08,T11] ( 0, 0 ) int -> zero-ref "runtime lookup"
+; V09 rat1 [V09,T03] ( 3, 2.80) int -> ecx "spilling expr"
+; V10 rat2 [V10,T06] ( 2, 1.60) int -> ecx "fgMakeTemp is creating a new local variable"
+; V11 rat3 [V11,T08] ( 3, 2 ) int -> ecx "runtime lookup"
+; V12 rat4 [V12,T04] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
+; V13 rat5 [V13,T05] ( 3, 2.80) int -> ecx "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 4
@@ -27,74 +30,92 @@ G_M46119_IG01: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
mov ebp, esp
push edi
push esi
+ push ebx
push eax
mov eax, dword ptr [ebp+0x08]
- mov dword ptr [ebp-0x0C], eax
+ mov dword ptr [ebp-0x10], eax
mov esi, ecx
- mov ecx, dword ptr [ebp+0x08]
- ;; size=17 bbWeight=1 PerfScore 8.50
+ mov edi, dword ptr [ebp+0x08]
+ ;; size=18 bbWeight=1 PerfScore 9.50
G_M46119_IG02: ; bbWeight=1, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
test dl, dl
- jne SHORT G_M46119_IG08
+ jne SHORT G_M46119_IG11
;; size=4 bbWeight=1 PerfScore 1.25
G_M46119_IG03: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov edx, dword ptr [ecx+0x20]
- mov eax, dword ptr [edx+0x08]
- test eax, eax
- je SHORT G_M46119_IG05
- ;; size=10 bbWeight=0.50 PerfScore 2.62
+ mov ecx, dword ptr [edi+0x20]
+ cmp dword ptr [ecx+0x04], 12
+ jle SHORT G_M46119_IG05
+ ;; size=9 bbWeight=0.50 PerfScore 3.00
G_M46119_IG04: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- mov ecx, eax
- jmp SHORT G_M46119_IG06
- ;; size=4 bbWeight=0.40 PerfScore 0.90
-G_M46119_IG05: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, dword ptr [ecx+0x0C]
+ test ecx, ecx
+ jne SHORT G_M46119_IG06
+ ;; size=7 bbWeight=0.40 PerfScore 1.30
+G_M46119_IG05: ; bbWeight=0.18, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call CORINFO_HELP_MEMCPY
+ ;; size=12 bbWeight=0.18 PerfScore 0.27
+G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG08
+ ;; size=10 bbWeight=0.50 PerfScore 2.62
+G_M46119_IG07: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG09
+ ;; size=2 bbWeight=0.40 PerfScore 0.80
+G_M46119_IG08: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
+ mov edx, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_MEMCPY
mov ecx, eax
- ;; size=12 bbWeight=0.10 PerfScore 0.15
-G_M46119_IG06: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M46119_IG09: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
mov edx, esi
- call CORINFO_HELP_NEWARR_1_OBJ
+ call CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[eax]
;; size=7 bbWeight=0.50 PerfScore 0.62
-G_M46119_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M46119_IG10: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0.50 PerfScore 2.00
-G_M46119_IG08: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
+ ;; size=8 bbWeight=0.50 PerfScore 2.25
+G_M46119_IG11: ; bbWeight=0.50, gcVars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, gcvars, byref, isz
; gcrRegs -[eax]
- mov edi, 80
- mov edx, dword ptr [ecx+0x20]
- mov edx, dword ptr [edx+0x08]
- test edx, edx
- je SHORT G_M46119_IG10
+ mov ebx, 80
+ mov ecx, dword ptr [edi+0x20]
+ mov ecx, dword ptr [ecx+0x08]
+ test ecx, ecx
+ je SHORT G_M46119_IG13
;; size=15 bbWeight=0.50 PerfScore 2.75
-G_M46119_IG09: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
- jmp SHORT G_M46119_IG11
+G_M46119_IG12: ; bbWeight=0.40, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, isz
+ jmp SHORT G_M46119_IG14
;; size=2 bbWeight=0.40 PerfScore 0.80
-G_M46119_IG10: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+G_M46119_IG13: ; bbWeight=0.10, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ mov ecx, edi
mov edx, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov edx, eax
- ;; size=12 bbWeight=0.10 PerfScore 0.15
-G_M46119_IG11: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
- push edi
- mov ecx, edx
+ call CORINFO_HELP_MEMCPY
+ mov ecx, eax
+ ;; size=14 bbWeight=0.10 PerfScore 0.18
+G_M46119_IG14: ; bbWeight=0.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref
+ push ebx
mov edx, esi
call <unknown method>
; gcrRegs +[eax]
- ;; size=10 bbWeight=0.50 PerfScore 1.25
-G_M46119_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=8 bbWeight=0.50 PerfScore 1.12
+G_M46119_IG15: ; bbWeight=0.50, epilog, nogc, extend
pop ecx
+ pop ebx
pop esi
pop edi
pop ebp
ret 4
- ;; size=7 bbWeight=0.50 PerfScore 2.00
+ ;; size=8 bbWeight=0.50 PerfScore 2.25
-; Total bytes of code 107, prolog size 12, PerfScore 23.00, instruction count 45, allocated bytes for code 107 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
+; Total bytes of code 138, prolog size 13, PerfScore 28.89, instruction count 57, allocated bytes for code 138 (MethodHash=ac244bd8) for method System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
; ============================================================
Details
Improvements/regressions per collection
Collection |
Contexts with diffs |
Improvements |
Regressions |
Same size |
Improvements (bytes) |
Regressions (bytes) |
benchmarks.run.windows.x86.checked.mch |
30 |
7 |
17 |
6 |
-80 |
+586 |
benchmarks.run_pgo.windows.x86.checked.mch |
165 |
156 |
9 |
0 |
-1,744 |
+424 |
benchmarks.run_tiered.windows.x86.checked.mch |
19 |
8 |
11 |
0 |
-92 |
+435 |
coreclr_tests.run.windows.x86.checked.mch |
1 |
1 |
0 |
0 |
-11 |
+0 |
libraries.crossgen2.windows.x86.checked.mch |
0 |
0 |
0 |
0 |
-0 |
+0 |
libraries.pmi.windows.x86.checked.mch |
56 |
9 |
45 |
2 |
-217 |
+3,395 |
libraries_tests.run.windows.x86.Release.mch |
34 |
15 |
18 |
1 |
-147 |
+1,007 |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
50 |
13 |
36 |
1 |
-99 |
+1,756 |
realworld.run.windows.x86.checked.mch |
30 |
8 |
22 |
0 |
-67 |
+1,328 |
|
385 |
217 |
158 |
10 |
-2,457 |
+8,931 |
Context information
Collection |
Diffed contexts |
MinOpts |
FullOpts |
Missed, base |
Missed, diff |
benchmarks.run.windows.x86.checked.mch |
3,879 |
2 |
3,877 |
0 (0.00%) |
6,757 (61.25%) |
benchmarks.run_pgo.windows.x86.checked.mch |
9,464 |
6,947 |
2,517 |
1 (0.01%) |
7,326 (42.63%) |
benchmarks.run_tiered.windows.x86.checked.mch |
9,921 |
6,905 |
3,016 |
0 (0.00%) |
6,550 (38.83%) |
coreclr_tests.run.windows.x86.checked.mch |
996 |
3 |
993 |
0 (0.00%) |
11,014 (88.78%) |
libraries.crossgen2.windows.x86.checked.mch |
8,196 |
10 |
8,186 |
0 (0.00%) |
2,917 (25.35%) |
libraries.pmi.windows.x86.checked.mch |
13,321 |
0 |
13,321 |
0 (0.00%) |
12,775 (48.22%) |
libraries_tests.run.windows.x86.Release.mch |
8,972 |
8,335 |
637 |
1 (0.01%) |
7,166 (43.34%) |
librariestestsnotieredcompilation.run.windows.x86.Release.mch |
4,791 |
0 |
4,791 |
1 (0.01%) |
7,489 (59.08%) |
realworld.run.windows.x86.checked.mch |
4,808 |
1 |
4,807 |
0 (0.00%) |
12,350 (70.35%) |
|
64,348 |
22,203 |
42,145 |
3 (0.00%) |
74,344 (52.26%) |
jit-analyze output
benchmarks.run.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 378560 (overridden on cmd)
Total bytes of diff: 379066 (overridden on cmd)
Total bytes of delta: 506 (0.13 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
178 : 7464.dasm (59.53 % of base)
88 : 7155.dasm (40.55 % of base)
33 : 6406.dasm (15.35 % of base)
32 : 2509.dasm (17.68 % of base)
31 : 3350.dasm (28.97 % of base)
28 : 6563.dasm (9.59 % of base)
28 : 1584.dasm (9.69 % of base)
27 : 1012.dasm (20.15 % of base)
24 : 802.dasm (9.06 % of base)
24 : 3886.dasm (18.18 % of base)
22 : 6240.dasm (6.23 % of base)
22 : 7229.dasm (8.66 % of base)
21 : 5120.dasm (7.45 % of base)
16 : 7263.dasm (4.19 % of base)
5 : 2896.dasm (4.17 % of base)
4 : 2021.dasm (5.26 % of base)
3 : 8958.dasm (1.27 % of base)
Top file improvements (bytes):
-30 : 9048.dasm (-11.81 % of base)
-17 : 372.dasm (-6.27 % of base)
-11 : 680.dasm (-3.70 % of base)
-10 : 86.dasm (-3.19 % of base)
-4 : 2880.dasm (-2.17 % of base)
-4 : 681.dasm (-1.48 % of base)
-4 : 7590.dasm (-0.48 % of base)
24 total files with Code Size differences (7 improved, 17 regressed), 6 unchanged.
Top method regressions (bytes):
178 (59.53 % of base) : 7464.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (FullOpts)
88 (40.55 % of base) : 7155.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)
33 (15.35 % of base) : 6406.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
32 (17.68 % of base) : 2509.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
31 (28.97 % of base) : 3350.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
28 (9.69 % of base) : 1584.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.__Canon](System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)
28 (9.59 % of base) : 6563.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.ValueTuple`2[System.__Canon,System.__Canon]](System.__Canon,System.Func`3[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon],System.__Canon],System.ValueTuple`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
27 (20.15 % of base) : 1012.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
24 (18.18 % of base) : 3886.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
24 (9.06 % of base) : 802.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
22 (8.66 % of base) : 7229.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)
22 (6.23 % of base) : 6240.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
21 (7.45 % of base) : 5120.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
16 (4.19 % of base) : 7263.dasm - System.Security.Cryptography.X509Certificates.Tests.X509Certificate2Tests:GetMicrosoftComCert():System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
5 (4.17 % of base) : 2896.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
4 (5.26 % of base) : 2021.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
3 (1.27 % of base) : 8958.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
Top method improvements (bytes):
-30 (-11.81 % of base) : 9048.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
-17 (-6.27 % of base) : 372.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
-11 (-3.70 % of base) : 680.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-10 (-3.19 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
-4 (-2.17 % of base) : 2880.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
-4 (-1.48 % of base) : 681.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-0.48 % of base) : 7590.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)
Top method regressions (percentages):
178 (59.53 % of base) : 7464.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (FullOpts)
88 (40.55 % of base) : 7155.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)
31 (28.97 % of base) : 3350.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
27 (20.15 % of base) : 1012.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
24 (18.18 % of base) : 3886.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
32 (17.68 % of base) : 2509.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
33 (15.35 % of base) : 6406.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
28 (9.69 % of base) : 1584.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.__Canon](System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (FullOpts)
28 (9.59 % of base) : 6563.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.ValueTuple`2[System.__Canon,System.__Canon]](System.__Canon,System.Func`3[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon],System.__Canon],System.ValueTuple`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
24 (9.06 % of base) : 802.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
22 (8.66 % of base) : 7229.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)
21 (7.45 % of base) : 5120.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
22 (6.23 % of base) : 6240.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
4 (5.26 % of base) : 2021.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
16 (4.19 % of base) : 7263.dasm - System.Security.Cryptography.X509Certificates.Tests.X509Certificate2Tests:GetMicrosoftComCert():System.Security.Cryptography.X509Certificates.X509Certificate2 (FullOpts)
5 (4.17 % of base) : 2896.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
3 (1.27 % of base) : 8958.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
Top method improvements (percentages):
-30 (-11.81 % of base) : 9048.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
-17 (-6.27 % of base) : 372.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
-11 (-3.70 % of base) : 680.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-10 (-3.19 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
-4 (-2.17 % of base) : 2880.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
-4 (-1.48 % of base) : 681.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-0.48 % of base) : 7590.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)
24 total methods with Code Size differences (7 improved, 17 regressed).
benchmarks.run_pgo.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 841834 (overridden on cmd)
Total bytes of diff: 840514 (overridden on cmd)
Total bytes of delta: -1320 (-0.16 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file regressions (bytes):
178 : 16013.dasm (59.53 % of base)
47 : 7050.dasm (20.80 % of base)
47 : 11863.dasm (20.80 % of base)
41 : 8650.dasm (25.79 % of base)
31 : 11888.dasm (28.97 % of base)
29 : 12713.dasm (18.24 % of base)
24 : 2259.dasm (9.06 % of base)
22 : 5773.dasm (6.23 % of base)
5 : 8685.dasm (4.17 % of base)
Top file improvements (bytes):
-40 : 17045.dasm (-13.65 % of base)
-18 : 17092.dasm (-8.37 % of base)
-18 : 17034.dasm (-8.11 % of base)
-16 : 11193.dasm (-13.68 % of base)
-16 : 15917.dasm (-13.68 % of base)
-16 : 16053.dasm (-13.68 % of base)
-16 : 16841.dasm (-13.68 % of base)
-16 : 4770.dasm (-13.68 % of base)
-16 : 4962.dasm (-13.68 % of base)
-16 : 8861.dasm (-2.61 % of base)
-16 : 11341.dasm (-13.68 % of base)
-16 : 13053.dasm (-13.68 % of base)
-16 : 16717.dasm (-13.68 % of base)
-16 : 3878.dasm (-13.68 % of base)
-16 : 4682.dasm (-13.68 % of base)
-16 : 8877.dasm (-13.68 % of base)
-16 : 8893.dasm (-13.68 % of base)
-16 : 11957.dasm (-13.68 % of base)
-16 : 12193.dasm (-2.61 % of base)
-16 : 16789.dasm (-13.68 % of base)
48 total files with Code Size differences (39 improved, 9 regressed), 0 unchanged.
Top method regressions (bytes):
178 (59.53 % of base) : 16013.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
47 (20.80 % of base) : 7050.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
47 (20.80 % of base) : 11863.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
41 (25.79 % of base) : 8650.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
31 (28.97 % of base) : 11888.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
29 (18.24 % of base) : 12713.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
24 (9.06 % of base) : 2259.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
22 (6.23 % of base) : 5773.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
5 (4.17 % of base) : 8685.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
Top method improvements (bytes):
-40 (-13.65 % of base) : 17045.dasm - System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable+ConfiguredValueTaskAwaiter:System.Runtime.CompilerServices.IStateMachineBoxAwareAwaiter.AwaitUnsafeOnCompleted(System.Runtime.CompilerServices.IAsyncStateMachineBox):this (Tier1)
-18 (-8.11 % of base) : 17034.dasm - System.Threading.Tasks.ValueTask:get_IsCompleted():ubyte:this (Tier1)
-18 (-8.37 % of base) : 17092.dasm - System.Threading.Tasks.ValueTask:ThrowIfCompletedUnsuccessfully():this (Tier1)
-16 (-13.68 % of base) : 11193.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 15917.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16053.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16841.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 4770.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 4962.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 11341.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 13053.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16717.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 3878.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 4682.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 8877.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 8893.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 11957.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16789.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 3686.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 9065.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
Top method regressions (percentages):
178 (59.53 % of base) : 16013.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
31 (28.97 % of base) : 11888.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
41 (25.79 % of base) : 8650.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
47 (20.80 % of base) : 7050.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
47 (20.80 % of base) : 11863.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
29 (18.24 % of base) : 12713.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
24 (9.06 % of base) : 2259.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
22 (6.23 % of base) : 5773.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
5 (4.17 % of base) : 8685.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
Top method improvements (percentages):
-14 (-18.42 % of base) : 16618.dasm - System.Threading.ThreadPool+<>c:<.cctor>b__61_0(System.Object):this (Tier1)
-16 (-13.68 % of base) : 11193.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 15917.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16053.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16841.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 4770.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 4962.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 11341.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 13053.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16717.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 3878.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 4682.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 8877.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 8893.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 11957.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 16789.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 3686.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 9065.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 9113.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-13.68 % of base) : 11221.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
benchmarks.run_tiered.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 777492 (overridden on cmd)
Total bytes of diff: 777835 (overridden on cmd)
Total bytes of delta: 343 (0.04 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
178 : 6441.dasm (59.53 % of base)
47 : 10755.dasm (20.80 % of base)
37 : 3328.dasm (34.26 % of base)
32 : 8546.dasm (17.68 % of base)
31 : 9447.dasm (28.97 % of base)
28 : 6161.dasm (9.69 % of base)
27 : 2792.dasm (20.15 % of base)
24 : 2120.dasm (9.06 % of base)
22 : 10289.dasm (6.23 % of base)
5 : 7908.dasm (4.17 % of base)
4 : 12877.dasm (5.26 % of base)
Top file improvements (bytes):
-34 : 17156.dasm (-11.15 % of base)
-17 : 1246.dasm (-6.27 % of base)
-11 : 1819.dasm (-3.70 % of base)
-10 : 1398.dasm (-3.19 % of base)
-8 : 3715.dasm (-13.56 % of base)
-4 : 12070.dasm (-0.48 % of base)
-4 : 1820.dasm (-1.48 % of base)
-4 : 7747.dasm (-2.17 % of base)
19 total files with Code Size differences (8 improved, 11 regressed), 0 unchanged.
Top method regressions (bytes):
178 (59.53 % of base) : 6441.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
47 (20.80 % of base) : 10755.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
37 (34.26 % of base) : 3328.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
32 (17.68 % of base) : 8546.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
31 (28.97 % of base) : 9447.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
28 (9.69 % of base) : 6161.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.__Canon](System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (Tier1)
27 (20.15 % of base) : 2792.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
24 (9.06 % of base) : 2120.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
22 (6.23 % of base) : 10289.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
5 (4.17 % of base) : 7908.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
4 (5.26 % of base) : 12877.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
Top method improvements (bytes):
-34 (-11.15 % of base) : 17156.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier1)
-17 (-6.27 % of base) : 1246.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
-11 (-3.70 % of base) : 1819.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)
-10 (-3.19 % of base) : 1398.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-8 (-13.56 % of base) : 3715.dasm - System.Runtime.Intrinsics.Tests.Perf_Vector128:ConvertULongToDoubleBenchmark():System.Runtime.Intrinsics.Vector128`1[double]:this (Tier0)
-4 (-2.17 % of base) : 7747.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (Tier0-FullOpts)
-4 (-1.48 % of base) : 1820.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-4 (-0.48 % of base) : 12070.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)
Top method regressions (percentages):
178 (59.53 % of base) : 6441.dasm - Benchstone.BenchF.Trap:Test():ubyte:this (Tier0-FullOpts)
37 (34.26 % of base) : 3328.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
31 (28.97 % of base) : 9447.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
47 (20.80 % of base) : 10755.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
27 (20.15 % of base) : 2792.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
32 (17.68 % of base) : 8546.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
28 (9.69 % of base) : 6161.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.__Canon](System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (Tier1)
24 (9.06 % of base) : 2120.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
22 (6.23 % of base) : 10289.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
4 (5.26 % of base) : 12877.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
5 (4.17 % of base) : 7908.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
Top method improvements (percentages):
-8 (-13.56 % of base) : 3715.dasm - System.Runtime.Intrinsics.Tests.Perf_Vector128:ConvertULongToDoubleBenchmark():System.Runtime.Intrinsics.Vector128`1[double]:this (Tier0)
-34 (-11.15 % of base) : 17156.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier1)
-17 (-6.27 % of base) : 1246.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
-11 (-3.70 % of base) : 1819.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)
-10 (-3.19 % of base) : 1398.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-4 (-2.17 % of base) : 7747.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (Tier0-FullOpts)
-4 (-1.48 % of base) : 1820.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-4 (-0.48 % of base) : 12070.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)
19 total methods with Code Size differences (8 improved, 11 regressed).
coreclr_tests.run.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 88890 (overridden on cmd)
Total bytes of diff: 88879 (overridden on cmd)
Total bytes of delta: -11 (-0.01 % of base)
diff is an improvement.
relative diff is an improvement.
Detail diffs
Top file improvements (bytes):
-11 : 480.dasm (-3.70 % of base)
1 total files with Code Size differences (1 improved, 0 regressed), 0 unchanged.
Top method improvements (bytes):
-11 (-3.70 % 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):
-11 (-3.70 % of base) : 480.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
1 total methods with Code Size differences (1 improved, 0 regressed).
libraries.pmi.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 1533349 (overridden on cmd)
Total bytes of diff: 1536527 (overridden on cmd)
Total bytes of delta: 3178 (0.21 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
932 : 6075.dasm (200.00 % of base)
140 : 22793.dasm (55.56 % of base)
129 : 4224.dasm (42.16 % of base)
129 : 4226.dasm (42.16 % of base)
105 : 26231.dasm (63.25 % of base)
103 : 4148.dasm (46.61 % of base)
102 : 4174.dasm (35.29 % of base)
102 : 4194.dasm (35.29 % of base)
102 : 4155.dasm (35.29 % of base)
102 : 4184.dasm (35.29 % of base)
102 : 4204.dasm (35.29 % of base)
89 : 4127.dasm (33.97 % of base)
61 : 25899.dasm (50.41 % of base)
61 : 25963.dasm (50.41 % of base)
50 : 403.dasm (15.62 % of base)
50 : 4163.dasm (22.42 % of base)
50 : 4192.dasm (22.42 % of base)
50 : 4212.dasm (22.42 % of base)
50 : 9860.dasm (18.18 % of base)
50 : 4180.dasm (22.42 % of base)
Top file improvements (bytes):
-44 : 3932.dasm (-35.20 % of base)
-44 : 3936.dasm (-29.14 % of base)
-38 : 1242.dasm (-20.54 % of base)
-32 : 4131.dasm (-57.14 % of base)
-32 : 4132.dasm (-57.14 % of base)
-12 : 24462.dasm (-4.27 % of base)
-7 : 24453.dasm (-2.79 % of base)
-6 : 24446.dasm (-2.30 % of base)
-2 : 23900.dasm (-1.92 % of base)
49 total files with Code Size differences (9 improved, 40 regressed), 2 unchanged.
Top method regressions (bytes):
932 (200.00 % of base) : 6075.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
140 (55.56 % of base) : 22793.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)
129 (42.16 % of base) : 4224.dasm - System.Numerics.Vector:Max[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
129 (42.16 % of base) : 4226.dasm - System.Numerics.Vector:Min[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
105 (63.25 % of base) : 26231.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
103 (46.61 % of base) : 4148.dasm - System.Numerics.Vector:Dot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
102 (35.29 % 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)
102 (35.29 % 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)
102 (35.29 % 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)
102 (35.29 % 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)
102 (35.29 % 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)
89 (33.97 % 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)
61 (50.41 % of base) : 25899.dasm - Microsoft.FSharp.Core.ResultModule:ToList[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
61 (50.41 % of base) : 25963.dasm - Microsoft.FSharp.Core.ValueOption:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
50 (15.62 % of base) : 403.dasm - System.Array:Sort[System.__Canon,System.Nullable`1[int]](System.__Canon[],System.Nullable`1[int][],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
50 (22.42 % of base) : 4163.dasm - System.Numerics.Vector:EqualsAny[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):ubyte (FullOpts)
50 (22.42 % of base) : 4180.dasm - System.Numerics.Vector:GreaterThanAll[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):ubyte (FullOpts)
50 (22.42 % of base) : 4192.dasm - System.Numerics.Vector:GreaterThanOrEqualAny[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):ubyte (FullOpts)
50 (22.42 % of base) : 4200.dasm - System.Numerics.Vector:LessThanAll[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):ubyte (FullOpts)
50 (22.42 % of base) : 4212.dasm - System.Numerics.Vector:LessThanOrEqualAny[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):ubyte (FullOpts)
Top method improvements (bytes):
-44 (-35.20 % of base) : 3932.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
-44 (-29.14 % of base) : 3936.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
-38 (-20.54 % of base) : 1242.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (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)
-12 (-4.27 % of base) : 24462.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)
-7 (-2.79 % of base) : 24453.dasm - Microsoft.FSharp.Collections.SeqModule:Sum$W[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-6 (-2.30 % of base) : 24446.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-2 (-1.92 % of base) : 23900.dasm - Microsoft.FSharp.Collections.ListModule:IterateIndexed[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]) (FullOpts)
Top method regressions (percentages):
932 (200.00 % of base) : 6075.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
105 (63.25 % of base) : 26231.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
140 (55.56 % of base) : 22793.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)
32 (52.46 % of base) : 23932.dasm - Microsoft.FSharp.Collections.ListModule:Singleton[System.__Canon](System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
61 (50.41 % of base) : 25899.dasm - Microsoft.FSharp.Core.ResultModule:ToList[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
61 (50.41 % of base) : 25963.dasm - Microsoft.FSharp.Core.ValueOption:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
103 (46.61 % of base) : 4148.dasm - System.Numerics.Vector:Dot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
129 (42.16 % of base) : 4224.dasm - System.Numerics.Vector:Max[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
129 (42.16 % of base) : 4226.dasm - System.Numerics.Vector:Min[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
27 (40.91 % of base) : 25901.dasm - Microsoft.FSharp.Core.ResultModule:ToOption[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpResult`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
102 (35.29 % 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)
102 (35.29 % 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)
102 (35.29 % 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)
102 (35.29 % 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)
102 (35.29 % 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)
89 (33.97 % 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)
50 (25.91 % of base) : 9858.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,int,int) (FullOpts)
27 (24.77 % of base) : 26027.dasm - Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
28 (23.33 % of base) : 6256.dasm - System.Runtime.Intrinsics.Vector128:AsVector[System.__Canon](System.Runtime.Intrinsics.Vector128`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
28 (23.33 % of base) : 6254.dasm - System.Runtime.Intrinsics.Vector128:AsVector128[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.Runtime.Intrinsics.Vector128`1[System.__Canon] (FullOpts)
Top method improvements (percentages):
-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)
-44 (-35.20 % of base) : 3932.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
-44 (-29.14 % of base) : 3936.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
-38 (-20.54 % of base) : 1242.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
-12 (-4.27 % of base) : 24462.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)
-7 (-2.79 % of base) : 24453.dasm - Microsoft.FSharp.Collections.SeqModule:Sum$W[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-6 (-2.30 % of base) : 24446.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
-2 (-1.92 % of base) : 23900.dasm - Microsoft.FSharp.Collections.ListModule:IterateIndexed[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]) (FullOpts)
libraries_tests.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 796580 (overridden on cmd)
Total bytes of diff: 797440 (overridden on cmd)
Total bytes of delta: 860 (0.11 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
219 : 7235.dasm (19.01 % of base)
100 : 11855.dasm (23.53 % of base)
92 : 17440.dasm (19.83 % of base)
88 : 3568.dasm (40.37 % of base)
72 : 12696.dasm (34.78 % of base)
66 : 18168.dasm (22.84 % of base)
65 : 7154.dasm (13.66 % of base)
57 : 12009.dasm (12.69 % of base)
48 : 17432.dasm (21.05 % of base)
44 : 17433.dasm (13.88 % of base)
31 : 3549.dasm (26.05 % of base)
31 : 4946.dasm (26.05 % of base)
24 : 4205.dasm (8.25 % of base)
22 : 5756.dasm (6.23 % of base)
20 : 18781.dasm (6.69 % of base)
16 : 6934.dasm (3.87 % of base)
10 : 6269.dasm (1.61 % of base)
2 : 313.dasm (0.61 % of base)
Top file improvements (bytes):
-31 : 1183.dasm (-34.07 % of base)
-18 : 4426.dasm (-15.13 % of base)
-18 : 929.dasm (-15.13 % of base)
-16 : 4428.dasm (-4.68 % of base)
-16 : 932.dasm (-4.68 % of base)
-11 : 148.dasm (-3.70 % of base)
-6 : 2184.dasm (-0.65 % of base)
-6 : 1781.dasm (-1.03 % of base)
-5 : 11936.dasm (-2.01 % of base)
-4 : 854.dasm (-1.48 % of base)
-4 : 1099.dasm (-1.47 % of base)
-4 : 6435.dasm (-1.45 % of base)
-4 : 6253.dasm (-0.49 % of base)
-3 : 1390.dasm (-3.33 % of base)
-1 : 10804.dasm (-0.48 % of base)
33 total files with Code Size differences (15 improved, 18 regressed), 1 unchanged.
Top method regressions (bytes):
219 (19.01 % of base) : 7235.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
100 (23.53 % of base) : 11855.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 (Tier0-FullOpts)
92 (19.83 % of base) : 17440.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (Tier0-FullOpts)
88 (40.37 % of base) : 3568.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
72 (34.78 % of base) : 12696.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (Tier0-FullOpts)
66 (22.84 % of base) : 18168.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveMethodsNotDeclaredStatic[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (Tier0-FullOpts)
65 (13.66 % of base) : 7154.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (Tier0-FullOpts)
57 (12.69 % of base) : 12009.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]] (Tier0-FullOpts)
48 (21.05 % of base) : 17432.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:ClearContainingTypeMap[System.__Canon](byref) (Tier0-FullOpts)
44 (13.88 % of base) : 17433.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveInaccessibleTypeArguments[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref):this (Tier0-FullOpts)
31 (26.05 % of base) : 3549.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
31 (26.05 % of base) : 4946.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
24 (8.25 % of base) : 4205.dasm - System.Linq.Enumerable:MaxInteger[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int](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],int]):int (Tier0-FullOpts)
22 (6.23 % of base) : 5756.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
20 (6.69 % of base) : 18781.dasm - Roslyn.Utilities.IReadOnlyListExtensions:Contains[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
16 (3.87 % of base) : 6934.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (Tier0-FullOpts)
10 (1.61 % of base) : 6269.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] (Tier0-FullOpts)
2 (0.61 % of base) : 313.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] (Tier0-FullOpts)
Top method improvements (bytes):
-31 (-34.07 % of base) : 1183.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
-18 (-15.13 % of base) : 4426.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-18 (-15.13 % of base) : 929.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-4.68 % of base) : 4428.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-16 (-4.68 % of base) : 932.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-11 (-3.70 % of base) : 148.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)
-6 (-1.03 % of base) : 1781.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)
-6 (-0.65 % of base) : 2184.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)
-5 (-2.01 % of base) : 11936.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier0-FullOpts)
-4 (-1.45 % of base) : 6435.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] (Tier0-FullOpts)
-4 (-1.47 % of base) : 1099.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-4 (-1.48 % of base) : 854.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-4 (-0.49 % of base) : 6253.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)
-3 (-3.33 % of base) : 1390.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
-1 (-0.48 % of base) : 10804.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (Tier0-FullOpts)
Top method regressions (percentages):
88 (40.37 % of base) : 3568.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
72 (34.78 % of base) : 12696.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (Tier0-FullOpts)
31 (26.05 % of base) : 3549.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
31 (26.05 % of base) : 4946.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
100 (23.53 % of base) : 11855.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 (Tier0-FullOpts)
66 (22.84 % of base) : 18168.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveMethodsNotDeclaredStatic[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (Tier0-FullOpts)
48 (21.05 % of base) : 17432.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:ClearContainingTypeMap[System.__Canon](byref) (Tier0-FullOpts)
92 (19.83 % of base) : 17440.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (Tier0-FullOpts)
219 (19.01 % of base) : 7235.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
44 (13.88 % of base) : 17433.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveInaccessibleTypeArguments[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref):this (Tier0-FullOpts)
65 (13.66 % of base) : 7154.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (Tier0-FullOpts)
57 (12.69 % of base) : 12009.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]] (Tier0-FullOpts)
24 (8.25 % of base) : 4205.dasm - System.Linq.Enumerable:MaxInteger[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],int](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],int]):int (Tier0-FullOpts)
20 (6.69 % of base) : 18781.dasm - Roslyn.Utilities.IReadOnlyListExtensions:Contains[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (Tier0-FullOpts)
22 (6.23 % of base) : 5756.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier0-FullOpts)
16 (3.87 % of base) : 6934.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (Tier0-FullOpts)
10 (1.61 % of base) : 6269.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] (Tier0-FullOpts)
2 (0.61 % of base) : 313.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] (Tier0-FullOpts)
Top method improvements (percentages):
-31 (-34.07 % of base) : 1183.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
-18 (-15.13 % of base) : 4426.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-18 (-15.13 % of base) : 929.dasm - System.Reflection.IntrospectionExtensions:GetTypeInfo(System.Type):System.Reflection.TypeInfo (Tier1)
-16 (-4.68 % of base) : 4428.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-16 (-4.68 % of base) : 932.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
-11 (-3.70 % of base) : 148.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)
-3 (-3.33 % of base) : 1390.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
-5 (-2.01 % of base) : 11936.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (Tier0-FullOpts)
-4 (-1.48 % of base) : 854.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-4 (-1.47 % of base) : 1099.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier0-FullOpts)
-4 (-1.45 % of base) : 6435.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] (Tier0-FullOpts)
-6 (-1.03 % of base) : 1781.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)
-6 (-0.65 % of base) : 2184.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)
-4 (-0.49 % of base) : 6253.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)
-1 (-0.48 % of base) : 10804.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (Tier0-FullOpts)
33 total methods with Code Size differences (15 improved, 18 regressed).
librariestestsnotieredcompilation.run.windows.x86.Release.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 359330 (overridden on cmd)
Total bytes of diff: 360987 (overridden on cmd)
Total bytes of delta: 1657 (0.46 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
219 : 3430.dasm (19.01 % of base)
100 : 6347.dasm (23.53 % of base)
98 : 10142.dasm (91.59 % of base)
92 : 10031.dasm (19.83 % of base)
88 : 69.dasm (40.37 % of base)
84 : 10030.dasm (17.50 % of base)
72 : 6806.dasm (34.78 % of base)
66 : 10499.dasm (22.84 % of base)
66 : 10038.dasm (21.29 % of base)
65 : 3410.dasm (13.66 % of base)
64 : 3268.dasm (35.16 % of base)
64 : 3358.dasm (33.86 % of base)
57 : 6449.dasm (12.36 % of base)
52 : 14614.dasm (5.00 % of base)
48 : 10024.dasm (21.05 % of base)
47 : 9560.dasm (18.08 % of base)
44 : 10025.dasm (13.88 % of base)
39 : 7342.dasm (34.82 % of base)
36 : 6462.dasm (76.60 % of base)
35 : 10089.dasm (32.11 % of base)
Top file improvements (bytes):
-38 : 15050.dasm (-27.14 % of base)
-11 : 58.dasm (-3.70 % of base)
-7 : 10019.dasm (-0.81 % of base)
-6 : 734.dasm (-1.03 % of base)
-6 : 967.dasm (-0.65 % of base)
-5 : 11458.dasm (-2.62 % of base)
-5 : 6440.dasm (-2.01 % of base)
-4 : 3072.dasm (-0.48 % of base)
-4 : 345.dasm (-1.47 % of base)
-4 : 10669.dasm (-1.44 % of base)
-4 : 294.dasm (-1.48 % of base)
-4 : 3143.dasm (-1.39 % of base)
-1 : 5604.dasm (-0.45 % of base)
46 total files with Code Size differences (13 improved, 33 regressed), 1 unchanged.
Top method regressions (bytes):
219 (19.01 % of base) : 3430.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)
100 (23.53 % of base) : 6347.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)
98 (91.59 % of base) : 10142.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)
92 (19.83 % of base) : 10031.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
88 (40.37 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
84 (17.50 % of base) : 10030.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveLessDerivedMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref) (FullOpts)
72 (34.78 % of base) : 6806.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
66 (22.84 % of base) : 10499.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveMethodsNotDeclaredStatic[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
66 (21.29 % of base) : 10038.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveStaticInstanceMismatches[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte) (FullOpts)
65 (13.66 % of base) : 3410.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (FullOpts)
64 (33.86 % of base) : 3358.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)
64 (35.16 % of base) : 3268.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
57 (12.36 % of base) : 6449.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)
52 (5.00 % of base) : 14614.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:GetTheBestCandidateIndex[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,byref):int:this (FullOpts)
48 (21.05 % of base) : 10024.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:ClearContainingTypeMap[System.__Canon](byref) (FullOpts)
47 (18.08 % of base) : 9560.dasm - Microsoft.CodeAnalysis.HashSetExtensions:Any[System.__Canon](System.Collections.Generic.HashSet`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
44 (13.88 % of base) : 10025.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveInaccessibleTypeArguments[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref):this (FullOpts)
39 (34.82 % of base) : 7342.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.GreenNodeExtensions:ToGreenSeparatedList[System.__Canon](Microsoft.CodeAnalysis.SyntaxNode):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon] (FullOpts)
36 (76.60 % of base) : 6462.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
35 (32.11 % of base) : 10089.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]:Add[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.__Canon):ubyte:this (FullOpts)
Top method improvements (bytes):
-38 (-27.14 % of base) : 15050.dasm - Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerable`1[Microsoft.CodeAnalysis.SyntaxToken]:GetEnumerator():Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerator`1[Microsoft.CodeAnalysis.SyntaxToken]:this (FullOpts)
-11 (-3.70 % of base) : 58.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-7 (-0.81 % of base) : 10019.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:PerformMemberOverloadResolution[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,ubyte,ubyte,ubyte,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,ubyte,ubyte,byref,byref,ubyte,ubyte,ubyte):this (FullOpts)
-6 (-1.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)
-6 (-0.65 % 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)
-5 (-2.62 % of base) : 11458.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
-5 (-2.01 % of base) : 6440.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
-4 (-1.39 % of base) : 3143.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)
-4 (-1.44 % of base) : 10669.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
-4 (-1.47 % of base) : 345.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-1.48 % of base) : 294.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-0.48 % of base) : 3072.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)
-1 (-0.45 % of base) : 5604.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
Top method regressions (percentages):
98 (91.59 % of base) : 10142.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)
36 (76.60 % of base) : 6462.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
29 (40.85 % of base) : 1119.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
88 (40.37 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
26 (40.00 % of base) : 4521.dasm - System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
64 (35.16 % of base) : 3268.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
39 (34.82 % of base) : 7342.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.GreenNodeExtensions:ToGreenSeparatedList[System.__Canon](Microsoft.CodeAnalysis.SyntaxNode):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon] (FullOpts)
72 (34.78 % of base) : 6806.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
64 (33.86 % of base) : 3358.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)
35 (32.11 % of base) : 10089.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]:Add[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.__Canon):ubyte:this (FullOpts)
31 (28.97 % of base) : 12606.dasm - System.GC:AllocateUninitializedArray[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](int,ubyte):System.Collections.Immutable.ImmutableArray`1[System.__Canon][] (FullOpts)
100 (23.53 % of base) : 6347.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)
30 (23.26 % of base) : 1081.dasm - Xunit.Sdk.ExceptionAggregator:RunAsync[System.__Canon](System.Func`1[System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon]:this (FullOpts)
66 (22.84 % of base) : 10499.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveMethodsNotDeclaredStatic[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
66 (21.29 % of base) : 10038.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveStaticInstanceMismatches[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte) (FullOpts)
48 (21.05 % of base) : 10024.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:ClearContainingTypeMap[System.__Canon](byref) (FullOpts)
92 (19.83 % of base) : 10031.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
219 (19.01 % of base) : 3430.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)
47 (18.08 % of base) : 9560.dasm - Microsoft.CodeAnalysis.HashSetExtensions:Any[System.__Canon](System.Collections.Generic.HashSet`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
32 (17.68 % of base) : 2346.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)
Top method improvements (percentages):
-38 (-27.14 % of base) : 15050.dasm - Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerable`1[Microsoft.CodeAnalysis.SyntaxToken]:GetEnumerator():Microsoft.CodeAnalysis.Collections.SegmentedArray+AlignedSegmentEnumerator`1[Microsoft.CodeAnalysis.SyntaxToken]:this (FullOpts)
-11 (-3.70 % of base) : 58.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-5 (-2.62 % of base) : 11458.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
-5 (-2.01 % of base) : 6440.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
-4 (-1.48 % of base) : 294.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-1.47 % of base) : 345.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-1.44 % of base) : 10669.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
-4 (-1.39 % of base) : 3143.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)
-6 (-1.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)
-7 (-0.81 % of base) : 10019.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:PerformMemberOverloadResolution[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[System.__Canon],Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations],Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.AnalyzedArguments,ubyte,ubyte,ubyte,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,ubyte,ubyte,byref,byref,ubyte,ubyte,ubyte):this (FullOpts)
-6 (-0.65 % 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)
-4 (-0.48 % of base) : 3072.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)
-1 (-0.45 % of base) : 5604.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
realworld.run.windows.x86.checked.mch
To reproduce these diffs on Windows x86:
superpmi.py asmdiffs -target_os windows -target_arch x86 -arch x86
Summary of Code Size diffs:
(Lower is better)
Total bytes of base: 559958 (overridden on cmd)
Total bytes of diff: 561219 (overridden on cmd)
Total bytes of delta: 1261 (0.23 % of base)
diff is a regression.
relative diff is a regression.
Detail diffs
Top file regressions (bytes):
378 : 6874.dasm (65.40 % of base)
119 : 9450.dasm (20.20 % of base)
105 : 2114.dasm (63.25 % of base)
88 : 17792.dasm (37.61 % of base)
87 : 8937.dasm (45.31 % of base)
85 : 8926.dasm (16.25 % of base)
72 : 5806.dasm (11.13 % of base)
33 : 3227.dasm (10.75 % of base)
32 : 14287.dasm (17.68 % of base)
32 : 2615.dasm (11.23 % of base)
32 : 8586.dasm (20.65 % of base)
31 : 14302.dasm (28.97 % of base)
30 : 5911.dasm (9.09 % of base)
30 : 4585.dasm (9.77 % of base)
28 : 2879.dasm (7.69 % of base)
28 : 4919.dasm (22.95 % of base)
27 : 13222.dasm (24.77 % of base)
27 : 2264.dasm (20.15 % of base)
24 : 10039.dasm (9.84 % of base)
24 : 865.dasm (9.06 % of base)
Top file improvements (bytes):
-17 : 372.dasm (-6.27 % of base)
-11 : 735.dasm (-3.70 % of base)
-11 : 15233.dasm (-2.11 % of base)
-10 : 86.dasm (-3.19 % of base)
-6 : 15673.dasm (-1.03 % of base)
-4 : 15970.dasm (-1.47 % of base)
-4 : 3246.dasm (-0.49 % of base)
-4 : 736.dasm (-1.48 % of base)
30 total files with Code Size differences (8 improved, 22 regressed), 0 unchanged.
Top method regressions (bytes):
378 (65.40 % of base) : 6874.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)
119 (20.20 % of base) : 9450.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)
105 (63.25 % of base) : 2114.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
88 (37.61 % of base) : 17792.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
87 (45.31 % of base) : 8937.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
85 (16.25 % of base) : 8926.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)
72 (11.13 % of base) : 5806.dasm - FSharp.Compiler.AbstractIL.ILBinaryReader:seekReadIndexedRows$cont@793[System.__Canon,FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag],System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],int,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag]],Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag],int],Microsoft.FSharp.Core.Unit):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
33 (10.75 % of base) : 3227.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
32 (20.65 % of base) : 8586.dasm - <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)
32 (11.23 % of base) : 2615.dasm - Microsoft.FSharp.Primitives.Basics.List:map[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)
32 (17.68 % of base) : 14287.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
31 (28.97 % of base) : 14302.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
30 (9.09 % of base) : 5911.dasm - Microsoft.FSharp.Primitives.Basics.List:distinctByWithComparer[System.__Canon,System.__Canon](System.Collections.Generic.IEqualityComparer`1[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)
30 (9.77 % of base) : 4585.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)
28 (22.95 % of base) : 4919.dasm - Microsoft.FSharp.Collections.ListModule:TryLast[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
28 (7.69 % of base) : 2879.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)
27 (24.77 % of base) : 13222.dasm - Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
27 (20.15 % of base) : 2264.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
24 (9.84 % of base) : 10039.dasm - FSharp.Compiler.NameResolution:LookupTypeNameNoArity[System.__Canon](System.String,Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.__Canon],Internal.Utilities.Library.LayeredMultiMap`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
24 (9.06 % of base) : 865.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
Top method improvements (bytes):
-17 (-6.27 % of base) : 372.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
-11 (-3.70 % of base) : 735.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-11 (-2.11 % of base) : 15233.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
-10 (-3.19 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
-6 (-1.03 % of base) : 15673.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)
-4 (-1.47 % of base) : 15970.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-1.48 % of base) : 736.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-0.49 % of base) : 3246.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)
Top method regressions (percentages):
378 (65.40 % of base) : 6874.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)
105 (63.25 % of base) : 2114.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
87 (45.31 % of base) : 8937.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
88 (37.61 % of base) : 17792.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
31 (28.97 % of base) : 14302.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
27 (24.77 % of base) : 13222.dasm - Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
28 (22.95 % of base) : 4919.dasm - Microsoft.FSharp.Collections.ListModule:TryLast[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpOption`1[System.__Canon] (FullOpts)
32 (20.65 % of base) : 8586.dasm - <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)
119 (20.20 % of base) : 9450.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)
27 (20.15 % of base) : 2264.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
32 (17.68 % of base) : 14287.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
85 (16.25 % of base) : 8926.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)
32 (11.23 % of base) : 2615.dasm - Microsoft.FSharp.Primitives.Basics.List:map[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)
72 (11.13 % of base) : 5806.dasm - FSharp.Compiler.AbstractIL.ILBinaryReader:seekReadIndexedRows$cont@793[System.__Canon,FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag],System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[int,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],int,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag]],Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.ILBinaryReader+TaggedIndex`1[FSharp.Compiler.AbstractIL.BinaryConstants+TypeOrMethodDefTag],int],Microsoft.FSharp.Core.Unit):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
33 (10.75 % of base) : 3227.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
24 (9.84 % of base) : 10039.dasm - FSharp.Compiler.NameResolution:LookupTypeNameNoArity[System.__Canon](System.String,Microsoft.FSharp.Collections.FSharpMap`2[System.__Canon,System.__Canon],Internal.Utilities.Library.LayeredMultiMap`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
30 (9.77 % of base) : 4585.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)
30 (9.09 % of base) : 5911.dasm - Microsoft.FSharp.Primitives.Basics.List:distinctByWithComparer[System.__Canon,System.__Canon](System.Collections.Generic.IEqualityComparer`1[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)
24 (9.06 % of base) : 865.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
28 (7.69 % of base) : 2879.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)
Top method improvements (percentages):
-17 (-6.27 % of base) : 372.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
-11 (-3.70 % of base) : 735.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
-10 (-3.19 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (FullOpts)
-11 (-2.11 % of base) : 15233.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
-4 (-1.48 % of base) : 736.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-4 (-1.47 % of base) : 15970.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
-6 (-1.03 % of base) : 15673.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)
-4 (-0.49 % of base) : 3246.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)
30 total methods with Code Size differences (8 improved, 22 regressed).