Assembly Diffs

linux arm

Diffs are based on 108,959 contexts (31,685 MinOpts, 77,274 FullOpts).

MISSED contexts: base: 3,443 (1.99%), diff: 60,787 (35.10%)

Overall (+11,058 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 1,121,796 +794
benchmarks.run_pgo.linux.arm.checked.mch 10,036,728 -2,712
benchmarks.run_tiered.linux.arm.checked.mch 1,965,850 +478
coreclr_tests.run.linux.arm.checked.mch 402,396 +218
libraries.pmi.linux.arm.checked.mch 1,326,876 +4,820
libraries_tests.run.linux.arm.Release.mch 1,038,666 +1,514
librariestestsnotieredcompilation.run.linux.arm.Release.mch 907,522 +2,778
realworld.run.linux.arm.checked.mch 3,308,824 +3,168

MinOpts (-100 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.linux.arm.checked.mch 3,909,502 -32
benchmarks.run_tiered.linux.arm.checked.mch 1,379,422 -126
coreclr_tests.run.linux.arm.checked.mch 293,108 +92
libraries_tests.run.linux.arm.Release.mch 246,546 -34

FullOpts (+11,158 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm.checked.mch 1,060,860 +794
benchmarks.run_pgo.linux.arm.checked.mch 6,127,226 -2,680
benchmarks.run_tiered.linux.arm.checked.mch 586,428 +604
coreclr_tests.run.linux.arm.checked.mch 109,288 +126
libraries.pmi.linux.arm.checked.mch 1,326,876 +4,820
libraries_tests.run.linux.arm.Release.mch 792,120 +1,548
librariestestsnotieredcompilation.run.linux.arm.Release.mch 907,470 +2,778
realworld.run.linux.arm.checked.mch 3,299,636 +3,168

Example diffs

benchmarks.run.linux.arm.checked.mch

-12 (-14.29%) : 9979.dasm - System.IO.StreamBuffer:.ctor(int,int):this (FullOpts)

@@ -13,13 +13,14 @@ ; V02 arg2 [V02,T01] ( 3, 3 ) int -> r2 single-def ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] ld-addr-op "NewObj constructor temp" <System.Net.MultiArrayBuffer>
-; V05 tmp2 [V05,T02] ( 2, 4 ) ref -> r1 class-hnd exact single-def "NewObj constructor temp" <System.IO.StreamBuffer+ResettableValueTaskSource>
+; V05 tmp2 [V05,T02] ( 2, 4 ) ref -> r3 class-hnd exact single-def "NewObj constructor temp" <System.IO.StreamBuffer+ResettableValueTaskSource>
; V06 tmp3 [V06,T03] ( 2, 4 ) ref -> r1 class-hnd exact single-def "NewObj constructor temp" <System.IO.StreamBuffer+ResettableValueTaskSource>
+; V07 cse0 [V07,T04] ( 3, 3 ) ref -> [sp+0x04] spill-single-def "CSE - aggressive"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M57706_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,lr}
+ push {r2,r3,r4,lr}
mov r4, r0 ; gcrRegs +[r4] ;; size=4 bbWeight=1 PerfScore 2.00 @@ -34,42 +35,40 @@ G_M57706_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre movt r0, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWFAST
+ blx r3 // CORINFO_HELP_DBLROUND
; gcrRegs +[r0] ; gcr arg pop 0 mov r1, r0 ; gcrRegs +[r1]
+ str r1, [sp+0x04] + ; GC ptr vars +{V07} + mov r3, r1 + ; gcrRegs +[r3]
adds r0, r4, 4 ; gcrRegs -[r0] ; byrRegs +[r0]
+ mov r1, r3
movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[r1]
+ ; gcrRegs -[r1 r3]
; byrRegs -[r0]
- movw r0, 0xd1ff - movt r0, 0xd1ff - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_NEWFAST - ; gcrRegs +[r0] - ; gcr arg pop 0 - mov r1, r0
+ ldr r1, [sp+0x04] // [V07 cse0]
; gcrRegs +[r1] add r0, r4, 8
- ; gcrRegs -[r0]
; byrRegs +[r0] movw r12, 0xd1ff movt r12, 0xd1ff
+ ; GC ptr vars -{V07}
blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1 r4] ; byrRegs -[r0]
- ;; size=78 bbWeight=1 PerfScore 26.00
+ ;; size=66 bbWeight=1 PerfScore 24.00
G_M57706_IG03: ; bbWeight=1, epilog, nogc, extend
- pop {r4,pc}
+ pop {r2,r3,r4,pc}
;; size=2 bbWeight=1 PerfScore 1.00
-; Total bytes of code 84, prolog size 2, PerfScore 29.00, instruction count 29, allocated bytes for code 84 (MethodHash=b7eb1e95) for method System.IO.StreamBuffer:.ctor(int,int):this (FullOpts)
+; Total bytes of code 72, prolog size 2, PerfScore 27.00, instruction count 27, allocated bytes for code 72 (MethodHash=b7eb1e95) for method System.IO.StreamBuffer:.ctor(int,int):this (FullOpts)
; ============================================================ Unwind Info: @@ -81,12 +80,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 42 (0x0002a) Actual length = 84 (0x000054)
+ Function Length : 36 (0x00024) Actual length = 72 (0x000048)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- D4 pop {r4,lr} ; opsize 16 - FF end
+ ED 1C pop {r2,r3,r4,lr} ; opsize 16
FF end FF end

-26 (-11.21%) : 4257.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%) : 3494.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 ----

+32 (+20.00%) : 1658.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%) : 6630.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%) : 1745.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

-18 (-5.06%) : 13605.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,27 +9,27 @@ ; 0 inlinees with PGO data; 3 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.11) int -> r1 single-def -; V02 arg2 [V02,T04] ( 4, 3.11) int -> r2 single-def -; V03 arg3 [V03,T05] ( 4, 3.11) 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.11) int -> r1 single-def +; V02 arg2 [V02,T03] ( 4, 3.11) int -> r2 single-def +; V03 arg3 [V03,T04] ( 4, 3.11) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1.11) 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,T01] ( 24, 6.00) 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 -> r5 class-hnd <<unknown class>>
+; V07 loc0 [V07,T00] ( 24, 6.00) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T09] ( 9, 3 ) 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,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,T15] ( 2, 0.42) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V16 tmp7 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T11] ( 2, 2 ) int -> r5 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T12] ( 2, 2 ) int -> r7 "field V16.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V19 rat0 [V19,T06] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,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,T15] ( 2, 0.42) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V14 tmp5 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T11] ( 2, 2 ) int -> r5 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T12] ( 2, 2 ) int -> r7 "field V14.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V17 tmp8 [V17,T08] ( 2, 4 ) int -> r0 "argument with side effect" +; V18 rat0 [V18,T05] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V19 rat1 [V19,T07] ( 3, 4 ) int -> r0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 24 @@ -46,7 +46,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=22 bbWeight=1 PerfScore 8.00 G_M33863_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz cmp r2, 0
- bne SHORT G_M33863_IG07
+ bne SHORT G_M33863_IG11
;; size=4 bbWeight=1 PerfScore 2.00 G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz str r5, [sp+0x08] @@ -55,39 +55,84 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r5, [sp+0x10] // [V07 loc0+0x08] movs r5, 0 cmp r6, 6
- bhi G_M33863_IG19
+ bhi SHORT G_M33863_IG16
movw r1, LOW ADDRESS J_M33863_DS00 movt r1, HIGH ADDRESS J_M33863_DS00 J_M33863_DS00 LABEL DWORD
- DD G_M33863_IG20
+ DD G_M33863_IG17 + DD G_M33863_IG12 + DD G_M33863_IG10 + DD G_M33863_IG09 + DD G_M33863_IG13
DD G_M33863_IG15 DD G_M33863_IG14
- DD G_M33863_IG13 - DD G_M33863_IG16 - DD G_M33863_IG18 - DD G_M33863_IG17
ldr pc, [r1+4*r6]
- ;; size=28 bbWeight=1 PerfScore 10.00
+ ;; size=26 bbWeight=1 PerfScore 10.00
G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref ; gcrRegs +[r5] 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_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - mov r0, r5
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=18 bbWeight=0.20 PerfScore 1.00 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + mov r1, r5 + ; gcrRegs +[r1] + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[r1 r5] +[r0] + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend + add sp, 24 + pop {r4,r5,r6,r7,r11,pc} + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r5] + ldr r0, [r4] + ldr r1, [r0+0x24] + ldr r1, [r1] + ldr r3, [r1+0x0C] + cmp r3, 0 + beq SHORT G_M33863_IG04 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r3 + b SHORT G_M33863_IG05 + ;; size=4 bbWeight=0.80 PerfScore 1.60 +G_M33863_IG09: ; bbWeight=0.47, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + 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]
- cmp r0, 0 - beq SHORT G_M33863_IG10 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M33863_IG07: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ movw lr, 0xd1ff + movt lr, 0xd1ff + ldr lr, [lr] + blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.47 PerfScore 4.74 +G_M33863_IG10: ; bbWeight=0.42, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.42 PerfScore 4.21 +G_M33863_IG11: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] movw r0, 0xd1ff movt r0, 0xd1ff @@ -102,70 +147,7 @@ G_M33863_IG07: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ; gcrRegs -[r0] b SHORT G_M33863_IG03 ;; size=30 bbWeight=0.11 PerfScore 1.05
-G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r5] - ldr r3, [r0] - cmp r3, r1 - beq SHORT G_M33863_IG10 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r1 - mov r1, r5 - ; gcrRegs +[r1] - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[r1 r5] +[r0] - ;; size=14 bbWeight=0.25 PerfScore 1.25 -G_M33863_IG10: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 24 - pop {r4,r5,r6,r7,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00 -G_M33863_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[r0] +[r5] - ldr r0, [r4] - ldr r1, [r0+0x24] - ldr r1, [r1] - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M33863_IG04 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M33863_IG12: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M33863_IG13: ; bbWeight=0.47, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r5] - 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]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this - mov r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG11 - ;; size=26 bbWeight=0.47 PerfScore 4.74 -G_M33863_IG14: ; bbWeight=0.42, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r5] - 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]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this - mov r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG11 - ;; size=26 bbWeight=0.42 PerfScore 4.21 -G_M33863_IG15: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r5]
+G_M33863_IG12: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] ldr r3, [sp+0x10] // [V07 loc0+0x08] @@ -177,9 +159,9 @@ G_M33863_IG15: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateConstructors(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeConstructorInfo[]:this mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG11
+ b SHORT G_M33863_IG07
;; size=26 bbWeight=0.11 PerfScore 1.05
-G_M33863_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] @@ -192,9 +174,9 @@ G_M33863_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateEvents(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeEventInfo[]:this mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG11
+ b SHORT G_M33863_IG07
;; size=26 bbWeight=0 PerfScore 0.00
-G_M33863_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
...

-18 (-5.06%) : 23921.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,27 +9,27 @@ ; 0 inlinees with PGO data; 3 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.11) int -> r1 single-def -; V02 arg2 [V02,T04] ( 4, 3.11) int -> r2 single-def -; V03 arg3 [V03,T05] ( 4, 3.11) 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.11) int -> r1 single-def +; V02 arg2 [V02,T03] ( 4, 3.11) int -> r2 single-def +; V03 arg3 [V03,T04] ( 4, 3.11) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1.11) 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,T01] ( 24, 6.00) 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 -> r5 class-hnd <<unknown class>>
+; V07 loc0 [V07,T00] ( 24, 6.00) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T09] ( 9, 3 ) 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,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,T15] ( 2, 0.42) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V16 tmp7 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T11] ( 2, 2 ) int -> r5 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T12] ( 2, 2 ) int -> r7 "field V16.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V19 rat0 [V19,T06] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,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,T15] ( 2, 0.42) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V14 tmp5 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T11] ( 2, 2 ) int -> r5 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T12] ( 2, 2 ) int -> r7 "field V14.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V17 tmp8 [V17,T08] ( 2, 4 ) int -> r0 "argument with side effect" +; V18 rat0 [V18,T05] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V19 rat1 [V19,T07] ( 3, 4 ) int -> r0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 24 @@ -46,7 +46,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=22 bbWeight=1 PerfScore 8.00 G_M33863_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz cmp r2, 0
- bne SHORT G_M33863_IG07
+ bne SHORT G_M33863_IG11
;; size=4 bbWeight=1 PerfScore 2.00 G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz str r5, [sp+0x08] @@ -55,39 +55,84 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r5, [sp+0x10] // [V07 loc0+0x08] movs r5, 0 cmp r6, 6
- bhi G_M33863_IG19
+ bhi SHORT G_M33863_IG16
movw r1, LOW ADDRESS J_M33863_DS00 movt r1, HIGH ADDRESS J_M33863_DS00 J_M33863_DS00 LABEL DWORD
- DD G_M33863_IG20
+ DD G_M33863_IG17 + DD G_M33863_IG12 + DD G_M33863_IG10 + DD G_M33863_IG09 + DD G_M33863_IG13
DD G_M33863_IG15 DD G_M33863_IG14
- DD G_M33863_IG13 - DD G_M33863_IG16 - DD G_M33863_IG18 - DD G_M33863_IG17
ldr pc, [r1+4*r6]
- ;; size=28 bbWeight=1 PerfScore 10.00
+ ;; size=26 bbWeight=1 PerfScore 10.00
G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref ; gcrRegs +[r5] 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_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - mov r0, r5
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=18 bbWeight=0.20 PerfScore 1.00 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + mov r1, r5 + ; gcrRegs +[r1] + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[r1 r5] +[r0] + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend + add sp, 24 + pop {r4,r5,r6,r7,r11,pc} + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r5] + ldr r0, [r4] + ldr r1, [r0+0x24] + ldr r1, [r1] + ldr r3, [r1+0x0C] + cmp r3, 0 + beq SHORT G_M33863_IG04 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r3 + b SHORT G_M33863_IG05 + ;; size=4 bbWeight=0.80 PerfScore 1.60 +G_M33863_IG09: ; bbWeight=0.47, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + 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]
- cmp r0, 0 - beq SHORT G_M33863_IG10 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M33863_IG07: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ movw lr, 0xd1ff + movt lr, 0xd1ff + ldr lr, [lr] + blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.47 PerfScore 4.74 +G_M33863_IG10: ; bbWeight=0.42, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.42 PerfScore 4.21 +G_M33863_IG11: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] movw r0, 0xd1ff movt r0, 0xd1ff @@ -102,70 +147,7 @@ G_M33863_IG07: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ; gcrRegs -[r0] b SHORT G_M33863_IG03 ;; size=30 bbWeight=0.11 PerfScore 1.05
-G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r5] - ldr r3, [r0] - cmp r3, r1 - beq SHORT G_M33863_IG10 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r1 - mov r1, r5 - ; gcrRegs +[r1] - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[r1 r5] +[r0] - ;; size=14 bbWeight=0.25 PerfScore 1.25 -G_M33863_IG10: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 24 - pop {r4,r5,r6,r7,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00 -G_M33863_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[r0] +[r5] - ldr r0, [r4] - ldr r1, [r0+0x24] - ldr r1, [r1] - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M33863_IG04 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M33863_IG12: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M33863_IG13: ; bbWeight=0.47, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r5] - 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]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this - mov r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG11 - ;; size=26 bbWeight=0.47 PerfScore 4.74 -G_M33863_IG14: ; bbWeight=0.42, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r5] - 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]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this - mov r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG11 - ;; size=26 bbWeight=0.42 PerfScore 4.21 -G_M33863_IG15: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r5]
+G_M33863_IG12: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] ldr r3, [sp+0x10] // [V07 loc0+0x08] @@ -177,9 +159,9 @@ G_M33863_IG15: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateConstructors(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeConstructorInfo[]:this mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG11
+ b SHORT G_M33863_IG07
;; size=26 bbWeight=0.11 PerfScore 1.05
-G_M33863_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] @@ -192,9 +174,9 @@ G_M33863_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateEvents(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeEventInfo[]:this mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG11
+ b SHORT G_M33863_IG07
;; size=26 bbWeight=0 PerfScore 0.00
-G_M33863_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
...

-18 (-5.06%) : 48145.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,27 +9,27 @@ ; 0 inlinees with PGO data; 3 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.11) int -> r1 single-def -; V02 arg2 [V02,T04] ( 4, 3.11) int -> r2 single-def -; V03 arg3 [V03,T05] ( 4, 3.11) 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.11) int -> r1 single-def +; V02 arg2 [V02,T03] ( 4, 3.11) int -> r2 single-def +; V03 arg3 [V03,T04] ( 4, 3.11) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1.11) 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,T01] ( 24, 6.00) 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 -> r5 class-hnd <<unknown class>>
+; V07 loc0 [V07,T00] ( 24, 6.00) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T09] ( 9, 3 ) 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,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,T15] ( 2, 0.42) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V16 tmp7 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T11] ( 2, 2 ) int -> r5 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T12] ( 2, 2 ) int -> r7 "field V16.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V19 rat0 [V19,T06] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,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,T15] ( 2, 0.42) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V14 tmp5 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T11] ( 2, 2 ) int -> r5 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T12] ( 2, 2 ) int -> r7 "field V14.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V17 tmp8 [V17,T08] ( 2, 4 ) int -> r0 "argument with side effect" +; V18 rat0 [V18,T05] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V19 rat1 [V19,T07] ( 3, 4 ) int -> r0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 24 @@ -46,7 +46,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=22 bbWeight=1 PerfScore 8.00 G_M33863_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz cmp r2, 0
- bne SHORT G_M33863_IG07
+ bne SHORT G_M33863_IG11
;; size=4 bbWeight=1 PerfScore 2.00 G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz str r5, [sp+0x08] @@ -55,39 +55,84 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r5, [sp+0x10] // [V07 loc0+0x08] movs r5, 0 cmp r6, 6
- bhi G_M33863_IG19
+ bhi SHORT G_M33863_IG16
movw r1, LOW ADDRESS J_M33863_DS00 movt r1, HIGH ADDRESS J_M33863_DS00 J_M33863_DS00 LABEL DWORD
- DD G_M33863_IG20
+ DD G_M33863_IG17 + DD G_M33863_IG12 + DD G_M33863_IG10 + DD G_M33863_IG09 + DD G_M33863_IG13
DD G_M33863_IG15 DD G_M33863_IG14
- DD G_M33863_IG13 - DD G_M33863_IG16 - DD G_M33863_IG18 - DD G_M33863_IG17
ldr pc, [r1+4*r6]
- ;; size=28 bbWeight=1 PerfScore 10.00
+ ;; size=26 bbWeight=1 PerfScore 10.00
G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref ; gcrRegs +[r5] 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_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - mov r0, r5
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=18 bbWeight=0.20 PerfScore 1.00 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + mov r1, r5 + ; gcrRegs +[r1] + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[r1 r5] +[r0] + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend + add sp, 24 + pop {r4,r5,r6,r7,r11,pc} + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r5] + ldr r0, [r4] + ldr r1, [r0+0x24] + ldr r1, [r1] + ldr r3, [r1+0x0C] + cmp r3, 0 + beq SHORT G_M33863_IG04 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r3 + b SHORT G_M33863_IG05 + ;; size=4 bbWeight=0.80 PerfScore 1.60 +G_M33863_IG09: ; bbWeight=0.47, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + 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]
- cmp r0, 0 - beq SHORT G_M33863_IG10 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M33863_IG07: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ movw lr, 0xd1ff + movt lr, 0xd1ff + ldr lr, [lr] + blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.47 PerfScore 4.74 +G_M33863_IG10: ; bbWeight=0.42, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.42 PerfScore 4.21 +G_M33863_IG11: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] movw r0, 0xd1ff movt r0, 0xd1ff @@ -102,70 +147,7 @@ G_M33863_IG07: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ; gcrRegs -[r0] b SHORT G_M33863_IG03 ;; size=30 bbWeight=0.11 PerfScore 1.05
-G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r5] - ldr r3, [r0] - cmp r3, r1 - beq SHORT G_M33863_IG10 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0] - mov r0, r1 - mov r1, r5 - ; gcrRegs +[r1] - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[r1 r5] +[r0] - ;; size=14 bbWeight=0.25 PerfScore 1.25 -G_M33863_IG10: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 24 - pop {r4,r5,r6,r7,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00 -G_M33863_IG11: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[r0] +[r5] - ldr r0, [r4] - ldr r1, [r0+0x24] - ldr r1, [r1] - ldr r1, [r1+0x0C] - cmp r1, 0 - beq SHORT G_M33863_IG04 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M33863_IG12: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M33863_IG13: ; bbWeight=0.47, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r5] - 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]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this - mov r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG11 - ;; size=26 bbWeight=0.47 PerfScore 4.74 -G_M33863_IG14: ; bbWeight=0.42, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r5] - 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]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this - mov r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG11 - ;; size=26 bbWeight=0.42 PerfScore 4.21 -G_M33863_IG15: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r5]
+G_M33863_IG12: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] ldr r3, [sp+0x10] // [V07 loc0+0x08] @@ -177,9 +159,9 @@ G_M33863_IG15: ; bbWeight=0.11, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateConstructors(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeConstructorInfo[]:this mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG11
+ b SHORT G_M33863_IG07
;; size=26 bbWeight=0.11 PerfScore 1.05
-G_M33863_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M33863_IG13: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] @@ -192,9 +174,9 @@ G_M33863_IG16: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre blx lr // System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateEvents(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeEventInfo[]:this mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG11
+ b SHORT G_M33863_IG07
;; size=26 bbWeight=0 PerfScore 0.00
-G_M33863_IG17: ; bbWeight=0, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
...

+26 (+8.02%) : 20677.dasm - System.Collections.Immutable.ImmutableStack:CreateRangeSystem.__Canon:System.Collections.Immutable.ImmutableStack`1System.__Canon

@@ -8,69 +8,84 @@ ; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T04] ( 9, 6.40) int -> r5 single-def -; V01 arg0 [V01,T05] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 loc0 [V02,T03] ( 4, 10 ) ref -> r6 class-hnd <System.Collections.Immutable.ImmutableStack`1[System.__Canon]> -; V03 loc1 [V03,T02] ( 7, 10 ) ref -> [sp+0x00] class-hnd EH-live spill-single-def <<unknown class>>
+; V00 TypeCtx [V00,T04] ( 11, 12.36) int -> r5 single-def +; V01 arg0 [V01,T07] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 loc0 [V02,T06] ( 4, 10 ) ref -> r6 class-hnd <System.Collections.Immutable.ImmutableStack`1[System.__Canon]> +; V03 loc1 [V03,T05] ( 7, 10 ) ref -> [sp+0x00] class-hnd EH-live spill-single-def <<unknown class>>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V07 tmp2 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V09 tmp4 [V09,T06] ( 4, 6 ) int -> r3 "VirtualCall with runtime lookup"
+; V09 tmp4 [V09,T08] ( 4, 6 ) int -> r3 "VirtualCall with runtime lookup"
;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V11 tmp6 [V11,T00] ( 3, 24 ) int -> r4 "VirtualCall with runtime lookup" -; V12 tmp7 [V12,T01] ( 2, 16 ) ref -> r1 "argument with side effect" -; V13 PSPSym [V13,T16] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym" -; V14 cse0 [V14,T09] ( 2, 4.50) int -> r7 hoist "CSE - aggressive" -; V15 rat0 [V15,T12] ( 3, 4 ) int -> r0 "runtime lookup" -; V16 rat1 [V16,T07] ( 3, 5.60) int -> r0 "spilling expr" -; V17 rat2 [V17,T10] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable" -; V18 rat3 [V18,T08] ( 3, 5.60) int -> r0 "spilling expr" -; V19 rat4 [V19,T11] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable" -; V20 rat5 [V20,T15] ( 3, 2 ) int -> r7 "runtime lookup" -; V21 rat6 [V21,T13] ( 3, 2.80) int -> r0 "spilling expr" -; V22 rat7 [V22,T14] ( 3, 2.24) int -> r7 "fgMakeTemp is creating a new local variable"
+; V11 tmp6 [V11,T00] ( 4, 24 ) int -> r4 "VirtualCall with runtime lookup" +; V12 tmp7 [V12,T03] ( 2, 16 ) ref -> r1 "argument with side effect" +; V13 PSPSym [V13,T16] ( 1, 1 ) int -> [sp+0x08] do-not-enreg[V] "PSPSym" +;* V14 rat0 [V14,T15] ( 0, 0 ) int -> zero-ref "runtime lookup" +; V15 rat1 [V15,T09] ( 2, 4 ) int -> r0 "fgMakeTemp is creating a new local variable" +; V16 rat2 [V16,T14] ( 3, 4 ) int -> r0 "runtime lookup" +; V17 rat3 [V17,T10] ( 3, 5.60) int -> r0 "spilling expr" +; V18 rat4 [V18,T12] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable" +; V19 rat5 [V19,T11] ( 3, 5.60) int -> r0 "spilling expr" +; V20 rat6 [V20,T13] ( 3, 4.48) int -> r0 "fgMakeTemp is creating a new local variable" +; V21 rat7 [V21,T01] ( 3, 22.40) int -> r0 "spilling expr" +; V22 rat8 [V22,T02] ( 3, 17.92) int -> r4 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 12
G_M31288_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 - add r2, sp, 40 - str r2, [sp+0x0C] // [V13 PSPSym] - str r0, [r11-0x1C]
+ push {r4,r5,r6,r11,lr} + sub sp, 12 + add r11, sp, 24 + add r2, sp, 32 + str r2, [sp+0x08] // [V13 PSPSym] + str r0, [r11-0x14]
mov r5, r0 mov r4, r1 ; gcrRegs +[r4] ;; size=22 bbWeight=1 PerfScore 8.00 G_M31288_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
- cmp r4, 0 - beq SHORT G_M31288_IG19
ldr r0, [r5+0x20]
- ldr r1, [r0+0x04] - cmp r1, 12 - ble SHORT G_M31288_IG05 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M31288_IG03: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ldr r0, [r0+0x0C]
+ ldr r0, [r0+0x08]
cmp r0, 0
- beq SHORT G_M31288_IG05 - ;; size=6 bbWeight=0.80 PerfScore 2.40 -G_M31288_IG04: ; bbWeight=0.64, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - b SHORT G_M31288_IG06 - ;; size=2 bbWeight=0.64 PerfScore 0.64 -G_M31288_IG05: ; bbWeight=0.36, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
+ bne SHORT G_M31288_IG04 + ;; size=8 bbWeight=1 PerfScore 4.00 +G_M31288_IG03: ; bbWeight=0.20, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref
mov r0, r5 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=20 bbWeight=0.20 PerfScore 1.20 +G_M31288_IG04: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + cmp r4, 0 + beq SHORT G_M31288_IG21 + ldr r0, [r5+0x20] + ldr r1, [r0+0x04] + cmp r1, 12 + ble SHORT G_M31288_IG07 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M31288_IG05: ; bbWeight=0.80, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ldr r0, [r0+0x0C] + cmp r0, 0 + beq SHORT G_M31288_IG07 + ;; size=6 bbWeight=0.80 PerfScore 2.40 +G_M31288_IG06: ; bbWeight=0.64, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + b SHORT G_M31288_IG08 + ;; size=2 bbWeight=0.64 PerfScore 0.64 +G_M31288_IG07: ; bbWeight=0.36, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref + mov r0, r5 + 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.36 PerfScore 2.16
-G_M31288_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+G_M31288_IG08: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -83,28 +98,28 @@ G_M31288_IG06: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre ; gcrRegs -[r0] ldr r1, [r0+0x04] cmp r1, 16
- ble SHORT G_M31288_IG09
+ ble SHORT G_M31288_IG11
;; size=22 bbWeight=1 PerfScore 9.00
-G_M31288_IG07: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+G_M31288_IG09: ; bbWeight=0.80, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
ldr r0, [r0+0x10] cmp r0, 0
- beq SHORT G_M31288_IG09
+ beq SHORT G_M31288_IG11
;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M31288_IG08: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
+G_M31288_IG10: ; bbWeight=0.64, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref, isz
mov r3, r0
- b SHORT G_M31288_IG10
+ b SHORT G_M31288_IG12
;; size=4 bbWeight=0.64 PerfScore 1.28
-G_M31288_IG09: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+G_M31288_IG11: ; bbWeight=0.36, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
mov r0, r5 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov r3, r0 ;; size=22 bbWeight=0.36 PerfScore 2.52
-G_M31288_IG10: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
+G_M31288_IG12: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, byref
mov r0, r4 ; gcrRegs +[r0] mov r4, r3 @@ -117,7 +132,7 @@ G_M31288_IG10: ; bbWeight=1, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, b str r4, [sp] ; GC ptr vars +{V03} ;; size=12 bbWeight=1 PerfScore 6.00
-G_M31288_IG11: ; bbWeight=1, gcVars=00000004 {V03}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M31288_IG13: ; bbWeight=1, gcVars=00000020 {V03}, gcrefRegs=0050 {r4 r6}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] mov r0, r4 ; gcrRegs +[r0] @@ -129,34 +144,33 @@ G_M31288_IG11: ; bbWeight=1, gcVars=00000004 {V03}, gcrefRegs=0050 {r4 r6 ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M31288_IG17
+ beq SHORT G_M31288_IG19
;; size=18 bbWeight=1 PerfScore 7.00
-G_M31288_IG12: ; bbWeight=0.50, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz
+G_M31288_IG14: ; bbWeight=4, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz
ldr r0, [r5+0x20] ldr r1, [r0+0x04] cmp r1, 20
- ble SHORT G_M31288_IG15 - ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M31288_IG13: ; bbWeight=0.40, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz - ldr r7, [r0+0x14] - cmp r7, 0 - beq SHORT G_M31288_IG15 - ;; size=6 bbWeight=0.40 PerfScore 1.20 -G_M31288_IG14: ; bbWeight=0.32, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz - b SHORT G_M31288_IG16 - ;; size=2 bbWeight=0.32 PerfScore 0.32 -G_M31288_IG15: ; bbWeight=0.18, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref
+ ble SHORT G_M31288_IG17 + ;; size=8 bbWeight=4 PerfScore 16.00 +G_M31288_IG15: ; bbWeight=3.20, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz + ldr r4, [r0+0x14] + cmp r4, 0 + beq SHORT G_M31288_IG17 + ;; size=6 bbWeight=3.20 PerfScore 9.60 +G_M31288_IG16: ; bbWeight=2.56, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz + b SHORT G_M31288_IG18 + ;; size=2 bbWeight=2.56 PerfScore 2.56 +G_M31288_IG17: ; bbWeight=1.44, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref
mov r0, r5 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov r7, r0 - ;; size=22 bbWeight=0.18 PerfScore 1.26 -G_M31288_IG16: ; bbWeight=4, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz - mov r4, r7
+ mov r4, r0 + ;; size=22 bbWeight=1.44 PerfScore 10.08 +G_M31288_IG18: ; bbWeight=4, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref, isz
ldr r0, [sp] // [V03 loc1] ; gcrRegs +[r0] ldr r3, [r4] @@ -182,9 +196,9 @@ G_M31288_IG16: ; bbWeight=4, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byre ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- bne SHORT G_M31288_IG16 - ;; size=46 bbWeight=4 PerfScore 76.00 -G_M31288_IG17: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref
+ bne SHORT G_M31288_IG14 + ;; size=44 bbWeight=4 PerfScore 72.00 +G_M31288_IG19: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref
ldr r0, [sp] // [V03 loc1] ; gcrRegs +[r0] movw r4, 0xd1ff @@ -197,18 +211,18 @@ G_M31288_IG17: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byre mov r0, r6 ; gcrRegs +[r0] ;; size=16 bbWeight=1 PerfScore 6.00
-G_M31288_IG18: ; bbWeight=1, epilog, nogc, extend - add sp, 16 - pop {r4,r5,r6,r7,r11,pc}
+G_M31288_IG20: ; bbWeight=1, epilog, nogc, extend + add sp, 12 + pop {r4,r5,r6,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-G_M31288_IG19: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M31288_IG21: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r0 r6] ...

+32 (+8.51%) : 31560.dasm - System.Linq.Enumerable:TryGetSingleSystem.__Canon:System.__Canon (Tier0-FullOpts)

@@ -7,28 +7,28 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T07] ( 7, 4.88) int -> r6 single-def -; V01 arg0 [V01,T08] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 arg1 [V02,T03] ( 7, 35 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,ubyte]> -; V03 arg2 [V03,T09] ( 4, 4 ) byref -> r7 single-def -; V04 loc0 [V04,T02] ( 10, 37 ) ref -> [sp+0x08] class-hnd EH-live spill-single-def <<unknown class>> -; V05 loc1 [V05,T05] ( 3, 17 ) ref -> r6 class-hnd <System.__Canon>
+; V00 TypeCtx [V00,T09] ( 9, 25.96) int -> r6 single-def +; V01 arg0 [V01,T11] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 arg1 [V02,T05] ( 7, 35 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,ubyte]> +; V03 arg2 [V03,T12] ( 4, 4 ) byref -> r7 single-def +; V04 loc0 [V04,T04] ( 10, 37 ) ref -> [sp+0x08] class-hnd EH-live spill-single-def <<unknown class>> +; V05 loc1 [V05,T10] ( 3, 17 ) ref -> r8 class-hnd <System.__Canon>
; V06 loc2 [V06,T15] ( 2, 2 ) ref -> [sp+0x04] do-not-enreg[Z] must-init class-hnd EH-live <System.__Canon> ;* V07 loc3 [V07 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp2 [V10,T10] ( 4, 6 ) int -> r3 "VirtualCall with runtime lookup"
+; V10 tmp2 [V10,T13] ( 4, 6 ) int -> r3 "VirtualCall with runtime lookup"
;* V11 tmp3 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V12 tmp4 [V12,T00] ( 3, 48 ) int -> r4 "VirtualCall with runtime lookup"
+; V12 tmp4 [V12,T00] ( 4, 48 ) int -> r4 "VirtualCall with runtime lookup"
;* V13 tmp5 [V13 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V14 tmp6 [V14,T01] ( 3, 48 ) int -> r4 "VirtualCall with runtime lookup" -; V15 tmp7 [V15,T04] ( 2, 32 ) ref -> r1 "argument with side effect"
+; V14 tmp6 [V14,T01] ( 4, 48 ) int -> r4 "VirtualCall with runtime lookup" +; V15 tmp7 [V15,T08] ( 2, 32 ) ref -> r1 "argument with side effect"
; V16 PSPSym [V16,T16] ( 1, 1 ) int -> [sp+0x10] do-not-enreg[V] "PSPSym"
-; V17 cse0 [V17,T06] ( 3, 16.50) int -> r8 hoist "CSE - aggressive" -; V18 rat0 [V18,T11] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable" -; V19 rat1 [V19,T14] ( 3, 2 ) int -> r8 "runtime lookup" -; V20 rat2 [V20,T12] ( 3, 2.80) int -> r0 "spilling expr" -; V21 rat3 [V21,T13] ( 3, 2.24) int -> r8 "fgMakeTemp is creating a new local variable"
+; V17 rat0 [V17,T14] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable" +; V18 rat1 [V18,T02] ( 3, 44.80) int -> r0 "spilling expr" +; V19 rat2 [V19,T06] ( 3, 35.84) int -> r4 "fgMakeTemp is creating a new local variable" +; V20 rat3 [V20,T03] ( 3, 44.80) int -> r0 "spilling expr" +; V21 rat4 [V21,T07] ( 3, 35.84) int -> r4 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 20 @@ -52,9 +52,9 @@ G_M35688_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M35688_IG02: ; bbWeight=1, gcVars=00008000 {V06}, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, gcvars, byref, isz ; GC ptr vars +{V06 V15} cmp r4, 0
- beq G_M35688_IG24
+ beq G_M35688_IG28
cmp r5, 0
- beq G_M35688_IG25
+ beq G_M35688_IG29
ldr r0, [r6+0x20] ldr r0, [r0+0x08] cmp r0, 0 @@ -70,7 +70,7 @@ G_M35688_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov r3, r0 ;; size=22 bbWeight=0.20 PerfScore 1.40 @@ -87,7 +87,7 @@ G_M35688_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, str r4, [sp+0x08] ; GC ptr vars +{V04} ;; size=12 bbWeight=1 PerfScore 6.00
-G_M35688_IG06: ; bbWeight=1, gcVars=00008004 {V04 V06}, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, gcvars, byref, isz
+G_M35688_IG06: ; bbWeight=1, gcVars=00008010 {V04 V06}, gcrefRegs=0030 {r4 r5}, byrefRegs=0080 {r7}, gcvars, byref, isz
; gcrRegs -[r0] ; GC ptr vars -{V15} mov r0, r4 @@ -100,42 +100,41 @@ G_M35688_IG06: ; bbWeight=1, gcVars=00008004 {V04 V06}, gcrefRegs=0030 {r ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M35688_IG17
+ beq SHORT G_M35688_IG21
;; size=18 bbWeight=1 PerfScore 7.00
-G_M35688_IG07: ; bbWeight=0.50, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz
+G_M35688_IG07: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz
ldr r0, [r6+0x20] ldr r1, [r0+0x04] cmp r1, 12 ble SHORT G_M35688_IG10
- ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M35688_IG08: ; bbWeight=0.40, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz - ldr r8, [r0+0x0C] - cmp r8, 0
+ ;; size=8 bbWeight=8 PerfScore 32.00 +G_M35688_IG08: ; bbWeight=6.40, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz + ldr r4, [r0+0x0C] + cmp r4, 0
beq SHORT G_M35688_IG10
- ;; size=10 bbWeight=0.40 PerfScore 1.20 -G_M35688_IG09: ; bbWeight=0.32, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz
+ ;; size=6 bbWeight=6.40 PerfScore 19.20 +G_M35688_IG09: ; bbWeight=5.12, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz
b SHORT G_M35688_IG11
- ;; size=2 bbWeight=0.32 PerfScore 0.32 -G_M35688_IG10: ; bbWeight=0.18, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref
+ ;; size=2 bbWeight=5.12 PerfScore 5.12 +G_M35688_IG10: ; bbWeight=2.88, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref
mov r0, r6 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov r8, r0 - ;; size=22 bbWeight=0.18 PerfScore 1.26
+ mov r4, r0 + ;; size=22 bbWeight=2.88 PerfScore 20.16
G_M35688_IG11: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, byref, isz
- mov r4, r8
ldr r0, [sp+0x08] // [V04 loc0] ; gcrRegs +[r0] ldr r3, [r4] blx r3 ; gcr arg pop 0
- mov r6, r0 - ; gcrRegs +[r6] - mov r1, r6
+ mov r8, r0 + ; gcrRegs +[r8] + mov r1, r8
; gcrRegs +[r1] ldr r0, [r5+0x04] ldr r3, [r5+0x0C] @@ -150,17 +149,17 @@ G_M35688_IG11: ; bbWeight=8, gcrefRegs=0020 {r5}, byrefRegs=0080 {r7}, by movt r4, 0xd1ff ldr r3, [r4] blx r3 // <unknown method>
- ; gcrRegs -[r0 r6]
+ ; gcrRegs -[r0 r8]
; gcr arg pop 0 cmp r0, 0
- bne SHORT G_M35688_IG11 - ;; size=40 bbWeight=8 PerfScore 144.00
+ bne SHORT G_M35688_IG07 + ;; size=38 bbWeight=8 PerfScore 136.00
G_M35688_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, byref, isz ; gcrRegs -[r5]
- b SHORT G_M35688_IG17
+ b SHORT G_M35688_IG21
;; size=2 bbWeight=1 PerfScore 1.00
-G_M35688_IG13: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, byref, isz - ; gcrRegs +[r5-r6]
+G_M35688_IG13: ; bbWeight=1, gcrefRegs=0120 {r5 r8}, byrefRegs=0080 {r7}, byref, isz + ; gcrRegs +[r5 r8]
ldr r0, [sp+0x08] // [V04 loc0] ; gcrRegs +[r0] movw r4, 0xd1ff @@ -170,10 +169,33 @@ G_M35688_IG13: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M35688_IG15
+ beq SHORT G_M35688_IG19
;; size=18 bbWeight=1 PerfScore 7.00
-G_M35688_IG14: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, byref, isz - mov r4, r8
+G_M35688_IG14: ; bbWeight=8, gcrefRegs=0120 {r5 r8}, byrefRegs=0080 {r7}, byref, isz + ldr r0, [r6+0x20] + ldr r1, [r0+0x04] + cmp r1, 12 + ble SHORT G_M35688_IG17 + ;; size=8 bbWeight=8 PerfScore 32.00 +G_M35688_IG15: ; bbWeight=6.40, gcrefRegs=0120 {r5 r8}, byrefRegs=0080 {r7}, byref, isz + ldr r4, [r0+0x0C] + cmp r4, 0 + beq SHORT G_M35688_IG17 + ;; size=6 bbWeight=6.40 PerfScore 19.20 +G_M35688_IG16: ; bbWeight=5.12, gcrefRegs=0120 {r5 r8}, byrefRegs=0080 {r7}, byref, isz + b SHORT G_M35688_IG18 + ;; size=2 bbWeight=5.12 PerfScore 5.12 +G_M35688_IG17: ; bbWeight=2.88, gcrefRegs=0120 {r5 r8}, byrefRegs=0080 {r7}, byref + mov r0, r6 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + mov r4, r0 + ;; size=22 bbWeight=2.88 PerfScore 20.16 +G_M35688_IG18: ; bbWeight=8, gcrefRegs=0120 {r5 r8}, byrefRegs=0080 {r7}, byref, isz
ldr r0, [sp+0x08] // [V04 loc0] ; gcrRegs +[r0] ldr r3, [r4] @@ -187,7 +209,7 @@ G_M35688_IG14: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, ; gcrRegs -[r0-r1] ; gcr arg pop 0 cmp r0, 0
- bne SHORT G_M35688_IG16
+ bne SHORT G_M35688_IG20
ldr r0, [sp+0x08] // [V04 loc0] ; gcrRegs +[r0] movw r4, 0xd1ff @@ -198,16 +220,16 @@ G_M35688_IG14: ; bbWeight=8, gcrefRegs=0060 {r5 r6}, byrefRegs=0080 {r7}, ; gcr arg pop 0 cmp r0, 0 bne SHORT G_M35688_IG14
- ;; size=38 bbWeight=8 PerfScore 136.00 -G_M35688_IG15: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0080 {r7}, byref, isz
+ ;; size=36 bbWeight=8 PerfScore 128.00 +G_M35688_IG19: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0080 {r7}, byref, isz
; gcrRegs -[r5] movs r0, 1 strb r0, [r7]
- str r6, [sp+0x04] // [V06 loc2] - b SHORT G_M35688_IG18 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M35688_IG16: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; gcrRegs -[r6]
+ str r8, [sp+0x04] // [V06 loc2] + b SHORT G_M35688_IG22 + ;; size=10 bbWeight=1 PerfScore 4.00 +G_M35688_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[r8]
; byrRegs -[r7] movw r3, 0xd1ff movt r3, 0xd1ff @@ -216,7 +238,7 @@ G_M35688_IG16: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M35688_IG17: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, gcvars, byref, isz
+G_M35688_IG21: ; bbWeight=1, gcVars=00000010 {V04}, gcrefRegs=0000 {}, byrefRegs=0080 {r7}, gcvars, byref, isz
; byrRegs +[r7] ; GC ptr vars -{V06} ldr r0, [sp+0x08] // [V04 loc0] @@ -228,38 +250,38 @@ G_M35688_IG17: ; bbWeight=1, gcVars=00000004 {V04}, gcrefRegs=0000 {}, by blx r3 // <unknown method> ; gcrRegs -[r0] ; gcr arg pop 0
- b SHORT G_M35688_IG22
+ b SHORT G_M35688_IG26
;; size=16 bbWeight=1 PerfScore 6.00
-G_M35688_IG18: ; bbWeight=1, gcVars=00008004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M35688_IG22: ; bbWeight=1, gcVars=00008010 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[r7]
- ; GC ptr vars +{V02 V04 V06 V15} - bl G_M35688_IG26
+ ; GC ptr vars +{V04 V06 V15} + bl G_M35688_IG30
...

+38 (+12.03%) : 4685.dasm - System.Linq.Enumerable:MaxIntegerSystem.__Canon,int:int (Tier0-FullOpts)

@@ -8,27 +8,27 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T06] ( 7, 5.56) int -> r6 single-def -; V01 arg0 [V01,T07] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 arg1 [V02,T02] ( 7, 13 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,int]> -; V03 loc0 [V03,T05] ( 4, 8 ) int -> r6 -; V04 loc1 [V04,T03] ( 9, 12 ) ref -> [sp+0x00] class-hnd EH-live spill-single-def <<unknown class>> -; V05 loc2 [V05,T04] ( 3, 10 ) int -> r0
+; V00 TypeCtx [V00,T05] ( 9, 11 ) int -> r6 single-def +; V01 arg0 [V01,T09] ( 4, 4 ) ref -> r4 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 arg1 [V02,T04] ( 7, 13 ) ref -> r5 class-hnd single-def <System.Func`2[System.__Canon,int]> +; V03 loc0 [V03,T08] ( 4, 8 ) int -> r7 +; V04 loc1 [V04,T06] ( 9, 12 ) ref -> [sp+0x00] class-hnd EH-live spill-single-def <<unknown class>> +; V05 loc2 [V05,T07] ( 3, 10 ) int -> r0
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V07 tmp1 [V07 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V08 tmp2 [V08,T08] ( 4, 6 ) int -> r3 "VirtualCall with runtime lookup"
+; V08 tmp2 [V08,T10] ( 4, 6 ) int -> r3 "VirtualCall with runtime lookup"
;* V09 tmp3 [V09 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V10 tmp4 [V10,T09] ( 3, 6 ) int -> r4 "VirtualCall with runtime lookup"
+; V10 tmp4 [V10,T11] ( 4, 6 ) int -> r4 "VirtualCall with runtime lookup"
;* V11 tmp5 [V11 ] ( 0, 0 ) int -> zero-ref "spilling helperCall"
-; V12 tmp6 [V12,T00] ( 3, 24 ) int -> r4 "VirtualCall with runtime lookup"
+; V12 tmp6 [V12,T00] ( 4, 24 ) int -> r4 "VirtualCall with runtime lookup"
; V13 tmp7 [V13,T15] ( 2, 4 ) ref -> r1 single-def "argument with side effect"
-; V14 tmp8 [V14,T01] ( 2, 16 ) ref -> r1 "argument with side effect"
+; V14 tmp8 [V14,T03] ( 2, 16 ) ref -> r1 "argument with side effect"
; V15 PSPSym [V15,T16] ( 1, 1 ) int -> [sp+0x0C] do-not-enreg[V] "PSPSym"
-; V16 cse0 [V16,T10] ( 3, 6 ) int -> r7 "CSE - aggressive" -; V17 rat0 [V17,T11] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable" -; V18 rat1 [V18,T14] ( 3, 4 ) int -> r7 "runtime lookup" -; V19 rat2 [V19,T12] ( 3, 5.60) int -> r0 "spilling expr" -; V20 rat3 [V20,T13] ( 3, 4.48) int -> r7 "fgMakeTemp is creating a new local variable"
+; V16 rat0 [V16,T12] ( 3, 5.60) int -> r0 "fgMakeTemp is creating a new local variable" +; V17 rat1 [V17,T13] ( 3, 5.60) int -> r0 "spilling expr" +; V18 rat2 [V18,T14] ( 3, 4.48) int -> r4 "fgMakeTemp is creating a new local variable" +; V19 rat3 [V19,T01] ( 3, 22.40) int -> r0 "spilling expr" +; V20 rat4 [V20,T02] ( 3, 17.92) int -> r4 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -47,14 +47,14 @@ G_M64041_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=24 bbWeight=1 PerfScore 9.00 G_M64041_IG02: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz cmp r4, 0
- beq SHORT G_M64041_IG17
+ beq G_M64041_IG20
cmp r5, 0
- beq SHORT G_M64041_IG18
+ beq G_M64041_IG21
ldr r0, [r6+0x20] ldr r0, [r0+0x0C] cmp r0, 0 beq SHORT G_M64041_IG04
- ;; size=16 bbWeight=1 PerfScore 8.00
+ ;; size=20 bbWeight=1 PerfScore 8.00
G_M64041_IG03: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz mov r3, r0 b SHORT G_M64041_IG05 @@ -65,7 +65,7 @@ G_M64041_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {} movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov r3, r0 ;; size=22 bbWeight=0.20 PerfScore 1.40 @@ -82,7 +82,7 @@ G_M64041_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, b str r4, [sp] ; GC ptr vars +{V04} ;; size=12 bbWeight=1 PerfScore 6.00
-G_M64041_IG06: ; bbWeight=1, gcVars=00000008 {V04}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M64041_IG06: ; bbWeight=1, gcVars=00000040 {V04}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[r0] mov r0, r4 ; gcrRegs +[r0] @@ -94,19 +94,18 @@ G_M64041_IG06: ; bbWeight=1, gcVars=00000008 {V04}, gcrefRegs=0030 {r4 r5 ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M64041_IG13
+ beq SHORT G_M64041_IG15
ldr r0, [r6+0x20] ldr r1, [r0+0x08] cmp r1, 16
- ble SHORT G_M64041_IG14
+ ble SHORT G_M64041_IG16
;; size=26 bbWeight=1 PerfScore 11.00 G_M64041_IG07: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- ldr r7, [r0+0x10] - cmp r7, 0 - beq SHORT G_M64041_IG14
+ ldr r4, [r0+0x10] + cmp r4, 0 + beq SHORT G_M64041_IG16
;; size=6 bbWeight=0.80 PerfScore 2.40 G_M64041_IG08: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- mov r4, r7
ldr r0, [sp] // [V04 loc1] ; gcrRegs +[r0] ldr r3, [r4] @@ -119,7 +118,7 @@ G_M64041_IG08: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre blx r3 // <unknown method> ; gcrRegs -[r0-r1] ; gcr arg pop 0
- mov r6, r0
+ mov r7, r0
ldr r0, [sp] // [V04 loc1] ; gcrRegs +[r0] movw r4, 0xd1ff @@ -129,10 +128,20 @@ G_M64041_IG08: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre ; gcrRegs -[r0] ; gcr arg pop 0 cmp r0, 0
- beq SHORT G_M64041_IG15 - ;; size=36 bbWeight=1 PerfScore 16.00
+ beq SHORT G_M64041_IG18 + ;; size=34 bbWeight=1 PerfScore 15.00
G_M64041_IG09: ; bbWeight=4, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- mov r4, r7
+ ldr r0, [r6+0x20] + ldr r1, [r0+0x08] + cmp r1, 16 + ble SHORT G_M64041_IG17 + ;; size=8 bbWeight=4 PerfScore 16.00 +G_M64041_IG10: ; bbWeight=3.20, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz + ldr r4, [r0+0x10] + cmp r4, 0 + beq SHORT G_M64041_IG17 + ;; size=6 bbWeight=3.20 PerfScore 9.60 +G_M64041_IG11: ; bbWeight=4, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
ldr r0, [sp] // [V04 loc1] ; gcrRegs +[r0] ldr r3, [r4] @@ -145,13 +154,13 @@ G_M64041_IG09: ; bbWeight=4, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre blx r3 // <unknown method> ; gcrRegs -[r0-r1] ; gcr arg pop 0
- cmp r0, r6 - ble SHORT G_M64041_IG11 - ;; size=20 bbWeight=4 PerfScore 40.00 -G_M64041_IG10: ; bbWeight=2, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - mov r6, r0
+ cmp r0, r7 + ble SHORT G_M64041_IG13 + ;; size=18 bbWeight=4 PerfScore 36.00 +G_M64041_IG12: ; bbWeight=2, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref + mov r7, r0
;; size=2 bbWeight=2 PerfScore 2.00
-G_M64041_IG11: ; bbWeight=4, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+G_M64041_IG13: ; bbWeight=4, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
ldr r0, [sp] // [V04 loc1] ; gcrRegs +[r0] movw r4, 0xd1ff @@ -163,11 +172,11 @@ G_M64041_IG11: ; bbWeight=4, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byre cmp r0, 0 bne SHORT G_M64041_IG09 ;; size=18 bbWeight=4 PerfScore 28.00
-G_M64041_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M64041_IG14: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r5]
- b SHORT G_M64041_IG15
+ b SHORT G_M64041_IG18
;; size=2 bbWeight=1 PerfScore 1.00
-G_M64041_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M64041_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3] @@ -175,19 +184,30 @@ G_M64041_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=14 bbWeight=0 PerfScore 0.00
-G_M64041_IG14: ; bbWeight=0.36, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
+G_M64041_IG16: ; bbWeight=0.36, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[r5] mov r0, r6 movw r1, 0xd1ff movt r1, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ blx r3 // CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov r7, r0
+ mov r4, r0
b SHORT G_M64041_IG08 ;; size=24 bbWeight=0.36 PerfScore 2.88
-G_M64041_IG15: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M64041_IG17: ; bbWeight=1.44, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz + mov r0, r6 + movw r1, 0xd1ff + movt r1, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + mov r4, r0 + b SHORT G_M64041_IG11 + ;; size=24 bbWeight=1.44 PerfScore 11.52 +G_M64041_IG18: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[r5] ldr r0, [sp] // [V04 loc1] ; gcrRegs +[r0] @@ -198,13 +218,13 @@ G_M64041_IG15: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blx r3 // <unknown method> ; gcrRegs -[r0] ; gcr arg pop 0
- mov r0, r6
+ mov r0, r7
;; size=16 bbWeight=1 PerfScore 6.00
-G_M64041_IG16: ; bbWeight=1, epilog, nogc, extend
+G_M64041_IG19: ; bbWeight=1, epilog, nogc, extend
add sp, 16 pop {r4,r5,r6,r7,r11,pc} ;; size=6 bbWeight=1 PerfScore 2.00
-G_M64041_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M64041_IG20: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
movs r0, 17 movw r3, 0xd1ff movt r3, 0xd1ff @@ -213,7 +233,7 @@ G_M64041_IG17: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M64041_IG18: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M64041_IG21: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movs r0, 16 movw r3, 0xd1ff movt r3, 0xd1ff @@ -222,33 +242,33 @@ G_M64041_IG18: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-G_M64041_IG19: ; bbWeight=0, gcVars=00000008 {V04}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc - ; GC ptr vars +{V03 V04}
+G_M64041_IG22: ; bbWeight=0, gcVars=00000040 {V04}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc + ; GC ptr vars +{V04}
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_M64041_IG20: ; bbWeight=0, gcVars=00000008 {V04}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M64041_IG23: ; bbWeight=0, gcVars=00000040 {V04}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr r4, [r11-0x20] // [V04 loc1] ; gcrRegs +[r4] cmp r4, 0 ...

benchmarks.run_tiered.linux.arm.checked.mch

-28 (-8.81%) : 8994.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%) : 2148.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%) : 13137.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%) : 6620.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%) : 7949.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%) : 8457.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 "replacement local"
; ; Lcl frame size = 4 @@ -24,33 +23,17 @@ G_M63104_IG01: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0000 {}, byref mov r6, r1 ;; size=12 bbWeight=1 PerfScore 4.00 G_M63104_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- mov r0, r5 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M63104_IG05 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M63104_IG03: ; bbWeight=0.50, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0] - movw r3, 0xd1ff - movt r3, 0xd1ff - cmp r1, r3 - beq SHORT G_M63104_IG05 - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M63104_IG04: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0]
mov r1, r5 ; gcrRegs +[r1] movw r0, 0xd1ff movt r0, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
+ blx r3 // CORINFO_HELP_INITINSTCLASS
; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- ;; size=20 bbWeight=0 PerfScore 0.00 -G_M63104_IG05: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz
cmp r0, 0
- beq SHORT G_M63104_IG07
+ beq SHORT G_M63104_IG04
mov r1, r6 movw r4, 0xd1ff movt r4, 0xd1ff @@ -58,11 +41,11 @@ G_M63104_IG05: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, b blx r3 // <unknown method> ; gcrRegs -[r0 r5] ; gcr arg pop 0
- ;; size=18 bbWeight=1 PerfScore 7.00 -G_M63104_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=38 bbWeight=1 PerfScore 13.00 +G_M63104_IG03: ; bbWeight=1, epilog, nogc, extend
pop {r3,r4,r5,r6,r11,pc} ;; size=4 bbWeight=1 PerfScore 1.00
-G_M63104_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
+G_M63104_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[r5] mov r0, r5 ; gcrRegs +[r0] @@ -72,14 +55,14 @@ G_M63104_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byr movt r3, 0xd1ff ldr r3, [r3] ;; size=16 bbWeight=0 PerfScore 0.00
-G_M63104_IG08: ; bbWeight=0, epilog, nogc, extend
+G_M63104_IG05: ; bbWeight=0, epilog, nogc, extend
add sp, 4 pop {r4,r5,r6,r11,lr} bx r3 // <unknown method> ; gcr arg pop 0 ;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 98, prolog size 12, PerfScore 17.50, instruction count 35, allocated bytes for code 98 (MethodHash=32f0097f) for method System.Linq.Enumerable:Contains[int](System.Collections.Generic.IEnumerable`1[int],int):ubyte (Tier1)
+; Total bytes of code 78, prolog size 12, PerfScore 18.00, instruction count 27, allocated bytes for code 78 (MethodHash=32f0097f) for method System.Linq.Enumerable:Contains[int](System.Collections.Generic.IEnumerable`1[int],int):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -91,7 +74,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 49 (0x00031) Actual length = 98 (0x000062)
+ Function Length : 39 (0x00027) Actual length = 78 (0x00004e)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-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 "replacement local"
; ; Lcl frame size = 0 @@ -25,49 +24,33 @@ G_M44863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs +[r5] ;; size=10 bbWeight=1 PerfScore 3.00 G_M44863_IG02: ; bbWeight=1, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref, isz
- mov r0, r5 - ; gcrRegs +[r0] - cmp r0, 0 - beq SHORT G_M44863_IG05 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M44863_IG03: ; bbWeight=0.50, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz - ldr r1, [r0] - movw r3, 0xd1ff - movt r3, 0xd1ff - cmp r1, r3 - beq SHORT G_M44863_IG05 - ;; size=14 bbWeight=0.50 PerfScore 2.50 -G_M44863_IG04: ; bbWeight=0, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0]
mov r1, r5 ; gcrRegs +[r1] movw r0, 0xd1ff movt r0, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_ISINSTANCEOFINTERFACE
+ blx r3 // CORINFO_HELP_INITINSTCLASS
; gcrRegs -[r1] +[r0] ; gcr arg pop 0
- ;; size=20 bbWeight=0 PerfScore 0.00 -G_M44863_IG05: ; bbWeight=1, gcrefRegs=0021 {r0 r5}, byrefRegs=0000 {}, byref, isz
cmp r0, 0
- beq SHORT G_M44863_IG09
+ beq SHORT G_M44863_IG06
ldr r1, [r0] movw r3, 0xd1ff movt r3, 0xd1ff cmp r1, r3
- bne SHORT G_M44863_IG07
+ bne SHORT G_M44863_IG04
movs r1, 0 movw r3, 0xd1ff movt r3, 0xd1ff ldr r3, [r3]
- ;; size=30 bbWeight=1 PerfScore 11.00 -G_M44863_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=50 bbWeight=1 PerfScore 17.00 +G_M44863_IG03: ; bbWeight=1, epilog, nogc, extend
pop {r4,r5,r11,lr} bx r3 // <unknown method> ; gcr arg pop 0 ;; size=6 bbWeight=1 PerfScore 2.00
-G_M44863_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref
+G_M44863_IG04: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[r5] movw r4, 0xd1ff movt r4, 0xd1ff @@ -76,10 +59,10 @@ G_M44863_IG07: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0001 {r0}, byr ; gcrRegs -[r0] ; gcr arg pop 0 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M44863_IG08: ; bbWeight=0, epilog, nogc, extend
+G_M44863_IG05: ; bbWeight=0, epilog, nogc, extend
pop {r4,r5,r11,pc} ;; size=4 bbWeight=0 PerfScore 0.00
-G_M44863_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
+G_M44863_IG06: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[r5] mov r0, r5 ; gcrRegs +[r0] @@ -92,7 +75,7 @@ G_M44863_IG09: ; bbWeight=0, gcVars=00000000 {}, gcrefRegs=0020 {r5}, byr bkpt ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 118, prolog size 10, PerfScore 21.50, instruction count 41, allocated bytes for code 118 (MethodHash=743050c0) for method System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)
+; Total bytes of code 98, prolog size 10, PerfScore 22.00, instruction count 33, allocated bytes for code 98 (MethodHash=743050c0) for method System.Threading.ThreadPool+<>c:<.cctor>b__52_0(System.Object):this (Tier1)
; ============================================================ Unwind Info: @@ -104,7 +87,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 59 (0x0003b) Actual length = 118 (0x000076)
+ Function Length : 49 (0x00031) Actual length = 98 (0x000062)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-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%) : 4234.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[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%) : 4238.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[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%) : 1506.dasm - System.HashCode:Combine[System.__Canon,System.Nullable1[int]](System.__Canon,System.Nullable1[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%) : 23175.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%) : 13011.dasm - Microsoft.FSharp.Control.AsyncActivation1[System.__Canon]:WithContinuation[System.__Canon](Microsoft.FSharp.Core.FSharpFunc2[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%) : 21126.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

-16 (-4.40%) : 6145.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,27 +9,27 @@ ; 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.09) int -> r1 single-def -; V02 arg2 [V02,T04] ( 4, 3.09) int -> r2 single-def -; V03 arg3 [V03,T05] ( 4, 3.09) int -> r5 single-def
+; V00 this [V00,T01] ( 10, 4.00) ref -> r4 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T06] ( 3, 2.09) int -> r1 single-def +; V02 arg2 [V02,T03] ( 4, 3.09) int -> r2 single-def +; V03 arg3 [V03,T04] ( 4, 3.09) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1.09) 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,T01] ( 24, 6.00) 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 -> r5 class-hnd <<unknown class>>
+; V07 loc0 [V07,T00] ( 24, 6.00) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T09] ( 9, 3 ) 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,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,T15] ( 2, 0.37) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V16 tmp7 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T11] ( 2, 2 ) int -> r5 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T12] ( 2, 2 ) int -> r7 "field V16.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V19 rat0 [V19,T06] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,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,T15] ( 2, 0.37) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V14 tmp5 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T11] ( 2, 2 ) int -> r5 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T12] ( 2, 2 ) int -> r7 "field V14.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V17 tmp8 [V17,T08] ( 2, 4 ) int -> r0 "argument with side effect" +; V18 rat0 [V18,T05] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V19 rat1 [V19,T07] ( 3, 4 ) int -> r0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 24 @@ -46,7 +46,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=22 bbWeight=1 PerfScore 8.00 G_M33863_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz cmp r2, 0
- bne SHORT G_M33863_IG07
+ bne SHORT G_M33863_IG12
;; size=4 bbWeight=1 PerfScore 2.00 G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz str r5, [sp+0x08] @@ -55,18 +55,18 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r5, [sp+0x10] // [V07 loc0+0x08] movs r5, 0 cmp r6, 6
- bhi G_M33863_IG21
+ bhi G_M33863_IG17
movw r1, LOW ADDRESS J_M33863_DS00 movt r1, HIGH ADDRESS J_M33863_DS00 J_M33863_DS00 LABEL DWORD
- DD G_M33863_IG10
DD G_M33863_IG11
- DD G_M33863_IG18 - DD G_M33863_IG17 - DD G_M33863_IG19
+ DD G_M33863_IG09 + DD G_M33863_IG14 + DD G_M33863_IG13 + DD G_M33863_IG15 + DD G_M33863_IG10
DD G_M33863_IG16
- DD G_M33863_IG20
ldr pc, [r1+4*r6] ;; size=28 bbWeight=1 PerfScore 10.00 G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref @@ -75,19 +75,79 @@ G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {} 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_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - mov r0, r5
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=18 bbWeight=0.20 PerfScore 1.00 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + mov r1, r5 + ; gcrRegs +[r1] + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[r1 r5] +[r0] + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend + add sp, 24 + pop {r4,r5,r6,r7,r11,pc} + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r5] + ldr r0, [r4] + ldr r1, [r0+0x24] + ldr r1, [r1] + ldr r3, [r1+0x18] + cmp r3, 0 + beq SHORT G_M33863_IG04 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r3 + b SHORT G_M33863_IG05 + ;; size=4 bbWeight=0.80 PerfScore 1.60 +G_M33863_IG09: ; bbWeight=0.34, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + 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]
- cmp r0, 0 - beq SHORT G_M33863_IG15 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M33863_IG07: ; bbWeight=0.09, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ movw lr, 0xd1ff + movt lr, 0xd1ff + ldr lr, [lr] + blx lr // <unknown method> + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.34 PerfScore 3.39 +G_M33863_IG10: ; bbWeight=0.31, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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 r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.31 PerfScore 3.06 +G_M33863_IG11: ; bbWeight=0.15, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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 r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.15 PerfScore 1.45 +G_M33863_IG12: ; bbWeight=0.09, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] movw r0, 0xd1ff movt r0, 0xd1ff @@ -102,18 +162,7 @@ G_M33863_IG07: ; bbWeight=0.09, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ; gcrRegs -[r0] b SHORT G_M33863_IG03 ;; size=30 bbWeight=0.09 PerfScore 0.91
-G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r5] - ldr r3, [r0] - cmp r3, r1 - beq SHORT G_M33863_IG15 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - b SHORT G_M33863_IG14 - ;; size=2 bbWeight=0.25 PerfScore 0.25 -G_M33863_IG10: ; bbWeight=0.15, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r5]
+G_M33863_IG13: ; bbWeight=0.07, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] ldr r3, [sp+0x10] // [V07 loc0+0x08] @@ -125,78 +174,9 @@ G_M33863_IG10: ; bbWeight=0.15, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b blx lr // <unknown method> mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG12 - ;; size=26 bbWeight=0.15 PerfScore 1.45 -G_M33863_IG11: ; bbWeight=0.34, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0 r5] - 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 r5, r0 - ; gcrRegs +[r5] - ;; size=24 bbWeight=0.34 PerfScore 3.05 -G_M33863_IG12: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - ldr r0, [r4] - ldr r1, [r0+0x24] - ldr r1, [r1] - ldr r1, [r1+0x18] - cmp r1, 0 - beq SHORT G_M33863_IG04 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M33863_IG13: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M33863_IG14: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref - mov r0, r1 - mov r1, r5 - ; gcrRegs +[r1] - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[r1 r5] +[r0] - ;; size=14 bbWeight=0.25 PerfScore 1.25 -G_M33863_IG15: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 24 - pop {r4,r5,r6,r7,r11,pc} - ;; size=6 bbWeight=1 PerfScore 2.00 -G_M33863_IG16: ; bbWeight=0.31, gcVars=00000000 {}, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[r0] - 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 r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG12
...

-16 (-4.40%) : 8445.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,27 +9,27 @@ ; 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.04) int -> r1 single-def -; V02 arg2 [V02,T04] ( 4, 3.04) int -> r2 single-def -; V03 arg3 [V03,T05] ( 4, 3.04) 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.04) int -> r1 single-def +; V02 arg2 [V02,T03] ( 4, 3.04) int -> r2 single-def +; V03 arg3 [V03,T04] ( 4, 3.04) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1.04) 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,T01] ( 24, 6.00) 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 -> r5 class-hnd <<unknown class>>
+; V07 loc0 [V07,T00] ( 24, 6.00) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T09] ( 9, 3 ) 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,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,T15] ( 2, 0.17) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V16 tmp7 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T11] ( 2, 2 ) int -> r5 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T12] ( 2, 2 ) int -> r7 "field V16.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V19 rat0 [V19,T06] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,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,T15] ( 2, 0.17) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V14 tmp5 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T11] ( 2, 2 ) int -> r5 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T12] ( 2, 2 ) int -> r7 "field V14.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V17 tmp8 [V17,T08] ( 2, 4 ) int -> r0 "argument with side effect" +; V18 rat0 [V18,T05] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V19 rat1 [V19,T07] ( 3, 4 ) int -> r0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 24 @@ -46,7 +46,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=22 bbWeight=1 PerfScore 8.00 G_M33863_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz cmp r2, 0
- bne SHORT G_M33863_IG07
+ bne SHORT G_M33863_IG13
;; size=4 bbWeight=1 PerfScore 2.00 G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz str r5, [sp+0x08] @@ -55,18 +55,18 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r5, [sp+0x10] // [V07 loc0+0x08] movs r5, 0 cmp r6, 6
- bhi G_M33863_IG21
+ bhi G_M33863_IG17
movw r1, LOW ADDRESS J_M33863_DS00 movt r1, HIGH ADDRESS J_M33863_DS00 J_M33863_DS00 LABEL DWORD
- DD G_M33863_IG10
DD G_M33863_IG11
- DD G_M33863_IG18 - DD G_M33863_IG17 - DD G_M33863_IG19
+ DD G_M33863_IG09 + DD G_M33863_IG14 + DD G_M33863_IG12 + DD G_M33863_IG15 + DD G_M33863_IG10
DD G_M33863_IG16
- DD G_M33863_IG20
ldr pc, [r1+4*r6] ;; size=28 bbWeight=1 PerfScore 10.00 G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref @@ -75,19 +75,94 @@ G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {} 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_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - mov r0, r5
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=18 bbWeight=0.20 PerfScore 1.00 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + mov r1, r5 + ; gcrRegs +[r1] + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[r1 r5] +[r0] + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend + add sp, 24 + pop {r4,r5,r6,r7,r11,pc} + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r5] + ldr r0, [r4] + ldr r1, [r0+0x24] + ldr r1, [r1] + ldr r3, [r1+0x18] + cmp r3, 0 + beq SHORT G_M33863_IG04 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r3 + b SHORT G_M33863_IG05 + ;; size=4 bbWeight=0.80 PerfScore 1.60 +G_M33863_IG09: ; bbWeight=0.38, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + 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]
- cmp r0, 0 - beq SHORT G_M33863_IG15 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M33863_IG07: ; bbWeight=0.04, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ movw lr, 0xd1ff + movt lr, 0xd1ff + ldr lr, [lr] + blx lr // <unknown method> + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.38 PerfScore 3.84 +G_M33863_IG10: ; bbWeight=0.34, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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 r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.34 PerfScore 3.37 +G_M33863_IG11: ; bbWeight=0.12, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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 r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.12 PerfScore 1.16 +G_M33863_IG12: ; bbWeight=0.05, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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 r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.05 PerfScore 0.47 +G_M33863_IG13: ; bbWeight=0.04, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] movw r0, 0xd1ff movt r0, 0xd1ff @@ -102,18 +177,7 @@ G_M33863_IG07: ; bbWeight=0.04, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ; gcrRegs -[r0] b SHORT G_M33863_IG03 ;; size=30 bbWeight=0.04 PerfScore 0.42
-G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r5] - ldr r3, [r0] - cmp r3, r1 - beq SHORT G_M33863_IG15 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - b SHORT G_M33863_IG14 - ;; size=2 bbWeight=0.25 PerfScore 0.25 -G_M33863_IG10: ; bbWeight=0.12, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r5]
+G_M33863_IG14: ; bbWeight=0.04, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] ldr r3, [sp+0x10] // [V07 loc0+0x08] @@ -125,93 +189,9 @@ G_M33863_IG10: ; bbWeight=0.12, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b blx lr // <unknown method> mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG12 - ;; size=26 bbWeight=0.12 PerfScore 1.16 -G_M33863_IG11: ; bbWeight=0.38, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0 r5] - 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 r5, r0 - ; gcrRegs +[r5] - ;; size=24 bbWeight=0.38 PerfScore 3.46 -G_M33863_IG12: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - ldr r0, [r4] - ldr r1, [r0+0x24] - ldr r1, [r1] - ldr r1, [r1+0x18] - cmp r1, 0 - beq SHORT G_M33863_IG04 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M33863_IG13: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M33863_IG14: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref - mov r0, r1 - mov r1, r5 - ; gcrRegs +[r1] - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[r1 r5] +[r0] - ;; size=14 bbWeight=0.25 PerfScore 1.25 -G_M33863_IG15: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 24 - pop {r4,r5,r6,r7,r11,pc}
...

-16 (-4.40%) : 11645.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(uint,int,uint,int,int,int):System.Canon[]:this (Tier1)

@@ -9,27 +9,27 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 10, 4.00) ref -> r4 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T07] ( 3, 2.02) int -> r1 single-def -; V02 arg2 [V02,T04] ( 4, 3.02) int -> r2 single-def -; V03 arg3 [V03,T05] ( 4, 3.02) 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.02) int -> r1 single-def +; V02 arg2 [V02,T03] ( 4, 3.02) int -> r2 single-def +; V03 arg3 [V03,T04] ( 4, 3.02) int -> r5 single-def
; V04 arg4 [V04,T13] ( 2, 1.02) 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,T01] ( 24, 6.00) 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 -> r5 class-hnd <<unknown class>>
+; V07 loc0 [V07,T00] ( 24, 6.00) struct (12) [sp+0x08] do-not-enreg[SFA] multireg-arg ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter> +; V08 loc1 [V08,T09] ( 9, 3.00) 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,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,T15] ( 2, 0.09) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V14 tmp5 [V14 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" -;* V15 tmp6 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> -;* V16 tmp7 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T11] ( 2, 2 ) int -> r5 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T12] ( 2, 2 ) int -> r7 "field V16.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP -; V19 rat0 [V19,T06] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" -; V20 rat1 [V20,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,T15] ( 2, 0.09) ref -> r0 class-hnd exact single-def "spilling ret_expr" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "guarded devirt return temp" +;* V13 tmp4 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Text.UTF8Encoding+UTF8EncodingSealed> +;* V14 tmp5 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T11] ( 2, 2 ) int -> r5 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T12] ( 2, 2 ) int -> r7 "field V14.m_StringHeapByteLength (fldOffset=0x4)" P-INDEP +; V17 tmp8 [V17,T08] ( 2, 4 ) int -> r0 "argument with side effect" +; V18 rat0 [V18,T05] ( 3, 4.40) int -> r0 "Spilling to split statement for tree" +; V19 rat1 [V19,T07] ( 3, 4 ) int -> r0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) int -> r3 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 24 @@ -46,7 +46,7 @@ G_M33863_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=22 bbWeight=1 PerfScore 8.00 G_M33863_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz cmp r2, 0
- bne SHORT G_M33863_IG07
+ bne SHORT G_M33863_IG12
;; size=4 bbWeight=1 PerfScore 2.00 G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz str r5, [sp+0x08] @@ -55,18 +55,18 @@ G_M33863_IG03: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre str r5, [sp+0x10] // [V07 loc0+0x08] movs r5, 0 cmp r6, 6
- bhi G_M33863_IG21
+ bhi G_M33863_IG17
movw r1, LOW ADDRESS J_M33863_DS00 movt r1, HIGH ADDRESS J_M33863_DS00 J_M33863_DS00 LABEL DWORD
- DD G_M33863_IG10
DD G_M33863_IG11
- DD G_M33863_IG20 - DD G_M33863_IG17 - DD G_M33863_IG18 - DD G_M33863_IG12 - DD G_M33863_IG19
+ DD G_M33863_IG09 + DD G_M33863_IG13 + DD G_M33863_IG14 + DD G_M33863_IG15 + DD G_M33863_IG10 + DD G_M33863_IG16
ldr pc, [r1+4*r6] ;; size=28 bbWeight=1 PerfScore 10.00 G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref @@ -75,19 +75,79 @@ G_M33863_IG04: ; bbWeight=0.20, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {} 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_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - mov r0, r5
+ blx r3 // CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=18 bbWeight=0.20 PerfScore 1.00 +G_M33863_IG05: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + mov r1, r5 + ; gcrRegs +[r1] + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[r1 r5] +[r0] + ;; size=12 bbWeight=1 PerfScore 4.00 +G_M33863_IG06: ; bbWeight=1, epilog, nogc, extend + add sp, 24 + pop {r4,r5,r6,r7,r11,pc} + ;; size=6 bbWeight=1 PerfScore 2.00 +G_M33863_IG07: ; bbWeight=1, gcVars=00000000 {}, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[r0] +[r5] + ldr r0, [r4] + ldr r1, [r0+0x24] + ldr r1, [r1] + ldr r3, [r1+0x18] + cmp r3, 0 + beq SHORT G_M33863_IG04 + ;; size=12 bbWeight=1 PerfScore 6.00 +G_M33863_IG08: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz + mov r0, r3 + b SHORT G_M33863_IG05 + ;; size=4 bbWeight=0.80 PerfScore 1.60 +G_M33863_IG09: ; bbWeight=0.44, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r5] + 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]
- cmp r0, 0 - beq SHORT G_M33863_IG16 - ;; size=6 bbWeight=1 PerfScore 3.00 -G_M33863_IG06: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG08 - ;; size=2 bbWeight=0.50 PerfScore 0.50 -G_M33863_IG07: ; bbWeight=0.02, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
+ movw lr, 0xd1ff + movt lr, 0xd1ff + ldr lr, [lr] + blx lr // <unknown method> + mov r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.44 PerfScore 4.43 +G_M33863_IG10: ; bbWeight=0.44, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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 r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.44 PerfScore 4.43 +G_M33863_IG11: ; bbWeight=0.05, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r0 r5] + 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 r5, r0 + ; gcrRegs +[r5] + b SHORT G_M33863_IG07 + ;; size=26 bbWeight=0.05 PerfScore 0.45 +G_M33863_IG12: ; bbWeight=0.02, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[r0 r5] movw r0, 0xd1ff movt r0, 0xd1ff @@ -102,18 +162,7 @@ G_M33863_IG07: ; bbWeight=0.02, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b ; gcrRegs -[r0] b SHORT G_M33863_IG03 ;; size=30 bbWeight=0.02 PerfScore 0.23
-G_M33863_IG08: ; bbWeight=0.50, gcrefRegs=0031 {r0 r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[r0 r5] - ldr r3, [r0] - cmp r3, r1 - beq SHORT G_M33863_IG16 - ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M33863_IG09: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - b SHORT G_M33863_IG15 - ;; size=2 bbWeight=0.25 PerfScore 0.25 -G_M33863_IG10: ; bbWeight=0.05, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r5]
+G_M33863_IG13: ; bbWeight=0.02, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz
ldr r1, [sp+0x08] // [V07 loc0] ldr r2, [sp+0x0C] // [V07 loc0+0x04] ldr r3, [sp+0x10] // [V07 loc0+0x08] @@ -125,78 +174,24 @@ G_M33863_IG10: ; bbWeight=0.05, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, b blx lr // <unknown method> mov r5, r0 ; gcrRegs +[r5]
- b SHORT G_M33863_IG13 - ;; size=26 bbWeight=0.05 PerfScore 0.45 -G_M33863_IG11: ; bbWeight=0.44, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0 r5] - 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 r5, r0 - ; gcrRegs +[r5] - b SHORT G_M33863_IG13 - ;; size=26 bbWeight=0.44 PerfScore 4.43 -G_M33863_IG12: ; bbWeight=0.44, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byref - ; gcrRegs -[r0 r5] - 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 r5, r0 - ; gcrRegs +[r5] - ;; size=24 bbWeight=0.44 PerfScore 3.99 -G_M33863_IG13: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r0] - ldr r0, [r4] - ldr r1, [r0+0x24] - ldr r1, [r1] - ldr r1, [r1+0x18] - cmp r1, 0 - beq SHORT G_M33863_IG04 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M33863_IG14: ; bbWeight=0.80, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref, isz - b SHORT G_M33863_IG05 - ;; size=2 bbWeight=0.80 PerfScore 0.80 -G_M33863_IG15: ; bbWeight=0.25, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref - mov r0, r1 - mov r1, r5 - ; gcrRegs +[r1] - movw r3, 0xd1ff - movt r3, 0xd1ff - blx r3 // CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[r1 r5] +[r0] - ;; size=14 bbWeight=0.25 PerfScore 1.25 -G_M33863_IG16: ; bbWeight=1, gcrefRegs=0011 {r0 r4}, byrefRegs=0000 {}, byref, epilog, nogc - add sp, 24
...

+32 (+27.59%) : 16448.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,102 +9,123 @@ ; 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.00) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T00] ( 4, 8.00) 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.00) int -> r0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 4.00) 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_IG09
+ bne SHORT G_M58319_IG12
;; size=6 bbWeight=1 PerfScore 3.00
-G_M58319_IG03: ; bbWeight=1.00, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG03: ; bbWeight=1.00, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
; gcrRegs -[r0]
- ldr r0, [r1+0x20] - ldr r3, [r0+0x04] - cmp r3, 12
+ ldr r0, [r4+0x20] + ldr r1, [r0+0x04] + cmp r1, 12
ble SHORT G_M58319_IG06 ;; size=8 bbWeight=1.00 PerfScore 4.00
-G_M58319_IG04: ; bbWeight=0.80, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG04: ; bbWeight=0.80, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
ldr r0, [r0+0x0C] cmp r0, 0 beq SHORT G_M58319_IG06 ;; size=6 bbWeight=0.80 PerfScore 2.40
-G_M58319_IG05: ; bbWeight=0.64, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG05: ; bbWeight=0.64, gcrefRegs=0040 {r6}, byrefRegs=0020 {r5}, byref, isz
b SHORT G_M58319_IG07 ;; size=2 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG06: ; bbWeight=0.36, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref - mov r0, r1
+G_M58319_IG06: ; 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_IG07: ; bbWeight=1.00, gcrefRegs=0020 {r5}, byrefRegs=0010 {r4}, byref, isz
+G_M58319_IG07: ; bbWeight=1.00, 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_IG09 + ;; size=36 bbWeight=1.00 PerfScore 13.00 +G_M58319_IG08: ; bbWeight=0.80, gcrefRegs=0080 {r7}, byrefRegs=0020 {r5}, byref, isz + ldr r0, [r0+0x10] + cmp r0, 0 + bne SHORT G_M58319_IG10 + ;; size=6 bbWeight=0.80 PerfScore 2.40 +G_M58319_IG09: ; 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_IG10: ; bbWeight=1.00, 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_IG09 - ;; size=48 bbWeight=1.00 PerfScore 17.00 -G_M58319_IG08: ; bbWeight=1, gcrefRegs=0040 {r6}, byrefRegs=0000 {}, byref
+ bne SHORT G_M58319_IG12 + ;; size=20 bbWeight=1.00 PerfScore 8.00 +G_M58319_IG11: ; bbWeight=1, gcrefRegs=0080 {r7}, byrefRegs=0000 {}, byref
; gcrRegs -[r0]
- mov r0, r6
+ mov r0, r7
; gcrRegs +[r0] ;; size=2 bbWeight=1 PerfScore 1.00
-G_M58319_IG09: ; 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
+G_M58319_IG12: ; 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: @@ -116,11 +137,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%) : 17156.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%) : 935.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%) : 2696.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%) : 2968.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%) : 9323.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%) : 7985.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%) : 6219.dasm - System.Collections.Immutable.ImmutableArray1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray1[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%) : 20001.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%) : 13735.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

-16 (-5.63%) : 8117.dasm - FSharp.Compiler.Parser+fsyaccreductions@5272-313:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)

@@ -18,21 +18,23 @@ ; V07 tmp1 [V07,T03] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.Parser+_fsyacc_reductions@1582-314> ; V08 tmp2 [V08,T01] ( 4, 8 ) ref -> r2 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> ;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
-; V10 tmp4 [V10,T00] ( 7, 14 ) ref -> r6 class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia> -; V11 tmp5 [V11,T04] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]> -; V12 tmp6 [V12,T05] ( 3, 6 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
+; V10 tmp4 [V10,T00] ( 7, 14 ) ref -> r5 class-hnd exact single-def "NewObj constructor temp" <FSharp.Compiler.SyntaxTrivia.SynMemberFlagsTrivia> +; V11 tmp5 [V11,T05] ( 2, 4 ) ref -> r0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]> +; V12 tmp6 [V12,T04] ( 3, 6 ) ref -> r4 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]>
; V13 tmp7 [V13 ] ( 2, 2 ) long -> [sp+0x10] do-not-enreg[X] addr-exposed "field V02.code1 (fldOffset=0x0)" P-DEP ; V14 tmp8 [V14 ] ( 2, 2 ) long -> [sp+0x18] do-not-enreg[X] addr-exposed "field V02.code2 (fldOffset=0x8)" P-DEP ; V15 tmp9 [V15 ] ( 2, 2 ) long -> [sp+0x00] do-not-enreg[X] addr-exposed "field V03.code1 (fldOffset=0x0)" P-DEP ; V16 tmp10 [V16 ] ( 2, 2 ) long -> [sp+0x08] do-not-enreg[X] addr-exposed "field V03.code2 (fldOffset=0x8)" P-DEP
+; V17 cse0 [V17,T06] ( 3, 3 ) ref -> r4 "CSE - aggressive" +; V18 cse1 [V18,T07] ( 3, 3 ) byref -> r0 "CSE - aggressive"
;
-; Lcl frame size = 36
+; Lcl frame size = 32
G_M36710_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push {r4,r5,r6,r11,lr} - sub sp, 36 - add r11, sp, 48 - sub r4, r11, 48
+ push {r4,r5,r11,lr} + sub sp, 32 + add r11, sp, 40 + sub r4, r11, 40
movs r2, 0 movs r3, 0 stm r4!, {r2,r3} @@ -67,45 +69,40 @@ G_M36710_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre 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
+ blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN
; 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 - ; gcrRegs +[r0] - mov r6, r0 - ; gcrRegs +[r6] - adds r0, r6, 4
+ adds r0, r5, 4
; gcrRegs -[r0] ; byrRegs +[r0] mov r1, r4 @@ -113,14 +110,34 @@ G_M36710_IG02: ; bbWeight=1, gcrefRegs=0010 {r4}, byrefRegs=0000 {}, byre movw r12, 0xd1ff movt r12, 0xd1ff blx r12 // CORINFO_HELP_ASSIGN_REF
+ ; gcrRegs -[r1] + ; byrRegs -[r0] + movs r1, 0 + str r1, [r5+0x08] + ;; size=138 bbWeight=1 PerfScore 53.00 +G_M36710_IG03: ; bbWeight=1, gcrefRegs=0030 {r4 r5}, byrefRegs=0000 {}, byref + str r1, [r5+0x0C] + add r0, r5, 16 + ; byrRegs +[r0] + mov r1, r4 + ; gcrRegs +[r1] + movw r12, 0xd1ff + movt r12, 0xd1ff + blx r12 // CORINFO_HELP_ASSIGN_REF
; gcrRegs -[r1 r4] ; byrRegs -[r0]
- movs r1, 0 - str r1, [r6+0x08] - ;; size=154 bbWeight=1 PerfScore 57.00 -G_M36710_IG03: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, byref - str r1, [r6+0x0C] - add r0, r6, 16
+ movs r0, 0 + str r0, [r5+0x14] + movw r0, 0xd1ff + movt r0, 0xd1ff + movw r3, 0xd1ff + movt r3, 0xd1ff + blx r3 // CORINFO_HELP_NEWFAST_MAYBEFROZEN + ; gcrRegs +[r0] + mov r4, r0 + ; gcrRegs +[r4] + adds r0, r4, 4 + ; gcrRegs -[r0]
; byrRegs +[r0] mov r1, r5 ; gcrRegs +[r1] @@ -129,31 +146,11 @@ G_M36710_IG03: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, b blx r12 // CORINFO_HELP_ASSIGN_REF ; gcrRegs -[r1 r5] ; byrRegs -[r0]
- movs r0, 0 - str r0, [r6+0x14]
movw r0, 0xd1ff movt r0, 0xd1ff movw r3, 0xd1ff movt r3, 0xd1ff
- blx r3 // CORINFO_HELP_NEWSFAST - ; gcrRegs +[r0] - mov r4, r0 - ; gcrRegs +[r4] - adds r0, r4, 4 - ; gcrRegs -[r0] - ; byrRegs +[r0] - mov r1, r6 - ; gcrRegs +[r1] - movw r12, 0xd1ff - movt r12, 0xd1ff - blx r12 // CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[r1 r6] - ; byrRegs -[r0] - 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] @@ -173,11 +170,11 @@ G_M36710_IG03: ; bbWeight=1, gcrefRegs=0060 {r5 r6}, byrefRegs=0000 {}, b ; gcrRegs +[r0] ;; size=96 bbWeight=1 PerfScore 33.00 G_M36710_IG04: ; bbWeight=1, epilog, nogc, extend
- add sp, 36 - pop {r4,r5,r6,r11,pc}
+ add sp, 32 + pop {r4,r5,r11,pc}
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 284, prolog size 26, PerfScore 103.00, instruction count 103, allocated bytes for code 284 (MethodHash=ddea7099) for method FSharp.Compiler.Parser+_fsyacc_reductions@5272-313:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
+; Total bytes of code 268, prolog size 26, PerfScore 99.00, instruction count 99, allocated bytes for code 268 (MethodHash=ddea7099) for method FSharp.Compiler.Parser+_fsyacc_reductions@5272-313:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
; ============================================================ Unwind Info: @@ -189,11 +186,11 @@ Unwind Info: E bit : 1 X bit : 0 Vers : 0
- Function Length : 142 (0x0008e) Actual length = 284 (0x00011c)
+ Function Length : 134 (0x00086) Actual length = 268 (0x00010c)
--- One epilog, unwind codes at 0 ---- Unwind codes ---- ---- Epilog start at index 0 ----
- 09 add sp, sp, #36 ; opsize 16 - A8 70 pop {r4,r5,r6,r11,lr} ; opsize 32
+ 08 add sp, sp, #32 ; opsize 16 + A8 30 pop {r4,r5,r11,lr} ; opsize 32
FF end

+32 (+25.81%) : 3087.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%) : 16640.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%) : 6856.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,693 16 34 2,643 -182 +976
benchmarks.run_pgo.linux.arm.checked.mch 8,975 185 6 8,784 -3,088 +376
benchmarks.run_tiered.linux.arm.checked.mch 3,598 14 19 3,565 -236 +714
coreclr_tests.run.linux.arm.checked.mch 339 38 39 262 -126 +344
libraries.crossgen2.linux.arm.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm.checked.mch 4,853 17 89 4,747 -232 +5,052
libraries_tests.run.linux.arm.Release.mch 1,221 169 121 931 -2,366 +3,880
librariestestsnotieredcompilation.run.linux.arm.Release.mch 2,055 19 57 1,979 -168 +2,946
realworld.run.linux.arm.checked.mch 7,372 59 71 7,242 -726 +3,894
31,106 517 436 30,153 -7,124 +18,182

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm.checked.mch 9,332 845 8,487 674 (4.10%) 6,709 (40.82%)
benchmarks.run_pgo.linux.arm.checked.mch 33,324 15,197 18,127 753 (1.55%) 14,890 (30.73%)
benchmarks.run_tiered.linux.arm.checked.mch 18,373 11,761 6,612 341 (1.37%) 6,139 (24.65%)
coreclr_tests.run.linux.arm.checked.mch 2,249 1,368 881 46 (0.93%) 2,291 (46.40%)
libraries.crossgen2.linux.arm.checked.mch 450 0 450 0 (0.00%) 383 (31.16%)
libraries.pmi.linux.arm.checked.mch 18,709 0 18,709 100 (0.38%) 7,208 (27.39%)
libraries_tests.run.linux.arm.Release.mch 5,945 2,389 3,556 558 (3.22%) 10,997 (63.43%)
librariestestsnotieredcompilation.run.linux.arm.Release.mch 6,777 1 6,776 391 (3.12%) 5,377 (42.84%)
realworld.run.linux.arm.checked.mch 13,800 124 13,676 580 (2.76%) 6,793 (32.36%)
108,959 31,685 77,274 3,443 (1.99%) 60,787 (35.10%)

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: 1121796 (overridden on cmd)
Total bytes of diff: 1122590 (overridden on cmd)
Total bytes of delta: 794 (0.07 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         132 : 1619.dasm (17.28 % of base)
         106 : 4998.dasm (53.00 % of base)
          82 : 12209.dasm (16.53 % of base)
          60 : 14093.dasm (9.20 % of base)
          40 : 1745.dasm (33.90 % of base)
          40 : 5235.dasm (12.42 % of base)
          38 : 5853.dasm (17.59 % of base)
          38 : 1174.dasm (12.03 % of base)
          36 : 5765.dasm (11.61 % of base)
          34 : 4924.dasm (16.67 % of base)
          32 : 2187.dasm (13.01 % of base)
          32 : 12432.dasm (7.48 % of base)
          32 : 1658.dasm (20.00 % of base)
          32 : 5072.dasm (8.51 % of base)
          32 : 1485.dasm (11.27 % of base)
          32 : 811.dasm (10.26 % of base)
          28 : 5865.dasm (8.86 % of base)
          28 : 6630.dasm (22.58 % of base)
          26 : 16075.dasm (8.02 % of base)
          24 : 5168.dasm (3.77 % of base)

Top file improvements (bytes):
         -28 : 5028.dasm (-8.81 % of base)
         -26 : 3494.dasm (-9.29 % of base)
         -26 : 4257.dasm (-11.21 % of base)
         -14 : 1962.dasm (-3.12 % of base)
         -14 : 96.dasm (-3.93 % of base)
         -14 : 402.dasm (-3.66 % of base)
         -12 : 9979.dasm (-14.29 % of base)
         -10 : 6500.dasm (-3.73 % of base)
          -8 : 1427.dasm (-2.16 % of base)
          -8 : 6279.dasm (-0.83 % of base)
          -6 : 9398.dasm (-1.23 % of base)
          -6 : 16859.dasm (-2.24 % of base)
          -4 : 1004.dasm (-1.32 % of base)
          -2 : 11783.dasm (-0.93 % of base)
          -2 : 16153.dasm (-0.51 % of base)
          -2 : 1007.dasm (-0.70 % of base)

37 total files with Code Size differences (16 improved, 21 regressed), 24 unchanged.

Top method regressions (bytes):
         132 (17.28 % of base) : 1619.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) : 4998.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
          82 (16.53 % of base) : 12209.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) : 14093.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) : 5235.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) : 1745.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          38 (17.59 % of base) : 5853.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          38 (12.03 % of base) : 1174.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) : 5765.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 (16.67 % of base) : 4924.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) : 12432.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) : 1658.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          32 (11.27 % of base) : 1485.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
          32 (10.26 % of base) : 811.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) : 5072.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) : 2187.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
          28 (22.58 % of base) : 6630.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
          28 (8.86 % of base) : 5865.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.IOrderedCollection`1[System.__Canon] (FullOpts)
          26 (8.02 % of base) : 16075.dasm - System.Collections.Immutable.ImmutableStack:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (FullOpts)
          24 (3.77 % of base) : 5168.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)

Top method improvements (bytes):
         -28 (-8.81 % of base) : 5028.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -26 (-11.21 % of base) : 4257.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -26 (-9.29 % of base) : 3494.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
         -14 (-3.12 % of base) : 1962.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
         -14 (-3.66 % of base) : 402.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)
         -12 (-14.29 % of base) : 9979.dasm - System.IO.StreamBuffer:.ctor(int,int):this (FullOpts)
         -10 (-3.73 % of base) : 6500.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
          -8 (-2.16 % of base) : 1427.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
          -8 (-0.83 % of base) : 6279.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -6 (-2.24 % of base) : 16859.dasm - System.Linq.Enumerable:Aggregate[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon]):System.__Canon (FullOpts)
          -6 (-1.23 % of base) : 9398.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.32 % of base) : 1004.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) : 11783.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
          -2 (-0.51 % of base) : 16153.dasm - System.Collections.Concurrent.ConcurrentBag`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
          -2 (-0.70 % of base) : 1007.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) : 4998.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
          40 (33.90 % of base) : 1745.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          28 (22.58 % of base) : 6630.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
          32 (20.00 % of base) : 1658.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          38 (17.59 % of base) : 5853.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
         132 (17.28 % of base) : 1619.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) : 4924.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) : 12209.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)
          32 (13.01 % of base) : 2187.dasm - System.Text.Json.JsonSerializer:Deserialize[System.__Canon](System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonSerializerOptions):System.__Canon (FullOpts)
          40 (12.42 % of base) : 5235.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
          38 (12.03 % of base) : 1174.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) : 5765.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)
          32 (11.27 % of base) : 1485.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
          10 (10.42 % of base) : 12880.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          32 (10.26 % of base) : 811.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) : 14093.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) : 5865.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.IOrderedCollection`1[System.__Canon] (FullOpts)
          32 (8.51 % of base) : 5072.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          26 (8.02 % of base) : 16075.dasm - System.Collections.Immutable.ImmutableStack:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (FullOpts)
          32 (7.48 % of base) : 12432.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)

Top method improvements (percentages):
         -12 (-14.29 % of base) : 9979.dasm - System.IO.StreamBuffer:.ctor(int,int):this (FullOpts)
         -26 (-11.21 % of base) : 4257.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -26 (-9.29 % of base) : 3494.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
         -28 (-8.81 % of base) : 5028.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (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) : 6500.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -14 (-3.66 % of base) : 402.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -14 (-3.12 % of base) : 1962.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
          -6 (-2.24 % of base) : 16859.dasm - System.Linq.Enumerable:Aggregate[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon]):System.__Canon (FullOpts)
          -8 (-2.16 % of base) : 1427.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
          -4 (-1.32 % of base) : 1004.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) : 9398.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)
          -2 (-0.93 % of base) : 11783.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) : 6279.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -2 (-0.70 % of base) : 1007.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -2 (-0.51 % of base) : 16153.dasm - System.Collections.Concurrent.ConcurrentBag`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (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: 10036728 (overridden on cmd)
Total bytes of diff: 10034016 (overridden on cmd)
Total bytes of delta: -2712 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         140 : 5113.dasm (18.18 % of base)
          80 : 36728.dasm (11.94 % of base)
          60 : 19365.dasm (9.20 % of base)
          38 : 4685.dasm (12.03 % of base)
          32 : 31560.dasm (8.51 % of base)
          26 : 20677.dasm (8.02 % of base)

Top file improvements (bytes):
         -28 : 9552.dasm (-2.08 % of base)
         -18 : 12865.dasm (-4.95 % of base)
         -18 : 15353.dasm (-4.95 % of base)
         -18 : 19564.dasm (-5.06 % of base)
         -18 : 23465.dasm (-4.95 % of base)
         -18 : 27417.dasm (-4.95 % of base)
         -18 : 29377.dasm (-4.95 % of base)
         -18 : 47280.dasm (-5.06 % of base)
         -18 : 13073.dasm (-4.95 % of base)
         -18 : 20441.dasm (-4.95 % of base)
         -18 : 28201.dasm (-4.95 % of base)
         -18 : 44655.dasm (-5.06 % of base)
         -18 : 48145.dasm (-5.06 % of base)
         -18 : 13605.dasm (-5.06 % of base)
         -18 : 19469.dasm (-4.95 % of base)
         -18 : 23921.dasm (-5.06 % of base)
         -18 : 27725.dasm (-4.95 % of base)
         -18 : 8609.dasm (-4.95 % of base)
         -18 : 8705.dasm (-4.95 % of base)
         -18 : 20349.dasm (-4.95 % of base)

32 total files with Code Size differences (26 improved, 6 regressed), 34 unchanged.

Top method regressions (bytes):
         140 (18.18 % of base) : 5113.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)
          80 (11.94 % of base) : 36728.dasm - System.IO.Tests.Perf_Directory:SetupEnumerateFiles():this (Tier0-FullOpts)
          60 (9.20 % of base) : 19365.dasm - System.Collections.Immutable.ImmutableQueue:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (Tier0-FullOpts)
          38 (12.03 % of base) : 4685.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
          32 (8.51 % of base) : 31560.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)
          26 (8.02 % of base) : 20677.dasm - System.Collections.Immutable.ImmutableStack:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (Tier0-FullOpts)

Top method improvements (bytes):
         -28 (-2.08 % of base) : 9552.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -18 (-4.95 % of base) : 12865.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 15353.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 19564.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 23465.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 27417.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 29377.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 47280.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 13073.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 20441.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 28201.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 44655.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 48145.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 13605.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 19469.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 23921.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 27725.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 8609.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 8705.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 20349.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
         140 (18.18 % of base) : 5113.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)
          38 (12.03 % of base) : 4685.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (Tier0-FullOpts)
          80 (11.94 % of base) : 36728.dasm - System.IO.Tests.Perf_Directory:SetupEnumerateFiles():this (Tier0-FullOpts)
          60 (9.20 % of base) : 19365.dasm - System.Collections.Immutable.ImmutableQueue:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (Tier0-FullOpts)
          32 (8.51 % of base) : 31560.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)
          26 (8.02 % of base) : 20677.dasm - System.Collections.Immutable.ImmutableStack:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (Tier0-FullOpts)

Top method improvements (percentages):
         -18 (-5.06 % of base) : 19564.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 47280.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 44655.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 48145.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 13605.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 23921.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 22162.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-5.06 % of base) : 46254.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 12865.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 15353.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 23465.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 27417.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 29377.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 13073.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 20441.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 28201.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 19469.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 27725.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 8609.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -18 (-4.95 % of base) : 8705.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (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: 1965850 (overridden on cmd)
Total bytes of diff: 1966328 (overridden on cmd)
Total bytes of delta: 478 (0.02 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         132 : 12213.dasm (17.28 % of base)
         106 : 8036.dasm (53.00 % of base)
          44 : 17898.dasm (20.37 % of base)
          40 : 8818.dasm (12.42 % of base)
          40 : 21214.dasm (12.42 % of base)
          40 : 8457.dasm (33.90 % of base)
          38 : 2915.dasm (12.03 % of base)
          36 : 3884.dasm (11.69 % of base)
          34 : 5155.dasm (16.67 % of base)
          34 : 6620.dasm (27.42 % of base)
          32 : 7949.dasm (29.09 % of base)
          32 : 6498.dasm (20.00 % of base)
          32 : 8009.dasm (8.51 % of base)
          32 : 2516.dasm (10.26 % of base)
          24 : 8223.dasm (3.77 % of base)
           8 : 4738.dasm (0.64 % of base)
           4 : 14340.dasm (3.51 % of base)
           4 : 14657.dasm (0.79 % of base)
           2 : 24188.dasm (1.33 % of base)

Top file improvements (bytes):
         -94 : 14303.dasm (-5.82 % of base)
         -28 : 8994.dasm (-8.81 % of base)
         -28 : 13591.dasm (-2.08 % of base)
         -14 : 2148.dasm (-3.93 % of base)
         -14 : 2038.dasm (-3.66 % of base)
         -14 : 4322.dasm (-3.12 % of base)
         -10 : 13137.dasm (-3.73 % of base)
          -8 : 22408.dasm (-2.16 % of base)
          -8 : 3224.dasm (-0.83 % of base)
          -6 : 17541.dasm (-1.23 % of base)
          -4 : 11656.dasm (-2.38 % of base)
          -4 : 2573.dasm (-1.32 % of base)
          -2 : 24075.dasm (-0.93 % of base)
          -2 : 2576.dasm (-0.70 % of base)

33 total files with Code Size differences (14 improved, 19 regressed), 27 unchanged.

Top method regressions (bytes):
         132 (17.28 % of base) : 12213.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) : 8036.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) : 17898.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
          40 (12.42 % of base) : 21214.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (Tier1)
          40 (12.42 % of base) : 8818.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) : 8457.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          38 (12.03 % of base) : 2915.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) : 3884.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) : 6620.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          34 (16.67 % of base) : 5155.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
          32 (20.00 % of base) : 6498.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          32 (10.26 % of base) : 2516.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) : 8009.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) : 7949.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          24 (3.77 % of base) : 8223.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)
           8 (0.64 % of base) : 4738.dasm - System.Threading.CancellationTokenSource:Register(System.Delegate,System.Object,System.Threading.SynchronizationContext,System.Threading.ExecutionContext):System.Threading.CancellationTokenRegistration:this (Tier1)
           4 (3.51 % of base) : 14340.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
           4 (0.79 % of base) : 14657.dasm - System.IO.Tests.Perf_FileStream:Read(long,int,int,int):long:this (Tier0-FullOpts)
           2 (1.33 % of base) : 24188.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) : 14303.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -28 (-8.81 % of base) : 8994.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -28 (-2.08 % of base) : 13591.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -14 (-3.12 % of base) : 4322.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier0-FullOpts)
         -14 (-3.66 % of base) : 2038.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -14 (-3.93 % of base) : 2148.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -10 (-3.73 % of base) : 13137.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
          -8 (-2.16 % of base) : 22408.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (Tier0-FullOpts)
          -8 (-0.83 % of base) : 3224.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
          -6 (-1.23 % of base) : 17541.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) : 2573.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) : 11656.dasm - System.Threading.Tasks.Task:ExecuteEntryUnsafe(System.Threading.Thread):this (Tier0)
          -2 (-0.93 % of base) : 24075.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) : 2576.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) : 8036.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) : 8457.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          32 (29.09 % of base) : 7949.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          34 (27.42 % of base) : 6620.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          44 (20.37 % of base) : 17898.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
          32 (20.00 % of base) : 6498.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
         132 (17.28 % of base) : 12213.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) : 5155.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) : 21214.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (Tier1)
          40 (12.42 % of base) : 8818.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) : 2915.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) : 3884.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) : 2516.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) : 8009.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) : 8223.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) : 14340.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (Tier1)
           2 (1.33 % of base) : 24188.dasm - Sigil.Impl.LinqAlternative:ToArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
           4 (0.79 % of base) : 14657.dasm - System.IO.Tests.Perf_FileStream:Read(long,int,int,int):long:this (Tier0-FullOpts)
           8 (0.64 % of base) : 4738.dasm - System.Threading.CancellationTokenSource:Register(System.Delegate,System.Object,System.Threading.SynchronizationContext,System.Threading.ExecutionContext):System.Threading.CancellationTokenRegistration:this (Tier1)

Top method improvements (percentages):
         -28 (-8.81 % of base) : 8994.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -94 (-5.82 % of base) : 14303.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -14 (-3.93 % of base) : 2148.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -10 (-3.73 % of base) : 13137.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -14 (-3.66 % of base) : 2038.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -14 (-3.12 % of base) : 4322.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier0-FullOpts)
          -4 (-2.38 % of base) : 11656.dasm - System.Threading.Tasks.Task:ExecuteEntryUnsafe(System.Threading.Thread):this (Tier0)
          -8 (-2.16 % of base) : 22408.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (Tier0-FullOpts)
         -28 (-2.08 % of base) : 13591.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
          -4 (-1.32 % of base) : 2573.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) : 17541.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) : 24075.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) : 3224.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (Tier0-FullOpts)
          -2 (-0.70 % of base) : 2576.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: 402396 (overridden on cmd)
Total bytes of diff: 402614 (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 : 4541.dasm (27.12 % of base)
          32 : 2847.dasm (9.25 % of base)
          10 : 3832.dasm (10.64 % of base)
          10 : 3902.dasm (10.64 % of base)
           8 : 2654.dasm (4.60 % of base)
           8 : 2012.dasm (4.60 % of base)
           8 : 2373.dasm (0.68 % of base)
           6 : 3770.dasm (7.32 % of base)
           6 : 3822.dasm (7.32 % of base)
           6 : 3872.dasm (7.32 % of base)
           6 : 3882.dasm (7.32 % of base)
           6 : 3912.dasm (6.82 % of base)
           6 : 3953.dasm (6.82 % of base)
           6 : 4891.dasm (6.82 % of base)
           6 : 3842.dasm (6.82 % of base)
           6 : 3852.dasm (6.82 % of base)
           6 : 3892.dasm (6.82 % of base)
           4 : 3812.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 : 3300.dasm (-2.44 % of base)
          -2 : 3498.dasm (-2.63 % of base)
          -2 : 3540.dasm (-2.44 % of base)
          -2 : 3604.dasm (-2.63 % of base)
          -2 : 3685.dasm (-1.92 % of base)
          -2 : 3747.dasm (-2.44 % of base)
          -2 : 4870.dasm (-1.54 % of base)
          -2 : 4874.dasm (-1.72 % of base)
          -2 : 3313.dasm (-1.92 % of base)
          -2 : 3522.dasm (-2.63 % of base)
          -2 : 3529.dasm (-2.63 % of base)
          -2 : 3545.dasm (-1.92 % of base)
          -2 : 3551.dasm (-1.92 % of base)
          -2 : 3665.dasm (-2.44 % of base)
          -2 : 3675.dasm (-2.44 % of base)
          -2 : 3705.dasm (-2.22 % 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 (-1.85 % of base) : 4866.dasm - NullableTest12:BoxUnboxToQ(System.IComparable):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 (-1.54 % of base) : 4870.dasm - NullableTest14:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -2 (-1.92 % of base) : 3545.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 (-1.72 % of base) : 4874.dasm - NullableTest16:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -2 (-2.22 % of base) : 3557.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: 1326876 (overridden on cmd)
Total bytes of diff: 1331696 (overridden on cmd)
Total bytes of delta: 4820 (0.36 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
        1166 : 6680.dasm (221.67 % of base)
         342 : 20684.dasm (51.82 % of base)
         228 : 23428.dasm (54.55 % of base)
         172 : 19944.dasm (72.88 % of base)
         114 : 19538.dasm (50.44 % of base)
         100 : 4527.dasm (28.74 % of base)
         100 : 4525.dasm (28.74 % of base)
          90 : 4416.dasm (38.14 % of base)
          68 : 23479.dasm (35.05 % of base)
          66 : 24622.dasm (15.14 % of base)
          66 : 23194.dasm (37.50 % of base)
          64 : 23124.dasm (38.55 % of base)
          64 : 11030.dasm (11.31 % of base)
          64 : 23198.dasm (40.00 % of base)
          64 : 23130.dasm (55.17 % of base)
          62 : 4479.dasm (18.79 % of base)
          62 : 4491.dasm (18.79 % of base)
          62 : 4438.dasm (24.41 % of base)
          62 : 4467.dasm (18.79 % of base)
          62 : 4503.dasm (18.79 % of base)

Top file improvements (bytes):
         -42 : 4238.dasm (-25.30 % of base)
         -38 : 4234.dasm (-30.65 % of base)
         -36 : 1506.dasm (-17.14 % of base)
         -26 : 21.dasm (-11.21 % of base)
         -12 : 21661.dasm (-4.00 % of base)
         -10 : 21654.dasm (-3.09 % of base)
         -10 : 21245.dasm (-5.00 % of base)
          -8 : 4582.dasm (-2.88 % of base)
          -8 : 4378.dasm (-2.88 % of base)
          -6 : 21668.dasm (-1.99 % of base)
          -6 : 21252.dasm (-4.11 % of base)
          -6 : 21671.dasm (-1.91 % of base)
          -6 : 24652.dasm (-3.16 % of base)
          -6 : 24697.dasm (-3.06 % of base)
          -6 : 24784.dasm (-2.97 % of base)
          -4 : 4602.dasm (-1.94 % of base)
          -2 : 21091.dasm (-2.04 % of base)

44 total files with Code Size differences (17 improved, 27 regressed), 23 unchanged.

Top method regressions (bytes):
        1166 (221.67 % of base) : 6680.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
         342 (51.82 % of base) : 20684.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) : 23428.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) : 19944.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) : 19538.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) : 4525.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) : 4527.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) : 4416.dasm - System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          68 (35.05 % of base) : 23479.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) : 24622.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) : 23194.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) : 11030.dasm - Interop+procfs:ParseMapsModules(int):System.Diagnostics.ProcessModuleCollection (FullOpts)
          64 (38.55 % of base) : 23124.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) : 23130.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) : 23198.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) : 4438.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) : 4467.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) : 4479.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) : 4491.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) : 4503.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) : 4238.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -38 (-30.65 % of base) : 4234.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -36 (-17.14 % of base) : 1506.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -26 (-11.21 % of base) : 21.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -12 (-4.00 % of base) : 21661.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) : 21245.dasm - Microsoft.FSharp.Collections.ListModule:Sum[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon (FullOpts)
         -10 (-3.09 % of base) : 21654.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
          -8 (-2.88 % of base) : 4378.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) : 4582.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) : 21252.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) : 21671.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) : 21668.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) : 24652.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) : 24697.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) : 24784.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) : 4602.dasm - System.Numerics.Vector:Sum[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
          -2 (-2.04 % of base) : 21091.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):
        1166 (221.67 % of base) : 6680.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
         172 (72.88 % of base) : 19944.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) : 24084.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) : 23130.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) : 23428.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) : 20684.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) : 19538.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) : 21126.dasm - Microsoft.FSharp.Collections.ListModule:Singleton[System.__Canon](System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          64 (40.00 % of base) : 23198.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) : 23124.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) : 4416.dasm - System.Numerics.Vector:ConditionalSelect[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
          66 (37.50 % of base) : 23194.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) : 13011.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:WithContinuation[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:this (FullOpts)
          68 (35.05 % of base) : 23479.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) : 4525.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) : 4527.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) : 23175.dasm - Microsoft.FSharp.Core.ValueOption:Contains[System.__Canon](System.__Canon,Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]):ubyte (FullOpts)
          32 (25.81 % of base) : 26408.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) : 23127.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) : 4382.dasm - System.Numerics.Vector:AndNot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)

Top method improvements (percentages):
         -38 (-30.65 % of base) : 4234.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -42 (-25.30 % of base) : 4238.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -36 (-17.14 % of base) : 1506.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -26 (-11.21 % of base) : 21.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -10 (-5.00 % of base) : 21245.dasm - Microsoft.FSharp.Collections.ListModule:Sum[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon (FullOpts)
          -6 (-4.11 % of base) : 21252.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) : 21661.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) : 24652.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) : 21654.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
          -6 (-3.06 % of base) : 24697.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) : 24784.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) : 4378.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) : 4582.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) : 21091.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) : 21668.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) : 4602.dasm - System.Numerics.Vector:Sum[System.__Canon](System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
          -6 (-1.91 % of base) : 21671.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)


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: 1038666 (overridden on cmd)
Total bytes of diff: 1040180 (overridden on cmd)
Total bytes of delta: 1514 (0.15 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          40 : 935.dasm (30.77 % of base)
          32 : 11648.dasm (27.59 % of base)
          32 : 14376.dasm (27.59 % of base)
          32 : 16136.dasm (27.12 % of base)
          32 : 16448.dasm (27.59 % of base)
          32 : 17156.dasm (27.59 % of base)
          32 : 2820.dasm (27.59 % of base)
          32 : 10360.dasm (27.59 % of base)
          32 : 11492.dasm (27.12 % of base)
          32 : 11964.dasm (27.59 % of base)
          32 : 12752.dasm (27.59 % of base)
          32 : 13224.dasm (27.12 % of base)
          32 : 15712.dasm (27.12 % of base)
          32 : 15951.dasm (27.59 % of base)
          32 : 15035.dasm (27.59 % of base)
          32 : 15368.dasm (27.59 % of base)
          32 : 9800.dasm (27.59 % of base)
          32 : 10420.dasm (27.59 % of base)
          32 : 6304.dasm (27.59 % of base)
          32 : 7168.dasm (27.59 % of base)

Top file improvements (bytes):
         -28 : 2210.dasm (-2.08 % of base)
         -16 : 10963.dasm (-4.40 % of base)
         -16 : 16156.dasm (-4.40 % of base)
         -16 : 16521.dasm (-4.40 % of base)
         -16 : 16989.dasm (-4.40 % of base)
         -16 : 17432.dasm (-4.40 % of base)
         -16 : 3694.dasm (-3.09 % of base)
         -16 : 13780.dasm (-4.40 % of base)
         -16 : 14014.dasm (-4.40 % of base)
         -16 : 11170.dasm (-4.40 % of base)
         -16 : 6006.dasm (-4.40 % of base)
         -16 : 7920.dasm (-4.40 % of base)
         -16 : 8445.dasm (-4.40 % of base)
         -16 : 11645.dasm (-4.40 % of base)
         -16 : 15285.dasm (-4.40 % of base)
         -16 : 15421.dasm (-4.40 % of base)
         -16 : 6145.dasm (-4.40 % of base)
         -16 : 7583.dasm (-4.40 % of base)
         -16 : 8550.dasm (-4.40 % of base)
         -14 : 5701.dasm (-3.91 % of base)

46 total files with Code Size differences (22 improved, 24 regressed), 20 unchanged.

Top method regressions (bytes):
          40 (30.77 % of base) : 935.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          32 (27.59 % of base) : 11648.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 14376.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.12 % of base) : 16136.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 16448.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 17156.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 2820.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 10360.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.12 % of base) : 11492.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 11964.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 12752.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.12 % of base) : 13224.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.12 % of base) : 15712.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 15951.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 15035.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 15368.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 9800.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 10420.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 6304.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 7168.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (bytes):
         -28 (-2.08 % of base) : 2210.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -16 (-3.09 % of base) : 3694.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.TypeManager:InternalsVisibleTo(System.Reflection.Assembly,System.Reflection.Assembly):ubyte (Tier0-FullOpts)
         -16 (-4.40 % of base) : 10963.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 16156.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 16521.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 16989.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 17432.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 13780.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 14014.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 11170.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 6006.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 7920.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 8445.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 11645.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 15285.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 15421.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 6145.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 7583.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 8550.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -14 (-3.91 % of base) : 5701.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          40 (30.77 % of base) : 935.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          32 (27.59 % of base) : 11648.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 14376.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 16448.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 17156.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 2820.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 10360.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 11964.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 12752.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 15951.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 15035.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 15368.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 9800.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 10420.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 6304.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 7168.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 7672.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 8556.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 8680.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          32 (27.59 % of base) : 9328.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (percentages):
         -16 (-4.40 % of base) : 10963.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 16156.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 16521.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 16989.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 17432.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 13780.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 14014.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 11170.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 6006.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 7920.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 8445.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 11645.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 15285.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 15421.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 6145.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 7583.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.40 % of base) : 8550.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -14 (-3.91 % of base) : 5701.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -14 (-3.91 % of base) : 4821.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)
         -14 (-3.91 % of base) : 5905.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(uint,int,uint,int,int,int):System.__Canon[]:this (Tier1)


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: 907522 (overridden on cmd)
Total bytes of diff: 910300 (overridden on cmd)
Total bytes of delta: 2778 (0.31 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         260 : 3425.dasm (23.01 % of base)
         198 : 4340.dasm (23.13 % of base)
         118 : 6110.dasm (24.38 % of base)
         116 : 2909.dasm (42.03 % of base)
         114 : 11047.dasm (28.79 % of base)
         106 : 11046.dasm (23.14 % of base)
         106 : 67.dasm (53.00 % of base)
         100 : 8535.dasm (23.70 % of base)
          92 : 8534.dasm (9.31 % of base)
          88 : 6683.dasm (43.14 % of base)
          74 : 8759.dasm (35.92 % of base)
          70 : 6217.dasm (14.17 % of base)
          64 : 11054.dasm (21.62 % of base)
          64 : 744.dasm (11.31 % of base)
          62 : 11404.dasm (21.83 % of base)
          58 : 3405.dasm (13.81 % of base)
          58 : 3450.dasm (11.37 % of base)
          56 : 11041.dasm (17.39 % of base)
          52 : 401.dasm (15.85 % of base)
          50 : 1934.dasm (17.24 % of base)

Top file improvements (bytes):
         -26 : 341.dasm (-11.21 % of base)
         -24 : 762.dasm (-4.04 % of base)
         -14 : 2696.dasm (-20.00 % of base)
         -14 : 2968.dasm (-6.14 % of base)
         -12 : 313.dasm (-2.21 % of base)
         -10 : 3002.dasm (-3.73 % of base)
         -10 : 6149.dasm (-3.68 % of base)
          -8 : 3070.dasm (-0.83 % of base)
          -8 : 11035.dasm (-0.73 % of base)
          -8 : 3141.dasm (-2.35 % of base)
          -6 : 254.dasm (-1.60 % of base)
          -6 : 8042.dasm (-2.22 % of base)
          -6 : 511.dasm (-1.29 % of base)
          -4 : 58.dasm (-1.32 % of base)
          -4 : 1008.dasm (-0.40 % of base)
          -2 : 320.dasm (-0.70 % of base)
          -2 : 10194.dasm (-0.86 % of base)
          -2 : 8887.dasm (-3.57 % 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) : 3425.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
         198 (23.13 % of base) : 4340.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)
         118 (24.38 % of base) : 6110.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]:AddDiagnostics[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.__Canon):ubyte:this (FullOpts)
         116 (42.03 % of base) : 2909.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (FullOpts)
         114 (28.79 % of base) : 11047.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) : 11046.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) : 8535.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)
          92 (9.31 % of base) : 8534.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)
          88 (43.14 % of base) : 6683.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) : 8759.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) : 6217.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:GetTypesFromMemberMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]],System.Collections.Generic.IEqualityComparer`1[System.ReadOnlyMemory`1[ushort]]):System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
          64 (11.31 % of base) : 744.dasm - Interop+procfs:ParseMapsModules(int):System.Diagnostics.ProcessModuleCollection (FullOpts)
          64 (21.62 % of base) : 11054.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) : 11404.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) : 3450.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) : 3405.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) : 11041.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) : 1934.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (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) : 2696.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) : 2968.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) : 6149.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) : 3002.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
          -8 (-0.73 % of base) : 11035.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) : 3141.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -8 (-0.83 % of base) : 3070.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -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) : 8042.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (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 (-3.57 % of base) : 8887.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol:Microsoft.CodeAnalysis.Symbols.ITypeSymbolInternal.GetITypeSymbol():Microsoft.CodeAnalysis.ITypeSymbol:this (FullOpts)
          -2 (-0.86 % of base) : 10194.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) : 6219.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) : 7985.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) : 6683.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) : 4291.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) : 9323.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) : 2909.dasm - System.Threading.Tasks.Dataflow.Internal.Common:ReleaseAllPostponedMessages[System.__Canon](System.Threading.Tasks.Dataflow.ITargetBlock`1[System.__Canon],System.Threading.Tasks.Dataflow.Internal.QueuedMap`2[System.__Canon,System.Threading.Tasks.Dataflow.DataflowMessageHeader],byref) (FullOpts)
          40 (37.04 % of base) : 8026.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) : 8759.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) : 8740.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) : 11047.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
         118 (24.38 % of base) : 6110.dasm - Microsoft.CodeAnalysis.BindingDiagnosticBag`1[System.__Canon]:AddDiagnostics[System.__Canon](Microsoft.CodeAnalysis.CompoundUseSiteInfo`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.__Canon):ubyte:this (FullOpts)
          24 (24.00 % of base) : 1291.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
         100 (23.70 % of base) : 8535.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) : 2137.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
         106 (23.14 % of base) : 11046.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveLessDerivedMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref) (FullOpts)
         198 (23.13 % of base) : 4340.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:ParseCommaSeparatedSyntaxList[System.__Canon](byref,ushort,System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`2[System.__Canon,System.__Canon],Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser+SkipBadTokens`1[System.__Canon],ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:this (FullOpts)
         260 (23.01 % of base) : 3425.dasm - System.Linq.Enumerable:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
          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) : 9519.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Combine[System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.__Canon,System.__Canon]]](Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]],Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.__Canon,System.__Canon]]]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.ValueTuple`2[System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.__Canon,System.__Canon]]]] (FullOpts)

Top method improvements (percentages):
         -14 (-20.00 % of base) : 2696.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) : 2968.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) : 3002.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -10 (-3.68 % of base) : 6149.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -2 (-3.57 % of base) : 8887.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol:Microsoft.CodeAnalysis.Symbols.ITypeSymbolInternal.GetITypeSymbol():Microsoft.CodeAnalysis.ITypeSymbol:this (FullOpts)
          -8 (-2.35 % of base) : 3141.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -6 (-2.22 % of base) : 8042.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)
          -2 (-0.86 % of base) : 10194.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
          -8 (-0.83 % of base) : 3070.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -8 (-0.73 % of base) : 11035.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: 3308824 (overridden on cmd)
Total bytes of diff: 3311992 (overridden on cmd)
Total bytes of delta: 3168 (0.10 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         402 : 7260.dasm (66.12 % of base)
         242 : 6164.dasm (21.61 % of base)
         226 : 8883.dasm (32.29 % of base)
         192 : 6909.dasm (63.58 % of base)
         192 : 6920.dasm (63.58 % of base)
         184 : 6930.dasm (62.16 % of base)
         176 : 6933.dasm (58.28 % of base)
         122 : 10770.dasm (17.94 % of base)
         108 : 11079.dasm (14.25 % of base)
         108 : 13518.dasm (15.70 % of base)
          84 : 9707.dasm (6.77 % of base)
          84 : 9134.dasm (15.67 % of base)
          78 : 6931.dasm (33.05 % of base)
          70 : 6928.dasm (28.00 % of base)
          68 : 9624.dasm (11.97 % of base)
          68 : 5568.dasm (35.05 % of base)
          64 : 9638.dasm (27.59 % of base)
          62 : 12270.dasm (3.46 % of base)
          60 : 20272.dasm (10.42 % of base)
          46 : 6176.dasm (7.88 % of base)

Top file improvements (bytes):
         -72 : 11327.dasm (-2.91 % of base)
         -30 : 12856.dasm (-1.00 % of base)
         -30 : 13210.dasm (-1.14 % of base)
         -26 : 20001.dasm (-9.29 % of base)
         -24 : 12864.dasm (-1.21 % of base)
         -24 : 19127.dasm (-4.04 % of base)
         -20 : 12829.dasm (-4.46 % of base)
         -18 : 13638.dasm (-1.96 % of base)
         -18 : 18842.dasm (-4.29 % of base)
         -18 : 8077.dasm (-1.58 % of base)
         -16 : 10743.dasm (-1.94 % of base)
         -16 : 12865.dasm (-3.01 % of base)
         -16 : 12872.dasm (-3.01 % of base)
         -16 : 13735.dasm (-8.16 % of base)
         -16 : 8117.dasm (-5.63 % of base)
         -16 : 9043.dasm (-3.01 % of base)
         -14 : 11291.dasm (-1.37 % of base)
         -14 : 96.dasm (-3.93 % of base)
         -14 : 11361.dasm (-1.45 % of base)
         -14 : 14104.dasm (-1.44 % of base)

54 total files with Code Size differences (25 improved, 29 regressed), 20 unchanged.

Top method regressions (bytes):
         402 (66.12 % of base) : 7260.dasm - Internal.Utilities.Library.List:mapq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         242 (21.61 % of base) : 6164.dasm - FSharp.Compiler.Import:multisetDiscriminateAndMap[System.__Canon,System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         226 (32.29 % of base) : 8883.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) : 6920.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) : 6909.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) : 6930.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) : 6933.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty3[System.__Canon,System.__Canon](System.__Canon,System.__Canon,System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         122 (17.94 % of base) : 10770.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) : 13518.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) : 11079.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)
          84 (6.77 % of base) : 9707.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) : 9134.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) : 6931.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) : 6928.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) : 9624.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) : 5568.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          64 (27.59 % of base) : 9638.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) : 12270.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)
          60 (10.42 % of base) : 20272.dasm - System.Net.Sockets.SocketAsyncContext:PerformSyncOperation[System.__Canon](byref,System.__Canon,int,int):this (FullOpts)
          46 (7.88 % of base) : 6176.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)

Top method improvements (bytes):
         -72 (-2.91 % of base) : 11327.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) : 12856.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) : 13210.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) : 20001.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
         -24 (-1.21 % of base) : 12864.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) : 19127.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) : 12829.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) : 13638.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 (-1.58 % of base) : 8077.dasm - FSharp.Compiler.Lexer:ifdefSkip$cont@1058-1(int,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort],System.String,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.Unit):FSharp.Compiler.Parser+token (FullOpts)
         -18 (-4.29 % of base) : 18842.dasm - Microsoft.ML.Data.MulticlassClassificationEvaluator:GetAggregatorCore(Microsoft.ML.Data.RoleMappedSchema,System.String):Microsoft.ML.Data.MulticlassClassificationEvaluator+Aggregator:this (FullOpts)
         -16 (-3.01 % of base) : 9043.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) : 12872.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) : 12865.dasm - FSharp.Compiler.ConstraintSolver+AddCxTypeMustSubsumeTypeUndoIfFailed@3324:Invoke(FSharp.Compiler.ConstraintSolver+Trace):FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]:this (FullOpts)
         -16 (-5.63 % of base) : 8117.dasm - FSharp.Compiler.Parser+_fsyacc_reductions@5272-313:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
         -16 (-8.16 % of base) : 13735.dasm - FSharp.Compiler.Parser+_fsyacc_reductions@6045-371:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
         -16 (-1.94 % of base) : 10743.dasm - FSharp.Compiler.SyntaxTreeOps:mkSynLidGet(FSharp.Compiler.Text.Range,Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String):FSharp.Compiler.Syntax.SynExpr (FullOpts)
         -14 (-1.44 % of base) : 14104.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@254-2:Invoke(FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
         -14 (-1.37 % of base) : 11291.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@357-7:Invoke(int,FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
         -14 (-1.45 % of base) : 11361.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@477-11:Invoke(int,FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
         -14 (-1.37 % of base) : 11338.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@537-13:Invoke(int,FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)

Top method regressions (percentages):
         402 (66.12 % of base) : 7260.dasm - Internal.Utilities.Library.List:mapq[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
         192 (63.58 % of base) : 6920.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) : 6909.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) : 6930.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) : 6933.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty3[System.__Canon,System.__Canon](System.__Canon,System.__Canon,System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          68 (35.05 % of base) : 5568.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          42 (35.00 % of base) : 6856.dasm - Internal.Utilities.Collections.QueueList:foldBack[System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Internal.Utilities.Collections.QueueList`1[System.__Canon],System.__Canon):System.__Canon (FullOpts)
          40 (33.90 % of base) : 16640.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          78 (33.05 % of base) : 6931.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) : 8883.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) : 6928.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) : 9638.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) : 3087.dasm - Microsoft.FSharp.Collections.PrivateListHelpers:appendToFreshConsTail[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          24 (21.82 % of base) : 8322.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) : 6164.dasm - FSharp.Compiler.Import:multisetDiscriminateAndMap[System.__Canon,System.__Canon,System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          30 (21.43 % of base) : 14242.dasm - Microsoft.FSharp.Core.OptionModule:ToList[System.__Canon](Microsoft.FSharp.Core.FSharpOption`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          32 (20.00 % of base) : 3297.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          40 (19.42 % of base) : 5622.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)
          40 (19.42 % of base) : 12739.dasm - Microsoft.FSharp.Collections.SetTreeModule:mkIterator[System.__Canon](Microsoft.FSharp.Collections.SetTree`1[System.__Canon]):Microsoft.FSharp.Collections.SetTreeModule+SetIterator`1[System.__Canon] (FullOpts)
          38 (19.19 % of base) : 3326.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.__Canon,Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)

Top method improvements (percentages):
         -26 (-9.29 % of base) : 20001.dasm - System.Security.Cryptography.X509Certificates.OpenSslX509ChainProcessor:.cctor() (FullOpts)
         -16 (-8.16 % of base) : 13735.dasm - FSharp.Compiler.Parser+_fsyacc_reductions@6045-371:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
         -16 (-5.63 % of base) : 8117.dasm - FSharp.Compiler.Parser+_fsyacc_reductions@5272-313:Invoke(Internal.Utilities.Text.Parsing.IParseState):System.Object:this (FullOpts)
         -20 (-4.46 % of base) : 12829.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) : 18842.dasm - Microsoft.ML.Data.MulticlassClassificationEvaluator:GetAggregatorCore(Microsoft.ML.Data.RoleMappedSchema,System.String):Microsoft.ML.Data.MulticlassClassificationEvaluator+Aggregator:this (FullOpts)
         -24 (-4.04 % of base) : 19127.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) : 10540.dasm - FSharp.Compiler.ConstraintSolver+results@1879-1:Invoke(FSharp.Compiler.Infos+MethInfo):ubyte:this (FullOpts)
         -16 (-3.01 % of base) : 9043.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) : 12872.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) : 12865.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) : 11327.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.14 % of base) : 11616.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) : 13638.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) : 10743.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) : 9351.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)
         -18 (-1.58 % of base) : 8077.dasm - FSharp.Compiler.Lexer:ifdefSkip$cont@1058-1(int,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort],System.String,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.Unit):FSharp.Compiler.Parser+token (FullOpts)
         -14 (-1.45 % of base) : 11361.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@477-11:Invoke(int,FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)
         -14 (-1.44 % of base) : 14104.dasm - FSharp.Compiler.AugmentWithHashCompare+mkTest@254-2:Invoke(FSharp.Compiler.TypedTree+RecdField):FSharp.Compiler.TypedTree+Expr:this (FullOpts)