Assembly Diffs

linux arm64

Diffs are based on 97,556 contexts (38,769 MinOpts, 58,787 FullOpts).

MISSED contexts: base: 3 (0.00%), diff: 57,529 (36.17%)

Overall (+14,796 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 1,357,636 +816
benchmarks.run_pgo.linux.arm64.checked.mch 2,918,668 -312
benchmarks.run_tiered.linux.arm64.checked.mch 2,370,440 +32
coreclr_tests.run.linux.arm64.checked.mch 228,808 -32
libraries.pmi.linux.arm64.checked.mch 1,378,968 +4,800
libraries_tests.run.linux.arm64.Release.mch 2,439,884 +1,924
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 1,206,352 +3,256
realworld.run.linux.arm64.checked.mch 2,002,024 +4,312

MinOpts (-524 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.linux.arm64.checked.mch 2,079,780 -344
benchmarks.run_tiered.linux.arm64.checked.mch 2,127,348 -220
libraries_tests.run.linux.arm64.Release.mch 1,955,684 +40

FullOpts (+15,320 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 1,312,688 +816
benchmarks.run_pgo.linux.arm64.checked.mch 838,888 +32
benchmarks.run_tiered.linux.arm64.checked.mch 243,092 +252
coreclr_tests.run.linux.arm64.checked.mch 228,808 -32
libraries.pmi.linux.arm64.checked.mch 1,378,968 +4,800
libraries_tests.run.linux.arm64.Release.mch 484,200 +1,884
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 1,206,352 +3,256
realworld.run.linux.arm64.checked.mch 1,987,368 +4,312

Example diffs

benchmarks.run.linux.arm64.checked.mch

-28 (-10.61%) : 3628.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)

@@ -10,120 +10,103 @@ ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V01 tmp1 [V01,T00] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
-; V02 tmp2 [V02,T01] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V03 tmp3 [V03,T02] ( 8, 16 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V04 cse0 [V04,T03] ( 4, 4 ) long -> x19 "CSE - aggressive" -; V05 cse1 [V05,T04] ( 4, 4 ) long -> x21 "CSE - aggressive"
+; V02 tmp2 [V02,T01] ( 6, 12 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V03 tmp3 [V03,T02] ( 6, 12 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V04 cse0 [V04,T03] ( 4, 4 ) ref -> x19 "CSE - aggressive" +; V05 cse1 [V05,T04] ( 4, 4 ) byref -> x21 "CSE - aggressive" +; V06 cse2 [V06,T05] ( 4, 4 ) byref -> x22 "CSE - aggressive" +; V07 cse3 [V07,T06] ( 4, 4 ) long -> x23 "CSE - aggressive"
; ; Lcl frame size = 8 G_M2338_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]!
+ stp fp, lr, [sp, #-0x40]!
stp x19, x20, [sp, #0x18]
- str x21, [sp, #0x28]
+ stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- ;; size=16 bbWeight=1 PerfScore 3.50
+ ;; size=20 bbWeight=1 PerfScore 4.50
G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movz x19, #0xD1FFAB1E - movk x19, #0xD1FFAB1E LSL #16 - movk x19, #0xD1FFAB1E LSL #32 - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str xzr, [x20, #0x10] - movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - mov x14, x21 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str x15, [x20, #0x10] - add x14, x21, #8 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0] mov x19, x0 ; gcrRegs +[x19]
- str xzr, [x19, #0x10] - add x0, x19, #24
+ mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + add x21, x20, #24 + ; byrRegs +[x21] + mov w0, #4
; gcrRegs -[x0]
- ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0]
+ stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + add x22, x20, #29 + ; byrRegs +[x22] + mov w14, #1 + stlrb w14, [x22] + str xzr, [x20, #0x10] + movz x23, #0xD1FFAB1E // data for <unknown class>:<unknown field> + movk x23, #0xD1FFAB1E LSL #16 + movk x23, #0xD1FFAB1E LSL #32 + mov x14, x23 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + mov w0, #4 + stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + mov w14, #1 + stlrb w14, [x22] + str x14, [x20, #0x10] + add x14, x23, #8 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + str xzr, [x19, #0x10] + mov w0, #4 + stlr w0, [x21]
strb wzr, [x19, #0x1C] mov x0, x19 ; gcrRegs +[x0]
- ; byrRegs -[x0]
bl <unknown method> ; gcrRegs -[x0]
- add x14, x19, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14]
+ ; byrRegs -[x21] + mov w14, #1 + stlrb w14, [x22]
mov x14, #2
- ; byrRegs -[x14]
str x14, [x19, #0x10]
- add x14, x21, #16
+ add x14, x23, #16
mov x15, x19 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x15 x19]
- ;; size=232 bbWeight=1 PerfScore 41.00
+ ; byrRegs -[x22] + ;; size=196 bbWeight=1 PerfScore 35.50
G_M2338_IG03: ; bbWeight=1, epilog, nogc, extend
- ldr x21, [sp, #0x28]
+ ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28]
ldp x19, x20, [sp, #0x18]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 6.00
-; Total bytes of code 264, prolog size 16, PerfScore 49.50, instruction count 66, allocated bytes for code 264 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
+; Total bytes of code 236, prolog size 20, PerfScore 46.00, instruction count 59, allocated bytes for code 236 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
; ============================================================ Unwind Info: @@ -134,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 66 (0x00042) Actual length = 264 (0x000108)
+ Function Length : 59 (0x0003b) Actual length = 236 (0x0000ec)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,9 +125,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40]
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56] + E6 save_next
C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
- 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end
+ 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end

-48 (-10.53%) : 9497.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute

@@ -8,22 +8,18 @@ ; 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 -> x19 class-hnd single-def <System.Type> -; V01 loc0 [V01,T04] ( 5, 4 ) ref -> x20 class-hnd single-def <System.Collections.Hashtable> -; V02 loc1 [V02,T02] ( 7, 5 ) ref -> x22 class-hnd <System.Attribute[]> -; V03 loc2 [V03,T12] ( 4, 1 ) ref -> [fp+0x18] class-hnd exact EH-live spill-single-def <System.Object>
+; V00 arg0 [V00,T00] ( 6, 4.50) ref -> x19 class-hnd single-def <System.Type> +; V01 loc0 [V01,T02] ( 5, 4 ) ref -> x20 class-hnd single-def <System.Collections.Hashtable> +; V02 loc1 [V02,T01] ( 7, 5 ) ref -> x22 class-hnd <System.Attribute[]> +; V03 loc2 [V03,T08] ( 4, 1 ) ref -> [fp+0x18] class-hnd exact EH-live spill-single-def <System.Object>
; V04 loc3 [V04 ] ( 6, 2.50) ubyte -> [fp+0x20] 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 -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T10] ( 3, 1.25) long -> x2 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T00] ( 5, 6.75) ref -> x22 class-hnd "spilling QMark2" <System.Attribute[]> -; V09 tmp4 [V09,T07] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V10 tmp5 [V10,T11] ( 3, 1.25) long -> x2 "fgMakeTemp is creating a new local variable" -; V11 tmp6 [V11,T05] ( 5, 3.75) ref -> x22 class-hnd "spilling QMark2" <System.Attribute[]> -; V12 tmp7 [V12,T08] ( 2, 2 ) ubyte -> x0 "Inlining Arg" -; V13 PSPSym [V13,T13] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" -; V14 cse0 [V14,T06] ( 4, 3 ) long -> x21 "CSE - aggressive" -; V15 cse1 [V15,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 2, 2 ) ubyte -> x0 "Inlining Arg" +; V07 tmp2 [V07,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V08 tmp3 [V08,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V09 PSPSym [V09,T09] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" +; V10 cse0 [V10,T04] ( 4, 3 ) long -> x21 "CSE - aggressive" +; V11 cse1 [V11,T07] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 32 @@ -33,7 +29,7 @@ G_M8794_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x21, x22, [sp, #0x40] mov fp, sp add x1, sp, #80
- str x1, [fp, #0x28] // [V13 PSPSym]
+ str x1, [fp, #0x28] // [V09 PSPSym]
mov x19, x0 ; gcrRegs +[x19] ;; size=28 bbWeight=1 PerfScore 5.50 @@ -57,44 +53,29 @@ G_M8794_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x22, x1 - ; gcrRegs +[x22] - cbz x22, G_M8794_IG05 - ;; size=56 bbWeight=1 PerfScore 18.50 -G_M8794_IG03: ; bbWeight=0.25, gcrefRegs=580002 {x1 x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- ldr x0, [x22] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M8794_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M8794_IG04: ; bbWeight=0.12, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x22] - mov x0, x2 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x22, x0 ; gcrRegs +[x22]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M8794_IG05: ; bbWeight=1, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - cbz x22, G_M8794_IG08 - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M8794_IG06: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x19-x20]
+ cbz x22, G_M8794_IG05 + ;; size=72 bbWeight=1 PerfScore 21.00 +G_M8794_IG03: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x19-x20]
mov x0, x22 ; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 0.50
-G_M8794_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M8794_IG04: ; bbWeight=1, epilog, nogc, extend
ldp x21, x22, [sp, #0x40] ldp x19, x20, [sp, #0x30] ldp fp, lr, [sp], #0x50 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M8794_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
+G_M8794_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0 x22] +[x19-x20] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 @@ -105,11 +86,11 @@ G_M8794_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=1800 ; GC ptr vars +{V03} str wzr, [fp, #0x20] // [V04 loc3] ;; size=24 bbWeight=0.50 PerfScore 3.25
-G_M8794_IG09: ; bbWeight=0.50, gcVars=0000000000001000 {V03}, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG06: ; bbWeight=0.50, gcVars=0000000000000100 {V03}, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb w1, [fp, #0x20] // [V04 loc3]
- cbz w1, G_M8794_IG11
+ cbz w1, 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 -[x0 x19-x20] movz x1, #0xD1FFAB1E // code for System.Threading.Monitor:ThrowLockTakenException() movk x1, #0xD1FFAB1E LSL #16 @@ -119,14 +100,14 @@ G_M8794_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG08: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[x0 x19-x20] add x1, fp, #32 // [V04 loc3] bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0 ldrb w0, [fp, #0x20] // [V04 loc3]
- cbnz w0, G_M8794_IG12
+ cbnz w0, G_M8794_IG09
movz x1, #8 movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -140,7 +121,7 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0 ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=52 bbWeight=0.50 PerfScore 6.00
-G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG09: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
mov x0, x20 ; gcrRegs +[x0] mov x1, x19 @@ -151,33 +132,17 @@ G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x22, x1 - ; gcrRegs +[x22] - cbz x22, G_M8794_IG15 - ;; size=28 bbWeight=0.50 PerfScore 3.50 -G_M8794_IG13: ; bbWeight=0.25, gcrefRegs=580002 {x1 x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- ldr x0, [x22] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M8794_IG15 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M8794_IG14: ; bbWeight=0.12, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x22] - mov x0, x2 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x22, x0 ; gcrRegs +[x22]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - cbnz x22, G_M8794_IG16
+ cbnz x22, G_M8794_IG10
mov x0, x19
- ; gcrRegs +[x0]
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -200,45 +165,45 @@ G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=580000 {x19 x20 x22}, byrefRegs= blr x3 ; gcrRegs -[x0-x2 x19-x20] ; gcr arg pop 0
- ;; size=68 bbWeight=0.50 PerfScore 7.50 -G_M8794_IG16: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
+ ;; size=108 bbWeight=0.50 PerfScore 11.75 +G_M8794_IG10: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
ldrb w0, [fp, #0x20] // [V04 loc3]
- cbz w0, G_M8794_IG06
+ cbz w0, G_M8794_IG03
ldr x0, [fp, #0x18] // [V03 loc2] ; gcrRegs +[x0] ; GC ptr vars -{V03} bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0
- b G_M8794_IG06
+ b G_M8794_IG03
;; size=20 bbWeight=0.50 PerfScore 3.50
-G_M8794_IG17: ; bbWeight=0, gcVars=0000000000001000 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
+G_M8794_IG11: ; bbWeight=0, gcVars=0000000000000100 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
; gcrRegs -[x22]
- ; GC ptr vars +{V03 V12}
+ ; GC ptr vars +{V03 V08}
stp fp, lr, [sp, #-0x40]! stp x19, x20, [sp, #0x20] stp x21, x22, [sp, #0x30] add x3, fp, #80 str x3, [sp, #0x18] ;; size=20 bbWeight=0 PerfScore 0.00
-G_M8794_IG18: ; bbWeight=0, gcVars=0000000000001000 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG12: ; bbWeight=0, gcVars=0000000000000100 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb w0, [fp, #0x20] // [V04 loc3]
- cbz w0, G_M8794_IG19
+ cbz w0, G_M8794_IG13
ldr x0, [fp, #0x18] // [V03 loc2] ; gcrRegs +[x0]
- ; GC ptr vars -{V03 V12}
+ ; GC ptr vars -{V03 V08}
bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=16 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
ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 456, prolog size 28, PerfScore 58.25, instruction count 114, allocated bytes for code 456 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
+; Total bytes of code 408, prolog size 28, PerfScore 57.00, instruction count 102, allocated bytes for code 408 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
; ============================================================ Unwind Info: @@ -249,7 +214,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 101 (0x00065) Actual length = 404 (0x000194)
+ Function Length : 89 (0x00059) Actual length = 356 (0x000164)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -286,4 +251,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)
+EH#0: try [G_M8794_IG06..G_M8794_IG10) handled by [G_M8794_IG11..END) (fault)
-20 (-5.49%) : 8550.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
@@ -7,42 +7,40 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5.50) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T02] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T12] ( 3, 2.50) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T11] ( 3, 2.50) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T08] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T07] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T05] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T15] ( 2, 2 ) long -> x0 "argument with side effect" -; V11 tmp8 [V11,T16] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 cse0 [V12,T07] ( 5, 3.50) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T04] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T09] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T13] ( 3, 2 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T14] ( 3, 2 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T11] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+; V10 tmp7 [V10,T14] ( 2, 2 ) long -> x0 "argument with side effect" +; V11 tmp8 [V11,T15] ( 2, 2 ) long -> x0 "argument with side effect" +; V12 cse0 [V12,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T04] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T08] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T12] ( 3, 2 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T09] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T13] ( 3, 2 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -59,56 +57,53 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbz x23, G_M18513_IG11 - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x22]
+ mov x22, x0 + ; gcrRegs +[x22] + cbz x22, G_M18513_IG11 + ;; size=16 bbWeight=1 PerfScore 5.50 +G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG08 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35
-G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0.50 PerfScore 2.00 G_M18513_IG10: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
tst w20, #255 beq G_M18513_IG16 ldr x0, [x21, #0x38] @@ -116,79 +111,77 @@ G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480 ldr x0, [x0, #0x38] cbz x0, G_M18513_IG13 ;; size=24 bbWeight=0.50 PerfScore 5.75
-G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG14 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16 movn w0, #0 ; gcrRegs -[x0]
- ;; size=40 bbWeight=0.50 PerfScore 3.50
+ ;; size=40 bbWeight=0.50 PerfScore 6.00
G_M18513_IG15: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG18 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG19 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=0.50 PerfScore 2.50
+ ;; size=20 bbWeight=0.50 PerfScore 3.75
G_M18513_IG20: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 364, prolog size 32, PerfScore 62.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
+; Total bytes of code 344, prolog size 28, PerfScore 61.85, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
; ============================================================ Unwind Info: @@ -199,7 +192,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) ...

+44 (+14.29%) : 4824.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpanSystem.__Canon:System.Span`1System.__Canon

@@ -8,26 +8,29 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 3.60) long -> x20 single-def
+; V00 TypeCtx [V00,T01] ( 7, 4.28) long -> x20 single-def
; V01 arg0 [V01,T00] ( 6, 4.50) ref -> x19 class-hnd single-def <System.Collections.Generic.List`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op <System.Span`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 4, 2 ) int -> x21 -; V04 loc2 [V04,T05] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
+; V03 loc1 [V03,T08] ( 4, 2 ) int -> x21 +; V04 loc2 [V04,T07] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T07] ( 3, 2 ) long -> x2 "spilling helperCall"
+; V06 tmp1 [V06,T09] ( 3, 2 ) long -> x2 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V12 tmp7 [V12,T08] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
+; V12 tmp7 [V12,T10] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp10 [V15,T03] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T04] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T09] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP -; V18 tmp13 [V18,T10] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
+; V15 tmp10 [V15,T04] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T05] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T11] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP +; V18 tmp13 [V18,T12] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
; V19 rat0 [V19,T02] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable"
+;* V20 rat1 [V20,T13] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V21 rat2 [V21,T03] ( 3, 2.80) long -> x0 "spilling expr" +; V22 rat3 [V22,T06] ( 2, 1.60) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -45,7 +48,7 @@ G_M30960_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x0, xzr ; byrRegs +[x0] mov w1, wzr
- cbz x19, G_M30960_IG10
+ cbz x19, G_M30960_IG13
;; size=12 bbWeight=1 PerfScore 2.00 G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; byrRegs -[x0] @@ -68,7 +71,7 @@ G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, G_M30960_IG04: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz ldr w0, [x22, #0x08] cmp w0, w21
- blo G_M30960_IG11
+ blo G_M30960_IG14
ldr x0, [x20, #0x38] ldr x2, [x0, #0x10] cbz x2, G_M30960_IG06 @@ -81,7 +84,7 @@ G_M30960_IG06: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x2, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35 G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz @@ -105,9 +108,26 @@ G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=000 ; gcrRegs -[x19] ;; size=60 bbWeight=0.50 PerfScore 8.00 G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
+ ldr x0, [x20, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M30960_IG10 + ;; size=16 bbWeight=0.50 PerfScore 3.75 +G_M30960_IG09: ; bbWeight=0.40, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M30960_IG11 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M30960_IG10: ; bbWeight=0.18, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x20 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M30960_IG11: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
add x19, x22, #16 ; byrRegs +[x19]
- tbz w21, #31, G_M30960_IG09
+ tbz w21, #31, G_M30960_IG12
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -121,19 +141,19 @@ G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {} blr x2 ; gcrRegs -[x22] ;; size=52 bbWeight=0.50 PerfScore 5.00
-G_M30960_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
+G_M30960_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
mov x0, x19 ; byrRegs +[x0] sxtw w1, w21 ;; size=8 bbWeight=0.50 PerfScore 0.50
-G_M30960_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
+G_M30960_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
; byrRegs -[x19] ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M30960_IG14: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[x0] movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowInvalidOperationException_ConcurrentOperationsNotSupported() movk x0, #0xD1FFAB1E LSL #16 @@ -143,7 +163,7 @@ G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 308, prolog size 20, PerfScore 39.25, instruction count 77, allocated bytes for code 308 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
+; Total bytes of code 352, prolog size 20, PerfScore 45.14, instruction count 88, allocated bytes for code 352 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -154,7 +174,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
+ Function Length : 88 (0x00058) Actual length = 352 (0x000160)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+15.38%) : 1646.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) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x19 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T06] ( 3, 3 ) ref -> x22 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> x20 single-def -; V04 arg3 [V04,T03] ( 4, 4 ) int -> x21 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T07] ( 3, 3 ) ref -> x23 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> x21 single-def +; V04 arg3 [V04,T03] ( 4, 4 ) int -> x22 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,80 +24,96 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T04] ( 3, 6 ) ref -> x0 single-def "argument with side effect"
-; V16 cse0 [V16,T09] ( 3, 3 ) int -> x1 "CSE - aggressive" -; V17 rat0 [V17,T08] ( 3, 4 ) long -> x1 "runtime lookup" -; V18 rat1 [V18,T05] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T07] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T10] ( 3, 3 ) int -> x0 "CSE - aggressive" +;* V17 rat0 [V17,T11] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T05] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T06] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- str x0, [fp, #0x18] - mov x19, x1 - ; gcrRegs +[x19] - mov x22, x2 - ; gcrRegs +[x22] - mov w20, w3 - mov w21, w4 - ;; size=36 bbWeight=1 PerfScore 6.50 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - cbz x19, G_M13831_IG08 - ldr w1, [x19, #0x08] - cmp w1, w20 - blo G_M13831_IG09 - sub w1, w1, w20 - cmp w1, w21 - blo G_M13831_IG10 - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M13831_IG05 - ;; size=44 bbWeight=1 PerfScore 15.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ldr x1, [x1, #0x18] - cbz x1, G_M13831_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - b G_M13831_IG06 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+ str x0, [fp, #0x10] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x23, x2 + ; gcrRegs +[x23] + mov w21, w3 + mov w22, w4 + ;; size=44 bbWeight=1 PerfScore 8.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M13831_IG10 + ldr w0, [x20, #0x08] + cmp w0, w21 + blo G_M13831_IG11 + sub w0, w0, w21 + cmp w0, w22 + blo G_M13831_IG12 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M13831_IG04 + ;; size=40 bbWeight=1 PerfScore 14.50 +G_M13831_IG03: ; bbWeight=0.20, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M13831_IG04: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M13831_IG07 + ;; size=16 bbWeight=1 PerfScore 7.50 +G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M13831_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + b G_M13831_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x1
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1 ; gcrRegs +[x0]
- mov x1, x19
+ mov x1, x20
; gcrRegs +[x1]
- mov x2, x22
+ mov x2, x23
; gcrRegs +[x2]
- mov w3, w20 - mov w4, w21
+ mov w3, w21 + mov w4, w22
ldr x5, [x0] ldr x5, [x5, #0x50] ldr x5, [x5] blr x5
- ; gcrRegs -[x0-x2 x19 x22] - ;; size=56 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0-x2 x20 x23] + ;; size=52 bbWeight=1 PerfScore 17.50 +G_M13831_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=20 bbWeight=1 PerfScore 6.00 +G_M13831_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_unix #0 ;; size=28 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -114,7 +130,7 @@ G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x0 brk_unix #0 ;; size=24 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -123,7 +139,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 260, prolog size 20, PerfScore 48.42, instruction count 65, allocated bytes for code 260 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
+; Total bytes of code 300, prolog size 24, PerfScore 59.02, instruction count 75, allocated bytes for code 300 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================ Unwind Info: @@ -134,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 65 (0x00041) Actual length = 260 (0x000104)
+ Function Length : 75 (0x0004b) Actual length = 300 (0x00012c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,10 +158,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! E4 end
- E4 end - E4 end

+40 (+20.83%) : 4348.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) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x1 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x19 class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Comparison`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) struct (16) 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 (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp3 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 4 ) int -> x21 "Inlining Arg" -; V09 tmp5 [V09,T06] ( 2, 4 ) byref -> x20 single-def "Inlining Arg"
+; V08 tmp4 [V08,T08] ( 2, 4 ) int -> x20 "Inlining Arg" +; V09 tmp5 [V09,T07] ( 2, 4 ) byref -> x22 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=0x8)" P-INDEP
-; V14 tmp10 [V14,T09] ( 2, 2 ) byref -> x20 single-def "field V05._reference (fldOffset=0x0)" P-INDEP -; V15 tmp11 [V15,T10] ( 2, 2 ) int -> x21 "field V05._length (fldOffset=0x8)" P-INDEP -; V16 tmp12 [V16,T08] ( 2, 4 ) long -> x0 "argument with side effect" -; V17 rat0 [V17,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V18 rat1 [V18,T03] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V14 tmp10 [V14,T10] ( 2, 2 ) byref -> x22 single-def "field V05._reference (fldOffset=0x0)" P-INDEP +; V15 tmp11 [V15,T11] ( 2, 2 ) int -> x20 "field V05._length (fldOffset=0x8)" P-INDEP +; V16 tmp12 [V16,T09] ( 2, 4 ) long -> x0 "argument with side effect" +;* V17 rat0 [V17,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T03] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T04] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M37190_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10] - mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 5.00 -G_M37190_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x1] - cbz x1, G_M37190_IG08 - cbz x19, G_M37190_IG09 - add x20, x1, #16 - ; byrRegs +[x20] - ldr w21, [x1, #0x08] - ldr x1, [x0, #0x38] - ; gcrRegs -[x1] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M37190_IG05 - ;; size=32 bbWeight=1 PerfScore 13.00 -G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M37190_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - mov x0, x2 - b G_M37190_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x21, x2 + ; gcrRegs +[x21] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M37190_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M37190_IG10 + cbz x21, G_M37190_IG11 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M37190_IG04 + ;; size=20 bbWeight=1 PerfScore 9.00 +G_M37190_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M37190_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M37190_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + add x22, x20, #16 + ; byrRegs +[x22] + ldr w20, [x20, #0x08] + ; gcrRegs -[x20] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M37190_IG07 + ;; size=24 bbWeight=1 PerfScore 11.00 +G_M37190_IG05: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M37190_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M37190_IG06: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + b G_M37190_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M37190_IG07: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M37190_IG08: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + mov x1, x22
; byrRegs +[x1]
- mov w2, w21 - mov x3, x19
+ mov w2, w20 + mov x3, x21
; gcrRegs +[x3] movz x4, #0xD1FFAB1E // code for <unknown method> movk x4, #0xD1FFAB1E LSL #16 movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x3 x19] - ; byrRegs -[x1 x20]
+ ; gcrRegs -[x3 x21] + ; byrRegs -[x1 x22]
;; size=32 bbWeight=1 PerfScore 7.00
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+G_M37190_IG09: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M37190_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -96,7 +112,7 @@ G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_unix #0 ;; size=28 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
mov w0, #29 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_unix #0 ;; size=28 bbWeight=0 PerfScore 0.00
-; Total bytes of code 192, prolog size 20, PerfScore 35.06, instruction count 48, allocated bytes for code 192 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
+; Total bytes of code 232, prolog size 20, PerfScore 42.52, instruction count 58, allocated bytes for code 232 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
; ============================================================ Unwind Info: @@ -117,7 +133,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
+ Function Length : 58 (0x0003a) Actual length = 232 (0x0000e8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -125,9 +141,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

benchmarks.run_pgo.linux.arm64.checked.mch

-20 (-5.49%) : 19715.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)

@@ -8,42 +8,40 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 786 ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T03] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T11] ( 3, 2 ) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T10] ( 3, 2 ) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T12] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T11] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T07] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T16] ( 2, 0 ) long -> x0 "argument with side effect"
+; V10 tmp7 [V10,T15] ( 2, 0 ) long -> x0 "argument with side effect"
; V11 tmp8 [V11,T08] ( 2, 4 ) long -> x0 "argument with side effect"
-; V12 cse0 [V12,T10] ( 5, 3 ) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T13] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
+; V12 cse0 [V12,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T12] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T13] ( 3, 0 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T14] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -60,118 +58,114 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbnz x23, G_M18513_IG11
+ mov x22, x0 + ; gcrRegs +[x22] + cbnz x22, G_M18513_IG11
tst w20, #255 bne G_M18513_IG15
- ;; size=28 bbWeight=1 PerfScore 7.50 -G_M18513_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x23]
+ ;; size=24 bbWeight=1 PerfScore 7.00 +G_M18513_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG08 ;; size=16 bbWeight=1 PerfScore 10.00
-G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M18513_IG09: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG09: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 7.50
G_M18513_IG10: ; bbWeight=1, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x1 x22] +[x23]
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x1] +[x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG12 b G_M18513_IG13 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG12: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M18513_IG13: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0 PerfScore 0.00 G_M18513_IG14: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0 PerfScore 0.00 -G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x38] cbz x0, G_M18513_IG16 b G_M18513_IG17 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG16: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06 @@ -179,14 +173,13 @@ G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 { ; gcrRegs -[x0] ;; size=40 bbWeight=0 PerfScore 0.00 G_M18513_IG18: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 364, prolog size 32, PerfScore 51.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
+; Total bytes of code 344, prolog size 28, PerfScore 50.60, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
; ============================================================ Unwind Info: @@ -197,7 +190,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -211,9 +204,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next ...

-28 (-5.15%) : 9785.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,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,T01] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T09] ( 3, 2.09) long -> x1 single-def -; V02 arg2 [V02,T04] ( 4, 3.09) int -> x2 single-def -; V03 arg3 [V03,T05] ( 4, 3.09) long -> x21 single-def -; V04 arg4 [V04,T06] ( 4, 3.09) int -> x22 single-def -; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V00 this [V00,T00] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T08] ( 3, 2.09) long -> x1 single-def +; V02 arg2 [V02,T03] ( 4, 3.09) int -> x2 single-def +; V03 arg3 [V03,T04] ( 4, 3.09) long -> x21 single-def +; V04 arg4 [V04,T05] ( 4, 3.09) int -> x22 single-def +; V05 arg5 [V05,T06] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 4 ) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T11] ( 10, 3.25) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T11] ( 9, 3 ) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T10] ( 4, 3.50) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -; V13 tmp4 [V13,T14] ( 2, 0.35) ref -> x0 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 (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T12] ( 2, 2 ) long -> x21 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T13] ( 2, 2 ) int -> x22 "field V16.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V19 rat0 [V19,T08] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V20 rat1 [V20,T03] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V11 tmp2 [V11,T14] ( 2, 0.35) ref -> x0 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 (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T12] ( 2, 2 ) long -> x21 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T13] ( 2, 2 ) int -> x22 "field V14.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V17 tmp8 [V17,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V18 rat0 [V18,T07] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V19 rat1 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -48,7 +48,7 @@ G_M19047_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov w20, w6 ;; size=44 bbWeight=1 PerfScore 8.00 G_M19047_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- cbnz w2, G_M19047_IG07
+ cbnz w2, G_M19047_IG12
;; size=4 bbWeight=1 PerfScore 1.00 G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz str x21, [fp, #0x18] // [V07 loc0] @@ -57,7 +57,7 @@ G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x21, xzr ; gcrRegs +[x21] cmp w20, #6
- bhi G_M19047_IG19
+ bhi G_M19047_IG15
mov w1, w20 adr x0, [@RWD00] ldr w0, [x0, x1, LSL #2] @@ -69,18 +69,76 @@ G_M19047_IG04: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG15
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref + mov x1, x21 + ; gcrRegs +[x1] + bl CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[x1 x21] +[x0]
;; size=8 bbWeight=1 PerfScore 1.50
-G_M19047_IG06: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref - b G_M19047_IG08 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M19047_IG07: ; bbWeight=0.09, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG06: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x58] + ldp x21, x22, [sp, #0x48] + ldp x19, x20, [sp, #0x38] + ldp fp, lr, [sp], #0x60 + ret lr + ;; size=20 bbWeight=1 PerfScore 6.00 +G_M19047_IG07: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0] +[x21] + ldr x0, [x19] + ldr x1, [x0, #0x38] + ldr x1, [x1] + ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG04 + ;; size=20 bbWeight=1 PerfScore 13.00 +G_M19047_IG08: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref + mov x0, x2 + b G_M19047_IG05 + ;; size=8 bbWeight=0.80 PerfScore 1.20 +G_M19047_IG09: ; bbWeight=0.39, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.39 PerfScore 3.13 +G_M19047_IG10: ; bbWeight=0.30, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.30 PerfScore 2.43 +G_M19047_IG11: ; bbWeight=0.22, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateConstructors(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeConstructorInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.22 PerfScore 1.74 +G_M19047_IG12: ; bbWeight=0.09, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -97,18 +155,7 @@ G_M19047_IG07: ; bbWeight=0.09, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0] b G_M19047_IG03 ;; size=48 bbWeight=0.09 PerfScore 1.04
-G_M19047_IG08: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x0 x21] - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG15 - ;; size=12 bbWeight=0.50 PerfScore 2.25 -G_M19047_IG09: ; bbWeight=0.25, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - b G_M19047_IG14 - ;; size=4 bbWeight=0.25 PerfScore 0.25 -G_M19047_IG10: ; bbWeight=0.04, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x21]
+G_M19047_IG13: ; bbWeight=0.04, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
add x1, fp, #24 // [V07 loc0] mov x0, x19 ; gcrRegs +[x0] @@ -119,75 +166,9 @@ G_M19047_IG10: ; bbWeight=0.04, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, blr x2 mov x21, x0 ; gcrRegs +[x21]
- b G_M19047_IG12
+ b G_M19047_IG07
;; size=36 bbWeight=0.04 PerfScore 0.35
-G_M19047_IG11: ; bbWeight=0.39, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0 x21] - add x1, fp, #24 // [V07 loc0] - mov x0, x19 - ; gcrRegs +[x0] - movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - ldr x2, [x2] - blr x2 - mov x21, x0 - ; gcrRegs +[x21] - ;; size=32 bbWeight=0.39 PerfScore 2.74 -G_M19047_IG12: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - ldr x0, [x19] - ldr x1, [x0, #0x38] - ldr x1, [x1] - ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG04 - ;; size=20 bbWeight=1 PerfScore 13.00 -G_M19047_IG13: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - b G_M19047_IG05 - ;; size=4 bbWeight=0.80 PerfScore 0.80 -G_M19047_IG14: ; bbWeight=0.25, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - mov x0, x1 - mov x1, x21 - ; gcrRegs +[x1] - bl CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[x1 x21] +[x0] - ;; size=12 bbWeight=0.25 PerfScore 0.50 -G_M19047_IG15: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc - ldr x23, [sp, #0x58] - ldp x21, x22, [sp, #0x48] - ldp x19, x20, [sp, #0x38] - ldp fp, lr, [sp], #0x60 - ret lr - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M19047_IG16: ; bbWeight=0.30, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0] - add x1, fp, #24 // [V07 loc0] - mov x0, x19 - ; gcrRegs +[x0] - movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - ldr x2, [x2] - blr x2 - mov x21, x0 - ; gcrRegs +[x21] - b G_M19047_IG12 - ;; size=36 bbWeight=0.30 PerfScore 2.43 -G_M19047_IG17: ; bbWeight=0.22, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0 x21] - add x1, fp, #24 // [V07 loc0] - mov x0, x19 - ; gcrRegs +[x0] - movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateConstructors(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeConstructorInfo[]:this - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - ldr x2, [x2] - blr x2 - mov x21, x0 - ; gcrRegs +[x21] - b G_M19047_IG12 - ;; size=36 bbWeight=0.22 PerfScore 1.74 -G_M19047_IG18: ; bbWeight=0.04, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG14: ; bbWeight=0.04, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] ...

-28 (-5.15%) : 13569.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,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,T01] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T09] ( 3, 2.09) long -> x1 single-def -; V02 arg2 [V02,T04] ( 4, 3.09) int -> x2 single-def -; V03 arg3 [V03,T05] ( 4, 3.09) long -> x21 single-def -; V04 arg4 [V04,T06] ( 4, 3.09) int -> x22 single-def -; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V00 this [V00,T00] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T08] ( 3, 2.09) long -> x1 single-def +; V02 arg2 [V02,T03] ( 4, 3.09) int -> x2 single-def +; V03 arg3 [V03,T04] ( 4, 3.09) long -> x21 single-def +; V04 arg4 [V04,T05] ( 4, 3.09) int -> x22 single-def +; V05 arg5 [V05,T06] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 4 ) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T11] ( 10, 3.25) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T11] ( 9, 3 ) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T10] ( 4, 3.50) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -; V13 tmp4 [V13,T14] ( 2, 0.35) ref -> x0 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 (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T12] ( 2, 2 ) long -> x21 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T13] ( 2, 2 ) int -> x22 "field V16.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V19 rat0 [V19,T08] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V20 rat1 [V20,T03] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V11 tmp2 [V11,T14] ( 2, 0.35) ref -> x0 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 (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T12] ( 2, 2 ) long -> x21 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T13] ( 2, 2 ) int -> x22 "field V14.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V17 tmp8 [V17,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V18 rat0 [V18,T07] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V19 rat1 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -48,7 +48,7 @@ G_M19047_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov w20, w6 ;; size=44 bbWeight=1 PerfScore 8.00 G_M19047_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- cbnz w2, G_M19047_IG07
+ cbnz w2, G_M19047_IG13
;; size=4 bbWeight=1 PerfScore 1.00 G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz str x21, [fp, #0x18] // [V07 loc0] @@ -57,7 +57,7 @@ G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x21, xzr ; gcrRegs +[x21] cmp w20, #6
- bhi G_M19047_IG19
+ bhi G_M19047_IG17
mov w1, w20 adr x0, [@RWD00] ldr w0, [x0, x1, LSL #2] @@ -69,18 +69,90 @@ G_M19047_IG04: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG15
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref + mov x1, x21 + ; gcrRegs +[x1] + bl CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[x1 x21] +[x0]
;; size=8 bbWeight=1 PerfScore 1.50
-G_M19047_IG06: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref - b G_M19047_IG08 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M19047_IG07: ; bbWeight=0.09, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG06: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x58] + ldp x21, x22, [sp, #0x48] + ldp x19, x20, [sp, #0x38] + ldp fp, lr, [sp], #0x60 + ret lr + ;; size=20 bbWeight=1 PerfScore 6.00 +G_M19047_IG07: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0] +[x21] + ldr x0, [x19] + ldr x1, [x0, #0x38] + ldr x1, [x1] + ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG04 + ;; size=20 bbWeight=1 PerfScore 13.00 +G_M19047_IG08: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref + mov x0, x2 + b G_M19047_IG05 + ;; size=8 bbWeight=0.80 PerfScore 1.20 +G_M19047_IG09: ; bbWeight=0.35, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateConstructors(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeConstructorInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.35 PerfScore 2.78 +G_M19047_IG10: ; bbWeight=0.26, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.26 PerfScore 2.09 +G_M19047_IG11: ; bbWeight=0.22, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.22 PerfScore 1.74 +G_M19047_IG12: ; bbWeight=0.16, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for <unknown method> + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.16 PerfScore 1.28 +G_M19047_IG13: ; bbWeight=0.09, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -97,18 +169,7 @@ G_M19047_IG07: ; bbWeight=0.09, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0] b G_M19047_IG03 ;; size=48 bbWeight=0.09 PerfScore 1.04
-G_M19047_IG08: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x0 x21] - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG15 - ;; size=12 bbWeight=0.50 PerfScore 2.25 -G_M19047_IG09: ; bbWeight=0.25, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - b G_M19047_IG14 - ;; size=4 bbWeight=0.25 PerfScore 0.25 -G_M19047_IG10: ; bbWeight=0.01, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x21]
+G_M19047_IG14: ; bbWeight=0.01, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
add x1, fp, #24 // [V07 loc0] mov x0, x19 ; gcrRegs +[x0] @@ -119,75 +180,23 @@ G_M19047_IG10: ; bbWeight=0.01, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, blr x2 mov x21, x0 ; gcrRegs +[x21]
- b G_M19047_IG12
+ b G_M19047_IG07
;; size=36 bbWeight=0.01 PerfScore 0.12
-G_M19047_IG11: ; bbWeight=0.35, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 ; gcrRegs +[x0]
- movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateConstructors(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeConstructorInfo[]:this
+ movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateEvents(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeEventInfo[]:this
movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2] blr x2 mov x21, x0 ; gcrRegs +[x21]
- ;; size=32 bbWeight=0.35 PerfScore 2.43 -G_M19047_IG12: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - ldr x0, [x19] - ldr x1, [x0, #0x38] - ldr x1, [x1] - ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG04 - ;; size=20 bbWeight=1 PerfScore 13.00 -G_M19047_IG13: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - b G_M19047_IG05 - ;; size=4 bbWeight=0.80 PerfScore 0.80 -G_M19047_IG14: ; bbWeight=0.25, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - mov x0, x1 - mov x1, x21 - ; gcrRegs +[x1] - bl CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[x1 x21] +[x0] - ;; size=12 bbWeight=0.25 PerfScore 0.50 -G_M19047_IG15: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc - ldr x23, [sp, #0x58] - ldp x21, x22, [sp, #0x48] - ldp x19, x20, [sp, #0x38] - ldp fp, lr, [sp], #0x60 - ret lr - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M19047_IG16: ; bbWeight=0.26, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0] - add x1, fp, #24 // [V07 loc0] - mov x0, x19 - ; gcrRegs +[x0] - movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - ldr x2, [x2] - blr x2 - mov x21, x0 - ; gcrRegs +[x21] - b G_M19047_IG12 - ;; size=36 bbWeight=0.26 PerfScore 2.09 -G_M19047_IG17: ; bbWeight=0.22, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0 x21]
...

+48 (+36.36%) : 23500.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.20) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.24) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.20) byref -> x19 single-def
+; V00 this [V00,T02] ( 3, 2.20) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 3.52) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.20) byref -> x20 single-def
; V03 loc0 [V03,T03] ( 7, 3.81) ref -> x0 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, 1.62) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 1.62) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 0.81) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 0.81) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 1.13) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 1.13) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 0.65) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.20 PerfScore 1.41
-G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.16 PerfScore 0.16
-G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.04 PerfScore 0.12
-G_M58319_IG06: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.20 PerfScore 2.22 +G_M58319_IG07: ; bbWeight=0.16, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.16 PerfScore 0.65 +G_M58319_IG08: ; bbWeight=0.07, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.07 PerfScore 0.22 +G_M58319_IG09: ; bbWeight=0.20, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.20 PerfScore 1.41 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.20 PerfScore 0.71 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 17.61, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 19.49, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+36.36%) : 24852.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.20) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.25) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.20) byref -> x19 single-def
+; V00 this [V00,T02] ( 3, 2.20) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 3.52) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.20) byref -> x20 single-def
; V03 loc0 [V03,T03] ( 7, 3.82) ref -> x0 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, 1.64) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 1.64) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 0.82) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 0.82) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 1.15) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 1.15) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 0.65) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.20 PerfScore 1.43
-G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.16 PerfScore 0.16
-G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.04 PerfScore 0.12
-G_M58319_IG06: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.20 PerfScore 2.25 +G_M58319_IG07: ; bbWeight=0.16, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.16 PerfScore 0.65 +G_M58319_IG08: ; bbWeight=0.07, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.07 PerfScore 0.22 +G_M58319_IG09: ; bbWeight=0.20, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.20 PerfScore 1.43 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.20 PerfScore 0.72 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 17.65, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 19.56, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+36.36%) : 26012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.19) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.23) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.19) byref -> x19 single-def
+; V00 this [V00,T02] ( 3, 2.19) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 3.49) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.19) byref -> x20 single-def
; V03 loc0 [V03,T03] ( 7, 3.76) ref -> x0 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, 1.53) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 1.53) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 0.76) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 0.76) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 1.07) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 1.07) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 0.61) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.19, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.19, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.19 PerfScore 1.34
-G_M58319_IG04: ; bbWeight=0.15, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.15, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.15 PerfScore 0.15
-G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.04 PerfScore 0.11
-G_M58319_IG06: ; bbWeight=0.19, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.19, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.19 PerfScore 2.10 +G_M58319_IG07: ; bbWeight=0.15, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.15 PerfScore 0.61 +G_M58319_IG08: ; bbWeight=0.07, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.07 PerfScore 0.21 +G_M58319_IG09: ; bbWeight=0.19, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.19 PerfScore 1.34 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.19 PerfScore 0.67 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 17.44, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 19.19, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

benchmarks.run_tiered.linux.arm64.checked.mch

-24 (-4.38%) : 1465.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,int,int,int):System.Canon[]:this (Tier1)

@@ -9,23 +9,23 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 6.50) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T09] ( 3, 2.50) long -> x1 single-def -; V02 arg2 [V02,T05] ( 4, 3.50) int -> x2 single-def -; V03 arg3 [V03,T06] ( 4, 3.50) long -> x21 single-def -; V04 arg4 [V04,T07] ( 4, 3.50) int -> x22 single-def -; V05 arg5 [V05,T08] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V01 arg1 [V01,T08] ( 3, 2.50) long -> x1 single-def +; V02 arg2 [V02,T04] ( 4, 3.50) int -> x2 single-def +; V03 arg3 [V03,T05] ( 4, 3.50) long -> x21 single-def +; V04 arg4 [V04,T06] ( 4, 3.50) int -> x22 single-def +; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 6.50) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T11] ( 4, 2.75) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T01] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T10] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T04] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T09] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T10] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -192,42 +192,30 @@ G_M19047_IG13: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG15
+ ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG15
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG14: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG16
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG15: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG19 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG17: ; bbWeight=0.25, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG19 - ;; size=12 bbWeight=0.25 PerfScore 1.12 -G_M19047_IG18: ; bbWeight=0.12, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTINTERFACE
movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2] blr x2 ; gcrRegs -[x1 x21] +[x0]
- ;; size=28 bbWeight=0.12 PerfScore 0.81 -G_M19047_IG19: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=24 bbWeight=1 PerfScore 6.00 +G_M19047_IG17: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] @@ -243,7 +231,7 @@ RWD00 dd G_M19047_IG05 - G_M19047_IG02 dd G_M19047_IG10 - G_M19047_IG02
-; Total bytes of code 548, prolog size 24, PerfScore 81.59, instruction count 137, allocated bytes for code 548 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
+; Total bytes of code 524, prolog size 24, PerfScore 84.45, instruction count 131, allocated bytes for code 524 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
; ============================================================ Unwind Info: @@ -254,7 +242,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 137 (0x00089) Actual length = 548 (0x000224)
+ Function Length : 131 (0x00083) Actual length = 524 (0x00020c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-3.70%) : 4647.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object

@@ -10,23 +10,21 @@ ; ; V00 arg0 [V00,T00] ( 9, 6 ) ref -> x19 class-hnd single-def <System.RuntimeType> ; V01 arg1 [V01,T01] ( 8, 5 ) int -> x20 single-def
-;* V02 loc0 [V02,T12] ( 0, 0 ) ubyte -> zero-ref -; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> x21
+;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref +; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> x21
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T05] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T13] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T03] ( 5, 3.75) ref -> x0 class-hnd "spilling QMark2" <System.Object[]> -; V09 tmp4 [V09,T07] ( 3, 1.50) ref -> x0 -; V10 tmp5 [V10,T08] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> -; V11 tmp6 [V11,T04] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> -;* V12 tmp7 [V12,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> -;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> -;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V15 tmp10 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 5, 5 ) ref -> x0 "Single return block return value" -; V17 cse0 [V17,T10] ( 3, 1.50) long -> x0 "CSE - moderate" -; V18 cse1 [V18,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 3, 1.50) ref -> x0 +; V07 tmp2 [V07,T07] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> +; V08 tmp3 [V08,T03] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> +;* V09 tmp4 [V09,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> +;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> +;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V13 tmp8 [V13,T02] ( 5, 5 ) ref -> x0 "Single return block return value" +; V14 tmp9 [V14,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V15 cse0 [V15,T09] ( 3, 1.50) long -> x0 "CSE - moderate" +; V16 cse1 [V16,T08] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 8 @@ -94,7 +92,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 b G_M32569_IG07 @@ -105,16 +103,18 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #86
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x1, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x0, [x1] ; gcrRegs +[x0]
+ ; byrRegs -[x0]
;; size=36 bbWeight=0.50 PerfScore 3.75 G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=4 bbWeight=0.50 PerfScore 0.50 G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19] @@ -124,10 +124,10 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[x19] +[x0] ; gcr arg pop 0
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=32 bbWeight=0.50 PerfScore 3.00 G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] @@ -135,18 +135,20 @@ G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #87
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] ; gcrRegs +[x0]
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=40 bbWeight=0.50 PerfScore 4.25 G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19]
- cbz w20, G_M32569_IG14
+ cbz w20, G_M32569_IG11
mov x0, x19 ; gcrRegs +[x0] mov w1, w20 @@ -159,43 +161,32 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M32569_IG13 - ;; size=40 bbWeight=0.50 PerfScore 4.50 -G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M32569_IG13 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref - b G_M32569_IG19 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ b G_M32569_IG16 + ;; size=56 bbWeight=0.50 PerfScore 5.75 +G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x19] ldr x0, [x19, #0x10]
- cbz x0, G_M32569_IG16
+ cbz x0, G_M32569_IG13
bl <unknown method> ; gcrRegs +[x0] ; gcr arg pop 0 mov x20, x0 ; gcrRegs +[x20]
- cbz x20, G_M32569_IG16
+ cbz x20, G_M32569_IG13
ldr x0, [x20] ; gcrRegs -[x0] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 cmp x0, x1
- beq G_M32569_IG15
+ beq G_M32569_IG12
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -209,10 +200,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0 x19] ; gcr arg pop 0 ;; size=80 bbWeight=0.50 PerfScore 10.00
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M32569_IG14
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x20] +[x19] mov x0, x19 ; gcrRegs +[x0] @@ -226,7 +217,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, mov x20, x0 ; gcrRegs +[x20] ;; size=28 bbWeight=0.50 PerfScore 3.25
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -236,14 +227,14 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ldr x1, [x1] ldr wzr, [x0] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M32569_IG18: ; bbWeight=0.50, epilog, nogc, extend
+G_M32569_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x1 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x20] ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -251,7 +242,7 @@ G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 540, prolog size 24, PerfScore 64.94, instruction count 135, allocated bytes for code 540 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
+; Total bytes of code 520, prolog size 24, PerfScore 64.00, instruction count 130, allocated bytes for code 520 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
; ============================================================ Unwind Info: @@ -262,7 +253,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 135 (0x00087) Actual length = 540 (0x00021c)
+ Function Length : 130 (0x00082) Actual length = 520 (0x000208)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-16 (-3.36%) : 14909.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)

@@ -9,98 +9,99 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T07] ( 5, 14 ) int -> x19 single-def -; V01 arg1 [V01,T08] ( 8, 11 ) ref -> x20 class-hnd single-def <System.IO.MemoryStream> -; V02 arg2 [V02,T10] ( 3, 3 ) ubyte -> x21 single-def -; V03 loc0 [V03,T09] ( 2, 10 ) int -> x24 -; V04 loc1 [V04,T12] ( 1, 2 ) int -> x25 -; V05 loc2 [V05,T18] ( 1, 64 ) double -> d9 -; V06 loc3 [V06,T06] ( 4, 26 ) int -> x23
+; V00 arg0 [V00 ] ( 5, 14 ) int -> [fp+0xFC] do-not-enreg[X] addr-exposed single-def tier0-frame +; V01 arg1 [V01,T07] ( 8, 11 ) ref -> x19 class-hnd single-def <System.IO.MemoryStream> +; V02 arg2 [V02,T08] ( 3, 3 ) ubyte -> x20 single-def +; V03 loc0 [V03 ] ( 2, 10 ) int -> [fp+0xE8] do-not-enreg[X] addr-exposed tier0-frame +; V04 loc1 [V04,T10] ( 1, 2 ) int -> x23 +; V05 loc2 [V05,T16] ( 1, 64 ) double -> d9 +; V06 loc3 [V06,T06] ( 4, 26 ) int -> x22
; V07 loc4 [V07,T04] ( 8, 28 ) int -> x4 ; V08 loc5 [V08,T02] ( 7, 38 ) int -> x3
-; V09 loc6 [V09,T16] ( 2, 66 ) double -> d8 -; V10 loc7 [V10,T05] ( 5, 28 ) int -> x22 -; V11 loc8 [V11,T13] ( 8,450 ) double -> d16 -; V12 loc9 [V12,T14] ( 7,386 ) double -> d17 -; V13 loc10 [V13,T17] ( 2, 66 ) double -> d18
+; V09 loc6 [V09,T14] ( 2, 66 ) double -> d8 +; V10 loc7 [V10,T05] ( 5, 28 ) int -> x21 +; V11 loc8 [V11,T11] ( 8,450 ) double -> d16 +; V12 loc9 [V12,T12] ( 7,386 ) double -> d17 +; V13 loc10 [V13,T15] ( 2, 66 ) double -> d18
; V14 loc11 [V14,T01] ( 4, 50 ) int -> x2
-; V15 loc12 [V15,T15] ( 2,128 ) double -> d19
+; V15 loc12 [V15,T13] ( 2,128 ) double -> d19
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V17 tmp1 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Single-def Box Helper" <<unknown class>> -;* V18 tmp2 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Single-def Box Helper" <<unknown class>> -; V19 tmp3 [V19,T00] ( 2, 64 ) int -> x2 "dup spill" -; V20 tmp4 [V20,T03] ( 2, 32 ) int -> x3 "dup spill" -; V21 tmp5 [V21,T11] ( 2, 2 ) ref -> x1 single-def "argument with side effect"
+; V17 tmp1 [V17,T00] ( 2, 64 ) int -> x2 "dup spill" +; V18 tmp2 [V18,T03] ( 2, 32 ) int -> x3 "dup spill" +;* V19 tmp3 [V19 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" +;* V20 tmp4 [V20 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" +; V21 tmp5 [V21,T09] ( 2, 2 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 8 G_M48919_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x60]!
+ stp fp, lr, [sp, #-0x50]!
stp d8, d9, [sp, #0x18] stp x19, x20, [sp, #0x28] stp x21, x22, [sp, #0x38]
- stp x23, x24, [sp, #0x48] - str x25, [sp, #0x58]
+ str x23, [sp, #0x48]
mov fp, sp
- ldr w19, [fp, #0xD1FFAB1E] - ldr x20, [fp, #0xD1FFAB1E] - ; gcrRegs +[x20] - ldp w24, w21, [fp, #0xF8] - ldr w25, [fp, #0xF4] - ldr d9, [fp, #0xE8] - ldp w4, w23, [fp, #0xE0] - ldr w3, [fp, #0xDC] - ldr d8, [fp, #0xD0] - ldr w22, [fp, #0xCC] - ldp d17, d16, [fp, #0xB8] - ldr d18, [fp, #0xB0] - ldr w2, [fp, #0xAC] - ;; size=76 bbWeight=0.01 PerfScore 0.31 -G_M48919_IG02: ; bbWeight=0.01, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M48919_IG11
+ ldr x19, [fp, #0xF0] + ; gcrRegs +[x19] + ldr w20, [fp, #0xEC] + ldr w23, [fp, #0xE4] + ldr d9, [fp, #0xD8] + ldp w4, w22, [fp, #0xD0] + ldr w3, [fp, #0xCC] + ldr d8, [fp, #0xC0] + ldr w21, [fp, #0xBC] + ldp d17, d16, [fp, #0xA8] + ldr d18, [fp, #0xA0] + ldr w2, [fp, #0x9C] + ;; size=68 bbWeight=0.01 PerfScore 0.28 +G_M48919_IG02: ; bbWeight=0.01, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + b G_M48919_IG10
;; size=4 bbWeight=0.01 PerfScore 0.01
-G_M48919_IG03: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M48919_IG03: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
mov w4, wzr mov w3, wzr
- scvtf d16, w23
+ scvtf d16, w22
fmov d17, #2.0000 fmul d16, d16, d17
- scvtf d17, w24
+ ldr w0, [fp, #0xE8] // [V03 loc0] + scvtf d17, w0
fdiv d16, d16, d17 fmov d17, #1.0000 fsub d8, d16, d17
- mov w22, wzr - cmp w19, #0 - bgt G_M48919_IG10 - ;; size=48 bbWeight=2 PerfScore 64.00 -G_M48919_IG04: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+ mov w21, wzr + ldr w0, [fp, #0xFC] // [V00 arg0] + cmp w0, #0 + bgt G_M48919_IG09 + ;; size=56 bbWeight=2 PerfScore 72.00 +G_M48919_IG04: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
cbz w3, G_M48919_IG06 ;; size=4 bbWeight=8 PerfScore 8.00
-G_M48919_IG05: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG05: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
neg w1, w3 add w1, w1, #8 lsl w1, w4, w1 eor w1, w1, #255 uxtb w1, w1
- mov x0, x20
+ mov x0, x19
; gcrRegs +[x0]
- ldr x2, [x20]
+ ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2] blr x2 ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=40 bbWeight=2 PerfScore 26.00
-G_M48919_IG06: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - add w23, w23, #1 - cmp w23, w24
+G_M48919_IG06: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + add w22, w22, #1 + ldr w0, [fp, #0xE8] // [V03 loc0] + cmp w22, w0
blt G_M48919_IG03
- ;; size=12 bbWeight=8 PerfScore 16.00 -G_M48919_IG07: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - tst w21, #255 - beq G_M48919_IG17
+ ;; size=16 bbWeight=8 PerfScore 32.00 +G_M48919_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + tst w20, #255 + beq G_M48919_IG16
;; size=8 bbWeight=1 PerfScore 1.50
-G_M48919_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
movz x0, #0xD1FFAB1E // code for System.ConsolePal:OpenStandardOutput():System.IO.Stream movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -110,37 +111,31 @@ G_M48919_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x38]
- ;; size=40 bbWeight=0.50 PerfScore 7.75 -G_M48919_IG09: ; bbWeight=0.50, epilog, nogc, extend - ldr x25, [sp, #0x58] - ldp x23, x24, [sp, #0x48] - ldp x21, x22, [sp, #0x38] - ldp x19, x20, [sp, #0x28] - ldp d8, d9, [sp, #0x18] - ldp fp, lr, [sp], #0x60 - add sp, sp, #176 - br x2
+ blr x2 + ; gcrRegs -[x0-x1 x19]
; gcr arg pop 0
- ;; size=32 bbWeight=0.50 PerfScore 4.25 -G_M48919_IG10: ; bbWeight=2, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0-x1]
+ b G_M48919_IG16 + ;; size=48 bbWeight=0.50 PerfScore 8.75 +G_M48919_IG09: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs +[x19]
movi v16.16b, #0 movi v17.16b, #0
- scvtf d18, w22
+ scvtf d18, w21
fmov d19, #2.0000 fmul d18, d18, d19
- scvtf d19, w19
+ ldr w1, [fp, #0xFC] // [V00 arg0] + scvtf d19, w1
fdiv d18, d18, d19 fmov d19, #1.5000 fsub d18, d18, d19
- sxtw w2, w25
+ sxtw w2, w23
lsl w4, w4, #1
- ;; size=44 bbWeight=2 PerfScore 63.00 -G_M48919_IG11: ; bbWeight=64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+ ;; size=48 bbWeight=2 PerfScore 67.00 +G_M48919_IG10: ; bbWeight=64, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
fmul d19, d16, d16 fmul d20, d17, d17 fsub d19, d19, d20 @@ -153,28 +148,28 @@ G_M48919_IG11: ; bbWeight=64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, fmul d20, d17, d17 fadd d19, d19, d20 fcmp d19, d9
- ble G_M48919_IG13
+ ble G_M48919_IG12
;; size=52 bbWeight=64 PerfScore 2080.00
-G_M48919_IG12: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG11: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
orr w4, w4, #1
- b G_M48919_IG14
+ b G_M48919_IG13
;; size=8 bbWeight=8 PerfScore 12.00
-G_M48919_IG13: ; bbWeight=16, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M48919_IG12: ; bbWeight=16, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
sub w2, w2, #1 cmp w2, #0
- bgt G_M48919_IG11
+ bgt G_M48919_IG10
;; size=12 bbWeight=16 PerfScore 32.00
-G_M48919_IG14: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M48919_IG13: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
add w3, w3, #1 cmp w3, #8
- bne G_M48919_IG16
+ bne G_M48919_IG15
;; size=12 bbWeight=8 PerfScore 16.00
-G_M48919_IG15: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG14: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
eor w1, w4, #255 uxtb w1, w1
- mov x0, x20
+ mov x0, x19
; gcrRegs +[x0]
- ldr x2, [x20]
+ ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2] blr x2 @@ -183,52 +178,49 @@ G_M48919_IG15: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b mov w4, wzr mov w3, wzr ...

+16 (+10.53%) : 13538.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable1[System.DateTimeOffset]]():System.Nullable1System.DateTimeOffset

@@ -44,27 +44,31 @@ G_M13724_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_BOX
+ bl CORINFO_HELP_ISINSTANCEOF_EXCEPTION
; gcrRegs +[x0] str x0, [fp, #0x10] // [V04 tmp2]
- ldr x2, [fp, #0x10] // [V04 tmp2] - ; gcrRegs +[x2] - ldr x0, [fp, #0x38] // [V00 RetBuf]
+ ldr x1, [fp, #0x10] // [V04 tmp2] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1]
; byrRegs +[x0]
- movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ; byrRegs -[x0] - ;; size=120 bbWeight=1 PerfScore 25.50
+ ldr x1, [fp, #0x38] // [V00 RetBuf] + ; byrRegs +[x1] + ldp x2, x3, [x0] + stp x2, x3, [x1] + ldr x2, [x0, #0x10] + str x2, [x1, #0x10] + ;; size=136 bbWeight=1 PerfScore 34.50
G_M13724_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x40 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 152, prolog size 20, PerfScore 33.00, instruction count 38, allocated bytes for code 152 (MethodHash=d3e7ca63) for method MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)
+; Total bytes of code 168, prolog size 20, PerfScore 42.00, instruction count 42, allocated bytes for code 168 (MethodHash=d3e7ca63) for method MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)
; ============================================================ Unwind Info: @@ -75,7 +79,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 152 (0x000098)
+ Function Length : 42 (0x0002a) Actual length = 168 (0x0000a8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+15.38%) : 15129.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -8,11 +8,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x19 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T06] ( 3, 3 ) ref -> x22 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> x20 single-def -; V04 arg3 [V04,T03] ( 4, 4 ) int -> x21 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T07] ( 3, 3 ) ref -> x23 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> x21 single-def +; V04 arg3 [V04,T03] ( 4, 4 ) int -> x22 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,80 +24,96 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T04] ( 3, 6 ) ref -> x0 single-def "argument with side effect"
-; V16 cse0 [V16,T09] ( 3, 3 ) int -> x1 "CSE - aggressive" -; V17 rat0 [V17,T08] ( 3, 4 ) long -> x1 "runtime lookup" -; V18 rat1 [V18,T05] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T07] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T10] ( 3, 3 ) int -> x0 "CSE - aggressive" +;* V17 rat0 [V17,T11] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T05] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T06] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- str x0, [fp, #0x18] - mov x19, x1 - ; gcrRegs +[x19] - mov x22, x2 - ; gcrRegs +[x22] - mov w20, w3 - mov w21, w4 - ;; size=36 bbWeight=1 PerfScore 6.50 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - cbz x19, G_M13831_IG08 - ldr w1, [x19, #0x08] - cmp w1, w20 - blo G_M13831_IG09 - sub w1, w1, w20 - cmp w1, w21 - blo G_M13831_IG10 - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M13831_IG05 - ;; size=44 bbWeight=1 PerfScore 15.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ldr x1, [x1, #0x18] - cbz x1, G_M13831_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - b G_M13831_IG06 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+ str x0, [fp, #0x10] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x23, x2 + ; gcrRegs +[x23] + mov w21, w3 + mov w22, w4 + ;; size=44 bbWeight=1 PerfScore 8.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M13831_IG10 + ldr w0, [x20, #0x08] + cmp w0, w21 + blo G_M13831_IG11 + sub w0, w0, w21 + cmp w0, w22 + blo G_M13831_IG12 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M13831_IG04 + ;; size=40 bbWeight=1 PerfScore 14.50 +G_M13831_IG03: ; bbWeight=0.20, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M13831_IG04: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M13831_IG07 + ;; size=16 bbWeight=1 PerfScore 7.50 +G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M13831_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + b G_M13831_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x1
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1 ; gcrRegs +[x0]
- mov x1, x19
+ mov x1, x20
; gcrRegs +[x1]
- mov x2, x22
+ mov x2, x23
; gcrRegs +[x2]
- mov w3, w20 - mov w4, w21
+ mov w3, w21 + mov w4, w22
ldr x5, [x0] ldr x5, [x5, #0x50] ldr x5, [x5] blr x5
- ; gcrRegs -[x0-x2 x19 x22] - ;; size=56 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0-x2 x20 x23] + ;; size=52 bbWeight=1 PerfScore 17.50 +G_M13831_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=20 bbWeight=1 PerfScore 6.00 +G_M13831_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_unix #0 ;; size=28 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -114,7 +130,7 @@ G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x0 brk_unix #0 ;; size=24 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -123,7 +139,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 260, prolog size 20, PerfScore 48.42, instruction count 65, allocated bytes for code 260 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 300, prolog size 24, PerfScore 59.02, instruction count 75, allocated bytes for code 300 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================ Unwind Info: @@ -134,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 65 (0x00041) Actual length = 260 (0x000104)
+ Function Length : 75 (0x0004b) Actual length = 300 (0x00012c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,10 +158,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! E4 end
- E4 end - E4 end

+48 (+36.36%) : 1425.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -8,84 +8,105 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.60) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.50) byref -> x19 single-def
+; V00 this [V00,T03] ( 3, 2.50) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 4.28) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.50) byref -> x20 single-def
; V03 loc0 [V03,T02] ( 7, 5 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 4 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 2 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 2 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 2.80) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 1.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.50 PerfScore 3.50
-G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.50 PerfScore 5.50 +G_M58319_IG07: ; bbWeight=0.40, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M58319_IG08: ; bbWeight=0.18, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M58319_IG09: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.50 PerfScore 3.50 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.50 PerfScore 1.75 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 22.20, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 27.59, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -96,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -104,9 +125,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

coreclr_tests.run.linux.arm64.checked.mch

-28 (-10.61%) : 12.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)

@@ -10,120 +10,103 @@ ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V01 tmp1 [V01,T00] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
-; V02 tmp2 [V02,T01] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V03 tmp3 [V03,T02] ( 8, 16 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V04 cse0 [V04,T03] ( 4, 4 ) long -> x19 "CSE - aggressive" -; V05 cse1 [V05,T04] ( 4, 4 ) long -> x21 "CSE - aggressive"
+; V02 tmp2 [V02,T01] ( 6, 12 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V03 tmp3 [V03,T02] ( 6, 12 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V04 cse0 [V04,T03] ( 4, 4 ) ref -> x19 "CSE - aggressive" +; V05 cse1 [V05,T04] ( 4, 4 ) byref -> x21 "CSE - aggressive" +; V06 cse2 [V06,T05] ( 4, 4 ) byref -> x22 "CSE - aggressive" +; V07 cse3 [V07,T06] ( 4, 4 ) long -> x23 "CSE - aggressive"
; ; Lcl frame size = 8 G_M2338_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]!
+ stp fp, lr, [sp, #-0x40]!
stp x19, x20, [sp, #0x18]
- str x21, [sp, #0x28]
+ stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- ;; size=16 bbWeight=1 PerfScore 3.50
+ ;; size=20 bbWeight=1 PerfScore 4.50
G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movz x19, #0xD1FFAB1E - movk x19, #0xD1FFAB1E LSL #16 - movk x19, #0xD1FFAB1E LSL #32 - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str xzr, [x20, #0x10] - movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - mov x14, x21 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str x15, [x20, #0x10] - add x14, x21, #8 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0] mov x19, x0 ; gcrRegs +[x19]
- str xzr, [x19, #0x10] - add x0, x19, #24
+ mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + add x21, x20, #24 + ; byrRegs +[x21] + mov w0, #4
; gcrRegs -[x0]
- ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0]
+ stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + add x22, x20, #29 + ; byrRegs +[x22] + mov w14, #1 + stlrb w14, [x22] + str xzr, [x20, #0x10] + movz x23, #0xD1FFAB1E // data for <unknown class>:<unknown field> + movk x23, #0xD1FFAB1E LSL #16 + movk x23, #0xD1FFAB1E LSL #32 + mov x14, x23 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + mov w0, #4 + stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + mov w14, #1 + stlrb w14, [x22] + str x14, [x20, #0x10] + add x14, x23, #8 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + str xzr, [x19, #0x10] + mov w0, #4 + stlr w0, [x21]
strb wzr, [x19, #0x1C] mov x0, x19 ; gcrRegs +[x0]
- ; byrRegs -[x0]
bl <unknown method> ; gcrRegs -[x0]
- add x14, x19, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14]
+ ; byrRegs -[x21] + mov w14, #1 + stlrb w14, [x22]
mov x14, #2
- ; byrRegs -[x14]
str x14, [x19, #0x10]
- add x14, x21, #16
+ add x14, x23, #16
mov x15, x19 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x15 x19]
- ;; size=232 bbWeight=1 PerfScore 41.00
+ ; byrRegs -[x22] + ;; size=196 bbWeight=1 PerfScore 35.50
G_M2338_IG03: ; bbWeight=1, epilog, nogc, extend
- ldr x21, [sp, #0x28]
+ ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28]
ldp x19, x20, [sp, #0x18]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 6.00
-; Total bytes of code 264, prolog size 16, PerfScore 49.50, instruction count 66, allocated bytes for code 264 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
+; Total bytes of code 236, prolog size 20, PerfScore 46.00, instruction count 59, allocated bytes for code 236 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
; ============================================================ Unwind Info: @@ -134,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 66 (0x00042) Actual length = 264 (0x000108)
+ Function Length : 59 (0x0003b) Actual length = 236 (0x0000ec)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,9 +125,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40]
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56] + E6 save_next
C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
- 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end
+ 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end

-4 (-0.82%) : 321.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)

@@ -7,26 +7,24 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T06] ( 7, 4.88) long -> x20 single-def -; V01 arg0 [V01,T07] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 arg1 [V02,T01] ( 5, 19 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,ubyte]> -; V03 arg2 [V03,T08] ( 4, 4 ) byref -> x22 single-def -; V04 loc0 [V04,T02] ( 7, 20 ) ref -> [fp+0x20] class-hnd EH-live spill-single-def <<unknown class>> -; V05 loc1 [V05,T03] ( 3, 17 ) ref -> x20 class-hnd <System.__Canon> -; V06 loc2 [V06,T14] ( 2, 2 ) ref -> [fp+0x18] do-not-enreg[Z] must-init class-hnd EH-live <System.__Canon>
+; V00 TypeCtx [V00,T05] ( 7, 15.08) long -> x20 single-def +; V01 arg0 [V01,T08] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 arg1 [V02,T03] ( 5, 19 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,ubyte]> +; V03 arg2 [V03,T09] ( 4, 4 ) byref -> x22 single-def +; V04 loc0 [V04,T04] ( 7, 20 ) ref -> [fp+0x20] class-hnd EH-live spill-single-def <<unknown class>> +; V05 loc1 [V05,T06] ( 3, 17 ) ref -> x23 class-hnd <System.__Canon> +; V06 loc2 [V06,T12] ( 2, 2 ) ref -> [fp+0x18] 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 ) long -> zero-ref "spilling helperCall"
-; V10 tmp2 [V10,T09] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
+; V10 tmp2 [V10,T10] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
;* V11 tmp3 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V12 tmp4 [V12,T00] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup" -; V13 PSPSym [V13,T15] ( 1, 1 ) long -> [fp+0x30] do-not-enreg[V] "PSPSym" -; V14 cse0 [V14,T05] ( 2, 8.50) long -> x23 hoist "CSE - aggressive" -; V15 cse1 [V15,T04] ( 6, 13 ) long -> x21 multi-def "CSE - aggressive" -; V16 rat0 [V16,T10] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" -; V17 rat1 [V17,T13] ( 3, 2 ) long -> x23 "runtime lookup" -; V18 rat2 [V18,T11] ( 3, 2.80) long -> x0 "spilling expr" -; V19 rat3 [V19,T12] ( 3, 2.24) long -> x23 "fgMakeTemp is creating a new local variable"
+; V12 tmp4 [V12,T00] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup" +; V13 PSPSym [V13,T13] ( 1, 1 ) long -> [fp+0x30] do-not-enreg[V] "PSPSym" +; V14 cse0 [V14,T07] ( 6, 13 ) long -> x21 multi-def "CSE - aggressive" +; V15 rat0 [V15,T11] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" +; V16 rat1 [V16,T01] ( 3, 44.80) long -> x0 "spilling expr" +; V17 rat2 [V17,T02] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -47,8 +45,8 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x22, x3 ; byrRegs +[x22] ;; size=48 bbWeight=1 PerfScore 9.00
-G_M62024_IG02: ; bbWeight=1, gcVars=0000000000004000 {V06}, gcrefRegs=280000 {x19 x21}, byrefRegs=400000 {x22}, gcvars, byref, isz - ; GC ptr vars +{V06 V14}
+G_M62024_IG02: ; bbWeight=1, gcVars=0000000000001000 {V06}, gcrefRegs=280000 {x19 x21}, byrefRegs=400000 {x22}, gcvars, byref, isz + ; GC ptr vars +{V06 V12}
cbz x21, G_M62024_IG21 cbz x19, G_M62024_IG22 ldr x0, [x20, #0x38] @@ -63,7 +61,7 @@ G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=400 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.20 PerfScore 0.70 @@ -77,8 +75,8 @@ G_M62024_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=400000 str x0, [fp, #0x20] // [V04 loc0] ; GC ptr vars +{V04} ;; size=16 bbWeight=1 PerfScore 5.50
-G_M62024_IG06: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=80001 {x0 x19}, byrefRegs=400000 {x22}, gcvars, byref, isz - ; GC ptr vars -{V14}
+G_M62024_IG06: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=80001 {x0 x19}, byrefRegs=400000 {x22}, gcvars, byref, isz + ; GC ptr vars -{V12}
movz x21, #24 movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 @@ -89,38 +87,37 @@ G_M62024_IG06: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs ; gcr arg pop 0 cbz w0, G_M62024_IG14 ;; size=28 bbWeight=1 PerfScore 7.00
-G_M62024_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz
+G_M62024_IG07: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz
ldr x0, [x20, #0x38] ldr x1, [x0, #0x08] cmp x1, #24 ble G_M62024_IG10
- ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M62024_IG08: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz - ldr x23, [x0, #0x18] - cbz x23, G_M62024_IG10 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M62024_IG09: ; bbWeight=0.32, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
+ ;; size=16 bbWeight=8 PerfScore 60.00 +G_M62024_IG08: ; bbWeight=6.40, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz + ldr x11, [x0, #0x18] + cbz x11, G_M62024_IG10 + ;; size=8 bbWeight=6.40 PerfScore 25.60 +G_M62024_IG09: ; bbWeight=5.12, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
b G_M62024_IG11
- ;; size=4 bbWeight=0.32 PerfScore 0.32 -G_M62024_IG10: ; bbWeight=0.18, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
+ ;; size=4 bbWeight=5.12 PerfScore 5.12 +G_M62024_IG10: ; bbWeight=2.88, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov x23, x0 - ;; size=24 bbWeight=0.18 PerfScore 0.63
+ mov x11, x0 + ;; size=24 bbWeight=2.88 PerfScore 10.08
G_M62024_IG11: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz
- mov x11, x23
ldr x0, [fp, #0x20] // [V04 loc0] ; gcrRegs +[x0] ldr x1, [x11] blr x1 ; gcr arg pop 0
- mov x20, x0 - ; gcrRegs +[x20] - mov x1, x20
+ mov x23, x0 + ; gcrRegs +[x23] + mov x1, x23
; gcrRegs +[x1] ldr x0, [x19, #0x08] ldr x2, [x19, #0x18] @@ -133,23 +130,23 @@ G_M62024_IG11: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22 mov x11, x21 ldr x1, [x11] blr x1
- ; gcrRegs -[x0 x20]
+ ; gcrRegs -[x0 x23]
; gcr arg pop 0
- cbnz w0, G_M62024_IG11 - ;; size=60 bbWeight=8 PerfScore 184.00
+ cbnz w0, G_M62024_IG07 + ;; size=56 bbWeight=8 PerfScore 180.00
G_M62024_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=400000 {x22}, byref ; gcrRegs -[x19] b G_M62024_IG14 ;; size=4 bbWeight=1 PerfScore 1.00
-G_M62024_IG13: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=400000 {x22}, byref - ; gcrRegs +[x20]
+G_M62024_IG13: ; bbWeight=1, gcrefRegs=800000 {x23}, byrefRegs=400000 {x22}, byref + ; gcrRegs +[x23]
mov w0, #1 strb w0, [x22]
- str x20, [fp, #0x18] // [V06 loc2]
+ str x23, [fp, #0x18] // [V06 loc2]
b G_M62024_IG15 ;; size=16 bbWeight=1 PerfScore 3.50
-G_M62024_IG14: ; bbWeight=1, gcVars=0000000000000004 {V04}, gcrefRegs=0000 {}, byrefRegs=400000 {x22}, gcvars, byref - ; gcrRegs -[x20]
+G_M62024_IG14: ; bbWeight=1, gcVars=0000000000000010 {V04}, gcrefRegs=0000 {}, byrefRegs=400000 {x22}, gcvars, byref + ; gcrRegs -[x23]
; GC ptr vars -{V06} ldr x0, [fp, #0x20] // [V04 loc0] ; gcrRegs +[x0] @@ -161,17 +158,17 @@ G_M62024_IG14: ; bbWeight=1, gcVars=0000000000000004 {V04}, gcrefRegs=000 ; gcr arg pop 0 b G_M62024_IG19 ;; size=20 bbWeight=1 PerfScore 7.50
-G_M62024_IG15: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M62024_IG15: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[x22]
- ; GC ptr vars +{V02 V04 V06 V14}
+ ; GC ptr vars +{V04 V06 V12}
ldr x0, [fp, #0x30] // [V13 PSPSym] bl G_M62024_IG23 ;; size=8 bbWeight=1 PerfScore 3.00 G_M62024_IG16: ; bbWeight=1, nogc, extend nop ;; size=4 bbWeight=1 PerfScore 0.50
-G_M62024_IG17: ; bbWeight=1, gcVars=0000000000004000 {V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; GC ptr vars -{V02 V04 V14}
+G_M62024_IG17: ; bbWeight=1, gcVars=0000000000001000 {V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; GC ptr vars -{V04 V12}
ldr x0, [fp, #0x18] // [V06 loc2] ; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 2.00 @@ -217,8 +214,8 @@ G_M62024_IG22: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 brk_unix #0 ;; size=28 bbWeight=0 PerfScore 0.00
-G_M62024_IG23: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc - ; GC ptr vars +{V02 V04 V06 V14}
+G_M62024_IG23: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc + ; GC ptr vars +{V04 V06 V12}
stp fp, lr, [sp, #-0x40]! stp x19, x20, [sp, #0x18] stp x21, x22, [sp, #0x28] @@ -226,7 +223,7 @@ G_M62024_IG23: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs add x3, fp, #96 str x3, [sp, #0x10] ;; size=24 bbWeight=1 PerfScore 5.50
-G_M62024_IG24: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M62024_IG24: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [fp, #0x20] // [V04 loc0] ; gcrRegs +[x0] cbz x0, G_M62024_IG25 @@ -235,7 +232,7 @@ G_M62024_IG24: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs movk x21, #0xD1FFAB1E LSL #32 add x11, x21, #8 ldr x1, [x11]
- ; GC ptr vars -{V02 V04 V14}
+ ; GC ptr vars -{V04 V12}
blr x1 ; gcrRegs -[x0] ; gcr arg pop 0 @@ -248,7 +245,7 @@ G_M62024_IG25: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 12.00
-; Total bytes of code 488, prolog size 48, PerfScore 279.80, instruction count 122, allocated bytes for code 488 (MethodHash=c4780db7) for method System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
+; Total bytes of code 484, prolog size 48, PerfScore 370.30, instruction count 121, allocated bytes for code 484 (MethodHash=c4780db7) for method System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -259,7 +256,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 103 (0x00067) Actual length = 412 (0x00019c)
+ Function Length : 102 (0x00066) Actual length = 408 (0x000198)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

libraries.pmi.linux.arm64.checked.mch

-24 (-26.09%) : 12860.dasm - Roslyn.Utilities.EnumUtilities:GetValuesubyte:ubyte

@@ -9,9 +9,7 @@ ; Final local variable assignments ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V01 tmp1 [V01,T01] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V02 tmp2 [V02,T02] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V03 tmp3 [V03,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <ubyte[]>
+; V01 tmp1 [V01,T00] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 0 @@ -19,7 +17,7 @@ G_M58003_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x10]! mov fp, sp ;; size=8 bbWeight=1 PerfScore 1.50
-G_M58003_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M58003_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -31,31 +29,19 @@ G_M58003_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- cbnz x0, G_M58003_IG04 - ;; size=40 bbWeight=1 PerfScore 8.50 -G_M58003_IG03: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x1]
+ movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[x1] +[x0] + ;; size=52 bbWeight=1 PerfScore 10.00 +G_M58003_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-G_M58003_IG04: ; bbWeight=0.25, gcVars=0000000000000000 {}, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[x1] - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M58003_IG03 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M58003_IG05: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[x1] +[x0] - b G_M58003_IG03 - ;; size=12 bbWeight=0.12 PerfScore 0.31
-; Total bytes of code 92, prolog size 8, PerfScore 13.81, instruction count 23, allocated bytes for code 92 (MethodHash=01371d6c) for method Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
+; Total bytes of code 68, prolog size 8, PerfScore 13.50, instruction count 17, allocated bytes for code 68 (MethodHash=01371d6c) for method Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +52,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 92 (0x00005c)
+ Function Length : 17 (0x00011) Actual length = 68 (0x000044)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-44 (-23.91%) : 3727.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[int]]:GetHashCode():int:this (FullOpts)

@@ -10,30 +10,30 @@ ; ; V00 this [V00,T00] ( 6, 5.50) byref -> x19 this single-def ;* V01 TypeCtx [V01 ] ( 0, 0 ) long -> zero-ref single-def
-; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x20] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> -; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x10] 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 -> x0 -; V07 tmp3 [V07,T05] ( 3, 2 ) int -> x0 -; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> x1 single-def "impAppendStmt"
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> x0 +; V07 tmp3 [V07,T04] ( 3, 2 ) int -> x0 +; V08 tmp4 [V08,T01] ( 3, 4.03) byref -> x1 single-def "impAppendStmt"
;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref
-; V10 tmp6 [V10,T03] ( 4, 2.02) byref -> x2
+;* 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 -> x1 -; V13 tmp9 [V13,T07] ( 3, 1 ) int -> x1 "Inline return value spill temp"
+;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref +; V13 tmp9 [V13,T05] ( 3, 1.50) int -> x1 "Inline return value spill temp"
;* V14 tmp10 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V15 tmp11 [V15 ] ( 5, 3.50) ubyte -> [fp+0x18] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP -; V16 tmp12 [V16 ] ( 3, 2 ) int -> [fp+0x1C] 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 -> x0 single-def "argument with side effect" ;
-; Lcl frame size = 24
+; Lcl frame size = 8
G_M34277_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - str x19, [sp, #0x28]
+ stp fp, lr, [sp, #-0x20]! + str x19, [sp, #0x18]
mov fp, sp
- str xzr, [fp, #0x20] // [V02 loc0]
+ str xzr, [fp, #0x10] // [V02 loc0]
mov x19, x0 ; byrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00 @@ -41,7 +41,7 @@ G_M34277_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, by ldrsb wzr, [x19] mov x0, x19 ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V02 loc0]
+ ldr x1, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x1] cbnz x1, G_M34277_IG04 ;; size=16 bbWeight=1 PerfScore 6.50 @@ -50,11 +50,11 @@ G_M34277_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, ; byrRegs -[x0] ldr x0, [x19] ; gcrRegs +[x0]
- str x0, [fp, #0x20] // [V02 loc0] - add x0, fp, #32 // [V02 loc0]
+ str x0, [fp, #0x10] // [V02 loc0] + add x0, fp, #16 // [V02 loc0]
; gcrRegs -[x0] ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V02 loc0]
+ ldr x1, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x1] cbnz x1, G_M34277_IG04 mov w0, wzr @@ -76,52 +76,33 @@ G_M34277_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80001 {x0 x1 G_M34277_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref, isz add x1, x19, #8 ; byrRegs +[x1]
- str xzr, [fp, #0x18] // [V03 loc1] - mov x2, x1 - ; byrRegs +[x2] - ldrb w3, [fp, #0x18] // [V15 tmp11] - cbnz w3, G_M34277_IG07 - ;; size=20 bbWeight=1 PerfScore 5.00 -G_M34277_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {x1}, byref, isz - ; byrRegs -[x2 x19] - ldr x2, [x1] - str x2, [fp, #0x18] // [V03 loc1] - add x2, fp, #24 // [V03 loc1] - ; byrRegs +[x2] - ldrb w1, [fp, #0x18] // [V15 tmp11] - ; byrRegs -[x1] - cbnz w1, G_M34277_IG07
+ ldrb w2, [x1] + cbnz w2, G_M34277_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M34277_IG06: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; byrRegs -[x1 x19]
mov w1, wzr
- b G_M34277_IG10 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M34277_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref, isz - ldrb w1, [x2] - cbnz w1, G_M34277_IG09 - ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M34277_IG08: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; byrRegs -[x2] - mov w1, wzr - b G_M34277_IG10
+ b G_M34277_IG08
;; size=8 bbWeight=0.48 PerfScore 0.73
-G_M34277_IG09: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref - ; byrRegs +[x2] - ldr w1, [x2, #0x04]
+G_M34277_IG07: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0002 {x1}, byref + ; byrRegs +[x1] + ldr w1, [x1, #0x04] + ; byrRegs -[x1]
;; size=4 bbWeight=0.02 PerfScore 0.05
-G_M34277_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; byrRegs -[x2]
+G_M34277_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2] blr x2 ;; size=20 bbWeight=1 PerfScore 5.50
-G_M34277_IG11: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x28] - ldp fp, lr, [sp], #0x30
+G_M34277_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20
ret lr ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 184, prolog size 16, PerfScore 43.27, instruction count 46, allocated bytes for code 184 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
+; Total bytes of code 140, prolog size 16, PerfScore 36.28, instruction count 35, allocated bytes for code 140 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
; ============================================================ Unwind Info: @@ -132,7 +113,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 46 (0x0002e) Actual length = 184 (0x0000b8)
+ Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -140,8 +121,8 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ D0 03 save_reg X#0 Z#3 (0x03); str x19, [sp, #24] + 83 save_fplr_x #3 (0x03); stp fp, lr, [sp, #-32]!
E4 end E4 end E4 end

-44 (-17.74%) : 3731.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)

@@ -11,22 +11,22 @@ ; V00 this [V00,T00] ( 6, 5.50) byref -> x19 this single-def ;* V01 TypeCtx [V01 ] ( 0, 0 ) long -> zero-ref single-def ; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [fp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;# V04 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 -> x0 -; V07 tmp3 [V07,T05] ( 3, 2 ) ref -> x20
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> x0 +; V07 tmp3 [V07,T04] ( 3, 2 ) ref -> x20
; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> x0 single-def "impAppendStmt" ;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref single-def ;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref single-def
-; V11 tmp7 [V11,T03] ( 4, 2.50) byref -> x1
+;* 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 -> x2 -; V15 tmp11 [V15,T07] ( 3, 1.50) ref -> x2 class-hnd "Inline return value spill temp" <System.String>
+;* V14 tmp10 [V14 ] ( 0, 0 ) ref -> zero-ref +; V15 tmp11 [V15,T05] ( 3, 2 ) ref -> x2 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 -> [fp+0x10] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP -; V18 tmp14 [V18 ] ( 3, 2 ) int -> [fp+0x14] 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 -> x0 single-def "argument with side effect" ; ; Lcl frame size = 16 @@ -79,38 +79,21 @@ G_M39544_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19 ; gcrRegs -[x0] add x0, x19, #8 ; byrRegs +[x0]
- str xzr, [fp, #0x10] // [V03 loc1] - mov x1, x0 - ; byrRegs +[x1] - ldrb w2, [fp, #0x10] // [V17 tmp13] - cbnz w2, G_M39544_IG07 - ;; size=20 bbWeight=1 PerfScore 5.00 -G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, byref, isz - ; byrRegs -[x1 x19] - ldr x1, [x0] - str x1, [fp, #0x10] // [V03 loc1] - add x1, fp, #16 // [V03 loc1] - ; byrRegs +[x1] - ldrb w0, [fp, #0x10] // [V17 tmp13] - ; byrRegs -[x0] - cbnz w0, G_M39544_IG07 - mov x2, xzr - ; gcrRegs +[x2] - b G_M39544_IG09 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x1}, byref, isz - ; gcrRegs -[x2] - ldrb w0, [x1] - cbnz w0, G_M39544_IG08
+ ldrb w1, [x0] + cbnz w1, G_M39544_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + ; byrRegs -[x0 x19]
movz x2, #0xD1FFAB1E movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32
- b G_M39544_IG09 - ;; size=24 bbWeight=0.50 PerfScore 3.25 -G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x1}, byref - ldr w0, [x1, #0x04]
+ b G_M39544_IG08 + ;; size=16 bbWeight=0.50 PerfScore 1.25 +G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, byref + ; byrRegs +[x0] + ldr w0, [x0, #0x04] + ; byrRegs -[x0]
movz x1, #0xD1FFAB1E // code for System.Number:Int32ToDecStr(int):System.String
- ; byrRegs -[x1]
movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] @@ -119,7 +102,7 @@ G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x mov x2, x0 ; gcrRegs +[x2] ;; size=28 bbWeight=0.50 PerfScore 4.50
-G_M39544_IG09: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref
+G_M39544_IG08: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -136,13 +119,13 @@ G_M39544_IG09: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {} blr x4 ; gcrRegs -[x2 x20] ;; size=48 bbWeight=1 PerfScore 9.00
-G_M39544_IG10: ; bbWeight=1, epilog, nogc, extend
+G_M39544_IG09: ; bbWeight=1, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=1 PerfScore 3.00
-; Total bytes of code 248, prolog size 16, PerfScore 51.00, instruction count 62, allocated bytes for code 248 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
+; Total bytes of code 204, prolog size 16, PerfScore 44.00, instruction count 51, allocated bytes for code 204 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
; ============================================================ Unwind Info: @@ -153,7 +136,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 62 (0x0003e) Actual length = 248 (0x0000f8)
+ Function Length : 51 (0x00033) Actual length = 204 (0x0000cc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+48 (+23.08%) : 12469.dasm - Roslyn.Utilities.FileUtilities:RethrowExceptionsAsIOExceptionAsync[System.Canon,System.Nullable1[int]](System.Func2[System.Nullable`1[int],System.Canon],System.Nullable1[int]):System.Threading.Tasks.Task1System.__Canon

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def -; V01 arg0 [V01,T03] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Func`2[System.Nullable`1[int],System.__Canon]> -; V02 arg1 [V02,T04] ( 3, 3 ) struct ( 8) x2 single-def <System.Nullable`1[int]>
+; V00 TypeCtx [V00,T00] ( 9, 6.76) long -> x19 single-def +; V01 arg0 [V01,T04] ( 3, 3 ) ref -> x20 class-hnd single-def <System.Func`2[System.Nullable`1[int],System.__Canon]> +; V02 arg1 [V02,T05] ( 3, 3 ) struct ( 8) x21 single-def <System.Nullable`1[int]>
; V03 loc0 [V03 ] ( 6, 6 ) struct (48) [fp+0x10] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <Roslyn.Utilities.FileUtilities+<RethrowExceptionsAsIOExceptionAsync>d__15`2[System.__Canon,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 ) long -> zero-ref "spilling helperCall" @@ -18,19 +18,22 @@ ;* V07 tmp3 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp4 [V08 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]> ;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref single-def "field V08.m_task (fldOffset=0x0)" P-INDEP
-; V10 tmp6 [V10,T08] ( 2, 4 ) long -> x1 "argument with side effect" -; V11 tmp7 [V11,T09] ( 2, 4 ) long -> x1 "argument with side effect" -; V12 rat0 [V12,T06] ( 3, 4 ) long -> x1 "runtime lookup" -; V13 rat1 [V13,T01] ( 3, 5.60) long -> x0 "spilling expr" -; V14 rat2 [V14,T05] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable" -; V15 rat3 [V15,T07] ( 3, 4 ) long -> x1 "runtime lookup" -; V16 rat4 [V16,T02] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+; V10 tmp6 [V10,T09] ( 2, 4 ) long -> x1 "argument with side effect" +; V11 tmp7 [V11,T10] ( 2, 4 ) long -> x1 "argument with side effect" +;* V12 rat0 [V12,T11] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat1 [V13,T01] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V14 rat2 [V14,T07] ( 3, 4 ) long -> x1 "runtime lookup" +; V15 rat3 [V15,T02] ( 3, 5.60) long -> x0 "spilling expr" +; V16 rat4 [V16,T06] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable" +; V17 rat5 [V17,T08] ( 3, 4 ) long -> x1 "runtime lookup" +; V18 rat6 [V18,T03] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 56 G_M31834_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x50]! - str x19, [sp, #0x48]
+ stp fp, lr, [sp, #-0x60]! + stp x19, x20, [sp, #0x48] + str x21, [sp, #0x58]
mov fp, sp add x9, fp, #16 movi v16.16b, #0 @@ -38,35 +41,49 @@ G_M31834_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp xzr, xzr, [x9, #0x20] str x0, [fp, #0x40] mov x19, x0
- ;; size=36 bbWeight=1 PerfScore 7.00 -G_M31834_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x1] - str x1, [fp, #0x10] // [V03 loc0] - str x2, [fp, #0x28] // [V03 loc0+0x18] - movn w0, #0 - str w0, [fp, #0x18] // [V03 loc0+0x08]
+ mov x20, x1 + ; gcrRegs +[x20] + mov x21, x2 + ;; size=48 bbWeight=1 PerfScore 9.00 +G_M31834_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
ldr x0, [x19, #0x38]
- ldr x1, [x0, #0x10] - ; gcrRegs -[x1] - cmp x1, #32 - ble G_M31834_IG05 - ;; size=32 bbWeight=1 PerfScore 11.00 -G_M31834_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x1, [x0, #0x20] - cbz x1, G_M31834_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M31834_IG04: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - b G_M31834_IG06 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M31834_IG05: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr x0, [x0, #0x18] + cbnz x0, G_M31834_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M31834_IG03: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
mov x0, x19 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M31834_IG04: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + str x20, [fp, #0x10] // [V03 loc0] + str x21, [fp, #0x28] // [V03 loc0+0x18] + movn w0, #0 + str w0, [fp, #0x18] // [V03 loc0+0x08] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x10] + cmp x1, #32 + ble G_M31834_IG07 + ;; size=32 bbWeight=1 PerfScore 11.00 +G_M31834_IG05: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x20] + ldr x1, [x0, #0x20] + cbz x1, G_M31834_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M31834_IG06: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + b G_M31834_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M31834_IG07: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY
mov x1, x0 ;; size=24 bbWeight=0.36 PerfScore 1.26
-G_M31834_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M31834_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
add x0, fp, #32 // [V03 loc0+0x10] add x2, fp, #16 // [V03 loc0] movz x3, #0xD1FFAB1E // code for System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]:Start[Roslyn.Utilities.FileUtilities+<RethrowExceptionsAsIOExceptionAsync>d__15`2[System.__Canon,System.Nullable`1[int]]](byref):this @@ -76,20 +93,20 @@ G_M31834_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x3 ldr x0, [x19, #0x38] ldr x1, [x0, #0x18]
- cbz x1, G_M31834_IG08
+ cbz x1, G_M31834_IG10
;; size=40 bbWeight=1 PerfScore 13.50
-G_M31834_IG07: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - b G_M31834_IG09
+G_M31834_IG09: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + b G_M31834_IG11
;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M31834_IG08: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M31834_IG10: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov x0, x19 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x1, x0 ;; size=24 bbWeight=0.20 PerfScore 0.70
-G_M31834_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M31834_IG11: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
add x0, fp, #32 // [V03 loc0+0x10] movz x2, #0xD1FFAB1E // code for System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[System.__Canon]:get_Task():System.Threading.Tasks.Task`1[System.__Canon]:this movk x2, #0xD1FFAB1E LSL #16 @@ -98,13 +115,14 @@ G_M31834_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x2 ; gcrRegs +[x0] ;; size=24 bbWeight=1 PerfScore 6.00
-G_M31834_IG10: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x48] - ldp fp, lr, [sp], #0x50
+G_M31834_IG12: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x58] + ldp x19, x20, [sp, #0x48] + ldp fp, lr, [sp], #0x60
ret lr
- ;; size=12 bbWeight=1 PerfScore 4.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 208, prolog size 32, PerfScore 48.10, instruction count 52, allocated bytes for code 208 (MethodHash=87d683a5) for method Roslyn.Utilities.FileUtilities:RethrowExceptionsAsIOExceptionAsync[System.__Canon,System.Nullable`1[int]](System.Func`2[System.Nullable`1[int],System.__Canon],System.Nullable`1[int]):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)
+; Total bytes of code 256, prolog size 36, PerfScore 58.70, instruction count 64, allocated bytes for code 256 (MethodHash=87d683a5) for method Roslyn.Utilities.FileUtilities:RethrowExceptionsAsIOExceptionAsync[System.__Canon,System.Nullable`1[int]](System.Func`2[System.Nullable`1[int],System.__Canon],System.Nullable`1[int]):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -115,7 +133,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 52 (0x00034) Actual length = 208 (0x0000d0)
+ Function Length : 64 (0x00040) Actual length = 256 (0x000100)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -123,10 +141,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 09 save_reg X#0 Z#9 (0x09); str x19, [sp, #72] - 89 save_fplr_x #9 (0x09); stp fp, lr, [sp, #-80]! - E4 end - E4 end
+ D0 8B save_reg X#2 Z#11 (0x0B); str x21, [sp, #88] + C8 09 save_regp X#0 Z#9 (0x09); stp x19, x20, [sp, #72] + 8B save_fplr_x #11 (0x0B); stp fp, lr, [sp, #-96]!
E4 end E4 end

+44 (+33.33%) : 17382.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:CollectSystem.__Canon:Microsoft.CodeAnalysis.IncrementalValueProvider1[System.Collections.Immutable.ImmutableArray1[System.__Canon]] (FullOpts)

@@ -8,55 +8,58 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
;* V04 tmp2 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]> ;* V06 tmp4 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp5 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V08 tmp6 [V08,T04] ( 2, 2 ) ref -> x19 single-def "field V01.Node (fldOffset=0x0)" P-INDEP -; V09 tmp7 [V09,T05] ( 2, 2 ) ubyte -> x20 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V10 tmp8 [V10,T06] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP -; V11 tmp9 [V11,T07] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V12 rat0 [V12,T03] ( 3, 4 ) long -> x1 "runtime lookup" -; V13 rat1 [V13,T02] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+; V08 tmp6 [V08,T06] ( 2, 2 ) ref -> x20 single-def "field V01.Node (fldOffset=0x0)" P-INDEP +; V09 tmp7 [V09,T07] ( 2, 2 ) ubyte -> x21 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP +; V11 tmp9 [V11,T09] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V12 rat0 [V12,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V13 rat1 [V13,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +;* V14 rat2 [V14,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V15 rat3 [V15,T03] ( 3, 5.60) long -> x0 "spilling expr" +; V16 rat4 [V16,T04] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M15345_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10] - mov x19, x1 - ; gcrRegs +[x19] - mov w20, w2 - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M15345_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x1, [x0, #0x38] - ldr x1, [x1, #0x10] - cbz x1, G_M15345_IG04
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov w21, w2 + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M15345_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M15345_IG04
;; size=12 bbWeight=1 PerfScore 7.00
-G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
b G_M15345_IG05 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x1 - bl CORINFO_HELP_NEWSFAST
+G_M15345_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - mov x1, x19
+ mov x22, x0 + ; gcrRegs +[x22] + mov x1, x20
; gcrRegs +[x1] mov x2, xzr mov x3, xzr @@ -65,19 +68,36 @@ G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x0-x1 x19] - mov x0, x21
+ ; gcrRegs -[x0-x1 x20] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M15345_IG07 + ;; size=56 bbWeight=1 PerfScore 16.00 +G_M15345_IG06: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M15345_IG08 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M15345_IG07: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M15345_IG08: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x22
; gcrRegs +[x0]
- uxtb w1, w20 - ;; size=52 bbWeight=1 PerfScore 10.00 -G_M15345_IG06: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ uxtb w1, w21 + ;; size=8 bbWeight=1 PerfScore 1.00 +G_M15345_IG09: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 28.90, instruction count 33, allocated bytes for code 132 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
+; Total bytes of code 176, prolog size 20, PerfScore 39.68, instruction count 44, allocated bytes for code 176 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
; ============================================================ Unwind Info: @@ -88,7 +108,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 44 (0x0002c) Actual length = 176 (0x0000b0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -96,9 +116,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+35.29%) : 12981.dasm - Roslyn.Utilities.InterlockedOperations:InitializeSystem.Canon,System.Nullable1[int]](byref,System.Func2[System.Nullable1[int],System.Collections.Immutable.ImmutableArray1[System.__Canon]],System.Nullable1[int]):System.Collections.Immutable.ImmutableArray1[System.Canon

@@ -8,86 +8,105 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 3.68) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 4 ) byref -> x19 single-def -; V02 arg1 [V02,T02] ( 3, 2.50) ref -> x20 class-hnd single-def <System.Func`2[System.Nullable`1[int],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]> -; V03 arg2 [V03,T03] ( 3, 2.50) struct ( 8) [fp+0x10] do-not-enreg[S] single-def <System.Nullable`1[int]>
+; V00 TypeCtx [V00,T00] ( 7, 4.88) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 4 ) byref -> x20 single-def +; V02 arg1 [V02,T03] ( 3, 2.50) ref -> x21 class-hnd single-def <System.Func`2[System.Nullable`1[int],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]> +; V03 arg2 [V03,T04] ( 3, 2.50) struct ( 8) [fp+0x18] do-not-enreg[S] single-def <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 ) long -> zero-ref "spilling helperCall" ;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T07] ( 2, 2 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T06] ( 3, 2 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T04] ( 3, 2.80) long -> x1 "spilling expr" -; V10 rat2 [V10,T05] ( 3, 2.24) long -> x2 "fgMakeTemp is creating a new local variable"
+; V07 tmp3 [V07,T08] ( 2, 2 ) long -> x0 "argument with side effect" +;* V08 rat0 [V08,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V09 rat1 [V09,T02] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V10 rat2 [V10,T07] ( 3, 2 ) long -> x0 "runtime lookup" +; V11 rat3 [V11,T05] ( 3, 2.80) long -> x0 "spilling expr" +; V12 rat4 [V12,T06] ( 3, 2.24) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 24
G_M51389_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x20]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x28] + str x21, [sp, #0x38]
mov fp, sp
- stp x3, x0, [fp, #0x10] // [V03 arg2] - mov x19, x1 - ; byrRegs +[x19] - mov x20, x2 - ; gcrRegs +[x20] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M51389_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x1, [x19] - ; gcrRegs +[x1] - cbz x1, G_M51389_IG05 - ;; size=8 bbWeight=1 PerfScore 4.00 -G_M51389_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref - ; gcrRegs -[x1 x20] - ldr x0, [x19] - ; gcrRegs +[x0] - ;; size=4 bbWeight=0.50 PerfScore 1.50 -G_M51389_IG04: ; bbWeight=0.50, epilog, nogc, extend - ldp x19, x20, [sp, #0x20] - ldp fp, lr, [sp], #0x30 - ret lr - ;; size=12 bbWeight=0.50 PerfScore 1.50 -G_M51389_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, gcvars, byref, isz - ; gcrRegs -[x0] +[x20] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x10] - cmp x2, #32 - ble G_M51389_IG08 - ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M51389_IG06: ; bbWeight=0.40, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x2, [x1, #0x20] - cbz x2, G_M51389_IG08 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M51389_IG07: ; bbWeight=0.32, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x2 - b G_M51389_IG09 - ;; size=8 bbWeight=0.32 PerfScore 0.48 -G_M51389_IG08: ; bbWeight=0.18, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+ stp x3, x0, [fp, #0x18] // [V03 arg2] + mov x19, x0 + mov x20, x1 + ; byrRegs +[x20] + mov x21, x2 + ; gcrRegs +[x21] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M51389_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x18] + cbnz x0, G_M51389_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M51389_IG03: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=16 bbWeight=0.18 PerfScore 0.45 -G_M51389_IG09: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x1, x19
+ ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M51389_IG04: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20] + ; gcrRegs +[x0] + cbz x0, G_M51389_IG07 + ;; size=8 bbWeight=1 PerfScore 4.00 +G_M51389_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, byref + ; gcrRegs -[x0 x21] + ldr x0, [x20] + ; gcrRegs +[x0] + ;; size=4 bbWeight=0.50 PerfScore 1.50 +G_M51389_IG06: ; bbWeight=0.50, epilog, nogc, extend + ldr x21, [sp, #0x38] + ldp x19, x20, [sp, #0x28] + ldp fp, lr, [sp], #0x40 + ret lr + ;; size=16 bbWeight=0.50 PerfScore 2.50 +G_M51389_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, gcvars, byref, isz + ; gcrRegs -[x0] +[x21] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x10] + cmp x1, #32 + ble G_M51389_IG10 + ;; size=16 bbWeight=0.50 PerfScore 3.75 +G_M51389_IG08: ; bbWeight=0.40, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbz x0, G_M51389_IG10 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M51389_IG09: ; bbWeight=0.32, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + b G_M51389_IG11 + ;; size=4 bbWeight=0.32 PerfScore 0.32 +G_M51389_IG10: ; bbWeight=0.18, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M51389_IG11: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x1, x20
; byrRegs +[x1]
- mov x2, x20
+ mov x2, x21
; gcrRegs +[x2]
- ldr x3, [fp, #0x10] // [V03 arg2]
+ ldr x3, [fp, #0x18] // [V03 arg2]
movz x4, #0xD1FFAB1E // code for Roslyn.Utilities.InterlockedOperations:Initialize_Slow[System.__Canon,System.Nullable`1[int]](byref,System.Func`2[System.Nullable`1[int],System.Collections.Immutable.ImmutableArray`1[System.__Canon]],System.Nullable`1[int]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] movk x4, #0xD1FFAB1E LSL #16 movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] ;; size=28 bbWeight=0.50 PerfScore 3.75
-G_M51389_IG10: ; bbWeight=0.50, epilog, nogc, extend - ldp x19, x20, [sp, #0x20] - ldp fp, lr, [sp], #0x30
+G_M51389_IG12: ; bbWeight=0.50, epilog, nogc, extend + ldr x21, [sp, #0x38] + ldp x19, x20, [sp, #0x28] + ldp fp, lr, [sp], #0x40
br x4 ; gcr arg pop 0
- ;; size=12 bbWeight=0.50 PerfScore 1.50
+ ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 136, prolog size 24, PerfScore 23.03, instruction count 34, allocated bytes for code 136 (MethodHash=0a103742) for method Roslyn.Utilities.InterlockedOperations:Initialize[System.__Canon,System.Nullable`1[int]](byref,System.Func`2[System.Nullable`1[int],System.Collections.Immutable.ImmutableArray`1[System.__Canon]],System.Nullable`1[int]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
+; Total bytes of code 184, prolog size 32, PerfScore 34.06, instruction count 46, allocated bytes for code 184 (MethodHash=0a103742) for method Roslyn.Utilities.InterlockedOperations:Initialize[System.__Canon,System.Nullable`1[int]](byref,System.Func`2[System.Nullable`1[int],System.Collections.Immutable.ImmutableArray`1[System.__Canon]],System.Nullable`1[int]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -98,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 136 (0x000088)
+ Function Length : 46 (0x0002e) Actual length = 184 (0x0000b8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -109,10 +128,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end - E4 end
+ D0 87 save_reg X#2 Z#7 (0x07); str x21, [sp, #56] + C8 05 save_regp X#0 Z#5 (0x05); stp x19, x20, [sp, #40] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end E4 end

libraries_tests.run.linux.arm64.Release.mch

-24 (-4.51%) : 15511.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,int,int,int):System.Canon[]:this (Tier1)

@@ -9,24 +9,24 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T09] ( 3, 2 ) long -> x1 single-def -; V02 arg2 [V02,T04] ( 4, 3 ) int -> x2 single-def -; V03 arg3 [V03,T05] ( 4, 3 ) long -> x21 single-def -; V04 arg4 [V04,T06] ( 4, 3 ) int -> x22 single-def -; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T03] ( 5, 3.13) int -> x20 single-def
+; V00 this [V00,T00] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T08] ( 3, 2 ) long -> x1 single-def +; V02 arg2 [V02,T03] ( 4, 3 ) int -> x2 single-def +; V03 arg3 [V03,T04] ( 4, 3 ) long -> x21 single-def +; V04 arg4 [V04,T05] ( 4, 3 ) int -> x22 single-def +; V05 arg5 [V05,T06] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T02] ( 5, 3.13) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 4.00) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T11] ( 10, 3.25) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T11] ( 9, 3.00) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T10] ( 4, 3.50) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T08] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T02] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T07] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -45,7 +45,7 @@ G_M19047_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov w20, w6 ;; size=44 bbWeight=1 PerfScore 8.00 G_M19047_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- cbnz w2, G_M19047_IG15
+ cbnz w2, G_M19047_IG13
;; size=4 bbWeight=1 PerfScore 1.00 G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz str x21, [fp, #0x18] // [V07 loc0] @@ -54,7 +54,7 @@ G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x21, xzr ; gcrRegs +[x21] cmp w20, #1
- bne G_M19047_IG13
+ bne G_M19047_IG11
;; size=24 bbWeight=1 PerfScore 5.00 G_M19047_IG04: ; bbWeight=0.93, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref ; gcrRegs -[x21] @@ -74,12 +74,13 @@ G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x30] - cbz x1, G_M19047_IG08
+ ldr x2, [x1, #0x30] + cbz x2, G_M19047_IG08
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG06: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG09
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG07: ; bbWeight=0.03, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref ; gcrRegs -[x21] add x1, fp, #24 // [V07 loc0] @@ -99,38 +100,25 @@ G_M19047_IG08: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG09: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG12 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG10: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG12 - ;; size=12 bbWeight=0.50 PerfScore 2.25 -G_M19047_IG11: ; bbWeight=0.25, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG09: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1 x21] +[x0]
- ;; size=12 bbWeight=0.25 PerfScore 0.50 -G_M19047_IG12: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M19047_IG10: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] ldp fp, lr, [sp], #0x60 ret lr ;; size=20 bbWeight=1 PerfScore 6.00
-G_M19047_IG13: ; bbWeight=0.07, gcVars=0000000000000000 {}, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M19047_IG11: ; bbWeight=0.07, gcVars=0000000000000000 {}, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] +[x21] cmp w20, #6
- bhi G_M19047_IG19
+ bhi G_M19047_IG17
mov w1, w20 adr x0, [@RWD00] ldr w0, [x0, x1, LSL #2] @@ -138,7 +126,7 @@ G_M19047_IG13: ; bbWeight=0.07, gcVars=0000000000000000 {}, gcrefRegs=280 add x0, x0, x2 br x0 ;; size=32 bbWeight=0.07 PerfScore 0.50
-G_M19047_IG14: ; bbWeight=0.03, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG12: ; bbWeight=0.03, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -152,7 +140,7 @@ G_M19047_IG14: ; bbWeight=0.03, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0.03 PerfScore 0.27
-G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG13: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -169,7 +157,7 @@ G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs -[x0] b G_M19047_IG03 ;; size=48 bbWeight=0 PerfScore 0.00
-G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
add x1, fp, #24 // [V07 loc0] mov x0, x19 ; gcrRegs +[x0] @@ -182,7 +170,7 @@ G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -196,7 +184,7 @@ G_M19047_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -210,7 +198,7 @@ G_M19047_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG19: ; bbWeight=0, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+G_M19047_IG17: ; bbWeight=0, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -222,7 +210,7 @@ G_M19047_IG19: ; bbWeight=0, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { blr x1 b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -236,16 +224,16 @@ G_M19047_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-RWD00 dd G_M19047_IG20 - G_M19047_IG02
+RWD00 dd G_M19047_IG18 - G_M19047_IG02
dd G_M19047_IG04 - G_M19047_IG02
- dd G_M19047_IG14 - G_M19047_IG02
+ dd G_M19047_IG12 - G_M19047_IG02
dd G_M19047_IG07 - G_M19047_IG02
+ dd G_M19047_IG14 - G_M19047_IG02
dd G_M19047_IG16 - G_M19047_IG02
- dd G_M19047_IG18 - G_M19047_IG02 - dd G_M19047_IG17 - G_M19047_IG02
+ dd G_M19047_IG15 - G_M19047_IG02
-; Total bytes of code 532, prolog size 24, PerfScore 46.22, instruction count 133, allocated bytes for code 532 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
+; Total bytes of code 508, prolog size 24, PerfScore 43.77, instruction count 127, allocated bytes for code 508 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
; ============================================================ Unwind Info: @@ -256,7 +244,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 133 (0x00085) Actual length = 532 (0x000214)
+ Function Length : 127 (0x0007f) Actual length = 508 (0x0001fc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-4 (-3.33%) : 1381.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable1[ubyte]](System.String):System.Nullable1[ubyte]:this (Tier0)

@@ -5,29 +5,28 @@ ; partially interruptible ; Final local variable assignments ;
-; V00 this [V00 ] ( 1, 1 ) ref -> [fp+0x38] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions> -; V01 arg1 [V01 ] ( 1, 1 ) ref -> [fp+0x30] do-not-enreg[] class-hnd <System.String> -; V02 loc0 [V02 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <<unknown class>> -; V03 loc1 [V03 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[S] must-init ld-addr-op <System.Nullable`1[ubyte]>
+; V00 this [V00 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions> +; V01 arg1 [V01 ] ( 1, 1 ) ref -> [fp+0x20] do-not-enreg[] class-hnd <System.String> +; V02 loc0 [V02 ] ( 1, 1 ) ref -> [fp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <<unknown class>> +; V03 loc1 [V03 ] ( 1, 1 ) struct ( 8) [fp+0x10] do-not-enreg[S] must-init ld-addr-op <System.Nullable`1[ubyte]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05 ] ( 1, 1 ) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed "pseudo return buffer" <System.Nullable`1[ubyte]>
;
-; Lcl frame size = 48
+; Lcl frame size = 32
G_M29704_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]!
+ stp fp, lr, [sp, #-0x30]!
mov fp, sp
- str xzr, [fp, #0x28] // [V02 loc0] - str xzr, [fp, #0x20] // [V03 loc1] - str x0, [fp, #0x38] // [V00 this] - str x1, [fp, #0x30] // [V01 arg1]
+ str xzr, [fp, #0x18] // [V02 loc0] + str xzr, [fp, #0x10] // [V03 loc1] + str x0, [fp, #0x28] // [V00 this] + str x1, [fp, #0x20] // [V01 arg1]
;; size=24 bbWeight=1 PerfScore 5.50 G_M29704_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr x0, [fp, #0x38] // [V00 this]
+ ldr x0, [fp, #0x28] // [V00 this]
; gcrRegs +[x0] ldr x0, [x0, #0x08]
- add x2, fp, #40 // [V02 loc0] - ldr x1, [fp, #0x30] // [V01 arg1]
+ add x2, fp, #24 // [V02 loc0] + ldr x1, [fp, #0x20] // [V01 arg1]
; gcrRegs +[x1] movz x3, #0xD1FFAB1E // code for <unknown method> movk x3, #0xD1FFAB1E LSL #16 @@ -37,30 +36,31 @@ G_M29704_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x3 ; gcrRegs -[x0-x1] cbz w0, G_M29704_IG04
- add x0, fp, #24 // [V05 tmp1] - ldr x2, [fp, #0x28] // [V02 loc0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ldr w0, [fp, #0x18] // [V05 tmp1] - ;; size=72 bbWeight=1 PerfScore 24.00
+ ldr x1, [fp, #0x18] // [V02 loc0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldrh w0, [x0] + ; byrRegs -[x0] + ;; size=68 bbWeight=1 PerfScore 24.50
G_M29704_IG03: ; bbWeight=1, epilog, nogc, extend
- ldp fp, lr, [sp], #0x40
+ ldp fp, lr, [sp], #0x30
ret lr ;; size=8 bbWeight=1 PerfScore 2.00 G_M29704_IG04: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- strh wzr, [fp, #0x20] // [V03 loc1] - ldr w0, [fp, #0x20] // [V03 loc1]
+ strh wzr, [fp, #0x10] // [V03 loc1] + ldr w0, [fp, #0x10] // [V03 loc1]
;; size=8 bbWeight=1 PerfScore 3.00 G_M29704_IG05: ; bbWeight=1, epilog, nogc, extend
- ldp fp, lr, [sp], #0x40
+ ldp fp, lr, [sp], #0x30
ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 120, prolog size 16, PerfScore 36.50, instruction count 30, allocated bytes for code 120 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
+; Total bytes of code 116, prolog size 16, PerfScore 37.00, instruction count 29, allocated bytes for code 116 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
; ============================================================ Unwind Info: @@ -71,7 +71,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 120 (0x000078)
+ Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -82,7 +82,7 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
E4 end E4 end

+0 (0.00%) : 929.dasm - System.Console:add_CancelKeyPress(System.ConsoleCancelEventHandler) (Tier0)

@@ -41,9 +41,11 @@ G_M41435_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #13
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -67,15 +69,19 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #13
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #13
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -98,7 +104,7 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_CHKCASTCLASS
+ bl CORINFO_HELP_CHKCASTARRAY
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 movz x14, #0xD1FFAB1E // data for <unknown class>:<unknown field> @@ -112,9 +118,11 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #13
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -135,7 +143,7 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWSFAST
+ bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 str x0, [fp, #0x20] // [V07 tmp3] @@ -175,11 +183,13 @@ G_M41435_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #13
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 ldr x1, [fp, #0x38] // [V03 loc2] ; gcrRegs +[x1] movn w0, #1
+ ; byrRegs -[x0]
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 @@ -198,11 +208,13 @@ G_M41435_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #13
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 ldr x1, [fp, #0x38] // [V03 loc2] ; gcrRegs +[x1] movn w0, #2
+ ; byrRegs -[x0]
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32

+48 (+33.33%) : 12672.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,88 +9,109 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T02] ( 5, 4.36) long -> x1 single-def -; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T01] ( 7, 7 ) ref -> x0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V00 this [V00,T06] ( 3, 3 ) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T01] ( 7, 5.72) long -> x19 single-def +; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T02] ( 7, 7 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T00] ( 4, 8 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T07] ( 3, 4 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 4 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T04] ( 3, 5.60) long -> x0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable" +;* V12 rat3 [V12,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat4 [V13,T05] ( 3, 5.60) long -> x0 "spilling expr" +; V14 rat5 [V14,T08] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07 - ldr x0, [x1, #0x38]
+ cbnz x0, G_M58319_IG10 + ldr x0, [x19, #0x38]
; gcrRegs -[x0]
- ldr x2, [x0, #0x08] - cmp x2, #24
+ ldr x1, [x0, #0x08] + cmp x1, #24
ble G_M58319_IG05 ;; size=24 bbWeight=1 PerfScore 11.50
-G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
ldr x0, [x0, #0x18] cbz x0, G_M58319_IG05 ;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M58319_IG06: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M58319_IG08 + ;; size=36 bbWeight=1 PerfScore 11.00 +G_M58319_IG07: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M58319_IG08: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M58319_IG09: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=1 PerfScore 7.00 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=1 PerfScore 3.50 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 144, prolog size 20, PerfScore 33.92, instruction count 36, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 192, prolog size 20, PerfScore 45.20, instruction count 48, allocated bytes for code 192 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -101,7 +122,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -109,9 +130,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+33.33%) : 16244.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,90 +9,111 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T03] ( 3, 2.42) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.58) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.42) byref -> x19 single-def
+; V00 this [V00,T03] ( 3, 2.42) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 4.15) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.42) byref -> x20 single-def
; V03 loc0 [V03,T02] ( 7, 4.69) ref -> x0 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, 3.38) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 3.38) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T07] ( 3, 1.69) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 1.69) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 2.37) long -> x0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 1.89) long -> x0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 1.89) long -> x0 "fgMakeTemp is creating a new local variable" +;* V12 rat3 [V12,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat4 [V13,T06] ( 3, 2.37) long -> x0 "spilling expr" +; V14 rat5 [V14,T08] ( 2, 1.35) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG08
+ cbnz x0, G_M58319_IG11
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.42, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.42, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38] - ldr x2, [x0, #0x08] - cmp x2, #24
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24
ble G_M58319_IG06 ;; size=16 bbWeight=0.42 PerfScore 3.17
-G_M58319_IG04: ; bbWeight=0.34, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG04: ; bbWeight=0.34, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
ldr x0, [x0, #0x18] cbz x0, G_M58319_IG06 ;; size=8 bbWeight=0.34 PerfScore 1.35
-G_M58319_IG05: ; bbWeight=0.27, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG05: ; bbWeight=0.27, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG07 ;; size=4 bbWeight=0.27 PerfScore 0.27
-G_M58319_IG06: ; bbWeight=0.15, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG06: ; bbWeight=0.15, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.15 PerfScore 0.46
-G_M58319_IG07: ; bbWeight=0.42, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG07: ; bbWeight=0.42, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M58319_IG09 + ;; size=36 bbWeight=0.42 PerfScore 4.65 +G_M58319_IG08: ; bbWeight=0.34, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M58319_IG10 + ;; size=8 bbWeight=0.34 PerfScore 1.35 +G_M58319_IG09: ; bbWeight=0.15, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.15 PerfScore 0.46 +G_M58319_IG10: ; bbWeight=0.42, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.42 PerfScore 2.96 -G_M58319_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.42 PerfScore 1.48 +G_M58319_IG11: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 144, prolog size 20, PerfScore 22.71, instruction count 36, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 192, prolog size 20, PerfScore 27.20, instruction count 48, allocated bytes for code 192 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -103,7 +124,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -111,9 +132,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+36 (+69.23%) : 17461.dasm - Moq.It+<>c1`1[System.Threading.CancellationToken]:b1_2(System.Threading.CancellationToken):ubyte:this (Tier0)

@@ -11,44 +11,62 @@ ; ; Lcl frame size = 16
-G_M13892_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M13892_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x20]! mov fp, sp str x0, [fp, #0x18] // [V00 this] str x1, [fp, #0x10] // [V01 arg1] ;; size=16 bbWeight=1 PerfScore 3.50
-G_M13892_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M13892_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
add x1, fp, #16 // [V01 arg1] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_BOX
+ bl CORINFO_HELP_ISINSTANCEOF_EXCEPTION + ; gcrRegs +[x0] + cbz x0, G_M13892_IG04 + add x1, fp, #16 // [V01 arg1] + movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_ISINSTANCEOF_EXCEPTION
; gcrRegs +[x0] cmp x0, #0 cset x0, ne ; gcrRegs -[x0]
- ;; size=28 bbWeight=1 PerfScore 4.00
+ ;; size=52 bbWeight=1 PerfScore 8.00
G_M13892_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
+G_M13892_IG04: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + mov w0, #1 + ;; size=4 bbWeight=1 PerfScore 0.50 +G_M13892_IG05: ; bbWeight=1, epilog, nogc, extend + ldp fp, lr, [sp], #0x20 + ret lr + ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 52, prolog size 8, PerfScore 9.50, instruction count 13, allocated bytes for code 52 (MethodHash=a75ac9bb) for method Moq.It+<>c__1`1[System.Threading.CancellationToken]:<IsAny>b__1_2(System.Threading.CancellationToken):ubyte:this (Tier0)
+; Total bytes of code 88, prolog size 8, PerfScore 16.00, instruction count 22, allocated bytes for code 88 (MethodHash=a75ac9bb) for method Moq.It+<>c__1`1[System.Threading.CancellationToken]:<IsAny>b__1_2(System.Threading.CancellationToken):ubyte:this (Tier0)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 1
- Epilog Count : 1
+ Epilog Count : 2
E bit : 0 X bit : 0 Vers : 0
- Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
+ Function Length : 22 (0x00016) Actual length = 88 (0x000058)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) Epilog Start Index : 1 (0x01)
+ ---- Scope 1 + Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) + Epilog Start Index : 1 (0x01)
---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----

librariestestsnotieredcompilation.run.linux.arm64.Release.mch

-20 (-20.83%) : 2543.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 -> x1 class-hnd single-def <System.Reflection.PropertyInfo>
+; V01 arg1 [V01,T00] ( 3, 3 ) ref -> x1 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 -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <<unknown class>>
+; V03 tmp1 [V03,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 0 @@ -21,7 +19,7 @@ G_M28645_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x10]! mov fp, sp ;; size=8 bbWeight=1 PerfScore 1.50
-G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1] mov x0, x1 ; gcrRegs +[x0] @@ -37,28 +35,19 @@ G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byre blr x3 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M28645_IG05 - ;; size=48 bbWeight=1 PerfScore 9.50 -G_M28645_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M28645_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M28645_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M28645_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=1 PerfScore 11.00 +G_M28645_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 96, prolog size 8, PerfScore 14.69, instruction count 24, allocated bytes for code 96 (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 76, prolog size 8, PerfScore 14.50, instruction count 19, allocated bytes for code 76 (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: @@ -69,7 +58,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 24 (0x00018) Actual length = 96 (0x000060)
+ Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-10.61%) : 342.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)

@@ -10,120 +10,103 @@ ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V01 tmp1 [V01,T00] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
-; V02 tmp2 [V02,T01] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V03 tmp3 [V03,T02] ( 8, 16 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V04 cse0 [V04,T03] ( 4, 4 ) long -> x19 "CSE - aggressive" -; V05 cse1 [V05,T04] ( 4, 4 ) long -> x21 "CSE - aggressive"
+; V02 tmp2 [V02,T01] ( 6, 12 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V03 tmp3 [V03,T02] ( 6, 12 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V04 cse0 [V04,T03] ( 4, 4 ) ref -> x19 "CSE - aggressive" +; V05 cse1 [V05,T04] ( 4, 4 ) byref -> x21 "CSE - aggressive" +; V06 cse2 [V06,T05] ( 4, 4 ) byref -> x22 "CSE - aggressive" +; V07 cse3 [V07,T06] ( 4, 4 ) long -> x23 "CSE - aggressive"
; ; Lcl frame size = 8 G_M2338_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]!
+ stp fp, lr, [sp, #-0x40]!
stp x19, x20, [sp, #0x18]
- str x21, [sp, #0x28]
+ stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- ;; size=16 bbWeight=1 PerfScore 3.50
+ ;; size=20 bbWeight=1 PerfScore 4.50
G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movz x19, #0xD1FFAB1E - movk x19, #0xD1FFAB1E LSL #16 - movk x19, #0xD1FFAB1E LSL #32 - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str xzr, [x20, #0x10] - movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - mov x14, x21 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str x15, [x20, #0x10] - add x14, x21, #8 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0] mov x19, x0 ; gcrRegs +[x19]
- str xzr, [x19, #0x10] - add x0, x19, #24
+ mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + add x21, x20, #24 + ; byrRegs +[x21] + mov w0, #4
; gcrRegs -[x0]
- ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0]
+ stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + add x22, x20, #29 + ; byrRegs +[x22] + mov w14, #1 + stlrb w14, [x22] + str xzr, [x20, #0x10] + movz x23, #0xD1FFAB1E // data for <unknown class>:<unknown field> + movk x23, #0xD1FFAB1E LSL #16 + movk x23, #0xD1FFAB1E LSL #32 + mov x14, x23 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + mov w0, #4 + stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + mov w14, #1 + stlrb w14, [x22] + str x14, [x20, #0x10] + add x14, x23, #8 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + str xzr, [x19, #0x10] + mov w0, #4 + stlr w0, [x21]
strb wzr, [x19, #0x1C] mov x0, x19 ; gcrRegs +[x0]
- ; byrRegs -[x0]
bl <unknown method> ; gcrRegs -[x0]
- add x14, x19, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14]
+ ; byrRegs -[x21] + mov w14, #1 + stlrb w14, [x22]
mov x14, #2
- ; byrRegs -[x14]
str x14, [x19, #0x10]
- add x14, x21, #16
+ add x14, x23, #16
mov x15, x19 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x15 x19]
- ;; size=232 bbWeight=1 PerfScore 41.00
+ ; byrRegs -[x22] + ;; size=196 bbWeight=1 PerfScore 35.50
G_M2338_IG03: ; bbWeight=1, epilog, nogc, extend
- ldr x21, [sp, #0x28]
+ ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28]
ldp x19, x20, [sp, #0x18]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 6.00
-; Total bytes of code 264, prolog size 16, PerfScore 49.50, instruction count 66, allocated bytes for code 264 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
+; Total bytes of code 236, prolog size 20, PerfScore 46.00, instruction count 59, allocated bytes for code 236 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
; ============================================================ Unwind Info: @@ -134,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 66 (0x00042) Actual length = 264 (0x000108)
+ Function Length : 59 (0x0003b) Actual length = 236 (0x0000ec)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,9 +125,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40]
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56] + E6 save_next
C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
- 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end
+ 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end

-32 (-9.41%) : 2852.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)

@@ -12,11 +12,9 @@ ; V01 arg1 [V01,T02] ( 4, 3.50) byref -> x21 single-def ; V02 arg2 [V02,T01] ( 5, 3.50) byref -> x20 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 -> x0 "Inline return value spill temp"
+; V04 tmp1 [V04,T03] ( 3, 1.50) ubyte -> x0 "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 -> [fp+0x10] 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) long -> x1 "fgMakeTemp is creating a new local variable" -; V08 tmp5 [V08,T03] ( 3, 2.25) ref -> x15 class-hnd "spilling QMark2" <<unknown class>>
+; V06 tmp3 [V06 ] ( 4, 2 ) ref -> [fp+0x10] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.Object>
; ; Lcl frame size = 8 @@ -66,7 +64,7 @@ G_M30064_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=300000 {x20 blr x4 ; gcrRegs -[x1] ; byrRegs -[x3]
- cbz w0, G_M30064_IG10
+ cbz w0, G_M30064_IG07
;; size=104 bbWeight=1 PerfScore 22.00 G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=300000 {x20 x21}, byref, isz ldr x0, [x19, #0x20] @@ -81,80 +79,61 @@ G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=300000 { ldr x3, [x11] blr x3 ; gcrRegs -[x0 x19]
- cbz w0, G_M30064_IG07
+ cbz w0, G_M30064_IG04
ldr x1, [fp, #0x10] // [V06 tmp3] ; gcrRegs +[x1] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_ISINSTANCEOFARRAY
+ bl CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[x1] +[x0]
- cbz x0, G_M30064_IG07 - ldr x15, [fp, #0x10] // [V06 tmp3] - ; gcrRegs +[x15] - mov x0, x15 - cbz x0, G_M30064_IG06 - ;; size=80 bbWeight=0.50 PerfScore 10.25 -G_M30064_IG04: ; bbWeight=0.25, gcrefRegs=8000 {x15}, byrefRegs=300000 {x20 x21}, byref, isz - ; gcrRegs -[x0] - ldr x0, [fp, #0x10] // [V06 tmp3] - ; gcrRegs +[x0] - ldr x0, [x0] - ; gcrRegs -[x0] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - cmp x0, x1 - beq G_M30064_IG06 - ;; size=28 bbWeight=0.25 PerfScore 2.00 -G_M30064_IG05: ; bbWeight=0.12, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref - ; gcrRegs -[x15] - mov x0, x1
+ cbz x0, G_M30064_IG04
ldr x1, [fp, #0x10] // [V06 tmp3] ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] mov x15, x0 ; gcrRegs +[x15]
- ;; size=16 bbWeight=0.12 PerfScore 0.50 -G_M30064_IG06: ; bbWeight=0.50, gcrefRegs=8000 {x15}, byrefRegs=300000 {x20 x21}, byref - ; gcrRegs -[x0]
mov x14, x20 ; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
; byrRegs -[x14] mov w0, #1
- b G_M30064_IG08 - ;; size=16 bbWeight=0.50 PerfScore 1.50 -G_M30064_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref
+ b G_M30064_IG05 + ;; size=108 bbWeight=0.50 PerfScore 12.50 +G_M30064_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref
str xzr, [x20] mov w0, wzr ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M30064_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref, isz
+G_M30064_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref, isz
str xzr, [fp, #0x10] // [V06 tmp3]
- cbz w0, G_M30064_IG10
+ cbz w0, G_M30064_IG07
mov w0, #1 ;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M30064_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M30064_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M30064_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, gcvars, byref
+G_M30064_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, gcvars, byref
str xzr, [x21] str xzr, [x20] mov w0, wzr ;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M30064_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M30064_IG08: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 340, prolog size 20, PerfScore 50.50, instruction count 85, allocated bytes for code 340 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
+; Total bytes of code 308, prolog size 20, PerfScore 48.75, instruction count 77, allocated bytes for code 308 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -165,7 +144,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 85 (0x00055) Actual length = 340 (0x000154)
+ Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+44 (+33.33%) : 8518.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:CollectSystem.__Canon:Microsoft.CodeAnalysis.IncrementalValueProvider1[System.Collections.Immutable.ImmutableArray1[System.__Canon]] (FullOpts)

@@ -8,55 +8,58 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
;* V04 tmp2 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]> ;* V06 tmp4 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp5 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V08 tmp6 [V08,T04] ( 2, 2 ) ref -> x19 single-def "field V01.Node (fldOffset=0x0)" P-INDEP -; V09 tmp7 [V09,T05] ( 2, 2 ) ubyte -> x20 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V10 tmp8 [V10,T06] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP -; V11 tmp9 [V11,T07] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V12 rat0 [V12,T03] ( 3, 4 ) long -> x1 "runtime lookup" -; V13 rat1 [V13,T02] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+; V08 tmp6 [V08,T06] ( 2, 2 ) ref -> x20 single-def "field V01.Node (fldOffset=0x0)" P-INDEP +; V09 tmp7 [V09,T07] ( 2, 2 ) ubyte -> x21 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP +; V11 tmp9 [V11,T09] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V12 rat0 [V12,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V13 rat1 [V13,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +;* V14 rat2 [V14,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V15 rat3 [V15,T03] ( 3, 5.60) long -> x0 "spilling expr" +; V16 rat4 [V16,T04] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M15345_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10] - mov x19, x1 - ; gcrRegs +[x19] - mov w20, w2 - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M15345_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x1, [x0, #0x38] - ldr x1, [x1, #0x10] - cbz x1, G_M15345_IG04
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov w21, w2 + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M15345_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M15345_IG04
;; size=12 bbWeight=1 PerfScore 7.00
-G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
b G_M15345_IG05 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x1 - bl CORINFO_HELP_NEWSFAST
+G_M15345_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - mov x1, x19
+ mov x22, x0 + ; gcrRegs +[x22] + mov x1, x20
; gcrRegs +[x1] mov x2, xzr mov x3, xzr @@ -65,19 +68,36 @@ G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x0-x1 x19] - mov x0, x21
+ ; gcrRegs -[x0-x1 x20] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M15345_IG07 + ;; size=56 bbWeight=1 PerfScore 16.00 +G_M15345_IG06: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M15345_IG08 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M15345_IG07: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M15345_IG08: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x22
; gcrRegs +[x0]
- uxtb w1, w20 - ;; size=52 bbWeight=1 PerfScore 10.00 -G_M15345_IG06: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ uxtb w1, w21 + ;; size=8 bbWeight=1 PerfScore 1.00 +G_M15345_IG09: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 28.90, instruction count 33, allocated bytes for code 132 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
+; Total bytes of code 176, prolog size 20, PerfScore 39.68, instruction count 44, allocated bytes for code 176 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
; ============================================================ Unwind Info: @@ -88,7 +108,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 44 (0x0002c) Actual length = 176 (0x0000b0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -96,9 +116,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+44 (+37.93%) : 8433.dasm - System.Linq.ImmutableArrayExtensions:WhereSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -8,70 +8,87 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.36) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> x20 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V06 tmp3 [V06,T03] ( 3, 3 ) ref -> x20 single-def "field V01.array (fldOffset=0x0)" P-INDEP -; V07 tmp4 [V07,T06] ( 2, 4 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T01] ( 3, 5.60) long -> x1 "spilling expr" -; V10 rat2 [V10,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T04] ( 3, 3 ) ref -> x21 single-def "field V01.array (fldOffset=0x0)" P-INDEP +; V07 tmp4 [V07,T07] ( 2, 4 ) long -> x0 "argument with side effect" +;* V08 rat0 [V08,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V09 rat1 [V09,T01] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V10 rat2 [V10,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V11 rat3 [V11,T02] ( 3, 5.60) long -> x0 "spilling expr" +; V12 rat4 [V12,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M59151_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18] - mov x20, x1
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2
; gcrRegs +[x20]
- mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M59151_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr wzr, [x20, #0x08] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M59151_IG05 - ;; size=20 bbWeight=1 PerfScore 10.50 -G_M59151_IG03: ; bbWeight=0.80, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M59151_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M59151_IG04: ; bbWeight=0.64, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x0, x2 - b G_M59151_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M59151_IG05: ; bbWeight=0.36, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+ ;; size=32 bbWeight=1 PerfScore 6.00 +G_M59151_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M59151_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M59151_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M59151_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M59151_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr wzr, [x21, #0x08] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M59151_IG07 + ;; size=20 bbWeight=1 PerfScore 10.50 +G_M59151_IG05: ; bbWeight=0.80, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M59151_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M59151_IG06: ; bbWeight=0.64, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M59151_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M59151_IG07: ; bbWeight=0.36, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M59151_IG08: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x1, x21
; gcrRegs +[x1]
- mov x2, x19
+ mov x2, x20
; gcrRegs +[x2] movz x3, #0xD1FFAB1E // code for 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] movk x3, #0xD1FFAB1E LSL #16 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x1-x2 x19-x20] +[x0]
+ ; gcrRegs -[x1-x2 x20-x21] +[x0]
;; size=28 bbWeight=1 PerfScore 6.50
-G_M59151_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59151_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 116, prolog size 16, PerfScore 29.56, instruction count 29, allocated bytes for code 116 (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 160, prolog size 20, PerfScore 40.52, instruction count 40, allocated bytes for code 160 (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: @@ -82,7 +99,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
+ Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -90,10 +107,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] + C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
- E4 end - E4 end

+44 (+37.93%) : 4200.dasm - System.Linq.ImmutableArrayExtensions:SelectSystem.Canon,System.Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -8,70 +8,87 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.36) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> x20 class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V06 tmp3 [V06,T03] ( 3, 3 ) ref -> x20 single-def "field V01.array (fldOffset=0x0)" P-INDEP -; V07 tmp4 [V07,T06] ( 2, 4 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T01] ( 3, 5.60) long -> x1 "spilling expr" -; V10 rat2 [V10,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T04] ( 3, 3 ) ref -> x21 single-def "field V01.array (fldOffset=0x0)" P-INDEP +; V07 tmp4 [V07,T07] ( 2, 4 ) long -> x0 "argument with side effect" +;* V08 rat0 [V08,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V09 rat1 [V09,T01] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V10 rat2 [V10,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V11 rat3 [V11,T02] ( 3, 5.60) long -> x0 "spilling expr" +; V12 rat4 [V12,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M61273_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18] - mov x20, x1
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2
; gcrRegs +[x20]
- mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M61273_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr wzr, [x20, #0x08] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x10] - cmp x2, #32 - ble G_M61273_IG05 - ;; size=20 bbWeight=1 PerfScore 10.50 -G_M61273_IG03: ; bbWeight=0.80, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x2, [x1, #0x20] - cbz x2, G_M61273_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M61273_IG04: ; bbWeight=0.64, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x0, x2 - b G_M61273_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M61273_IG05: ; bbWeight=0.36, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+ ;; size=32 bbWeight=1 PerfScore 6.00 +G_M61273_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x18] + cbnz x0, G_M61273_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M61273_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M61273_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M61273_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr wzr, [x21, #0x08] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x10] + cmp x1, #32 + ble G_M61273_IG07 + ;; size=20 bbWeight=1 PerfScore 10.50 +G_M61273_IG05: ; bbWeight=0.80, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x20] + cbz x0, G_M61273_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M61273_IG06: ; bbWeight=0.64, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M61273_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M61273_IG07: ; bbWeight=0.36, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M61273_IG08: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x1, x21
; gcrRegs +[x1]
- mov x2, x19
+ mov x2, x20
; gcrRegs +[x2] movz x3, #0xD1FFAB1E // code for <unknown method> movk x3, #0xD1FFAB1E LSL #16 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x1-x2 x19-x20] +[x0]
+ ; gcrRegs -[x1-x2 x20-x21] +[x0]
;; size=28 bbWeight=1 PerfScore 6.50
-G_M61273_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M61273_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 116, prolog size 16, PerfScore 29.56, instruction count 29, allocated bytes for code 116 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 160, prolog size 20, PerfScore 40.52, instruction count 40, allocated bytes for code 160 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -82,7 +99,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
+ Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -90,10 +107,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] + C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
- E4 end - E4 end

realworld.run.linux.arm64.checked.mch

-24 (-4.51%) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,int,int,int):System.Canon[]:this (FullOpts)

@@ -9,23 +9,23 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 6.50) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T09] ( 3, 2.50) long -> x1 single-def -; V02 arg2 [V02,T05] ( 4, 3.50) int -> x2 single-def -; V03 arg3 [V03,T06] ( 4, 3.50) long -> x21 single-def -; V04 arg4 [V04,T07] ( 4, 3.50) int -> x22 single-def -; V05 arg5 [V05,T08] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V01 arg1 [V01,T08] ( 3, 2.50) long -> x1 single-def +; V02 arg2 [V02,T04] ( 4, 3.50) int -> x2 single-def +; V03 arg3 [V03,T05] ( 4, 3.50) long -> x21 single-def +; V04 arg4 [V04,T06] ( 4, 3.50) int -> x22 single-def +; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 6.50) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T11] ( 4, 2.75) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T01] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T10] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T04] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T09] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T10] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -192,38 +192,26 @@ G_M19047_IG13: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG15
+ ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG15
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG14: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG16
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG15: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG19 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG17: ; bbWeight=0.25, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG19 - ;; size=12 bbWeight=0.25 PerfScore 1.12 -G_M19047_IG18: ; bbWeight=0.12, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1 x21] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M19047_IG19: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M19047_IG17: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] @@ -239,7 +227,7 @@ RWD00 dd G_M19047_IG05 - G_M19047_IG02 dd G_M19047_IG10 - G_M19047_IG02
-; Total bytes of code 532, prolog size 24, PerfScore 81.02, instruction count 133, allocated bytes for code 532 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
+; Total bytes of code 508, prolog size 24, PerfScore 79.95, instruction count 127, allocated bytes for code 508 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
; ============================================================ Unwind Info: @@ -250,7 +238,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 133 (0x00085) Actual length = 532 (0x000214)
+ Function Length : 127 (0x0007f) Actual length = 508 (0x0001fc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-3.70%) : 401.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object

@@ -10,23 +10,21 @@ ; ; V00 arg0 [V00,T00] ( 9, 6 ) ref -> x19 class-hnd single-def <System.RuntimeType> ; V01 arg1 [V01,T01] ( 8, 5 ) int -> x20 single-def
-;* V02 loc0 [V02,T12] ( 0, 0 ) ubyte -> zero-ref -; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> x21
+;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref +; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> x21
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T05] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T13] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T03] ( 5, 3.75) ref -> x0 class-hnd "spilling QMark2" <System.Object[]> -; V09 tmp4 [V09,T07] ( 3, 1.50) ref -> x0 -; V10 tmp5 [V10,T08] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> -; V11 tmp6 [V11,T04] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> -;* V12 tmp7 [V12,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> -;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> -;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V15 tmp10 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 5, 5 ) ref -> x0 "Single return block return value" -; V17 cse0 [V17,T10] ( 3, 1.50) long -> x0 "CSE - moderate" -; V18 cse1 [V18,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 3, 1.50) ref -> x0 +; V07 tmp2 [V07,T07] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> +; V08 tmp3 [V08,T03] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> +;* V09 tmp4 [V09,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> +;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> +;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V13 tmp8 [V13,T02] ( 5, 5 ) ref -> x0 "Single return block return value" +; V14 tmp9 [V14,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V15 cse0 [V15,T09] ( 3, 1.50) long -> x0 "CSE - moderate" +; V16 cse1 [V16,T08] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 8 @@ -94,7 +92,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 b G_M32569_IG07 @@ -105,16 +103,18 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #29
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x1, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x0, [x1] ; gcrRegs +[x0]
+ ; byrRegs -[x0]
;; size=36 bbWeight=0.50 PerfScore 3.75 G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=4 bbWeight=0.50 PerfScore 0.50 G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19] @@ -124,10 +124,10 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[x19] +[x0] ; gcr arg pop 0
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=32 bbWeight=0.50 PerfScore 3.00 G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] @@ -135,18 +135,20 @@ G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #30
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] ; gcrRegs +[x0]
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=40 bbWeight=0.50 PerfScore 4.25 G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19]
- cbz w20, G_M32569_IG14
+ cbz w20, G_M32569_IG11
mov x0, x19 ; gcrRegs +[x0] mov w1, w20 @@ -159,43 +161,32 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M32569_IG13 - ;; size=40 bbWeight=0.50 PerfScore 4.50 -G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M32569_IG13 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref - b G_M32569_IG19 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ b G_M32569_IG16 + ;; size=56 bbWeight=0.50 PerfScore 5.75 +G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x19] ldr x0, [x19, #0x10]
- cbz x0, G_M32569_IG16
+ cbz x0, G_M32569_IG13
bl <unknown method> ; gcrRegs +[x0] ; gcr arg pop 0 mov x20, x0 ; gcrRegs +[x20]
- cbz x20, G_M32569_IG16
+ cbz x20, G_M32569_IG13
ldr x0, [x20] ; gcrRegs -[x0] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 cmp x0, x1
- beq G_M32569_IG15
+ beq G_M32569_IG12
movz x1, #8 movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -209,10 +200,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0 x19] ; gcr arg pop 0 ;; size=80 bbWeight=0.50 PerfScore 10.00
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M32569_IG14
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x20] +[x19] mov x0, x19 ; gcrRegs +[x0] @@ -226,7 +217,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, mov x20, x0 ; gcrRegs +[x20] ;; size=28 bbWeight=0.50 PerfScore 3.25
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -236,14 +227,14 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ldr x1, [x1] ldr wzr, [x0] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M32569_IG18: ; bbWeight=0.50, epilog, nogc, extend
+G_M32569_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x1 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x20] ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -251,7 +242,7 @@ G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 540, prolog size 24, PerfScore 64.94, instruction count 135, allocated bytes for code 540 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
+; Total bytes of code 520, prolog size 24, PerfScore 64.00, instruction count 130, allocated bytes for code 520 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
; ============================================================ Unwind Info: @@ -262,7 +253,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 135 (0x00087) Actual length = 540 (0x00021c)
+ Function Length : 130 (0x00082) Actual length = 520 (0x000208)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-16 (-1.76%) : 14567.dasm - System.Linq.Enumerable:ContainsSystem.__Canon:ubyte (FullOpts)

@@ -7,97 +7,91 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T12] ( 15, 8.12) long -> x21 single-def -; V01 arg0 [V01,T15] ( 5, 5 ) ref -> x22 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 arg1 [V02,T07] ( 4, 18 ) ref -> x19 class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T11] ( 4, 11 ) ref -> x20 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]> -; V04 loc0 [V04,T05] ( 7, 20 ) ref -> [fp+0x20] class-hnd EH-live spill-single-def <<unknown class>> -; V05 loc1 [V05,T09] ( 2, 16 ) ref -> x21 class-hnd <System.__Canon> -; V06 loc2 [V06,T20] ( 3, 3 ) ubyte -> [fp+0x2C] do-not-enreg[Z] EH-live -; V07 loc3 [V07,T06] ( 7, 20 ) ref -> [fp+0x18] class-hnd EH-live spill-single-def <<unknown class>> -; V08 loc4 [V08,T10] ( 2, 16 ) ref -> x1 class-hnd <System.__Canon>
+; V00 TypeCtx [V00,T00] ( 15, 48.92) long -> x19 single-def +; V01 arg0 [V01,T21] ( 5, 5 ) ref -> x22 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 arg1 [V02,T17] ( 4, 18 ) ref -> x20 class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T20] ( 4, 11 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]> +; V04 loc0 [V04,T15] ( 7, 20 ) ref -> [fp+0x18] class-hnd EH-live spill-single-def <<unknown class>> +; V05 loc1 [V05,T18] ( 2, 16 ) ref -> x22 class-hnd <System.__Canon> +; V06 loc2 [V06,T26] ( 3, 3 ) ubyte -> [fp+0x24] do-not-enreg[Z] EH-live +; V07 loc3 [V07,T16] ( 7, 20 ) ref -> [fp+0x10] class-hnd EH-live spill-single-def <<unknown class>> +; V08 loc4 [V08,T19] ( 2, 16 ) ref -> x22 class-hnd <System.__Canon>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V11 tmp2 [V11,T16] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
+; V11 tmp2 [V11,T22] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
;* V12 tmp3 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V13 tmp4 [V13,T01] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup"
+; V13 tmp4 [V13,T01] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup"
;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V15 tmp6 [V15,T02] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup"
+; V15 tmp6 [V15,T02] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup"
;* V16 tmp7 [V16 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V17 tmp8 [V17,T17] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
+; V17 tmp8 [V17,T23] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
;* V18 tmp9 [V18 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V19 tmp10 [V19,T03] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup"
+; V19 tmp10 [V19,T03] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup"
;* V20 tmp11 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V21 tmp12 [V21,T00] ( 3, 48 ) ref -> x0 "argument with side effect" -; V22 PSPSym [V22,T33] ( 1, 1 ) long -> [fp+0x38] do-not-enreg[V] "PSPSym" -; V23 cse0 [V23,T08] ( 4, 17 ) long -> x24 hoist multi-def "CSE - aggressive" -; V24 cse1 [V24,T13] ( 2, 8.50) long -> x22 hoist "CSE - aggressive" -; V25 cse2 [V25,T14] ( 2, 8.50) long -> x22 hoist "CSE - aggressive" -; V26 cse3 [V26,T04] ( 12, 26 ) long -> x23 multi-def "CSE - aggressive" -; V27 rat0 [V27,T18] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" -; V28 rat1 [V28,T29] ( 3, 2 ) long -> x24 "runtime lookup" -; V29 rat2 [V29,T21] ( 3, 2.80) long -> x0 "spilling expr" -; V30 rat3 [V30,T25] ( 3, 2.24) long -> x24 "fgMakeTemp is creating a new local variable" -; V31 rat4 [V31,T30] ( 3, 2 ) long -> x22 "runtime lookup" -; V32 rat5 [V32,T22] ( 3, 2.80) long -> x0 "spilling expr" -; V33 rat6 [V33,T26] ( 3, 2.24) long -> x22 "fgMakeTemp is creating a new local variable" -; V34 rat7 [V34,T19] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" -; V35 rat8 [V35,T31] ( 3, 2 ) long -> x24 "runtime lookup" -; V36 rat9 [V36,T23] ( 3, 2.80) long -> x0 "spilling expr" -; V37 rat10 [V37,T27] ( 3, 2.24) long -> x24 "fgMakeTemp is creating a new local variable" -; V38 rat11 [V38,T32] ( 3, 2 ) long -> x22 "runtime lookup" -; V39 rat12 [V39,T24] ( 3, 2.80) long -> x0 "spilling expr" -; V40 rat13 [V40,T28] ( 3, 2.24) long -> x22 "fgMakeTemp is creating a new local variable"
+; V21 tmp12 [V21,T04] ( 3, 48 ) ref -> x0 "argument with side effect" +; V22 PSPSym [V22,T27] ( 1, 1 ) long -> [fp+0x30] do-not-enreg[V] "PSPSym" +; V23 cse0 [V23,T14] ( 12, 26 ) long -> x23 multi-def "CSE - aggressive" +; V24 rat0 [V24,T24] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" +; V25 rat1 [V25,T05] ( 3, 44.80) long -> x0 "spilling expr" +; V26 rat2 [V26,T09] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable" +; V27 rat3 [V27,T13] ( 3, 32 ) long -> x0 "runtime lookup" +; V28 rat4 [V28,T06] ( 3, 44.80) long -> x0 "spilling expr" +; V29 rat5 [V29,T10] ( 3, 35.84) long -> x0 "fgMakeTemp is creating a new local variable" +; V30 rat6 [V30,T25] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" +; V31 rat7 [V31,T07] ( 3, 44.80) long -> x0 "spilling expr" +; V32 rat8 [V32,T11] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable" +; V33 rat9 [V33,T08] ( 3, 44.80) long -> x0 "spilling expr" +; V34 rat10 [V34,T12] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 48
+; Lcl frame size = 40
G_M26627_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x70]! - stp x19, x20, [sp, #0x40] - stp x21, x22, [sp, #0x50] - stp x23, x24, [sp, #0x60]
+ stp fp, lr, [sp, #-0x60]! + stp x19, x20, [sp, #0x38] + stp x21, x22, [sp, #0x48] + str x23, [sp, #0x58]
mov fp, sp
- add x4, sp, #112 - stp x0, x4, [fp, #0x30] // [V22 PSPSym] - mov x21, x0
+ add x4, sp, #96 + stp x0, x4, [fp, #0x28] // [V22 PSPSym] + mov x19, x0
mov x22, x1 ; gcrRegs +[x22]
- mov x19, x2 - ; gcrRegs +[x19] - mov x20, x3
+ mov x20, x2
; gcrRegs +[x20]
+ mov x21, x3 + ; gcrRegs +[x21]
;; size=44 bbWeight=1 PerfScore 8.00
-G_M26627_IG02: ; bbWeight=1, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+G_M26627_IG02: ; bbWeight=1, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref, isz
cbz x22, G_M26627_IG44
- cbnz x20, G_M26627_IG21 - ldr x0, [x21, #0x38]
+ cbnz x21, G_M26627_IG21 + ldr x0, [x19, #0x38]
ldr x11, [x0, #0x10] cbz x11, G_M26627_IG04 ;; size=20 bbWeight=1 PerfScore 9.00
-G_M26627_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x20]
+G_M26627_IG03: ; bbWeight=0.80, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + ; gcrRegs -[x21]
b G_M26627_IG05 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M26627_IG04: ; bbWeight=0.20, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x21
+G_M26627_IG04: ; bbWeight=0.20, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.20 PerfScore 0.70
-G_M26627_IG05: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M26627_IG05: ; bbWeight=1, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref
mov x0, x22 ; gcrRegs +[x0] ldr x1, [x11] blr x1 ; gcrRegs -[x22] ; gcr arg pop 0
- str x0, [fp, #0x20] // [V04 loc0]
+ str x0, [fp, #0x18] // [V04 loc0]
; GC ptr vars +{V04} ;; size=16 bbWeight=1 PerfScore 5.50
-G_M26627_IG06: ; bbWeight=1, gcVars=0000000000000020 {V04}, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M26627_IG06: ; bbWeight=1, gcVars=0000000000008000 {V04}, gcrefRegs=100001 {x0 x20}, byrefRegs=0000 {}, gcvars, byref, isz
movz x23, #0xD1FFAB1E movk x23, #0xD1FFAB1E LSL #16 movk x23, #0xD1FFAB1E LSL #32 @@ -108,61 +102,58 @@ G_M26627_IG06: ; bbWeight=1, gcVars=0000000000000020 {V04}, gcrefRegs=800 ; gcr arg pop 0 cbz w0, G_M26627_IG18 ;; size=28 bbWeight=1 PerfScore 7.00
-G_M26627_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x21, #0x38]
+G_M26627_IG07: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38]
ldr x1, [x0, #0x08] cmp x1, #24 ble G_M26627_IG10
- ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M26627_IG08: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x24, [x0, #0x18] - cbz x24, G_M26627_IG10 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M26627_IG09: ; bbWeight=0.32, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=8 PerfScore 60.00 +G_M26627_IG08: ; bbWeight=6.40, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x11, [x0, #0x18] + cbz x11, G_M26627_IG10 + ;; size=8 bbWeight=6.40 PerfScore 25.60 +G_M26627_IG09: ; bbWeight=5.12, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
b G_M26627_IG11
- ;; size=4 bbWeight=0.32 PerfScore 0.32 -G_M26627_IG10: ; bbWeight=0.18, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x21
+ ;; size=4 bbWeight=5.12 PerfScore 5.12 +G_M26627_IG10: ; bbWeight=2.88, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov x24, x0 - ;; size=24 bbWeight=0.18 PerfScore 0.63 -G_M26627_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x21, #0x38] - ldr x1, [x0, #0x08] - cmp x1, #40 - ble G_M26627_IG14 - ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M26627_IG12: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x22, [x0, #0x28] - cbz x22, G_M26627_IG14 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M26627_IG13: ; bbWeight=0.32, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - b G_M26627_IG15 - ;; size=4 bbWeight=0.32 PerfScore 0.32 -G_M26627_IG14: ; bbWeight=0.18, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x21 - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ; gcr arg pop 0 - mov x22, x0 - ;; size=24 bbWeight=0.18 PerfScore 0.63 -G_M26627_IG15: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - mov x11, x24 - ldr x0, [fp, #0x20] // [V04 loc0]
+ mov x11, x0 + ;; size=24 bbWeight=2.88 PerfScore 10.08 +G_M26627_IG11: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [fp, #0x18] // [V04 loc0]
; gcrRegs +[x0] ldr x1, [x11] blr x1 ; gcr arg pop 0
- mov x21, x0 - ; gcrRegs +[x21] - mov x0, x22
+ mov x22, x0 + ; gcrRegs +[x22] + ldr x0, [x19, #0x38]
; gcrRegs -[x0]
+ ldr x1, [x0, #0x08] + cmp x1, #40 + ble G_M26627_IG14 + ;; size=32 bbWeight=8 PerfScore 112.00 +G_M26627_IG12: ; bbWeight=6.40, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x28] + cbz x0, G_M26627_IG14 + ;; size=8 bbWeight=6.40 PerfScore 25.60 +G_M26627_IG13: ; bbWeight=5.12, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + b G_M26627_IG15 + ;; size=4 bbWeight=5.12 PerfScore 5.12 +G_M26627_IG14: ; bbWeight=2.88, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=20 bbWeight=2.88 PerfScore 8.64 +G_M26627_IG15: ; bbWeight=8, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref, isz
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -170,37 +161,37 @@ G_M26627_IG15: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ...

+40 (+21.28%) : 2662.dasm - Microsoft.FSharp.Collections.PrivateListHelpers:appendToFreshConsTailSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon

@@ -7,62 +7,78 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T09] ( 5, 7.80) long -> x20 single-def -; V01 arg0 [V01,T06] ( 5, 11 ) ref -> x19 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V00 TypeCtx [V00,T08] ( 7, 12.60) long -> x19 single-def +; V01 arg0 [V01,T09] ( 5, 11 ) ref -> x20 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
; V02 arg1 [V02,T02] ( 5, 18 ) ref -> x2 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 -> x21 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V05 loc2 [V05,T11] ( 2, 8 ) ref -> x22 class-hnd <System.__Canon> -; V06 loc3 [V06,T07] ( 3, 12 ) ref -> x0 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V04 loc1 [V04,T11] ( 2, 8 ) ref -> x21 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V05 loc2 [V05,T12] ( 2, 8 ) ref -> x22 class-hnd <System.__Canon> +; V06 loc3 [V06,T10] ( 3, 12 ) ref -> x0 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 ) long -> zero-ref "spilling helperCall"
+; V08 tmp1 [V08,T04] ( 3, 16 ) long -> x23 "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V10 tmp3 [V10,T00] ( 3, 24 ) long -> x23 "argument with side effect" -; V11 tmp4 [V11,T05] ( 2, 16 ) ref -> x2 "argument with side effect" -; V12 cse0 [V12,T08] ( 2, 8 ) long -> x23 "CSE - aggressive" -; V13 cse1 [V13,T03] ( 3, 20 ) ref -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 16 ) long -> x23 "runtime lookup" -; V15 rat1 [V15,T01] ( 3, 22.40) long -> x23 "fgMakeTemp is creating a new local variable"
+; V10 tmp3 [V10,T07] ( 2, 16 ) long -> x24 "argument with side effect" +; V11 tmp4 [V11,T06] ( 2, 16 ) ref -> x2 "argument with side effect" +; V12 cse0 [V12,T03] ( 3, 20 ) ref -> x21 "CSE - aggressive" +; V13 rat0 [V13,T00] ( 3, 22.40) long -> x23 "fgMakeTemp is creating a new local variable" +; V14 rat1 [V14,T05] ( 3, 16 ) long -> x24 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 22.40) long -> x24 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M63806_IG01: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]! - stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp fp, lr, [sp, #-0x50]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30] + stp x23, x24, [sp, #0x40]
mov fp, sp
- str x0, [fp, #0x10] - mov x20, x0 - mov x19, x1 - ; gcrRegs +[x19]
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20]
;; size=32 bbWeight=8 PerfScore 52.00
-G_M63806_IG02: ; bbWeight=8, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG02: ; bbWeight=8, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[x2] ldr x21, [x2, #0x10] ; gcrRegs +[x21]
- cbz x21, G_M63806_IG07
+ cbz x21, G_M63806_IG10
;; size=8 bbWeight=8 PerfScore 32.00
-G_M63806_IG03: ; bbWeight=4, gcrefRegs=280004 {x2 x19 x21}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG03: ; bbWeight=4, gcrefRegs=300004 {x2 x20 x21}, byrefRegs=0000 {}, byref, isz
ldr x22, [x2, #0x08] ; gcrRegs +[x22]
- ldr x0, [x20, #0x38]
+ ldr x0, [x19, #0x38]
ldr x23, [x0, #0x10] cbz x23, G_M63806_IG05 ;; size=16 bbWeight=4 PerfScore 40.00
-G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
+G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref
; gcrRegs -[x2] b G_M63806_IG06 ;; size=4 bbWeight=3.20 PerfScore 3.20
-G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref - mov x0, x20
+G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x23, x0 ;; size=24 bbWeight=0.80 PerfScore 2.80
-G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
+G_M63806_IG06: ; bbWeight=4, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x24, [x0, #0x10] + cbz x24, G_M63806_IG08 + ;; size=12 bbWeight=4 PerfScore 28.00 +G_M63806_IG07: ; bbWeight=3.20, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + b G_M63806_IG09 + ;; size=4 bbWeight=3.20 PerfScore 3.20 +G_M63806_IG08: ; bbWeight=0.80, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + mov x24, x0 + ;; size=24 bbWeight=0.80 PerfScore 2.80 +G_M63806_IG09: ; bbWeight=4, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref
mov x0, x23 movz x1, #0xD1FFAB1E // code for Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:get_Empty():Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 @@ -72,7 +88,7 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=00 ; gcrRegs +[x0] mov x2, x0 ; gcrRegs +[x2]
- mov x0, x23
+ mov x0, x24
; gcrRegs -[x0] mov x1, x22 ; gcrRegs +[x1] @@ -82,33 +98,33 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=00 ldr x3, [x3] blr x3 ; gcrRegs -[x1-x2 x22] +[x0]
- add x14, x19, #16
+ add x14, x20, #16
; byrRegs +[x14] mov x15, x0 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15 x19]
+ ; gcrRegs -[x15 x20]
; byrRegs -[x14] mov x2, x21 ; gcrRegs +[x2]
- mov x19, x0 - ; gcrRegs +[x19]
+ mov x20, x0 + ; gcrRegs +[x20]
b G_M63806_IG02 ;; size=80 bbWeight=4 PerfScore 68.00
-G_M63806_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M63806_IG10: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x2 x21]
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 0.50
-G_M63806_IG08: ; bbWeight=1, epilog, nogc, extend - ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x40
+G_M63806_IG11: ; bbWeight=1, epilog, nogc, extend + ldp x23, x24, [sp, #0x40] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x50
ret lr
- ;; size=20 bbWeight=1 PerfScore 6.00
+ ;; size=20 bbWeight=1 PerfScore 5.00
-; Total bytes of code 188, prolog size 24, PerfScore 204.50, instruction count 47, allocated bytes for code 188 (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 228, prolog size 24, PerfScore 237.50, instruction count 57, allocated bytes for code 228 (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,7 +135,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 47 (0x0002f) Actual length = 188 (0x0000bc)
+ Function Length : 57 (0x00039) Actual length = 228 (0x0000e4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -127,9 +143,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 89 save_fplr_x #9 (0x09); stp fp, lr, [sp, #-80]! + E4 end
E4 end

+44 (+32.35%) : 11191.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastVSystem.__Canon:Microsoft.FSharp.Core.FSharpValueOption`1System.__Canon

@@ -8,10 +8,10 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 3.60) long -> x0 single-def
+; V00 TypeCtx [V00,T02] ( 7, 4.20) long -> x0 single-def
; V01 arg0 [V01,T01] ( 5, 14.50) ref -> x1 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 2, 1 ) ref -> x0 class-hnd single-def <System.__Canon>
+; V03 loc1 [V03,T07] ( 2, 1 ) ref -> x19 class-hnd single-def <System.__Canon>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" @@ -19,25 +19,28 @@ ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]> ;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline ldloca(s) first use temp" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
-; V11 tmp6 [V11,T07] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP -; V12 tmp7 [V12,T09] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
+; V11 tmp6 [V11,T08] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP +; V12 tmp7 [V12,T10] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref "field V09.item (fldOffset=0x0)" P-DEP ;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "field V09._tag (fldOffset=0x8)" P-DEP
-; V15 tmp10 [V15,T08] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T10] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T05] ( 3, 1.50) struct (16) [fp+0x18] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
+; V15 tmp10 [V15,T09] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T11] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T06] ( 3, 1.50) struct (16) [fp+0x10] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
; V18 cse0 [V18,T00] ( 4, 24 ) ref -> x2 "CSE - aggressive"
-; V19 rat0 [V19,T04] ( 3, 2 ) long -> x1 "runtime lookup"
+; V19 rat0 [V19,T05] ( 3, 2 ) long -> x1 "runtime lookup"
; V20 rat1 [V20,T03] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V21 rat2 [V21,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V22 rat3 [V22,T04] ( 2, 2 ) long -> x1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 24
-G_M49887_IG01: ; bbWeight=8, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M49887_IG01: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x30]!
+ str x19, [sp, #0x28]
mov fp, sp
- stp xzr, xzr, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - str x0, [fp, #0x28] - ;; size=16 bbWeight=8 PerfScore 28.00
+ stp xzr, xzr, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + str x0, [fp, #0x20] + ;; size=20 bbWeight=8 PerfScore 36.00
G_M49887_IG02: ; bbWeight=8, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x1] ldr x2, [x1, #0x10] @@ -64,7 +67,7 @@ G_M49887_IG06: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x1, x0 ;; size=20 bbWeight=0.10 PerfScore 0.30 @@ -77,38 +80,54 @@ G_M49887_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr blr x1 ; gcrRegs +[x0] ; gcr arg pop 0
- stp x0, x1, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - ldr x0, [fp, #0x18] // [V17 tmp12] - ldr w1, [fp, #0x20] // [V17 tmp12+0x08]
+ stp x0, x1, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + ldr x0, [fp, #0x10] // [V17 tmp12] + ldr w1, [fp, #0x18] // [V17 tmp12+0x08]
;; size=36 bbWeight=0.50 PerfScore 5.50 G_M49887_IG08: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00 -G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=12 bbWeight=0.50 PerfScore 2.00 +G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] +[x1]
- ldr x0, [x1, #0x08] - ; gcrRegs +[x0] - mov w1, #1
+ ldr x19, [x1, #0x08] + ; gcrRegs +[x19] + ldr x1, [x0, #0x38]
; gcrRegs -[x1]
- ;; size=8 bbWeight=0.50 PerfScore 1.75 -G_M49887_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x1, [x1, #0x10] + cbnz x1, G_M49887_IG11 + ;; size=16 bbWeight=0.50 PerfScore 5.00 +G_M49887_IG10: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=16 bbWeight=0.10 PerfScore 0.25 +G_M49887_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov w1, #1 + mov x0, x19 + ; gcrRegs +[x0] + ;; size=8 bbWeight=0.50 PerfScore 0.50 +G_M49887_IG12: ; bbWeight=0.50, epilog, nogc, extend + ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=12 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 136, prolog size 16, PerfScore 95.45, instruction count 34, allocated bytes for code 136 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
+; Total bytes of code 180, prolog size 20, PerfScore 109.45, instruction count 45, allocated bytes for code 180 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1
+ Code Words : 2
Epilog Count : 2 E bit : 0 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 136 (0x000088)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -119,7 +138,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
+ E4 end + E4 end

+48 (+32.43%) : 9655.dasm - Internal.Utilities.Library.ResultOrException:otherwiseSystem.__Canon:Internal.Utilities.Library.ResultOrException`1System.__Canon

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T02] ( 4, 3 ) byref -> x20 single-def -; V01 TypeCtx [V01,T01] ( 5, 3.60) long -> x0 single-def -; V02 arg0 [V02,T03] ( 4, 3 ) ref -> x2 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]]>
+; V00 RetBuf [V00,T03] ( 4, 3 ) byref -> x21 single-def +; V01 TypeCtx [V01,T01] ( 7, 4.80) long -> x20 single-def +; V02 arg0 [V02,T04] ( 4, 3 ) ref -> x22 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]]>
; V03 arg1 [V03,T00] ( 4, 7 ) byref -> x19 ld-addr-op single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V05 loc1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" @@ -19,83 +19,101 @@ ;* V08 tmp4 [V08 ] ( 0, 0 ) ref -> zero-ref "field V03._exception (fldOffset=0x8)" P-INDEP ;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref "field V03._tag (fldOffset=0x10)" P-INDEP ;* V10 tmp6 [V10 ] ( 0, 0 ) struct (24) zero-ref "Promoted implicit byref" <Internal.Utilities.Library.ResultOrException`1[System.__Canon]>
-; V11 tmp7 [V11,T06] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 rat0 [V12,T05] ( 3, 2 ) long -> x0 "runtime lookup" -; V13 rat1 [V13,T04] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable"
+; V11 tmp7 [V11,T07] ( 2, 2 ) long -> x0 "argument with side effect" +;* V12 rat0 [V12,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat1 [V13,T02] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V14 rat2 [V14,T06] ( 3, 2 ) long -> x0 "runtime lookup" +; V15 rat3 [V15,T05] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 G_M63339_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]!
+ stp fp, lr, [sp, #-0x40]!
stp x19, x20, [sp, #0x20]
+ stp x21, x22, [sp, #0x30]
mov fp, sp str x0, [fp, #0x18]
+ mov x20, x0 + mov x22, x1 + ; gcrRegs +[x22]
mov x19, x2 ; byrRegs +[x19]
- mov x20, x8 - ; byrRegs +[x20] - mov x2, x1 - ; gcrRegs +[x2] - ;; size=28 bbWeight=1 PerfScore 5.00 -G_M63339_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=180000 {x19 x20}, byref, isz - ldr w1, [x19, #0x10] - cmp w1, #1 - beq G_M63339_IG08 - ;; size=12 bbWeight=1 PerfScore 4.50 -G_M63339_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref, isz - ; gcrRegs -[x2] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x10] - cbz x2, G_M63339_IG05 - ;; size=12 bbWeight=0.50 PerfScore 3.50 -G_M63339_IG04: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref - mov x0, x2 - b G_M63339_IG06 - ;; size=8 bbWeight=0.40 PerfScore 0.60 -G_M63339_IG05: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref
+ mov x21, x8 + ; byrRegs +[x21] + ;; size=36 bbWeight=1 PerfScore 6.50 +G_M63339_IG02: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref, isz + ldr x0, [x20, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M63339_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M63339_IG03: ; bbWeight=0.20, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref + mov x0, x20
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=16 bbWeight=0.10 PerfScore 0.25 -G_M63339_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref
+ ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M63339_IG04: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref, isz + ldr w0, [x19, #0x10] + cmp w0, #1 + beq G_M63339_IG10 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M63339_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref, isz + ; gcrRegs -[x22] + ldr x0, [x20, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M63339_IG07 + ;; size=12 bbWeight=0.50 PerfScore 3.50 +G_M63339_IG06: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref + b G_M63339_IG08 + ;; size=4 bbWeight=0.40 PerfScore 0.40 +G_M63339_IG07: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref + mov x0, x20 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=20 bbWeight=0.10 PerfScore 0.30 +G_M63339_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref
ldr x1, [x19] ; gcrRegs +[x1]
- mov x8, x20
+ mov x8, x21
; byrRegs +[x8] movz x2, #0xD1FFAB1E // code for Internal.Utilities.Library.ResultOrException`1[System.__Canon]:NewResult(System.__Canon):Internal.Utilities.Library.ResultOrException`1[System.__Canon] movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M63339_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M63339_IG09: ; bbWeight=0.50, epilog, nogc, extend + ldp x21, x22, [sp, #0x30]
ldp x19, x20, [sp, #0x20]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
br x2 ; gcr arg pop 0
- ;; size=12 bbWeight=0.50 PerfScore 1.50 -G_M63339_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0004 {x2}, byrefRegs=100000 {x20}, gcvars, byref - ; gcrRegs -[x1] +[x2]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M63339_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=400000 {x22}, byrefRegs=200000 {x21}, gcvars, byref + ; gcrRegs -[x1] +[x22]
; byrRegs -[x8 x19]
- mov x0, x2
+ mov x0, x22
; gcrRegs +[x0]
- mov x8, x20
+ mov x8, x21
; byrRegs +[x8] mov x1, xzr
- ldr x2, [x2] - ; gcrRegs -[x2]
+ ldr x2, [x22]
ldr x2, [x2, #0x48] ldr x2, [x2, #0x20] ;; size=24 bbWeight=0.50 PerfScore 5.25
-G_M63339_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M63339_IG11: ; bbWeight=0.50, epilog, nogc, extend + ldp x21, x22, [sp, #0x30]
ldp x19, x20, [sp, #0x20]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
br x2 ; gcr arg pop 0
- ;; size=12 bbWeight=0.50 PerfScore 1.50
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 148, prolog size 28, PerfScore 26.10, instruction count 37, allocated bytes for code 148 (MethodHash=10ca0894) for method Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
+; Total bytes of code 196, prolog size 36, PerfScore 36.05, instruction count 49, allocated bytes for code 196 (MethodHash=10ca0894) for method Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -106,7 +124,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 148 (0x000094)
+ Function Length : 49 (0x00031) Actual length = 196 (0x0000c4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -117,9 +135,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ E6 save_next
C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
- 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end
+ 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end E4 end E4 end

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm64.checked.mch 66 16 23 27 -236 +1,052
benchmarks.run_pgo.linux.arm64.checked.mch 154 81 45 28 -2,436 +2,124
benchmarks.run_tiered.linux.arm64.checked.mch 45 8 8 29 -308 +340
coreclr_tests.run.linux.arm64.checked.mch 2 2 0 0 -32 +0
libraries.crossgen2.linux.arm64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm64.checked.mch 172 17 52 103 -292 +5,092
libraries_tests.run.linux.arm64.Release.mch 83 4 45 34 -176 +2,100
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 114 21 45 48 -192 +3,448
realworld.run.linux.arm64.checked.mch 85 11 51 23 -100 +4,412
smoke_tests.nativeaot.linux.arm64.checked.mch 0 0 0 0 -0 +0
721 160 269 292 -3,772 +18,568

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm64.checked.mch 7,223 408 6,815 0 (0.00%) 5,681 (42.71%)
benchmarks.run_pgo.linux.arm64.checked.mch 17,573 14,070 3,503 0 (0.00%) 8,302 (31.60%)
benchmarks.run_tiered.linux.arm64.checked.mch 15,662 13,673 1,989 0 (0.00%) 5,277 (24.73%)
coreclr_tests.run.linux.arm64.checked.mch 1,065 3 1,062 0 (0.00%) 6,303 (81.18%)
libraries.crossgen2.linux.arm64.checked.mch 2,218 0 2,218 0 (0.00%) 1,317 (33.50%)
libraries.pmi.linux.arm64.checked.mch 16,371 0 16,371 0 (0.00%) 7,122 (29.81%)
libraries_tests.run.linux.arm64.Release.mch 12,002 10,478 1,524 1 (0.01%) 6,955 (35.94%)
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 6,243 0 6,243 1 (0.01%) 4,840 (42.16%)
realworld.run.linux.arm64.checked.mch 10,852 133 10,719 1 (0.01%) 6,361 (36.12%)
smoke_tests.nativeaot.linux.arm64.checked.mch 8,347 4 8,343 0 (0.00%) 5,371 (38.05%)
97,556 38,769 58,787 3 (0.00%) 57,529 (36.17%)

jit-analyze output

benchmarks.run.linux.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1357636 (overridden on cmd)
Total bytes of diff: 1358452 (overridden on cmd)
Total bytes of delta: 816 (0.06 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         208 : 3102.dasm (19.62 % of base)
         144 : 9291.dasm (45.00 % of base)
          92 : 10760.dasm (13.37 % of base)
          56 : 1807.dasm (36.84 % of base)
          44 : 1172.dasm (9.02 % of base)
          44 : 4824.dasm (14.29 % of base)
          44 : 5343.dasm (7.48 % of base)
          44 : 9377.dasm (9.57 % of base)
          40 : 1646.dasm (15.38 % of base)
          40 : 2966.dasm (8.47 % of base)
          40 : 5465.dasm (8.47 % of base)
          40 : 4348.dasm (20.83 % of base)
          40 : 5575.dasm (11.11 % of base)
          40 : 9612.dasm (4.18 % of base)
          32 : 8249.dasm (7.69 % of base)
          32 : 13564.dasm (12.70 % of base)
          28 : 12159.dasm (4.55 % of base)
          24 : 810.dasm (5.45 % of base)
           4 : 11624.dasm (4.55 % of base)
           4 : 11713.dasm (5.56 % of base)

Top file improvements (bytes):
         -48 : 9497.dasm (-10.53 % of base)
         -28 : 3628.dasm (-10.61 % of base)
         -24 : 12857.dasm (-2.02 % of base)
         -24 : 4588.dasm (-3.51 % of base)
         -24 : 96.dasm (-4.51 % of base)
         -20 : 401.dasm (-3.70 % of base)
         -20 : 8550.dasm (-5.49 % of base)
         -12 : 13309.dasm (-2.75 % of base)
          -8 : 3010.dasm (-1.59 % of base)
          -4 : 1005.dasm (-0.89 % of base)
          -4 : 12953.dasm (-2.78 % of base)
          -4 : 10872.dasm (-1.23 % of base)
          -4 : 13652.dasm (-2.78 % of base)
          -4 : 5362.dasm (-0.58 % of base)
          -4 : 8980.dasm (-0.29 % of base)
          -4 : 1002.dasm (-0.82 % of base)

38 total files with Code Size differences (16 improved, 22 regressed), 20 unchanged.

Top method regressions (bytes):
         208 (19.62 % of base) : 3102.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)
         144 (45.00 % of base) : 9291.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          92 (13.37 % of base) : 10760.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)
          56 (36.84 % of base) : 1807.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          44 (9.57 % of base) : 9377.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)
          44 (9.02 % of base) : 1172.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
          44 (7.48 % of base) : 5343.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          44 (14.29 % of base) : 4824.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
          40 (15.38 % of base) : 1646.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          40 (11.11 % of base) : 5575.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          40 (20.83 % of base) : 4348.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
          40 (8.47 % of base) : 2966.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
          40 (8.47 % of base) : 5465.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
          40 (4.18 % of base) : 9612.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          32 (7.69 % of base) : 8249.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
          32 (12.70 % of base) : 13564.dasm - System.Collections.Immutable.ImmutableQueue:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
          28 (4.55 % of base) : 12159.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
          24 (5.45 % of base) : 810.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)
           4 (2.70 % of base) : 3241.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
           4 (4.55 % of base) : 3522.dasm - System.Convert:ToBoolean(System.Object,System.IFormatProvider):ubyte (FullOpts)

Top method improvements (bytes):
         -48 (-10.53 % of base) : 9497.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-10.61 % of base) : 3628.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -24 (-3.51 % of base) : 4588.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
         -24 (-4.51 % of base) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -24 (-2.02 % of base) : 12857.dasm - System.Xml.Serialization.XmlReflectionImporter:CreateArrayElementsFromAttributes(System.Xml.Serialization.ArrayMapping,System.Xml.Serialization.XmlArrayItemAttributes,System.Type,System.String,System.Xml.Serialization.RecursionLimiter):this (FullOpts)
         -20 (-5.49 % of base) : 8550.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -20 (-3.70 % of base) : 401.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -12 (-2.75 % of base) : 13309.dasm - System.Linq.Enumerable:<AggregateByIterator>g__PopulateDictionary|75_0[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerator`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -8 (-1.59 % of base) : 3010.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
          -4 (-1.23 % of base) : 10872.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
          -4 (-2.78 % of base) : 12953.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          -4 (-2.78 % of base) : 13652.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
          -4 (-0.89 % of base) : 1005.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.29 % of base) : 8980.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)
          -4 (-0.82 % of base) : 1002.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.58 % of base) : 5362.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)

Top method regressions (percentages):
         144 (45.00 % of base) : 9291.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          56 (36.84 % of base) : 1807.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          40 (20.83 % of base) : 4348.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
         208 (19.62 % of base) : 3102.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)
          40 (15.38 % of base) : 1646.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          44 (14.29 % of base) : 4824.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
          92 (13.37 % of base) : 10760.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 (12.70 % of base) : 13564.dasm - System.Collections.Immutable.ImmutableQueue:Create[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
          40 (11.11 % of base) : 5575.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          44 (9.57 % of base) : 9377.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)
          44 (9.02 % of base) : 1172.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
          40 (8.47 % of base) : 2966.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (FullOpts)
          40 (8.47 % of base) : 5465.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
          32 (7.69 % of base) : 8249.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
          44 (7.48 % of base) : 5343.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
           4 (5.56 % of base) : 11713.dasm - System.Convert:ToInt32(System.Object):int (FullOpts)
          24 (5.45 % of base) : 810.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)
          28 (4.55 % of base) : 12159.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
           4 (4.55 % of base) : 3522.dasm - System.Convert:ToBoolean(System.Object,System.IFormatProvider):ubyte (FullOpts)
           4 (4.55 % of base) : 11624.dasm - System.Convert:ToInt32(System.Object,System.IFormatProvider):int (FullOpts)

Top method improvements (percentages):
         -28 (-10.61 % of base) : 3628.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -48 (-10.53 % of base) : 9497.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -20 (-5.49 % of base) : 8550.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -24 (-4.51 % of base) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 401.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -24 (-3.51 % of base) : 4588.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
          -4 (-2.78 % of base) : 12953.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          -4 (-2.78 % of base) : 13652.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
         -12 (-2.75 % of base) : 13309.dasm - System.Linq.Enumerable:<AggregateByIterator>g__PopulateDictionary|75_0[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerator`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
         -24 (-2.02 % of base) : 12857.dasm - System.Xml.Serialization.XmlReflectionImporter:CreateArrayElementsFromAttributes(System.Xml.Serialization.ArrayMapping,System.Xml.Serialization.XmlArrayItemAttributes,System.Type,System.String,System.Xml.Serialization.RecursionLimiter):this (FullOpts)
          -8 (-1.59 % of base) : 3010.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:ArrayOfUniqueValues[System.__Canon](int):System.__Canon[] (FullOpts)
          -4 (-1.23 % of base) : 10872.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
          -4 (-0.89 % of base) : 1005.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 1002.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.58 % of base) : 5362.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 (-0.29 % of base) : 8980.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)


benchmarks.run_pgo.linux.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2918668 (overridden on cmd)
Total bytes of diff: 2918356 (overridden on cmd)
Total bytes of delta: -312 (-0.01 % of base)
    diff is an improvement.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          52 : 13716.dasm (27.08 % of base)
          48 : 11020.dasm (36.36 % of base)
          48 : 11204.dasm (36.36 % of base)
          48 : 14531.dasm (36.36 % of base)
          48 : 14739.dasm (36.36 % of base)
          48 : 18924.dasm (36.36 % of base)
          48 : 19480.dasm (36.36 % of base)
          48 : 23419.dasm (36.36 % of base)
          48 : 23500.dasm (36.36 % of base)
          48 : 25183.dasm (36.36 % of base)
          48 : 26012.dasm (36.36 % of base)
          48 : 9936.dasm (36.36 % of base)
          48 : 14116.dasm (36.36 % of base)
          48 : 19304.dasm (36.36 % of base)
          48 : 21956.dasm (36.36 % of base)
          48 : 22795.dasm (36.36 % of base)
          48 : 23355.dasm (36.36 % of base)
          48 : 24852.dasm (36.36 % of base)
          48 : 8180.dasm (36.36 % of base)
          48 : 8884.dasm (36.36 % of base)

Top file improvements (bytes):
        -140 : 21260.dasm (-8.88 % of base)
        -124 : 5747.dasm (-14.16 % of base)
         -96 : 13872.dasm (-6.56 % of base)
         -28 : 13569.dasm (-5.15 % of base)
         -28 : 28450.dasm (-5.15 % of base)
         -28 : 8913.dasm (-3.30 % of base)
         -28 : 9785.dasm (-5.15 % of base)
         -28 : 12397.dasm (-3.30 % of base)
         -28 : 14218.dasm (-3.30 % of base)
         -28 : 15583.dasm (-5.15 % of base)
         -28 : 19565.dasm (-5.15 % of base)
         -28 : 22251.dasm (-5.15 % of base)
         -28 : 25114.dasm (-3.30 % of base)
         -28 : 25131.dasm (-5.15 % of base)
         -28 : 25274.dasm (-3.30 % of base)
         -28 : 26843.dasm (-5.15 % of base)
         -28 : 5842.dasm (-3.30 % of base)
         -28 : 6252.dasm (-5.15 % of base)
         -28 : 10560.dasm (-5.15 % of base)
         -28 : 13673.dasm (-3.30 % of base)

53 total files with Code Size differences (32 improved, 21 regressed), 20 unchanged.

Top method regressions (bytes):
          52 (27.08 % of base) : 13716.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          48 (36.36 % of base) : 11020.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 11204.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14531.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14739.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 18924.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19480.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23419.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23500.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 25183.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 26012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 9936.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14116.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19304.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 21956.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 22795.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23355.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 24852.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 8180.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 8884.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (bytes):
        -140 (-8.88 % of base) : 21260.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
        -124 (-14.16 % of base) : 5747.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
         -96 (-6.56 % of base) : 13872.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -28 (-5.15 % of base) : 13569.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 28450.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 8913.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 9785.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 12397.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 14218.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 15583.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 19565.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 22251.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 25114.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 25131.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 25274.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 26843.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 5842.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 6252.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 10560.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 13673.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          48 (36.36 % of base) : 11020.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 11204.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14531.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14739.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 18924.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19480.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23419.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23500.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 25183.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 26012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 9936.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14116.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19304.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 21956.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 22795.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23355.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 24852.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 8180.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 8884.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 9736.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (percentages):
        -124 (-14.16 % of base) : 5747.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
        -140 (-8.88 % of base) : 21260.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -96 (-6.56 % of base) : 13872.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -20 (-5.49 % of base) : 19715.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -28 (-5.15 % of base) : 13569.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 28450.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 9785.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 15583.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 19565.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 22251.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 25131.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 26843.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 6252.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 10560.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 14284.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 18280.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 18686.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 11320.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 13451.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 27059.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)


benchmarks.run_tiered.linux.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2370440 (overridden on cmd)
Total bytes of diff: 2370472 (overridden on cmd)
Total bytes of delta: 32 (0.00 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          56 : 16236.dasm (36.84 % of base)
          52 : 14826.dasm (11.02 % of base)
          52 : 18315.dasm (27.08 % of base)
          52 : 20445.dasm (14.44 % of base)
          48 : 1425.dasm (36.36 % of base)
          40 : 15129.dasm (15.38 % of base)
          24 : 5395.dasm (5.45 % of base)
          16 : 13538.dasm (10.53 % of base)

Top file improvements (bytes):
        -140 : 11910.dasm (-8.88 % of base)
         -96 : 14123.dasm (-6.56 % of base)
         -24 : 1465.dasm (-4.38 % of base)
         -20 : 4647.dasm (-3.70 % of base)
         -16 : 14909.dasm (-3.36 % of base)
          -4 : 13169.dasm (-0.89 % of base)
          -4 : 13944.dasm (-0.82 % of base)
          -4 : 16276.dasm (-1.15 % of base)

16 total files with Code Size differences (8 improved, 8 regressed), 29 unchanged.

Top method regressions (bytes):
          56 (36.84 % of base) : 16236.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          52 (14.44 % of base) : 20445.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
          52 (27.08 % of base) : 18315.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          52 (11.02 % of base) : 14826.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier1)
          48 (36.36 % of base) : 1425.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          40 (15.38 % of base) : 15129.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          24 (5.45 % of base) : 5395.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)
          16 (10.53 % of base) : 13538.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)

Top method improvements (bytes):
        -140 (-8.88 % of base) : 11910.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -96 (-6.56 % of base) : 14123.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -24 (-4.38 % of base) : 1465.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.70 % of base) : 4647.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -16 (-3.36 % of base) : 14909.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)
          -4 (-0.89 % of base) : 13169.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1)
          -4 (-1.15 % of base) : 16276.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1-OSR)
          -4 (-0.82 % of base) : 13944.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier1)

Top method regressions (percentages):
          56 (36.84 % of base) : 16236.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          48 (36.36 % of base) : 1425.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          52 (27.08 % of base) : 18315.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          40 (15.38 % of base) : 15129.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          52 (14.44 % of base) : 20445.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
          52 (11.02 % of base) : 14826.dasm - System.Array:Sort[uint,System.__Canon](uint[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[uint]) (Tier1)
          16 (10.53 % of base) : 13538.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)
          24 (5.45 % of base) : 5395.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)

Top method improvements (percentages):
        -140 (-8.88 % of base) : 11910.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -96 (-6.56 % of base) : 14123.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -24 (-4.38 % of base) : 1465.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.70 % of base) : 4647.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -16 (-3.36 % of base) : 14909.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)
          -4 (-1.15 % of base) : 16276.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1-OSR)
          -4 (-0.89 % of base) : 13169.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1)
          -4 (-0.82 % of base) : 13944.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier1)

16 total methods with Code Size differences (8 improved, 8 regressed).


coreclr_tests.run.linux.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 228808 (overridden on cmd)
Total bytes of diff: 228776 (overridden on cmd)
Total bytes of delta: -32 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -28 : 12.dasm (-10.61 % of base)
          -4 : 321.dasm (-0.82 % of base)

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

Top method improvements (bytes):
         -28 (-10.61 % of base) : 12.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
          -4 (-0.82 % of base) : 321.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)

Top method improvements (percentages):
         -28 (-10.61 % of base) : 12.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
          -4 (-0.82 % of base) : 321.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)

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


libraries.pmi.linux.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1378968 (overridden on cmd)
Total bytes of diff: 1383768 (overridden on cmd)
Total bytes of delta: 4800 (0.35 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
        1364 : 5577.dasm (149.56 % of base)
         196 : 14793.dasm (48.04 % of base)
         172 : 14791.dasm (48.31 % of base)
         132 : 14789.dasm (42.31 % of base)
         108 : 14787.dasm (41.54 % of base)
          92 : 13129.dasm (60.53 % of base)
          92 : 13138.dasm (60.53 % of base)
          92 : 12825.dasm (16.08 % of base)
          92 : 13130.dasm (60.53 % of base)
          92 : 13139.dasm (60.53 % of base)
          92 : 23826.dasm (14.02 % of base)
          84 : 12317.dasm (12.80 % of base)
          84 : 12479.dasm (32.81 % of base)
          84 : 16287.dasm (4.36 % of base)
          84 : 23824.dasm (16.94 % of base)
          80 : 13126.dasm (48.78 % of base)
          80 : 13128.dasm (48.78 % of base)
          80 : 13137.dasm (48.78 % of base)
          80 : 14783.dasm (13.70 % of base)
          80 : 13127.dasm (48.78 % of base)

Top file improvements (bytes):
         -44 : 3727.dasm (-23.91 % of base)
         -44 : 3731.dasm (-17.74 % of base)
         -40 : 1072.dasm (-16.95 % of base)
         -28 : 18.dasm (-10.61 % of base)
         -24 : 12770.dasm (-4.58 % of base)
         -24 : 12860.dasm (-26.09 % of base)
         -24 : 14688.dasm (-4.11 % of base)
         -24 : 12795.dasm (-4.84 % of base)
          -8 : 12840.dasm (-1.16 % of base)
          -4 : 12802.dasm (-1.19 % of base)
          -4 : 12996.dasm (-0.97 % of base)
          -4 : 13712.dasm (-0.70 % of base)
          -4 : 14193.dasm (-1.30 % of base)
          -4 : 12992.dasm (-0.97 % of base)
          -4 : 12772.dasm (-0.63 % of base)
          -4 : 12885.dasm (-0.96 % of base)
          -4 : 12985.dasm (-0.99 % of base)

52 total files with Code Size differences (17 improved, 35 regressed), 23 unchanged.

Top method regressions (bytes):
        1364 (149.56 % of base) : 5577.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
         196 (48.04 % of base) : 14793.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:Concat[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
         172 (48.31 % of base) : 14791.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:Concat[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
         132 (42.31 % of base) : 14789.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:Concat[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
         108 (41.54 % of base) : 14787.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:Concat[System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
          92 (14.02 % of base) : 23826.dasm - Microsoft.CodeAnalysis.Emit.DeltaMetadataWriter:AddRange[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IReadOnlyDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IReadOnlyDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.IReadOnlyDictionary`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
          92 (16.08 % of base) : 12825.dasm - Roslyn.Utilities.EnumerableExtensions:IsSorted[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):ubyte (FullOpts)
          92 (60.53 % of base) : 13129.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[double](System.Func`3[System.__Canon,double,ubyte],double):ubyte:this (FullOpts)
          92 (60.53 % of base) : 13130.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[System.Numerics.Vector`1[float]](System.Func`3[System.__Canon,System.Numerics.Vector`1[float],ubyte],System.Numerics.Vector`1[float]):ubyte:this (FullOpts)
          92 (60.53 % of base) : 13138.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[double](System.Func`3[System.__Canon,double,ubyte],double):ubyte:this (FullOpts)
          92 (60.53 % of base) : 13139.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[System.Numerics.Vector`1[float]](System.Func`3[System.__Canon,System.Numerics.Vector`1[float],ubyte],System.Numerics.Vector`1[float]):ubyte:this (FullOpts)
          84 (4.36 % of base) : 16287.dasm - Microsoft.CodeAnalysis.AssemblyIdentityUtils:TryGetAssemblyIdentity(System.String):Microsoft.CodeAnalysis.AssemblyIdentity (FullOpts)
          84 (16.94 % of base) : 23824.dasm - Microsoft.CodeAnalysis.Emit.DeltaMetadataWriter:CreateDictionary[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IReadOnlyDictionary`2[System.__Canon,System.Nullable`1[int]],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
          84 (32.81 % of base) : 12479.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
          84 (12.80 % of base) : 12317.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`3[System.__Canon,System.__Canon,ubyte]):ubyte (FullOpts)
          80 (13.70 % of base) : 14783.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:Flatten[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.Dictionary`2[System.__Canon,System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]]],System.Collections.Generic.IComparer`1[System.Nullable`1[int]]):System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]] (FullOpts)
          80 (48.78 % of base) : 13128.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[int](System.Func`3[System.__Canon,int,ubyte],int):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13131.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[long](System.Func`3[System.__Canon,long,ubyte],long):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13127.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[short](System.Func`3[System.__Canon,short,ubyte],short):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13125.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[System.__Canon](System.Func`3[System.__Canon,System.__Canon,ubyte],System.__Canon):ubyte:this (FullOpts)

Top method improvements (bytes):
         -44 (-23.91 % of base) : 3727.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -44 (-17.74 % of base) : 3731.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -40 (-16.95 % of base) : 1072.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -28 (-10.61 % of base) : 18.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -24 (-4.11 % of base) : 14688.dasm - Microsoft.CodeAnalysis.DictionaryExtensions:ToImmutableSegmentedDictionaryAndFree[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IReadOnlyDictionary`2[System.__Canon,System.__Canon]):Microsoft.CodeAnalysis.Collections.ImmutableSegmentedDictionary`2[System.__Canon,System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]]] (FullOpts)
         -24 (-4.84 % of base) : 12795.dasm - Roslyn.Utilities.EnumerableExtensions:EnumeratingIndexOf[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int (FullOpts)
         -24 (-4.58 % of base) : 12770.dasm - Roslyn.Utilities.EnumerableExtensions:SelectManyAsArray[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]] (FullOpts)
         -24 (-26.09 % of base) : 12860.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
          -8 (-1.16 % of base) : 12840.dasm - Roslyn.Utilities.EnumerableExtensions:ToMultiDictionary[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]],System.Func`2[System.Nullable`1[int],System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]]] (FullOpts)
          -4 (-1.30 % of base) : 14193.dasm - Microsoft.Cci.ReferenceIndexer:VisitMethodBodyReference(Microsoft.Cci.IReference):this (FullOpts)
          -4 (-0.70 % of base) : 13712.dasm - Microsoft.Cci.SymWriterMetadataProvider:TryGetTypeDefinitionInfo(int,byref,byref,byref):ubyte:this (FullOpts)
          -4 (-1.19 % of base) : 12802.dasm - Roslyn.Utilities.EnumerableExtensions:IndexOf[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int (FullOpts)
          -4 (-0.63 % of base) : 12772.dasm - Roslyn.Utilities.EnumerableExtensions:SelectManyAsArray[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IReadOnlyCollection`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]] (FullOpts)
          -4 (-0.96 % of base) : 12885.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.99 % of base) : 12985.dasm - Roslyn.Utilities.IReadOnlyListExtensions:Contains[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.97 % of base) : 12992.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.97 % of base) : 12996.dasm - Roslyn.Utilities.ISetExtensions:RemoveAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)

Top method regressions (percentages):
        1364 (149.56 % of base) : 5577.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
          64 (61.54 % of base) : 17396.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.__Canon] (FullOpts)
          64 (61.54 % of base) : 17398.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
          92 (60.53 % of base) : 13129.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[double](System.Func`3[System.__Canon,double,ubyte],double):ubyte:this (FullOpts)
          92 (60.53 % of base) : 13130.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[System.Numerics.Vector`1[float]](System.Func`3[System.__Canon,System.Numerics.Vector`1[float],ubyte],System.Numerics.Vector`1[float]):ubyte:this (FullOpts)
          92 (60.53 % of base) : 13138.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[double](System.Func`3[System.__Canon,double,ubyte],double):ubyte:this (FullOpts)
          92 (60.53 % of base) : 13139.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[System.Numerics.Vector`1[float]](System.Func`3[System.__Canon,System.Numerics.Vector`1[float],ubyte],System.Numerics.Vector`1[float]):ubyte:this (FullOpts)
          68 (54.84 % of base) : 12977.dasm - Roslyn.Utilities.InterlockedOperations:Initialize[System.__Canon](byref,System.Collections.Immutable.ImmutableArray`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
          60 (53.57 % of base) : 25268.dasm - Microsoft.CodeAnalysis.Collections.RoslynImmutableInterlocked:InterlockedInitialize[System.__Canon,System.Nullable`1[int]](byref,Microsoft.CodeAnalysis.Collections.ImmutableSegmentedDictionary`2[System.__Canon,System.Nullable`1[int]]):ubyte (FullOpts)
          60 (53.57 % of base) : 25260.dasm - Microsoft.CodeAnalysis.Collections.RoslynImmutableInterlocked:InterlockedInitialize[System.__Canon](byref,Microsoft.CodeAnalysis.Collections.ImmutableSegmentedHashSet`1[System.__Canon]):ubyte (FullOpts)
          80 (48.78 % of base) : 13128.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[int](System.Func`3[System.__Canon,int,ubyte],int):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13131.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[long](System.Func`3[System.__Canon,long,ubyte],long):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13127.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[short](System.Func`3[System.__Canon,short,ubyte],short):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13125.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[System.__Canon](System.Func`3[System.__Canon,System.__Canon,ubyte],System.__Canon):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13126.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:All[ubyte](System.Func`3[System.__Canon,ubyte,ubyte],ubyte):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13137.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[int](System.Func`3[System.__Canon,int,ubyte],int):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13140.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[long](System.Func`3[System.__Canon,long,ubyte],long):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13136.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[short](System.Func`3[System.__Canon,short,ubyte],short):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13134.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[System.__Canon](System.Func`3[System.__Canon,System.__Canon,ubyte],System.__Canon):ubyte:this (FullOpts)
          80 (48.78 % of base) : 13135.dasm - Roslyn.Utilities.OneOrMany`1[System.__Canon]:Any[ubyte](System.Func`3[System.__Canon,ubyte,ubyte],ubyte):ubyte:this (FullOpts)

Top method improvements (percentages):
         -24 (-26.09 % of base) : 12860.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -44 (-23.91 % of base) : 3727.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -44 (-17.74 % of base) : 3731.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -40 (-16.95 % of base) : 1072.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -28 (-10.61 % of base) : 18.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -24 (-4.84 % of base) : 12795.dasm - Roslyn.Utilities.EnumerableExtensions:EnumeratingIndexOf[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int (FullOpts)
         -24 (-4.58 % of base) : 12770.dasm - Roslyn.Utilities.EnumerableExtensions:SelectManyAsArray[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]] (FullOpts)
         -24 (-4.11 % of base) : 14688.dasm - Microsoft.CodeAnalysis.DictionaryExtensions:ToImmutableSegmentedDictionaryAndFree[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IReadOnlyDictionary`2[System.__Canon,System.__Canon]):Microsoft.CodeAnalysis.Collections.ImmutableSegmentedDictionary`2[System.__Canon,System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]]] (FullOpts)
          -4 (-1.30 % of base) : 14193.dasm - Microsoft.Cci.ReferenceIndexer:VisitMethodBodyReference(Microsoft.Cci.IReference):this (FullOpts)
          -4 (-1.19 % of base) : 12802.dasm - Roslyn.Utilities.EnumerableExtensions:IndexOf[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):int (FullOpts)
          -8 (-1.16 % of base) : 12840.dasm - Roslyn.Utilities.EnumerableExtensions:ToMultiDictionary[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IEnumerable`1[System.Nullable`1[int]],System.Func`2[System.Nullable`1[int],System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]]] (FullOpts)
          -4 (-0.99 % of base) : 12985.dasm - Roslyn.Utilities.IReadOnlyListExtensions:Contains[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.97 % of base) : 12992.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.97 % of base) : 12996.dasm - Roslyn.Utilities.ISetExtensions:RemoveAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.96 % of base) : 12885.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.70 % of base) : 13712.dasm - Microsoft.Cci.SymWriterMetadataProvider:TryGetTypeDefinitionInfo(int,byref,byref,byref):ubyte:this (FullOpts)
          -4 (-0.63 % of base) : 12772.dasm - Roslyn.Utilities.EnumerableExtensions:SelectManyAsArray[System.__Canon,System.Nullable`1[int]](System.Collections.Generic.IReadOnlyCollection`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.Nullable`1[int]] (FullOpts)


libraries_tests.run.linux.arm64.Release.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2439884 (overridden on cmd)
Total bytes of diff: 2441808 (overridden on cmd)
Total bytes of delta: 1924 (0.08 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         132 : 13264.dasm (94.29 % of base)
          76 : 4453.dasm (32.20 % of base)
          56 : 11404.dasm (31.82 % of base)
          48 : 10703.dasm (33.33 % of base)
          48 : 13379.dasm (33.33 % of base)
          48 : 13803.dasm (33.33 % of base)
          48 : 14550.dasm (33.33 % of base)
          48 : 14826.dasm (33.33 % of base)
          48 : 15395.dasm (33.33 % of base)
          48 : 16244.dasm (33.33 % of base)
          48 : 18206.dasm (33.33 % of base)
          48 : 19122.dasm (33.33 % of base)
          48 : 19434.dasm (33.33 % of base)
          48 : 3367.dasm (33.33 % of base)
          48 : 3959.dasm (33.33 % of base)
          48 : 5515.dasm (33.33 % of base)
          48 : 6079.dasm (33.33 % of base)
          48 : 7603.dasm (33.33 % of base)
          48 : 8110.dasm (33.33 % of base)
          48 : 12747.dasm (33.33 % of base)

Top file improvements (bytes):
         -96 : 16421.dasm (-6.56 % of base)
         -52 : 1132.dasm (-32.50 % of base)
         -24 : 15511.dasm (-4.51 % of base)
          -4 : 1381.dasm (-3.33 % of base)

28 total files with Code Size differences (4 improved, 24 regressed), 28 unchanged.

Top method regressions (bytes):
         132 (94.29 % of base) : 13264.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:Equals(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]):ubyte:this (Tier0)
          76 (32.20 % of base) : 4453.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Instrumented Tier1)
          56 (31.82 % of base) : 11404.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          48 (33.33 % of base) : 10703.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 13379.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 13803.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 14550.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 14826.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 15395.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 16244.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 18206.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 19122.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 19434.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 3367.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 3959.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5515.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6079.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7603.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 8110.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 12747.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (bytes):
         -96 (-6.56 % of base) : 16421.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -52 (-32.50 % of base) : 1132.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
         -24 (-4.51 % of base) : 15511.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
          -4 (-3.33 % of base) : 1381.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)

Top method regressions (percentages):
         132 (94.29 % of base) : 13264.dasm - System.Collections.Generic.ObjectEqualityComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:Equals(System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon],System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]):ubyte:this (Tier0)
          36 (69.23 % of base) : 17461.dasm - Moq.It+<>c__1`1[System.Threading.CancellationToken]:<IsAny>b__1_2(System.Threading.CancellationToken):ubyte:this (Tier0)
          48 (33.33 % of base) : 10703.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 13379.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 13803.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 14550.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 14826.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 15395.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 16244.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 18206.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 19122.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 19434.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 3367.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 3959.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5515.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6079.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7603.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 8110.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 12747.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 12672.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (percentages):
         -52 (-32.50 % of base) : 1132.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
         -96 (-6.56 % of base) : 16421.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -24 (-4.51 % of base) : 15511.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
          -4 (-3.33 % of base) : 1381.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)


librariestestsnotieredcompilation.run.linux.arm64.Release.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1206352 (overridden on cmd)
Total bytes of diff: 1209608 (overridden on cmd)
Total bytes of delta: 3256 (0.27 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         332 : 3313.dasm (19.76 % of base)
         244 : 4331.dasm (20.54 % of base)
         144 : 69.dasm (45.00 % of base)
         136 : 6628.dasm (47.22 % of base)
         136 : 10430.dasm (24.11 % of base)
         132 : 6076.dasm (17.46 % of base)
         128 : 10431.dasm (23.53 % of base)
         128 : 2790.dasm (35.16 % of base)
         112 : 741.dasm (16.67 % of base)
         108 : 13609.dasm (9.75 % of base)
          96 : 1929.dasm (24.49 % of base)
          92 : 12633.dasm (30.26 % of base)
          88 : 6181.dasm (12.09 % of base)
          84 : 2104.dasm (32.81 % of base)
          84 : 401.dasm (18.42 % of base)
          76 : 24.dasm (32.20 % of base)
          76 : 3293.dasm (11.38 % of base)
          68 : 10438.dasm (19.10 % of base)
          64 : 6185.dasm (84.21 % of base)
          64 : 9879.dasm (30.19 % of base)

Top file improvements (bytes):
         -32 : 2852.dasm (-9.41 % of base)
         -28 : 342.dasm (-10.61 % of base)
         -20 : 2543.dasm (-20.83 % of base)
         -20 : 2883.dasm (-5.49 % of base)
         -16 : 759.dasm (-1.76 % of base)
         -12 : 3206.dasm (-1.90 % of base)
          -8 : 10419.dasm (-0.53 % of base)
          -4 : 256.dasm (-0.68 % of base)
          -4 : 3027.dasm (-0.78 % of base)
          -4 : 510.dasm (-0.60 % of base)
          -4 : 60.dasm (-0.82 % of base)
          -4 : 9175.dasm (-1.18 % of base)
          -4 : 1002.dasm (-0.27 % of base)
          -4 : 321.dasm (-0.89 % of base)
          -4 : 395.dasm (-0.90 % of base)
          -4 : 7548.dasm (-0.96 % of base)
          -4 : 14033.dasm (-0.51 % of base)
          -4 : 2953.dasm (-0.29 % of base)
          -4 : 5510.dasm (-1.18 % of base)
          -4 : 6115.dasm (-0.97 % of base)

51 total files with Code Size differences (21 improved, 30 regressed), 20 unchanged.

Top method regressions (bytes):
         332 (19.76 % of base) : 3313.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)
         244 (20.54 % of base) : 4331.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)
         144 (45.00 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         136 (47.22 % of base) : 6628.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
         136 (24.11 % of base) : 10430.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveLessDerivedMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref) (FullOpts)
         132 (17.46 % of base) : 6076.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)
         128 (23.53 % of base) : 10431.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
         128 (35.16 % of base) : 2790.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)
         112 (16.67 % of base) : 741.dasm - Interop+procfs:ParseMapsModules(int):System.Diagnostics.ProcessModuleCollection (FullOpts)
         108 (9.75 % of base) : 13609.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)
          96 (24.49 % of base) : 1929.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (FullOpts)
          92 (30.26 % of base) : 12633.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
          88 (12.09 % of base) : 6181.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)
          84 (32.81 % of base) : 2104.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
          84 (18.42 % of base) : 401.dasm - Xunit.ConfigReader_Json:LoadFile(System.String):Xunit.TestAssemblyConfiguration (FullOpts)
          76 (32.20 % of base) : 24.dasm - Internal.Microsoft.Extensions.DependencyModel.FileWrapper:OpenRead(System.String):System.IO.Stream:this (FullOpts)
          76 (11.38 % of base) : 3293.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)
          68 (19.10 % of base) : 10438.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveStaticInstanceMismatches[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte) (FullOpts)
          64 (30.19 % of base) : 9879.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:SkipBadSeparatedListTokensWithExpectedKind[System.__Canon,System.__Canon](byref,Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxListBuilder`1[System.__Canon],System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`3[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ushort,ubyte],ushort,ushort):int:this (FullOpts)
          64 (61.54 % of base) : 8039.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)

Top method improvements (bytes):
         -32 (-9.41 % of base) : 2852.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
         -28 (-10.61 % of base) : 342.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -20 (-20.83 % of base) : 2543.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
         -20 (-5.49 % of base) : 2883.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -16 (-1.76 % of base) : 759.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)
         -12 (-1.90 % of base) : 3206.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
          -8 (-0.53 % of base) : 10419.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)
          -4 (-0.68 % of base) : 256.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.18 % of base) : 5510.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-2.70 % of base) : 11453.dasm - Microsoft.Interop.HashCode:Combine[System.Nullable`1[int],System.__Canon,System.__Canon](System.Nullable`1[int],System.__Canon,System.__Canon):int (FullOpts)
          -4 (-1.18 % of base) : 9175.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
          -4 (-0.78 % of base) : 3027.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.96 % of base) : 7548.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.97 % of base) : 6115.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.90 % 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)
          -4 (-0.89 % of base) : 321.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.27 % of base) : 1002.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.29 % of base) : 2953.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)
          -4 (-0.82 % of base) : 60.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.51 % of base) : 14033.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)

Top method regressions (percentages):
          64 (84.21 % of base) : 6185.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
          64 (61.54 % of base) : 8039.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
          60 (48.39 % of base) : 8521.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)
         136 (47.22 % of base) : 6628.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
         144 (45.00 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
          44 (37.93 % of base) : 4200.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)
          44 (37.93 % of base) : 8433.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)
          56 (36.84 % of base) : 8064.dasm - System.GC:AllocateUninitializedArray[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](int,ubyte):System.Collections.Immutable.ImmutableArray`1[System.__Canon][] (FullOpts)
         128 (35.16 % of base) : 2790.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)
          44 (33.33 % of base) : 8518.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)
          84 (32.81 % of base) : 2104.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
          76 (32.20 % of base) : 24.dasm - Internal.Microsoft.Extensions.DependencyModel.FileWrapper:OpenRead(System.String):System.IO.Stream:this (FullOpts)
          92 (30.26 % of base) : 12633.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
          64 (30.19 % of base) : 9879.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:SkipBadSeparatedListTokensWithExpectedKind[System.__Canon,System.__Canon](byref,Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxListBuilder`1[System.__Canon],System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`3[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ushort,ubyte],ushort,ushort):int:this (FullOpts)
          96 (24.49 % of base) : 1929.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (FullOpts)
         136 (24.11 % of base) : 10430.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveLessDerivedMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref) (FullOpts)
         128 (23.53 % of base) : 10431.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
          32 (23.53 % of base) : 1300.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
          48 (23.53 % of base) : 1116.dasm - Xunit.Sdk.ExceptionAggregator:RunAsync[System.__Canon](System.Func`1[System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon]:this (FullOpts)
         244 (20.54 % of base) : 4331.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)

Top method improvements (percentages):
         -20 (-20.83 % of base) : 2543.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
         -28 (-10.61 % of base) : 342.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -32 (-9.41 % of base) : 2852.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
         -20 (-5.49 % of base) : 2883.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
          -4 (-2.70 % of base) : 11453.dasm - Microsoft.Interop.HashCode:Combine[System.Nullable`1[int],System.__Canon,System.__Canon](System.Nullable`1[int],System.__Canon,System.__Canon):int (FullOpts)
         -12 (-1.90 % of base) : 3206.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
         -16 (-1.76 % of base) : 759.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
          -4 (-1.18 % of base) : 5510.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-1.18 % of base) : 9175.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
          -4 (-0.97 % of base) : 6115.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.96 % of base) : 7548.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.90 % 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)
          -4 (-0.89 % of base) : 321.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 60.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.78 % of base) : 3027.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.68 % of base) : 256.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 (-0.60 % of base) : 510.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)
          -8 (-0.53 % of base) : 10419.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)
          -4 (-0.51 % of base) : 14033.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
          -4 (-0.29 % of base) : 2953.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)


realworld.run.linux.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os linux -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2002024 (overridden on cmd)
Total bytes of diff: 2006336 (overridden on cmd)
Total bytes of delta: 4312 (0.22 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         504 : 7457.dasm (51.01 % of base)
         300 : 8533.dasm (30.74 % of base)
         288 : 6381.dasm (16.98 % of base)
         224 : 7121.dasm (49.56 % of base)
         224 : 7134.dasm (49.56 % of base)
         224 : 7110.dasm (49.56 % of base)
         224 : 7131.dasm (50.45 % of base)
         144 : 10611.dasm (16.36 % of base)
         144 : 15976.dasm (43.90 % of base)
         140 : 10309.dasm (12.92 % of base)
         116 : 8770.dasm (16.29 % of base)
         100 : 7132.dasm (29.76 % of base)
          96 : 9309.dasm (5.52 % of base)
          92 : 7129.dasm (26.14 % of base)
          84 : 9240.dasm (23.86 % of base)
          80 : 9227.dasm (8.81 % of base)
          76 : 5119.dasm (23.75 % of base)
          68 : 15752.dasm (9.24 % of base)
          56 : 8923.dasm (14.29 % of base)
          56 : 12346.dasm (36.84 % of base)

Top file improvements (bytes):
         -24 : 96.dasm (-4.51 % of base)
         -20 : 401.dasm (-3.70 % of base)
         -16 : 14567.dasm (-1.76 % of base)
         -12 : 8979.dasm (-1.58 % of base)
          -4 : 1002.dasm (-0.82 % of base)
          -4 : 13819.dasm (-0.90 % of base)
          -4 : 3835.dasm (-0.30 % of base)
          -4 : 1005.dasm (-0.89 % of base)
          -4 : 13212.dasm (-0.51 % of base)
          -4 : 16875.dasm (-0.96 % of base)
          -4 : 19111.dasm (-1.25 % of base)

42 total files with Code Size differences (11 improved, 31 regressed), 21 unchanged.

Top method regressions (bytes):
         504 (51.01 % of base) : 7457.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)
         300 (30.74 % of base) : 8533.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)
         288 (16.98 % of base) : 6381.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)
         224 (50.45 % of base) : 7131.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 7134.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)
         224 (49.56 % of base) : 7121.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 7110.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         144 (16.36 % of base) : 10611.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)
         144 (43.90 % of base) : 15976.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
         140 (12.92 % of base) : 10309.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)
         116 (16.29 % of base) : 8770.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)
         100 (29.76 % of base) : 7132.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          96 (5.52 % of base) : 9309.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)
          92 (26.14 % of base) : 7129.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          84 (23.86 % of base) : 9240.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          80 (8.81 % of base) : 9227.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)
          76 (23.75 % of base) : 5119.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          68 (9.24 % of base) : 15752.dasm - System.Net.Sockets.SocketAsyncContext:PerformSyncOperation[System.__Canon](byref,System.__Canon,int,int):this (FullOpts)
          56 (29.79 % of base) : 7058.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)
          56 (14.29 % of base) : 8923.dasm - Internal.Utilities.Library.Extras+ListSet:hasDuplicates[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):ubyte (FullOpts)

Top method improvements (bytes):
         -24 (-4.51 % of base) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 401.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -16 (-1.76 % of base) : 14567.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)
         -12 (-1.58 % of base) : 8979.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)
          -4 (-1.25 % of base) : 19111.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-0.96 % of base) : 16875.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.90 % of base) : 13819.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 1005.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.30 % of base) : 3835.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)
          -4 (-0.82 % of base) : 1002.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.51 % of base) : 13212.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)

Top method regressions (percentages):
         504 (51.01 % of base) : 7457.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)
         224 (50.45 % of base) : 7131.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 7134.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)
         224 (49.56 % of base) : 7121.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 7110.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         144 (43.90 % of base) : 15976.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
          56 (36.84 % of base) : 12346.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          48 (32.43 % of base) : 9655.dasm - Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          44 (32.35 % of base) : 11191.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
         300 (30.74 % of base) : 8533.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)
          56 (29.79 % of base) : 7058.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)
         100 (29.76 % of base) : 7132.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          92 (26.14 % of base) : 7129.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          84 (23.86 % of base) : 9240.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          76 (23.75 % of base) : 5119.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          40 (21.28 % of base) : 2662.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)
          48 (19.05 % of base) : 2897.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)
         288 (16.98 % of base) : 6381.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)
          52 (16.46 % of base) : 3593.dasm - Internal.Utilities.Collections.AgedLookup`3[System.__Canon,System.__Canon,System.__Canon]:Add[System.__Canon,System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],System.__Canon,System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:this (FullOpts)
          44 (16.42 % of base) : 3814.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)

Top method improvements (percentages):
         -24 (-4.51 % of base) : 96.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 401.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -16 (-1.76 % of base) : 14567.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)
         -12 (-1.58 % of base) : 8979.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)
          -4 (-1.25 % of base) : 19111.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-0.96 % of base) : 16875.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.90 % of base) : 13819.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 1005.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 1002.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.51 % of base) : 13212.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
          -4 (-0.30 % of base) : 3835.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)



osx arm64

Diffs are based on 83,914 contexts (36,117 MinOpts, 47,797 FullOpts).

MISSED contexts: base: 9 (0.01%), diff: 41,251 (32.04%)

Overall (+11,236 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 1,324,952 +888
benchmarks.run_pgo.osx.arm64.checked.mch 2,517,880 +136
benchmarks.run_tiered.osx.arm64.checked.mch 2,370,724 -192
coreclr_tests.run.osx.arm64.checked.mch 313,876 +4
libraries.pmi.osx.arm64.checked.mch 1,291,576 +3,248
libraries_tests.run.osx.arm64.Release.mch 1,161,284 -60
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 1,152,092 +2,524
realworld.run.osx.arm64.checked.mch 1,916,968 +4,688

MinOpts (-892 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.osx.arm64.checked.mch 2,247,820 -228
benchmarks.run_tiered.osx.arm64.checked.mch 2,119,252 -352
coreclr_tests.run.osx.arm64.checked.mch 286,796 -80
libraries_tests.run.osx.arm64.Release.mch 1,080,672 -232

FullOpts (+12,128 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 1,324,416 +888
benchmarks.run_pgo.osx.arm64.checked.mch 270,060 +364
benchmarks.run_tiered.osx.arm64.checked.mch 251,472 +160
coreclr_tests.run.osx.arm64.checked.mch 27,080 +84
libraries.pmi.osx.arm64.checked.mch 1,290,480 +3,248
libraries_tests.run.osx.arm64.Release.mch 80,612 +172
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 1,152,092 +2,524
realworld.run.osx.arm64.checked.mch 1,916,868 +4,688

Example diffs

benchmarks.run.osx.arm64.checked.mch

-28 (-10.61%) : 3635.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)

@@ -10,120 +10,103 @@ ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V01 tmp1 [V01,T00] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle>
-; V02 tmp2 [V02,T01] ( 8, 16 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V03 tmp3 [V03,T02] ( 8, 16 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> -; V04 cse0 [V04,T03] ( 4, 4 ) long -> x19 "CSE - aggressive" -; V05 cse1 [V05,T04] ( 4, 4 ) long -> x21 "CSE - aggressive"
+; V02 tmp2 [V02,T01] ( 6, 12 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V03 tmp3 [V03,T02] ( 6, 12 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeFileHandle> +; V04 cse0 [V04,T03] ( 4, 4 ) ref -> x19 "CSE - aggressive" +; V05 cse1 [V05,T04] ( 4, 4 ) byref -> x21 "CSE - aggressive" +; V06 cse2 [V06,T05] ( 4, 4 ) byref -> x22 "CSE - aggressive" +; V07 cse3 [V07,T06] ( 4, 4 ) long -> x23 "CSE - aggressive"
; ; Lcl frame size = 8 G_M2338_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]!
+ stp fp, lr, [sp, #-0x40]!
stp x19, x20, [sp, #0x18]
- str x21, [sp, #0x28]
+ stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- ;; size=16 bbWeight=1 PerfScore 3.50
+ ;; size=20 bbWeight=1 PerfScore 4.50
G_M2338_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movz x19, #0xD1FFAB1E - movk x19, #0xD1FFAB1E LSL #16 - movk x19, #1 LSL #32 - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str xzr, [x20, #0x10] - movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #1 LSL #32 - mov x14, x21 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - mov x20, x0 - ; gcrRegs +[x20] - str xzr, [x20, #0x10] - add x0, x20, #24 - ; gcrRegs -[x0] - ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0] - strb wzr, [x20, #0x1C] - mov x0, x20 - ; gcrRegs +[x0] - ; byrRegs -[x0] - bl <unknown method> - ; gcrRegs -[x0] - add x14, x20, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str x15, [x20, #0x10] - add x14, x21, #8 - ; byrRegs -[x14] - mov x15, x20 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15 x20] - mov x0, x19 - bl CORINFO_HELP_NEWFAST
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0] mov x19, x0 ; gcrRegs +[x19]
- str xzr, [x19, #0x10] - add x0, x19, #24
+ mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + add x21, x20, #24 + ; byrRegs +[x21] + mov w0, #4
; gcrRegs -[x0]
- ; byrRegs +[x0] - mov w1, #4 - stlr w1, [x0]
+ stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + add x22, x20, #29 + ; byrRegs +[x22] + mov w14, #1 + stlrb w14, [x22] + str xzr, [x20, #0x10] + movz x23, #0xD1FFAB1E // data for <unknown class>:<unknown field> + movk x23, #0xD1FFAB1E LSL #16 + movk x23, #1 LSL #32 + mov x14, x23 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + mov x20, x19 + ; gcrRegs +[x20] + str xzr, [x20, #0x10] + mov w0, #4 + stlr w0, [x21] + strb wzr, [x20, #0x1C] + mov x0, x20 + ; gcrRegs +[x0] + bl <unknown method> + ; gcrRegs -[x0] + mov w14, #1 + stlrb w14, [x22] + str x14, [x20, #0x10] + add x14, x23, #8 + mov x15, x20 + ; gcrRegs +[x15] + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15 x20] + str xzr, [x19, #0x10] + mov w0, #4 + stlr w0, [x21]
strb wzr, [x19, #0x1C] mov x0, x19 ; gcrRegs +[x0]
- ; byrRegs -[x0]
bl <unknown method> ; gcrRegs -[x0]
- add x14, x19, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14]
+ ; byrRegs -[x21] + mov w14, #1 + stlrb w14, [x22]
mov x14, #2
- ; byrRegs -[x14]
str x14, [x19, #0x10]
- add x14, x21, #16
+ add x14, x23, #16
mov x15, x19 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x15 x19]
- ;; size=232 bbWeight=1 PerfScore 41.00
+ ; byrRegs -[x22] + ;; size=196 bbWeight=1 PerfScore 35.50
G_M2338_IG03: ; bbWeight=1, epilog, nogc, extend
- ldr x21, [sp, #0x28]
+ ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28]
ldp x19, x20, [sp, #0x18]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 6.00
-; Total bytes of code 264, prolog size 16, PerfScore 49.50, instruction count 66, allocated bytes for code 264 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
+; Total bytes of code 236, prolog size 20, PerfScore 46.00, instruction count 59, allocated bytes for code 236 (MethodHash=536af6dd) for method Interop+Sys+FileDescriptors:.cctor() (FullOpts)
; ============================================================ Unwind Info: @@ -134,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 66 (0x00042) Actual length = 264 (0x000108)
+ Function Length : 59 (0x0003b) Actual length = 236 (0x0000ec)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,9 +125,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40]
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56] + E6 save_next
C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
- 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end
+ 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end

-48 (-10.53%) : 2719.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute

@@ -8,22 +8,18 @@ ; 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 -> x19 class-hnd single-def <System.Type> -; V01 loc0 [V01,T04] ( 5, 4 ) ref -> x20 class-hnd single-def <System.Collections.Hashtable> -; V02 loc1 [V02,T02] ( 7, 5 ) ref -> x22 class-hnd <System.Attribute[]> -; V03 loc2 [V03,T12] ( 4, 1 ) ref -> [fp+0x18] class-hnd exact EH-live spill-single-def <System.Object>
+; V00 arg0 [V00,T00] ( 6, 4.50) ref -> x19 class-hnd single-def <System.Type> +; V01 loc0 [V01,T02] ( 5, 4 ) ref -> x20 class-hnd single-def <System.Collections.Hashtable> +; V02 loc1 [V02,T01] ( 7, 5 ) ref -> x22 class-hnd <System.Attribute[]> +; V03 loc2 [V03,T08] ( 4, 1 ) ref -> [fp+0x18] class-hnd exact EH-live spill-single-def <System.Object>
; V04 loc3 [V04 ] ( 6, 2.50) ubyte -> [fp+0x20] 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 -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T10] ( 3, 1.25) long -> x2 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T00] ( 5, 6.75) ref -> x22 class-hnd "spilling QMark2" <System.Attribute[]> -; V09 tmp4 [V09,T07] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V10 tmp5 [V10,T11] ( 3, 1.25) long -> x2 "fgMakeTemp is creating a new local variable" -; V11 tmp6 [V11,T05] ( 5, 3.75) ref -> x22 class-hnd "spilling QMark2" <System.Attribute[]> -; V12 tmp7 [V12,T08] ( 2, 2 ) ubyte -> x0 "Inlining Arg" -; V13 PSPSym [V13,T13] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" -; V14 cse0 [V14,T06] ( 4, 3 ) long -> x21 "CSE - aggressive" -; V15 cse1 [V15,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 2, 2 ) ubyte -> x0 "Inlining Arg" +; V07 tmp2 [V07,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V08 tmp3 [V08,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V09 PSPSym [V09,T09] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" +; V10 cse0 [V10,T04] ( 4, 3 ) long -> x21 "CSE - aggressive" +; V11 cse1 [V11,T07] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 32 @@ -33,7 +29,7 @@ G_M8794_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x21, x22, [sp, #0x40] mov fp, sp add x1, sp, #80
- str x1, [fp, #0x28] // [V13 PSPSym]
+ str x1, [fp, #0x28] // [V09 PSPSym]
mov x19, x0 ; gcrRegs +[x19] ;; size=28 bbWeight=1 PerfScore 5.50 @@ -57,44 +53,29 @@ G_M8794_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x22, x1 - ; gcrRegs +[x22] - cbz x22, G_M8794_IG05 - ;; size=56 bbWeight=1 PerfScore 18.50 -G_M8794_IG03: ; bbWeight=0.25, gcrefRegs=580002 {x1 x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- ldr x0, [x22] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2 - beq G_M8794_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M8794_IG04: ; bbWeight=0.12, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x22] - mov x0, x2 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x22, x0 ; gcrRegs +[x22]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M8794_IG05: ; bbWeight=1, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - cbz x22, G_M8794_IG08 - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M8794_IG06: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x19-x20]
+ cbz x22, G_M8794_IG05 + ;; size=72 bbWeight=1 PerfScore 21.00 +G_M8794_IG03: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x19-x20]
mov x0, x22 ; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 0.50
-G_M8794_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M8794_IG04: ; bbWeight=1, epilog, nogc, extend
ldp x21, x22, [sp, #0x40] ldp x19, x20, [sp, #0x30] ldp fp, lr, [sp], #0x50 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M8794_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
+G_M8794_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0 x22] +[x19-x20] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 @@ -105,11 +86,11 @@ G_M8794_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=1800 ; GC ptr vars +{V03} str wzr, [fp, #0x20] // [V04 loc3] ;; size=24 bbWeight=0.50 PerfScore 3.25
-G_M8794_IG09: ; bbWeight=0.50, gcVars=0000000000001000 {V03}, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG06: ; bbWeight=0.50, gcVars=0000000000000100 {V03}, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb w1, [fp, #0x20] // [V04 loc3]
- cbz w1, G_M8794_IG11
+ cbz w1, 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 -[x0 x19-x20] movz x1, #0xD1FFAB1E // code for System.Threading.Monitor:ThrowLockTakenException() movk x1, #0xD1FFAB1E LSL #16 @@ -119,14 +100,14 @@ G_M8794_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG08: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[x0 x19-x20] add x1, fp, #32 // [V04 loc3] bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0 ldrb w0, [fp, #0x20] // [V04 loc3]
- cbnz w0, G_M8794_IG12
+ cbnz w0, G_M8794_IG09
movz x1, #8 movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -140,7 +121,7 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0 ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=52 bbWeight=0.50 PerfScore 6.00
-G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG09: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
mov x0, x20 ; gcrRegs +[x0] mov x1, x19 @@ -151,33 +132,17 @@ G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x22, x1 - ; gcrRegs +[x22] - cbz x22, G_M8794_IG15 - ;; size=28 bbWeight=0.50 PerfScore 3.50 -G_M8794_IG13: ; bbWeight=0.25, gcrefRegs=580002 {x1 x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- ldr x0, [x22] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2 - beq G_M8794_IG15 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M8794_IG14: ; bbWeight=0.12, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x22] - mov x0, x2 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x22, x0 ; gcrRegs +[x22]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - cbnz x22, G_M8794_IG16
+ cbnz x22, G_M8794_IG10
mov x0, x19
- ; gcrRegs +[x0]
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -200,45 +165,45 @@ G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=580000 {x19 x20 x22}, byrefRegs= blr x3 ; gcrRegs -[x0-x2 x19-x20] ; gcr arg pop 0
- ;; size=68 bbWeight=0.50 PerfScore 7.50 -G_M8794_IG16: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
+ ;; size=108 bbWeight=0.50 PerfScore 11.75 +G_M8794_IG10: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
ldrb w0, [fp, #0x20] // [V04 loc3]
- cbz w0, G_M8794_IG06
+ cbz w0, G_M8794_IG03
ldr x0, [fp, #0x18] // [V03 loc2] ; gcrRegs +[x0] ; GC ptr vars -{V03} bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0
- b G_M8794_IG06
+ b G_M8794_IG03
;; size=20 bbWeight=0.50 PerfScore 3.50
-G_M8794_IG17: ; bbWeight=0, gcVars=0000000000001000 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
+G_M8794_IG11: ; bbWeight=0, gcVars=0000000000000100 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
; gcrRegs -[x22]
- ; GC ptr vars +{V03 V12}
+ ; GC ptr vars +{V03 V08}
stp fp, lr, [sp, #-0x40]! stp x19, x20, [sp, #0x20] stp x21, x22, [sp, #0x30] add x3, fp, #80 str x3, [sp, #0x18] ;; size=20 bbWeight=0 PerfScore 0.00
-G_M8794_IG18: ; bbWeight=0, gcVars=0000000000001000 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG12: ; bbWeight=0, gcVars=0000000000000100 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb w0, [fp, #0x20] // [V04 loc3]
- cbz w0, G_M8794_IG19
+ cbz w0, G_M8794_IG13
ldr x0, [fp, #0x18] // [V03 loc2] ; gcrRegs +[x0]
- ; GC ptr vars -{V03 V12}
+ ; GC ptr vars -{V03 V08}
bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=16 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
ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 456, prolog size 28, PerfScore 58.25, instruction count 114, allocated bytes for code 456 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
+; Total bytes of code 408, prolog size 28, PerfScore 57.00, instruction count 102, allocated bytes for code 408 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
; ============================================================ Unwind Info: @@ -249,7 +214,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 101 (0x00065) Actual length = 404 (0x000194)
+ Function Length : 89 (0x00059) Actual length = 356 (0x000164)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -286,4 +251,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)
+EH#0: try [G_M8794_IG06..G_M8794_IG10) handled by [G_M8794_IG11..END) (fault)
-20 (-5.49%) : 6174.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
@@ -7,42 +7,40 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5.50) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T02] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T12] ( 3, 2.50) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T11] ( 3, 2.50) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T08] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T07] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T05] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T15] ( 2, 2 ) long -> x0 "argument with side effect" -; V11 tmp8 [V11,T16] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 cse0 [V12,T07] ( 5, 3.50) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T04] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T09] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T13] ( 3, 2 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T14] ( 3, 2 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T11] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+; V10 tmp7 [V10,T14] ( 2, 2 ) long -> x0 "argument with side effect" +; V11 tmp8 [V11,T15] ( 2, 2 ) long -> x0 "argument with side effect" +; V12 cse0 [V12,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T04] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T08] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T12] ( 3, 2 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T09] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T13] ( 3, 2 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -59,56 +57,53 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbz x23, G_M18513_IG11 - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x22]
+ mov x22, x0 + ; gcrRegs +[x22] + cbz x22, G_M18513_IG11 + ;; size=16 bbWeight=1 PerfScore 5.50 +G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG08 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35
-G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0.50 PerfScore 2.00 G_M18513_IG10: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
tst w20, #255 beq G_M18513_IG16 ldr x0, [x21, #0x38] @@ -116,79 +111,77 @@ G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480 ldr x0, [x0, #0x38] cbz x0, G_M18513_IG13 ;; size=24 bbWeight=0.50 PerfScore 5.75
-G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG14 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16 movn w0, #0 ; gcrRegs -[x0]
- ;; size=40 bbWeight=0.50 PerfScore 3.50
+ ;; size=40 bbWeight=0.50 PerfScore 6.00
G_M18513_IG15: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG18 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG19 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=0.50 PerfScore 2.50
+ ;; size=20 bbWeight=0.50 PerfScore 3.75
G_M18513_IG20: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 364, prolog size 32, PerfScore 62.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
+; Total bytes of code 344, prolog size 28, PerfScore 61.85, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
; ============================================================ Unwind Info: @@ -199,7 +192,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) ...

+44 (+14.29%) : 1316.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpanSystem.__Canon:System.Span`1System.__Canon

@@ -8,26 +8,29 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 3.60) long -> x20 single-def
+; V00 TypeCtx [V00,T01] ( 7, 4.28) long -> x20 single-def
; V01 arg0 [V01,T00] ( 6, 4.50) ref -> x19 class-hnd single-def <System.Collections.Generic.List`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op <System.Span`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 4, 2 ) int -> x21 -; V04 loc2 [V04,T05] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
+; V03 loc1 [V03,T08] ( 4, 2 ) int -> x21 +; V04 loc2 [V04,T07] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T07] ( 3, 2 ) long -> x2 "spilling helperCall"
+; V06 tmp1 [V06,T09] ( 3, 2 ) long -> x2 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V12 tmp7 [V12,T08] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
+; V12 tmp7 [V12,T10] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp10 [V15,T03] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T04] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T09] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP -; V18 tmp13 [V18,T10] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
+; V15 tmp10 [V15,T04] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T05] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T11] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP +; V18 tmp13 [V18,T12] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
; V19 rat0 [V19,T02] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable"
+;* V20 rat1 [V20,T13] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V21 rat2 [V21,T03] ( 3, 2.80) long -> x0 "spilling expr" +; V22 rat3 [V22,T06] ( 2, 1.60) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -45,7 +48,7 @@ G_M30960_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x0, xzr ; byrRegs +[x0] mov w1, wzr
- cbz x19, G_M30960_IG10
+ cbz x19, G_M30960_IG13
;; size=12 bbWeight=1 PerfScore 2.00 G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; byrRegs -[x0] @@ -68,7 +71,7 @@ G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, G_M30960_IG04: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz ldr w0, [x22, #0x08] cmp w0, w21
- blo G_M30960_IG11
+ blo G_M30960_IG14
ldr x0, [x20, #0x38] ldr x2, [x0, #0x10] cbz x2, G_M30960_IG06 @@ -81,7 +84,7 @@ G_M30960_IG06: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x2, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35 G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz @@ -105,9 +108,26 @@ G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=000 ; gcrRegs -[x19] ;; size=60 bbWeight=0.50 PerfScore 8.00 G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
+ ldr x0, [x20, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M30960_IG10 + ;; size=16 bbWeight=0.50 PerfScore 3.75 +G_M30960_IG09: ; bbWeight=0.40, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M30960_IG11 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M30960_IG10: ; bbWeight=0.18, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x20 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M30960_IG11: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
add x19, x22, #16 ; byrRegs +[x19]
- tbz w21, #31, G_M30960_IG09
+ tbz w21, #31, G_M30960_IG12
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 @@ -121,19 +141,19 @@ G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {} blr x2 ; gcrRegs -[x22] ;; size=52 bbWeight=0.50 PerfScore 5.00
-G_M30960_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
+G_M30960_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
mov x0, x19 ; byrRegs +[x0] sxtw w1, w21 ;; size=8 bbWeight=0.50 PerfScore 0.50
-G_M30960_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
+G_M30960_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
; byrRegs -[x19] ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M30960_IG14: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[x0] movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowInvalidOperationException_ConcurrentOperationsNotSupported() movk x0, #0xD1FFAB1E LSL #16 @@ -143,7 +163,7 @@ G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 308, prolog size 20, PerfScore 39.25, instruction count 77, allocated bytes for code 308 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
+; Total bytes of code 352, prolog size 20, PerfScore 45.14, instruction count 88, allocated bytes for code 352 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -154,7 +174,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
+ Function Length : 88 (0x00058) Actual length = 352 (0x000160)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+15.38%) : 1231.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) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x19 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T06] ( 3, 3 ) ref -> x22 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> x20 single-def -; V04 arg3 [V04,T03] ( 4, 4 ) int -> x21 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T07] ( 3, 3 ) ref -> x23 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> x21 single-def +; V04 arg3 [V04,T03] ( 4, 4 ) int -> x22 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,80 +24,96 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T04] ( 3, 6 ) ref -> x0 single-def "argument with side effect"
-; V16 cse0 [V16,T09] ( 3, 3 ) int -> x1 "CSE - aggressive" -; V17 rat0 [V17,T08] ( 3, 4 ) long -> x1 "runtime lookup" -; V18 rat1 [V18,T05] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T07] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T10] ( 3, 3 ) int -> x0 "CSE - aggressive" +;* V17 rat0 [V17,T11] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T05] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T06] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- str x0, [fp, #0x18] - mov x19, x1 - ; gcrRegs +[x19] - mov x22, x2 - ; gcrRegs +[x22] - mov w20, w3 - mov w21, w4 - ;; size=36 bbWeight=1 PerfScore 6.50 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - cbz x19, G_M13831_IG08 - ldr w1, [x19, #0x08] - cmp w1, w20 - blo G_M13831_IG09 - sub w1, w1, w20 - cmp w1, w21 - blo G_M13831_IG10 - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M13831_IG05 - ;; size=44 bbWeight=1 PerfScore 15.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ldr x1, [x1, #0x18] - cbz x1, G_M13831_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - b G_M13831_IG06 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+ str x0, [fp, #0x10] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x23, x2 + ; gcrRegs +[x23] + mov w21, w3 + mov w22, w4 + ;; size=44 bbWeight=1 PerfScore 8.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M13831_IG10 + ldr w0, [x20, #0x08] + cmp w0, w21 + blo G_M13831_IG11 + sub w0, w0, w21 + cmp w0, w22 + blo G_M13831_IG12 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M13831_IG04 + ;; size=40 bbWeight=1 PerfScore 14.50 +G_M13831_IG03: ; bbWeight=0.20, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M13831_IG04: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M13831_IG07 + ;; size=16 bbWeight=1 PerfScore 7.50 +G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M13831_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + b G_M13831_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x1
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 ldr x1, [x1] blr x1 ; gcrRegs +[x0]
- mov x1, x19
+ mov x1, x20
; gcrRegs +[x1]
- mov x2, x22
+ mov x2, x23
; gcrRegs +[x2]
- mov w3, w20 - mov w4, w21
+ mov w3, w21 + mov w4, w22
ldr x5, [x0] ldr x5, [x5, #0x50] ldr x5, [x5] blr x5
- ; gcrRegs -[x0-x2 x19 x22] - ;; size=56 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0-x2 x20 x23] + ;; size=52 bbWeight=1 PerfScore 17.50 +G_M13831_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=20 bbWeight=1 PerfScore 6.00 +G_M13831_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_unix #0 ;; size=28 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 @@ -114,7 +130,7 @@ G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x0 brk_unix #0 ;; size=24 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 @@ -123,7 +139,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 260, prolog size 20, PerfScore 48.42, instruction count 65, allocated bytes for code 260 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
+; Total bytes of code 300, prolog size 24, PerfScore 59.02, instruction count 75, allocated bytes for code 300 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================ Unwind Info: @@ -134,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 65 (0x00041) Actual length = 260 (0x000104)
+ Function Length : 75 (0x0004b) Actual length = 300 (0x00012c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,10 +158,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! E4 end
- E4 end - E4 end

+40 (+20.83%) : 7715.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) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x1 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x19 class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Comparison`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) struct (16) 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 (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp3 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 4 ) int -> x21 "Inlining Arg" -; V09 tmp5 [V09,T06] ( 2, 4 ) byref -> x20 single-def "Inlining Arg"
+; V08 tmp4 [V08,T08] ( 2, 4 ) int -> x20 "Inlining Arg" +; V09 tmp5 [V09,T07] ( 2, 4 ) byref -> x22 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=0x8)" P-INDEP
-; V14 tmp10 [V14,T09] ( 2, 2 ) byref -> x20 single-def "field V05._reference (fldOffset=0x0)" P-INDEP -; V15 tmp11 [V15,T10] ( 2, 2 ) int -> x21 "field V05._length (fldOffset=0x8)" P-INDEP -; V16 tmp12 [V16,T08] ( 2, 4 ) long -> x0 "argument with side effect" -; V17 rat0 [V17,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V18 rat1 [V18,T03] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V14 tmp10 [V14,T10] ( 2, 2 ) byref -> x22 single-def "field V05._reference (fldOffset=0x0)" P-INDEP +; V15 tmp11 [V15,T11] ( 2, 2 ) int -> x20 "field V05._length (fldOffset=0x8)" P-INDEP +; V16 tmp12 [V16,T09] ( 2, 4 ) long -> x0 "argument with side effect" +;* V17 rat0 [V17,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T03] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T04] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M37190_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10] - mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 5.00 -G_M37190_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x1] - cbz x1, G_M37190_IG08 - cbz x19, G_M37190_IG09 - add x20, x1, #16 - ; byrRegs +[x20] - ldr w21, [x1, #0x08] - ldr x1, [x0, #0x38] - ; gcrRegs -[x1] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M37190_IG05 - ;; size=32 bbWeight=1 PerfScore 13.00 -G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M37190_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - mov x0, x2 - b G_M37190_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x21, x2 + ; gcrRegs +[x21] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M37190_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M37190_IG10 + cbz x21, G_M37190_IG11 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M37190_IG04 + ;; size=20 bbWeight=1 PerfScore 9.00 +G_M37190_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M37190_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M37190_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + add x22, x20, #16 + ; byrRegs +[x22] + ldr w20, [x20, #0x08] + ; gcrRegs -[x20] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M37190_IG07 + ;; size=24 bbWeight=1 PerfScore 11.00 +G_M37190_IG05: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M37190_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M37190_IG06: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + b G_M37190_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M37190_IG07: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M37190_IG08: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + mov x1, x22
; byrRegs +[x1]
- mov w2, w21 - mov x3, x19
+ mov w2, w20 + mov x3, x21
; gcrRegs +[x3] movz x4, #0xD1FFAB1E // code for <unknown method> movk x4, #0xD1FFAB1E LSL #16 movk x4, #1 LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x3 x19] - ; byrRegs -[x1 x20]
+ ; gcrRegs -[x3 x21] + ; byrRegs -[x1 x22]
;; size=32 bbWeight=1 PerfScore 7.00
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+G_M37190_IG09: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M37190_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -96,7 +112,7 @@ G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_unix #0 ;; size=28 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
mov w0, #29 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_unix #0 ;; size=28 bbWeight=0 PerfScore 0.00
-; Total bytes of code 192, prolog size 20, PerfScore 35.06, instruction count 48, allocated bytes for code 192 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
+; Total bytes of code 232, prolog size 20, PerfScore 42.52, instruction count 58, allocated bytes for code 232 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
; ============================================================ Unwind Info: @@ -117,7 +133,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
+ Function Length : 58 (0x0003a) Actual length = 232 (0x0000e8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -125,9 +141,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

benchmarks.run_pgo.osx.arm64.checked.mch

-20 (-5.49%) : 16063.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)

@@ -8,42 +8,40 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 228 ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T03] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T11] ( 3, 2 ) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T10] ( 3, 2 ) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T12] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T11] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T07] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T16] ( 2, 0 ) long -> x0 "argument with side effect"
+; V10 tmp7 [V10,T15] ( 2, 0 ) long -> x0 "argument with side effect"
; V11 tmp8 [V11,T08] ( 2, 4 ) long -> x0 "argument with side effect"
-; V12 cse0 [V12,T10] ( 5, 3 ) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T13] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
+; V12 cse0 [V12,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T12] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T13] ( 3, 0 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T14] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -60,118 +58,114 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbnz x23, G_M18513_IG11
+ mov x22, x0 + ; gcrRegs +[x22] + cbnz x22, G_M18513_IG11
tst w20, #255 bne G_M18513_IG15
- ;; size=28 bbWeight=1 PerfScore 7.50 -G_M18513_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x23]
+ ;; size=24 bbWeight=1 PerfScore 7.00 +G_M18513_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG08 ;; size=16 bbWeight=1 PerfScore 10.00
-G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M18513_IG09: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG09: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 7.50
G_M18513_IG10: ; bbWeight=1, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x1 x22] +[x23]
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x1] +[x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG12 b G_M18513_IG13 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG12: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M18513_IG13: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0 PerfScore 0.00 G_M18513_IG14: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0 PerfScore 0.00 -G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x38] cbz x0, G_M18513_IG16 b G_M18513_IG17 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG16: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06 @@ -179,14 +173,13 @@ G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 { ; gcrRegs -[x0] ;; size=40 bbWeight=0 PerfScore 0.00 G_M18513_IG18: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 364, prolog size 32, PerfScore 51.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
+; Total bytes of code 344, prolog size 28, PerfScore 50.60, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
; ============================================================ Unwind Info: @@ -197,7 +190,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -211,9 +204,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next ...

-20 (-5.49%) : 19963.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)

@@ -8,42 +8,40 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 230 ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T03] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T11] ( 3, 2 ) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T10] ( 3, 2 ) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T12] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T11] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T07] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T16] ( 2, 0 ) long -> x0 "argument with side effect"
+; V10 tmp7 [V10,T15] ( 2, 0 ) long -> x0 "argument with side effect"
; V11 tmp8 [V11,T08] ( 2, 4 ) long -> x0 "argument with side effect"
-; V12 cse0 [V12,T10] ( 5, 3 ) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T13] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
+; V12 cse0 [V12,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T12] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T13] ( 3, 0 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T14] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -60,118 +58,114 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbnz x23, G_M18513_IG11
+ mov x22, x0 + ; gcrRegs +[x22] + cbnz x22, G_M18513_IG11
tst w20, #255 bne G_M18513_IG15
- ;; size=28 bbWeight=1 PerfScore 7.50 -G_M18513_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x23]
+ ;; size=24 bbWeight=1 PerfScore 7.00 +G_M18513_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG08 ;; size=16 bbWeight=1 PerfScore 10.00
-G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M18513_IG09: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG09: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 7.50
G_M18513_IG10: ; bbWeight=1, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x1 x22] +[x23]
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x1] +[x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG12 b G_M18513_IG13 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG12: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M18513_IG13: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0 PerfScore 0.00 G_M18513_IG14: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0 PerfScore 0.00 -G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x38] cbz x0, G_M18513_IG16 b G_M18513_IG17 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG16: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06 @@ -179,14 +173,13 @@ G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 { ; gcrRegs -[x0] ;; size=40 bbWeight=0 PerfScore 0.00 G_M18513_IG18: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 364, prolog size 32, PerfScore 51.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
+; Total bytes of code 344, prolog size 28, PerfScore 50.60, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
; ============================================================ Unwind Info: @@ -197,7 +190,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -211,9 +204,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next ...

-24 (-4.48%) : 19763.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,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,T01] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T09] ( 3, 2 ) long -> x1 single-def -; V02 arg2 [V02,T04] ( 4, 3 ) int -> x2 single-def -; V03 arg3 [V03,T05] ( 4, 3 ) long -> x21 single-def -; V04 arg4 [V04,T06] ( 4, 3 ) int -> x22 single-def -; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V00 this [V00,T00] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T08] ( 3, 2 ) long -> x1 single-def +; V02 arg2 [V02,T03] ( 4, 3 ) int -> x2 single-def +; V03 arg3 [V03,T04] ( 4, 3 ) long -> x21 single-def +; V04 arg4 [V04,T05] ( 4, 3 ) int -> x22 single-def +; V05 arg5 [V05,T06] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 4 ) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T11] ( 10, 3.25) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T11] ( 9, 3 ) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T10] ( 4, 3.50) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T08] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T03] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T07] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -45,7 +45,7 @@ G_M19047_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov w20, w6 ;; size=44 bbWeight=1 PerfScore 8.00 G_M19047_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- cbnz w2, G_M19047_IG12
+ cbnz w2, G_M19047_IG10
;; size=4 bbWeight=1 PerfScore 1.00 G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz str x21, [fp, #0x18] // [V07 loc0] @@ -54,7 +54,7 @@ G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x21, xzr ; gcrRegs +[x21] cmp w20, #6
- bhi G_M19047_IG19
+ bhi G_M19047_IG17
mov w1, w20 adr x0, [@RWD00] ldr w0, [x0, x1, LSL #2] @@ -80,45 +80,33 @@ G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG07
+ ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG07
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG06: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG08
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG07: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG08: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG11 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG09: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG11 - ;; size=12 bbWeight=0.50 PerfScore 2.25 -G_M19047_IG10: ; bbWeight=0.25, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG08: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1 x21] +[x0]
- ;; size=12 bbWeight=0.25 PerfScore 0.50 -G_M19047_IG11: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M19047_IG09: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] ldp fp, lr, [sp], #0x60 ret lr ;; size=20 bbWeight=1 PerfScore 6.00
-G_M19047_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
+G_M19047_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -135,7 +123,7 @@ G_M19047_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 ; gcrRegs -[x0] b G_M19047_IG03 ;; size=48 bbWeight=0 PerfScore 0.00
-G_M19047_IG13: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG11: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
add x1, fp, #24 // [V07 loc0] mov x0, x19 ; gcrRegs +[x0] @@ -148,7 +136,7 @@ G_M19047_IG13: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG12: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -162,7 +150,7 @@ G_M19047_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG13: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -176,7 +164,7 @@ G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -190,7 +178,7 @@ G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -204,7 +192,7 @@ G_M19047_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -218,7 +206,7 @@ G_M19047_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x21] b G_M19047_IG05 ;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG19: ; bbWeight=0, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+G_M19047_IG17: ; bbWeight=0, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -233,16 +221,16 @@ G_M19047_IG19: ; bbWeight=0, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { blr x2 b G_M19047_IG05 ;; size=48 bbWeight=0 PerfScore 0.00
-RWD00 dd G_M19047_IG13 - G_M19047_IG02
+RWD00 dd G_M19047_IG11 - G_M19047_IG02
dd G_M19047_IG04 - G_M19047_IG02
+ dd G_M19047_IG12 - G_M19047_IG02 + dd G_M19047_IG13 - G_M19047_IG02
dd G_M19047_IG14 - G_M19047_IG02
- dd G_M19047_IG15 - G_M19047_IG02
dd G_M19047_IG16 - G_M19047_IG02
- dd G_M19047_IG18 - G_M19047_IG02 - dd G_M19047_IG17 - G_M19047_IG02
+ dd G_M19047_IG15 - G_M19047_IG02
-; Total bytes of code 536, prolog size 24, PerfScore 51.65, instruction count 134, allocated bytes for code 536 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
+; Total bytes of code 512, prolog size 24, PerfScore 49.20, instruction count 128, allocated bytes for code 512 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
; ============================================================ Unwind Info: @@ -253,7 +241,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 134 (0x00086) Actual length = 536 (0x000218)
+ Function Length : 128 (0x00080) Actual length = 512 (0x000200)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+48 (+36.36%) : 17580.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 3, 2.83) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T02] ( 5, 4 ) long -> x1 single-def -; V02 arg1 [V02,T03] ( 4, 3.83) byref -> x19 single-def -; V03 loc0 [V03,T01] ( 7, 6.33) ref -> x0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V00 this [V00,T04] ( 3, 2.83) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 5.13) long -> x19 single-def +; V02 arg1 [V02,T03] ( 4, 3.83) byref -> x20 single-def +; V03 loc0 [V03,T02] ( 7, 6.33) ref -> x0 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, 6.67) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T01] ( 4, 6.67) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 3.33) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 3.33) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 4.67) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 4.67) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 2.67) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.83, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.83, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.83 PerfScore 5.83
-G_M58319_IG04: ; bbWeight=0.67, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.67, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.67 PerfScore 0.67
-G_M58319_IG05: ; bbWeight=0.17, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.17, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.17 PerfScore 0.50
-G_M58319_IG06: ; bbWeight=0.83, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.83, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.83 PerfScore 9.17 +G_M58319_IG07: ; bbWeight=0.67, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.67 PerfScore 2.67 +G_M58319_IG08: ; bbWeight=0.30, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.30 PerfScore 0.90 +G_M58319_IG09: ; bbWeight=0.83, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.83 PerfScore 5.83 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.83 PerfScore 2.92 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 27.33, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 36.65, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+36.36%) : 17884.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 3, 2.80) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T02] ( 5, 3.96) long -> x1 single-def -; V02 arg1 [V02,T03] ( 4, 3.80) byref -> x19 single-def -; V03 loc0 [V03,T01] ( 7, 6.20) ref -> x0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V00 this [V00,T04] ( 3, 2.80) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 5.05) long -> x19 single-def +; V02 arg1 [V02,T03] ( 4, 3.80) byref -> x20 single-def +; V03 loc0 [V03,T02] ( 7, 6.20) ref -> x0 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, 6.40) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T01] ( 4, 6.40) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 3.20) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 3.20) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 4.48) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 2.56) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.80 PerfScore 5.60
-G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG05: ; bbWeight=0.16, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.16, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.16 PerfScore 0.48
-G_M58319_IG06: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.80 PerfScore 8.80 +G_M58319_IG07: ; bbWeight=0.64, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.64 PerfScore 2.56 +G_M58319_IG08: ; bbWeight=0.29, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.29 PerfScore 0.86 +G_M58319_IG09: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.80 PerfScore 5.60 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.80 PerfScore 2.80 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 26.82, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 35.74, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+36.36%) : 21052.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.11) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.13) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.11) byref -> x19 single-def
+; V00 this [V00,T02] ( 3, 2.11) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 3.28) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.11) byref -> x20 single-def
; V03 loc0 [V03,T03] ( 7, 3.44) ref -> x0 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.88) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 0.88) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 0.44) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 0.44) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 0.62) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 0.62) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 0.35) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.11, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.11, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.11 PerfScore 0.77
-G_M58319_IG04: ; bbWeight=0.09, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.09, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.09 PerfScore 0.09
-G_M58319_IG05: ; bbWeight=0.02, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.02, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.02 PerfScore 0.07
-G_M58319_IG06: ; bbWeight=0.11, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.11, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.11 PerfScore 1.21 +G_M58319_IG07: ; bbWeight=0.09, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.09 PerfScore 0.35 +G_M58319_IG08: ; bbWeight=0.04, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.04 PerfScore 0.12 +G_M58319_IG09: ; bbWeight=0.11, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.11 PerfScore 0.77 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.11 PerfScore 0.39 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 16.20, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 17.00, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

benchmarks.run_tiered.osx.arm64.checked.mch

-20 (-5.49%) : 7501.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)

@@ -7,42 +7,40 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5.50) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T02] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T12] ( 3, 2.50) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T11] ( 3, 2.50) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T08] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T07] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T05] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T15] ( 2, 2 ) long -> x0 "argument with side effect" -; V11 tmp8 [V11,T16] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 cse0 [V12,T07] ( 5, 3.50) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T04] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T09] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T13] ( 3, 2 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T14] ( 3, 2 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T11] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+; V10 tmp7 [V10,T14] ( 2, 2 ) long -> x0 "argument with side effect" +; V11 tmp8 [V11,T15] ( 2, 2 ) long -> x0 "argument with side effect" +; V12 cse0 [V12,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T04] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T08] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T12] ( 3, 2 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T09] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T13] ( 3, 2 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -59,56 +57,53 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbz x23, G_M18513_IG11 - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x22]
+ mov x22, x0 + ; gcrRegs +[x22] + cbz x22, G_M18513_IG11 + ;; size=16 bbWeight=1 PerfScore 5.50 +G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG08 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35
-G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0.50 PerfScore 2.00 G_M18513_IG10: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
tst w20, #255 beq G_M18513_IG16 ldr x0, [x21, #0x38] @@ -116,79 +111,77 @@ G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480 ldr x0, [x0, #0x38] cbz x0, G_M18513_IG13 ;; size=24 bbWeight=0.50 PerfScore 5.75
-G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG14 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16 movn w0, #0 ; gcrRegs -[x0]
- ;; size=40 bbWeight=0.50 PerfScore 3.50
+ ;; size=40 bbWeight=0.50 PerfScore 6.00
G_M18513_IG15: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG18 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG19 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=0.50 PerfScore 2.50
+ ;; size=20 bbWeight=0.50 PerfScore 3.75
G_M18513_IG20: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 364, prolog size 32, PerfScore 62.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
+; Total bytes of code 344, prolog size 28, PerfScore 61.85, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
; ============================================================ Unwind Info: @@ -199,7 +192,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) ...

-24 (-4.51%) : 4915.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,int,int,int):System.Canon[]:this (Tier1)

@@ -9,23 +9,23 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 6.50) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T09] ( 3, 2.50) long -> x1 single-def -; V02 arg2 [V02,T05] ( 4, 3.50) int -> x2 single-def -; V03 arg3 [V03,T06] ( 4, 3.50) long -> x21 single-def -; V04 arg4 [V04,T07] ( 4, 3.50) int -> x22 single-def -; V05 arg5 [V05,T08] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V01 arg1 [V01,T08] ( 3, 2.50) long -> x1 single-def +; V02 arg2 [V02,T04] ( 4, 3.50) int -> x2 single-def +; V03 arg3 [V03,T05] ( 4, 3.50) long -> x21 single-def +; V04 arg4 [V04,T06] ( 4, 3.50) int -> x22 single-def +; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 6.50) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T11] ( 4, 2.75) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T01] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T10] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T04] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T09] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T10] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -192,38 +192,26 @@ G_M19047_IG13: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG15
+ ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG15
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG14: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG16
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG15: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG19 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG17: ; bbWeight=0.25, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG19 - ;; size=12 bbWeight=0.25 PerfScore 1.12 -G_M19047_IG18: ; bbWeight=0.12, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1 x21] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M19047_IG19: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M19047_IG17: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] @@ -239,7 +227,7 @@ RWD00 dd G_M19047_IG05 - G_M19047_IG02 dd G_M19047_IG10 - G_M19047_IG02
-; Total bytes of code 532, prolog size 24, PerfScore 81.02, instruction count 133, allocated bytes for code 532 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
+; Total bytes of code 508, prolog size 24, PerfScore 79.95, instruction count 127, allocated bytes for code 508 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
; ============================================================ Unwind Info: @@ -250,7 +238,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 133 (0x00085) Actual length = 532 (0x000214)
+ Function Length : 127 (0x0007f) Actual length = 508 (0x0001fc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-3.70%) : 11817.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object

@@ -10,23 +10,21 @@ ; ; V00 arg0 [V00,T00] ( 9, 6 ) ref -> x19 class-hnd single-def <System.RuntimeType> ; V01 arg1 [V01,T01] ( 8, 5 ) int -> x20 single-def
-;* V02 loc0 [V02,T12] ( 0, 0 ) ubyte -> zero-ref -; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> x21
+;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref +; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> x21
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T05] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T13] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T03] ( 5, 3.75) ref -> x0 class-hnd "spilling QMark2" <System.Object[]> -; V09 tmp4 [V09,T07] ( 3, 1.50) ref -> x0 -; V10 tmp5 [V10,T08] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> -; V11 tmp6 [V11,T04] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> -;* V12 tmp7 [V12,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> -;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> -;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V15 tmp10 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 5, 5 ) ref -> x0 "Single return block return value" -; V17 cse0 [V17,T10] ( 3, 1.50) long -> x0 "CSE - moderate" -; V18 cse1 [V18,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 3, 1.50) ref -> x0 +; V07 tmp2 [V07,T07] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> +; V08 tmp3 [V08,T03] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> +;* V09 tmp4 [V09,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> +;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> +;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V13 tmp8 [V13,T02] ( 5, 5 ) ref -> x0 "Single return block return value" +; V14 tmp9 [V14,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V15 cse0 [V15,T09] ( 3, 1.50) long -> x0 "CSE - moderate" +; V16 cse1 [V16,T08] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 8 @@ -94,7 +92,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 b G_M32569_IG07 @@ -105,16 +103,18 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #60
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x1, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 ldr x0, [x1] ; gcrRegs +[x0]
+ ; byrRegs -[x0]
;; size=36 bbWeight=0.50 PerfScore 3.75 G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=4 bbWeight=0.50 PerfScore 0.50 G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19] @@ -124,10 +124,10 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[x19] +[x0] ; gcr arg pop 0
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=32 bbWeight=0.50 PerfScore 3.00 G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] @@ -135,18 +135,20 @@ G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #61
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 ldr x0, [x0] ; gcrRegs +[x0]
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=40 bbWeight=0.50 PerfScore 4.25 G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19]
- cbz w20, G_M32569_IG14
+ cbz w20, G_M32569_IG11
mov x0, x19 ; gcrRegs +[x0] mov w1, w20 @@ -159,43 +161,32 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M32569_IG13 - ;; size=40 bbWeight=0.50 PerfScore 4.50 -G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #1 LSL #32 - cmp x2, x3 - beq G_M32569_IG13 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref - b G_M32569_IG19 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ b G_M32569_IG16 + ;; size=56 bbWeight=0.50 PerfScore 5.75 +G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x19] ldr x0, [x19, #0x10]
- cbz x0, G_M32569_IG16
+ cbz x0, G_M32569_IG13
bl <unknown method> ; gcrRegs +[x0] ; gcr arg pop 0 mov x20, x0 ; gcrRegs +[x20]
- cbz x20, G_M32569_IG16
+ cbz x20, G_M32569_IG13
ldr x0, [x20] ; gcrRegs -[x0] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 cmp x0, x1
- beq G_M32569_IG15
+ beq G_M32569_IG12
movz x1, #8 movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -209,10 +200,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0 x19] ; gcr arg pop 0 ;; size=80 bbWeight=0.50 PerfScore 10.00
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M32569_IG14
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x20] +[x19] mov x0, x19 ; gcrRegs +[x0] @@ -226,7 +217,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, mov x20, x0 ; gcrRegs +[x20] ;; size=28 bbWeight=0.50 PerfScore 3.25
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -236,14 +227,14 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ldr x1, [x1] ldr wzr, [x0] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M32569_IG18: ; bbWeight=0.50, epilog, nogc, extend
+G_M32569_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x1 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x20] ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -251,7 +242,7 @@ G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 540, prolog size 24, PerfScore 64.94, instruction count 135, allocated bytes for code 540 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
+; Total bytes of code 520, prolog size 24, PerfScore 64.00, instruction count 130, allocated bytes for code 520 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
; ============================================================ Unwind Info: @@ -262,7 +253,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 135 (0x00087) Actual length = 540 (0x00021c)
+ Function Length : 130 (0x00082) Actual length = 520 (0x000208)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+16 (+10.53%) : 8975.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable1[System.DateTimeOffset]]():System.Nullable1System.DateTimeOffset

@@ -44,27 +44,31 @@ G_M13724_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_BOX
+ bl CORINFO_HELP_ISINSTANCEOF_EXCEPTION
; gcrRegs +[x0] str x0, [fp, #0x10] // [V04 tmp2]
- ldr x2, [fp, #0x10] // [V04 tmp2] - ; gcrRegs +[x2] - ldr x0, [fp, #0x38] // [V00 RetBuf]
+ ldr x1, [fp, #0x10] // [V04 tmp2] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1]
; byrRegs +[x0]
- movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ; byrRegs -[x0] - ;; size=120 bbWeight=1 PerfScore 25.50
+ ldr x1, [fp, #0x38] // [V00 RetBuf] + ; byrRegs +[x1] + ldp x2, x3, [x0] + stp x2, x3, [x1] + ldr x2, [x0, #0x10] + str x2, [x1, #0x10] + ;; size=136 bbWeight=1 PerfScore 34.50
G_M13724_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x40 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 152, prolog size 20, PerfScore 33.00, instruction count 38, allocated bytes for code 152 (MethodHash=d3e7ca63) for method MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)
+; Total bytes of code 168, prolog size 20, PerfScore 42.00, instruction count 42, allocated bytes for code 168 (MethodHash=d3e7ca63) for method MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)
; ============================================================ Unwind Info: @@ -75,7 +79,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 152 (0x000098)
+ Function Length : 42 (0x0002a) Actual length = 168 (0x0000a8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+15.38%) : 6243.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -8,11 +8,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x19 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T06] ( 3, 3 ) ref -> x22 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> x20 single-def -; V04 arg3 [V04,T03] ( 4, 4 ) int -> x21 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T07] ( 3, 3 ) ref -> x23 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> x21 single-def +; V04 arg3 [V04,T03] ( 4, 4 ) int -> x22 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,80 +24,96 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T04] ( 3, 6 ) ref -> x0 single-def "argument with side effect"
-; V16 cse0 [V16,T09] ( 3, 3 ) int -> x1 "CSE - aggressive" -; V17 rat0 [V17,T08] ( 3, 4 ) long -> x1 "runtime lookup" -; V18 rat1 [V18,T05] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T07] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T10] ( 3, 3 ) int -> x0 "CSE - aggressive" +;* V17 rat0 [V17,T11] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T05] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T06] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- str x0, [fp, #0x18] - mov x19, x1 - ; gcrRegs +[x19] - mov x22, x2 - ; gcrRegs +[x22] - mov w20, w3 - mov w21, w4 - ;; size=36 bbWeight=1 PerfScore 6.50 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - cbz x19, G_M13831_IG08 - ldr w1, [x19, #0x08] - cmp w1, w20 - blo G_M13831_IG09 - sub w1, w1, w20 - cmp w1, w21 - blo G_M13831_IG10 - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M13831_IG05 - ;; size=44 bbWeight=1 PerfScore 15.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ldr x1, [x1, #0x18] - cbz x1, G_M13831_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - b G_M13831_IG06 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+ str x0, [fp, #0x10] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x23, x2 + ; gcrRegs +[x23] + mov w21, w3 + mov w22, w4 + ;; size=44 bbWeight=1 PerfScore 8.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M13831_IG10 + ldr w0, [x20, #0x08] + cmp w0, w21 + blo G_M13831_IG11 + sub w0, w0, w21 + cmp w0, w22 + blo G_M13831_IG12 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M13831_IG04 + ;; size=40 bbWeight=1 PerfScore 14.50 +G_M13831_IG03: ; bbWeight=0.20, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M13831_IG04: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M13831_IG07 + ;; size=16 bbWeight=1 PerfScore 7.50 +G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M13831_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + b G_M13831_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x1
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 ldr x1, [x1] blr x1 ; gcrRegs +[x0]
- mov x1, x19
+ mov x1, x20
; gcrRegs +[x1]
- mov x2, x22
+ mov x2, x23
; gcrRegs +[x2]
- mov w3, w20 - mov w4, w21
+ mov w3, w21 + mov w4, w22
ldr x5, [x0] ldr x5, [x5, #0x50] ldr x5, [x5] blr x5
- ; gcrRegs -[x0-x2 x19 x22] - ;; size=56 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0-x2 x20 x23] + ;; size=52 bbWeight=1 PerfScore 17.50 +G_M13831_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=20 bbWeight=1 PerfScore 6.00 +G_M13831_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_unix #0 ;; size=28 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 @@ -114,7 +130,7 @@ G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x0 brk_unix #0 ;; size=24 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 @@ -123,7 +139,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_unix #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 260, prolog size 20, PerfScore 48.42, instruction count 65, allocated bytes for code 260 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 300, prolog size 24, PerfScore 59.02, instruction count 75, allocated bytes for code 300 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================ Unwind Info: @@ -134,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 65 (0x00041) Actual length = 260 (0x000104)
+ Function Length : 75 (0x0004b) Actual length = 300 (0x00012c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,10 +158,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! E4 end
- E4 end - E4 end

+48 (+36.36%) : 4906.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -8,84 +8,105 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.60) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.50) byref -> x19 single-def
+; V00 this [V00,T03] ( 3, 2.50) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 4.28) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.50) byref -> x20 single-def
; V03 loc0 [V03,T02] ( 7, 5 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 4 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 2 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 2 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 2.80) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 1.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.50 PerfScore 3.50
-G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.50 PerfScore 5.50 +G_M58319_IG07: ; bbWeight=0.40, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M58319_IG08: ; bbWeight=0.18, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M58319_IG09: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.50 PerfScore 3.50 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.50 PerfScore 1.75 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 22.20, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 27.59, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -96,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -104,9 +125,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

coreclr_tests.run.osx.arm64.checked.mch

-4 (-3.70%) : 1809.dasm - NullableTest1:BoxUnboxToQ(System.Enum):ubyte (Tier0)

@@ -7,9 +7,8 @@ ; ; V00 arg0 [V00 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[] class-hnd <System.Enum> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[XS] addr-exposed "non-inline candidate call" <System.Nullable`1[int]>
+; V02 tmp1 [V02 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[S] "non-inline candidate call" <System.Nullable`1[int]>
; V03 tmp2 [V03 ] ( 1, 1 ) int -> [fp+0x1C] do-not-enreg[] "argument with side effect"
-; V04 tmp3 [V04 ] ( 1, 1 ) long -> [fp+0x10] do-not-enreg[] "argument with side effect"
; ; Lcl frame size = 32 @@ -19,17 +18,18 @@ G_M10331_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x0, [fp, #0x28] // [V00 arg0] ;; size=12 bbWeight=1 PerfScore 2.50 G_M10331_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- add x0, fp, #32 // [V02 tmp1] - ldr x2, [fp, #0x28] // [V00 arg0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ldr x0, [fp, #0x20] // [V02 tmp1] - str x0, [fp, #0x10] // [V04 tmp3]
+ ldr x1, [fp, #0x28] // [V00 arg0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldr x1, [x0] + str x1, [fp, #0x20]
mov w0, wzr
+ ; byrRegs -[x0]
movz x1, #0xD1FFAB1E // code for <unknown method> movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -37,19 +37,19 @@ G_M10331_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x1 str w0, [fp, #0x1C] // [V03 tmp2] ldr w1, [fp, #0x1C] // [V03 tmp2]
- ldr x0, [fp, #0x10] // [V04 tmp3]
+ ldr x0, [fp, #0x20] // [V02 tmp1]
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2] blr x2
- ;; size=88 bbWeight=1 PerfScore 24.50
+ ;; size=84 bbWeight=1 PerfScore 25.00
G_M10331_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x30 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 108, prolog size 8, PerfScore 29.00, instruction count 27, allocated bytes for code 108 (MethodHash=b7e9d7a4) for method NullableTest1:BoxUnboxToQ(System.Enum):ubyte (Tier0)
+; Total bytes of code 104, prolog size 8, PerfScore 29.50, instruction count 26, allocated bytes for code 104 (MethodHash=b7e9d7a4) for method NullableTest1:BoxUnboxToQ(System.Enum):ubyte (Tier0)
; ============================================================ Unwind Info: @@ -60,7 +60,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 26 (0x0001a) Actual length = 104 (0x000068)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-4 (-3.70%) : 1997.dasm - NullableTest7:BoxUnboxToQ(System.IComparable):ubyte (Tier0)

@@ -7,9 +7,8 @@ ; ; V00 arg0 [V00 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[] class-hnd <System.IComparable> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[XS] addr-exposed "non-inline candidate call" <System.Nullable`1[ubyte]>
+; V02 tmp1 [V02 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[S] "non-inline candidate call" <System.Nullable`1[ubyte]>
; V03 tmp2 [V03 ] ( 1, 1 ) int -> [fp+0x1C] do-not-enreg[] "argument with side effect"
-; V04 tmp3 [V04 ] ( 1, 1 ) int -> [fp+0x18] do-not-enreg[] "argument with side effect"
; ; Lcl frame size = 32 @@ -19,17 +18,18 @@ G_M65071_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x0, [fp, #0x28] // [V00 arg0] ;; size=12 bbWeight=1 PerfScore 2.50 G_M65071_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- add x0, fp, #32 // [V02 tmp1] - ldr x2, [fp, #0x28] // [V00 arg0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ldrh w0, [fp, #0x20] // [V02 tmp1] - str w0, [fp, #0x18] // [V04 tmp3]
+ ldr x1, [fp, #0x28] // [V00 arg0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldrh w1, [x0] + strh w1, [fp, #0x20]
mov w0, wzr
+ ; byrRegs -[x0]
movz x1, #0xD1FFAB1E // code for <unknown method> movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -37,19 +37,19 @@ G_M65071_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x1 str w0, [fp, #0x1C] // [V03 tmp2] ldr w1, [fp, #0x1C] // [V03 tmp2]
- ldr w0, [fp, #0x18] // [V04 tmp3]
+ ldrh w0, [fp, #0x20] // [V02 tmp1]
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2] blr x2
- ;; size=88 bbWeight=1 PerfScore 24.50
+ ;; size=84 bbWeight=1 PerfScore 25.00
G_M65071_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x30 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 108, prolog size 8, PerfScore 29.00, instruction count 27, allocated bytes for code 108 (MethodHash=ceb801d0) for method NullableTest7:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
+; Total bytes of code 104, prolog size 8, PerfScore 29.50, instruction count 26, allocated bytes for code 104 (MethodHash=ceb801d0) for method NullableTest7:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
; ============================================================ Unwind Info: @@ -60,7 +60,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 26 (0x0001a) Actual length = 104 (0x000068)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-4 (-3.70%) : 2025.dasm - NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)

@@ -7,9 +7,8 @@ ; ; V00 arg0 [V00 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[] class-hnd <System.IComparable> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[XS] addr-exposed "non-inline candidate call" <System.Nullable`1[int]>
+; V02 tmp1 [V02 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[S] "non-inline candidate call" <System.Nullable`1[int]>
; V03 tmp2 [V03 ] ( 1, 1 ) int -> [fp+0x1C] do-not-enreg[] "argument with side effect"
-; V04 tmp3 [V04 ] ( 1, 1 ) long -> [fp+0x10] do-not-enreg[] "argument with side effect"
; ; Lcl frame size = 32 @@ -19,17 +18,18 @@ G_M1723_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x0, [fp, #0x28] // [V00 arg0] ;; size=12 bbWeight=1 PerfScore 2.50 G_M1723_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- add x0, fp, #32 // [V02 tmp1] - ldr x2, [fp, #0x28] // [V00 arg0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ldr x0, [fp, #0x20] // [V02 tmp1] - str x0, [fp, #0x10] // [V04 tmp3]
+ ldr x1, [fp, #0x28] // [V00 arg0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldr x1, [x0] + str x1, [fp, #0x20]
mov w0, wzr
+ ; byrRegs -[x0]
movz x1, #0xD1FFAB1E // code for <unknown method> movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -37,19 +37,19 @@ G_M1723_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x1 str w0, [fp, #0x1C] // [V03 tmp2] ldr w1, [fp, #0x1C] // [V03 tmp2]
- ldr x0, [fp, #0x10] // [V04 tmp3]
+ ldr x0, [fp, #0x20] // [V02 tmp1]
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2] blr x2
- ;; size=88 bbWeight=1 PerfScore 24.50
+ ;; size=84 bbWeight=1 PerfScore 25.00
G_M1723_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x30 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 108, prolog size 8, PerfScore 29.00, instruction count 27, allocated bytes for code 108 (MethodHash=f3a3f944) for method NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
+; Total bytes of code 104, prolog size 8, PerfScore 29.50, instruction count 26, allocated bytes for code 104 (MethodHash=f3a3f944) for method NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
; ============================================================ Unwind Info: @@ -60,7 +60,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 26 (0x0001a) Actual length = 104 (0x000068)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+12 (+7.89%) : 2060.dasm - NullableTest18:BoxUnboxToQ(System.IComparable):ubyte (Tier0)

@@ -8,7 +8,7 @@ ; V00 arg0 [V00 ] ( 1, 1 ) ref -> [fp+0x58] do-not-enreg[] class-hnd <System.IComparable> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V02 tmp1 [V02 ] ( 1, 1 ) struct (16) [fp+0x48] do-not-enreg[SAR] multireg-arg multireg-ret "Return value temp for multireg return" <System.Decimal>
-; V03 tmp2 [V03 ] ( 1, 1 ) struct (24) [fp+0x30] do-not-enreg[XS] addr-exposed "impAppendStmt" <System.Nullable`1[System.Decimal]>
+; V03 tmp2 [V03 ] ( 1, 1 ) struct (24) [fp+0x30] do-not-enreg[S] "impAppendStmt" <System.Nullable`1[System.Decimal]>
; V04 tmp3 [V04 ] ( 1, 1 ) struct (24) [fp+0x18] do-not-enreg[XS] addr-exposed "by-value struct argument" <System.Nullable`1[System.Decimal]> ; ; Lcl frame size = 80 @@ -19,15 +19,20 @@ G_M63921_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x0, [fp, #0x58] // [V00 arg0] ;; size=12 bbWeight=1 PerfScore 2.50 G_M63921_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- add x0, fp, #48 // [V03 tmp2] - ldr x2, [fp, #0x58] // [V00 arg0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2]
+ ldr x1, [fp, #0x58] // [V00 arg0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldp x1, x2, [x0] + stp x1, x2, [fp, #0x30] + ldr x1, [x0, #0x10] + str x1, [fp, #0x40]
movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 ldr x0, [x0] @@ -54,13 +59,13 @@ G_M63921_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x3, #1 LSL #32 ldr x3, [x3] blr x3
- ;; size=132 bbWeight=1 PerfScore 38.50
+ ;; size=144 bbWeight=1 PerfScore 47.00
G_M63921_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x60 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 152, prolog size 8, PerfScore 43.00, instruction count 38, allocated bytes for code 152 (MethodHash=ae63064e) for method NullableTest18:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
+; Total bytes of code 164, prolog size 8, PerfScore 51.50, instruction count 41, allocated bytes for code 164 (MethodHash=ae63064e) for method NullableTest18:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
; ============================================================ Unwind Info: @@ -71,7 +76,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 152 (0x000098)
+ Function Length : 41 (0x00029) Actual length = 164 (0x0000a4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+12 (+8.33%) : 2245.dasm - NullableTest16:BoxUnboxToQ(System.Object):ubyte (Tier0)

@@ -8,7 +8,7 @@ ; V00 arg0 [V00 ] ( 1, 1 ) ref -> [fp+0x68] do-not-enreg[] class-hnd <System.Object> ; V01 loc0 [V01 ] ( 1, 1 ) struct (16) [fp+0x58] do-not-enreg[SA] multireg-arg must-init ld-addr-op <System.Guid> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03 ] ( 1, 1 ) struct (24) [fp+0x40] do-not-enreg[XS] addr-exposed "impAppendStmt" <System.Nullable`1[System.Guid]>
+; V03 tmp1 [V03 ] ( 1, 1 ) struct (24) [fp+0x40] do-not-enreg[S] "impAppendStmt" <System.Nullable`1[System.Guid]>
; V04 tmp2 [V04 ] ( 1, 1 ) struct (16) [fp+0x30] do-not-enreg[SAR] multireg-arg multireg-ret "Return value temp for multireg return" <System.Guid> ; V05 tmp3 [V05 ] ( 1, 1 ) struct (24) [fp+0x18] do-not-enreg[XS] addr-exposed "by-value struct argument" <System.Nullable`1[System.Guid]> ; @@ -22,17 +22,22 @@ G_M34635_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x0, [fp, #0x68] // [V00 arg0] ;; size=20 bbWeight=1 PerfScore 4.50 G_M34635_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- add x0, fp, #64 // [V03 tmp1] - ldr x2, [fp, #0x68] // [V00 arg0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2]
+ ldr x1, [fp, #0x68] // [V00 arg0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldp x1, x2, [x0] + stp x1, x2, [fp, #0x40] + ldr w1, [x0, #0x10] + str w1, [fp, #0x50]
movi v16.4s, #0 str q16, [fp, #0x58] // [V01 loc0] ldr x0, [fp, #0x58] // [V01 loc0]
+ ; byrRegs -[x0]
ldr x1, [fp, #0x60] // [V01 loc0+0x08] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 @@ -53,13 +58,13 @@ G_M34635_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x3, #1 LSL #32 ldr x3, [x3] blr x3
- ;; size=116 bbWeight=1 PerfScore 35.00
+ ;; size=128 bbWeight=1 PerfScore 43.50
G_M34635_IG03: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x70 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 144, prolog size 16, PerfScore 41.50, instruction count 36, allocated bytes for code 144 (MethodHash=607178b4) for method NullableTest16:BoxUnboxToQ(System.Object):ubyte (Tier0)
+; Total bytes of code 156, prolog size 16, PerfScore 50.00, instruction count 39, allocated bytes for code 156 (MethodHash=607178b4) for method NullableTest16:BoxUnboxToQ(System.Object):ubyte (Tier0)
; ============================================================ Unwind Info: @@ -70,7 +75,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 39 (0x00027) Actual length = 156 (0x00009c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+28 (+9.86%) : 2515.dasm - NullableTest45:BoxUnboxToQ(System.Object):ubyte (Tier0)

@@ -8,7 +8,7 @@ ; V00 arg0 [V00 ] ( 1, 1 ) ref -> [fp+0x268] do-not-enreg[] class-hnd <System.Object> ; V01 loc0 [V01 ] ( 1, 1 ) struct (96) [fp+0x208] do-not-enreg[S] must-init ld-addr-op <MixedAllStruct> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03 ] ( 1, 1 ) struct (104) [fp+0x1A0] do-not-enreg[XS] must-init addr-exposed "impAppendStmt" <System.Nullable`1[MixedAllStruct]>
+; V03 tmp1 [V03 ] ( 1, 1 ) struct (104) [fp+0x1A0] do-not-enreg[S] must-init "impAppendStmt" <System.Nullable`1[MixedAllStruct]>
; V04 tmp2 [V04 ] ( 1, 1 ) struct (96) [fp+0x140] do-not-enreg[HS] must-init hidden-struct-arg "spilled call-like call argument" <MixedAllStruct> ; V05 tmp3 [V05 ] ( 1, 1 ) struct (96) [fp+0xE0] do-not-enreg[XS] must-init addr-exposed "by-value struct argument" <MixedAllStruct> ; V06 tmp4 [V06 ] ( 1, 1 ) struct (104) [fp+0x78] do-not-enreg[XS] must-init addr-exposed "by-value struct argument" <System.Nullable`1[MixedAllStruct]> @@ -35,21 +35,34 @@ G_M13613_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x0, [fp, #0xD1FFAB1E] // [V00 arg0] ;; size=64 bbWeight=1 PerfScore 12.50 G_M13613_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- add x0, fp, #0xD1FFAB1E // [V03 tmp1] - ldr x2, [fp, #0xD1FFAB1E] // [V00 arg0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2]
+ ldr x1, [fp, #0xD1FFAB1E] // [V00 arg0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ;; size=20 bbWeight=1 PerfScore 4.50 +G_M13613_IG03: ; bbWeight=1, nogc, extend + ldp q16, q17, [x0] + stp q16, q17, [fp, #0xD1FFAB1E] + ldp q16, q17, [x0, #0x20] + stp q16, q17, [fp, #0xD1FFAB1E] + ldp q16, q17, [x0, #0x40] + stp q16, q17, [fp, #0xD1FFAB1E] + ldr x1, [x0, #0x60] + str x1, [fp, #0xD1FFAB1E] + ;; size=32 bbWeight=1 PerfScore 16.00 +G_M13613_IG04: ; bbWeight=1, extend
add x0, fp, #0xD1FFAB1E
+ ; byrRegs -[x0]
movi v16.16b, #0 stp q16, q16, [x0] stp q16, q16, [x0, #0x20] stp q16, q16, [x0, #0x40]
- ;; size=44 bbWeight=1 PerfScore 9.00 -G_M13613_IG03: ; bbWeight=1, nogc, extend
+ ;; size=20 bbWeight=1 PerfScore 4.00 +G_M13613_IG05: ; bbWeight=1, nogc, extend
add x0, fp, #0xD1FFAB1E ldp q16, q17, [x0, #0xE0] stp q16, q17, [fp, #0xE0] @@ -58,7 +71,7 @@ G_M13613_IG03: ; bbWeight=1, nogc, extend ldp q16, q17, [x0, #0xD1FFAB1E] stp q16, q17, [fp, #0xD1FFAB1E] ;; size=28 bbWeight=1 PerfScore 12.50
-G_M13613_IG04: ; bbWeight=1, extend
+G_M13613_IG06: ; bbWeight=1, extend
add x0, fp, #224 // [V05 tmp3] add x8, fp, #0xD1FFAB1E // [V04 tmp2] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -67,7 +80,7 @@ G_M13613_IG04: ; bbWeight=1, extend ldr x1, [x1] blr x1 ;; size=28 bbWeight=1 PerfScore 6.50
-G_M13613_IG05: ; bbWeight=1, nogc, extend
+G_M13613_IG07: ; bbWeight=1, nogc, extend
add x0, fp, #0xD1FFAB1E ldr x1, [x0, #0x78] str x1, [fp, #0x78] @@ -78,7 +91,7 @@ G_M13613_IG05: ; bbWeight=1, nogc, extend ldp q16, q17, [x0, #0xC0] stp q16, q17, [fp, #0xC0] ;; size=36 bbWeight=1 PerfScore 16.50
-G_M13613_IG06: ; bbWeight=1, nogc, extend
+G_M13613_IG08: ; bbWeight=1, nogc, extend
add x0, fp, #0xD1FFAB1E ldr x1, [x0, #0x18] str x1, [fp, #0x18] @@ -91,7 +104,7 @@ G_M13613_IG06: ; bbWeight=1, nogc, extend ldr x1, [x0, #0x70] str x1, [fp, #0x70] ;; size=44 bbWeight=1 PerfScore 20.50
-G_M13613_IG07: ; bbWeight=1, extend
+G_M13613_IG09: ; bbWeight=1, extend
add x0, fp, #120 // [V06 tmp4] add x1, fp, #24 // [V07 tmp5] movz x2, #0xD1FFAB1E // code for <unknown method> @@ -100,13 +113,13 @@ G_M13613_IG07: ; bbWeight=1, extend ldr x2, [x2] blr x2 ;; size=28 bbWeight=1 PerfScore 6.50
-G_M13613_IG08: ; bbWeight=1, epilog, nogc, extend
+G_M13613_IG10: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp] add sp, sp, #0xD1FFAB1E ret lr ;; size=12 bbWeight=1 PerfScore 2.50
-; Total bytes of code 284, prolog size 60, PerfScore 86.50, instruction count 71, allocated bytes for code 284 (MethodHash=417fcad2) for method NullableTest45:BoxUnboxToQ(System.Object):ubyte (Tier0)
+; Total bytes of code 312, prolog size 60, PerfScore 102.00, instruction count 78, allocated bytes for code 312 (MethodHash=417fcad2) for method NullableTest45:BoxUnboxToQ(System.Object):ubyte (Tier0)
; ============================================================ Unwind Info: @@ -117,7 +130,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 71 (0x00047) Actual length = 284 (0x00011c)
+ Function Length : 78 (0x0004e) Actual length = 312 (0x000138)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

libraries.pmi.osx.arm64.checked.mch

-44 (-23.91%) : 11600.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[int]]:GetHashCode():int:this (FullOpts)

@@ -10,30 +10,30 @@ ; ; V00 this [V00,T00] ( 6, 5.50) byref -> x19 this single-def ;* V01 TypeCtx [V01 ] ( 0, 0 ) long -> zero-ref single-def
-; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x20] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> -; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x10] 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 -> x0 -; V07 tmp3 [V07,T05] ( 3, 2 ) int -> x0
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> x0 +; V07 tmp3 [V07,T04] ( 3, 2 ) int -> x0
; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> x1 single-def "impAppendStmt" ;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref
-; V10 tmp6 [V10,T03] ( 4, 2.50) byref -> x2
+;* 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 -> x1 -; V13 tmp9 [V13,T07] ( 3, 1.50) int -> x1 "Inline return value spill temp"
+;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref +; V13 tmp9 [V13,T05] ( 3, 2 ) int -> x1 "Inline return value spill temp"
;* V14 tmp10 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V15 tmp11 [V15 ] ( 5, 3.50) ubyte -> [fp+0x18] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP -; V16 tmp12 [V16 ] ( 3, 2 ) int -> [fp+0x1C] 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 -> x0 single-def "argument with side effect" ;
-; Lcl frame size = 24
+; Lcl frame size = 8
G_M34277_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - str x19, [sp, #0x28]
+ stp fp, lr, [sp, #-0x20]! + str x19, [sp, #0x18]
mov fp, sp
- str xzr, [fp, #0x20] // [V02 loc0]
+ str xzr, [fp, #0x10] // [V02 loc0]
mov x19, x0 ; byrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00 @@ -41,7 +41,7 @@ G_M34277_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, by ldrsb wzr, [x19] mov x0, x19 ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V02 loc0]
+ ldr x1, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x1] cbnz x1, G_M34277_IG04 ;; size=16 bbWeight=1 PerfScore 6.50 @@ -50,11 +50,11 @@ G_M34277_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, ; byrRegs -[x0] ldr x0, [x19] ; gcrRegs +[x0]
- str x0, [fp, #0x20] // [V02 loc0] - add x0, fp, #32 // [V02 loc0]
+ str x0, [fp, #0x10] // [V02 loc0] + add x0, fp, #16 // [V02 loc0]
; gcrRegs -[x0] ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V02 loc0]
+ ldr x1, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x1] cbnz x1, G_M34277_IG04 mov w0, wzr @@ -76,48 +76,33 @@ G_M34277_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80001 {x0 x1 G_M34277_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref, isz add x1, x19, #8 ; byrRegs +[x1]
- str xzr, [fp, #0x18] // [V03 loc1] - mov x2, x1 - ; byrRegs +[x2] - ldrb w3, [fp, #0x18] // [V15 tmp11] - cbnz w3, G_M34277_IG07 - ;; size=20 bbWeight=1 PerfScore 5.00 -G_M34277_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {x1}, byref, isz - ; byrRegs -[x2 x19] - ldr x2, [x1] - str x2, [fp, #0x18] // [V03 loc1] - add x2, fp, #24 // [V03 loc1] - ; byrRegs +[x2] - ldrb w1, [fp, #0x18] // [V15 tmp11]
+ ldrb w2, [x1] + cbnz w2, G_M34277_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M34277_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; byrRegs -[x1 x19] + mov w1, wzr + b G_M34277_IG08 + ;; size=8 bbWeight=0.50 PerfScore 0.75 +G_M34277_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {x1}, byref + ; byrRegs +[x1] + ldr w1, [x1, #0x04]
; byrRegs -[x1]
- cbnz w1, G_M34277_IG07 - mov w1, wzr - b G_M34277_IG09 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M34277_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref, isz - ldrb w1, [x2] - cbnz w1, G_M34277_IG08 - mov w1, wzr - b G_M34277_IG09 - ;; size=16 bbWeight=0.50 PerfScore 2.75 -G_M34277_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref - ldr w1, [x2, #0x04]
;; size=4 bbWeight=0.50 PerfScore 1.50
-G_M34277_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; byrRegs -[x2]
+G_M34277_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2] blr x2 ;; size=20 bbWeight=1 PerfScore 5.50
-G_M34277_IG10: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x28] - ldp fp, lr, [sp], #0x30
+G_M34277_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20
ret lr ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 184, prolog size 16, PerfScore 44.75, instruction count 46, allocated bytes for code 184 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
+; Total bytes of code 140, prolog size 16, PerfScore 37.75, instruction count 35, allocated bytes for code 140 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
; ============================================================ Unwind Info: @@ -128,7 +113,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 46 (0x0002e) Actual length = 184 (0x0000b8)
+ Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -136,8 +121,8 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ D0 03 save_reg X#0 Z#3 (0x03); str x19, [sp, #24] + 83 save_fplr_x #3 (0x03); stp fp, lr, [sp, #-32]!
E4 end E4 end E4 end

-44 (-17.74%) : 11604.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)

@@ -11,22 +11,22 @@ ; V00 this [V00,T00] ( 6, 5.50) byref -> x19 this single-def ;* V01 TypeCtx [V01 ] ( 0, 0 ) long -> zero-ref single-def ; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [fp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;# V04 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 -> x0 -; V07 tmp3 [V07,T05] ( 3, 2 ) ref -> x20
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> x0 +; V07 tmp3 [V07,T04] ( 3, 2 ) ref -> x20
; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> x0 single-def "impAppendStmt" ;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref single-def ;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref single-def
-; V11 tmp7 [V11,T03] ( 4, 2.50) byref -> x1
+;* 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 -> x2 -; V15 tmp11 [V15,T07] ( 3, 1.50) ref -> x2 class-hnd "Inline return value spill temp" <System.String>
+;* V14 tmp10 [V14 ] ( 0, 0 ) ref -> zero-ref +; V15 tmp11 [V15,T05] ( 3, 2 ) ref -> x2 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 -> [fp+0x10] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP -; V18 tmp14 [V18 ] ( 3, 2 ) int -> [fp+0x14] 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 -> x0 single-def "argument with side effect" ; ; Lcl frame size = 16 @@ -79,38 +79,21 @@ G_M39544_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19 ; gcrRegs -[x0] add x0, x19, #8 ; byrRegs +[x0]
- str xzr, [fp, #0x10] // [V03 loc1] - mov x1, x0 - ; byrRegs +[x1] - ldrb w2, [fp, #0x10] // [V17 tmp13] - cbnz w2, G_M39544_IG07 - ;; size=20 bbWeight=1 PerfScore 5.00 -G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, byref, isz - ; byrRegs -[x1 x19] - ldr x1, [x0] - str x1, [fp, #0x10] // [V03 loc1] - add x1, fp, #16 // [V03 loc1] - ; byrRegs +[x1] - ldrb w0, [fp, #0x10] // [V17 tmp13] - ; byrRegs -[x0] - cbnz w0, G_M39544_IG07 - mov x2, xzr - ; gcrRegs +[x2] - b G_M39544_IG09 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x1}, byref, isz - ; gcrRegs -[x2] - ldrb w0, [x1] - cbnz w0, G_M39544_IG08
+ ldrb w1, [x0] + cbnz w1, G_M39544_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + ; byrRegs -[x0 x19]
movz x2, #0xD1FFAB1E movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32
- b G_M39544_IG09 - ;; size=24 bbWeight=0.50 PerfScore 3.25 -G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x1}, byref - ldr w0, [x1, #0x04]
+ b G_M39544_IG08 + ;; size=16 bbWeight=0.50 PerfScore 1.25 +G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, byref + ; byrRegs +[x0] + ldr w0, [x0, #0x04] + ; byrRegs -[x0]
movz x1, #0xD1FFAB1E // code for System.Number:Int32ToDecStr(int):System.String
- ; byrRegs -[x1]
movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 ldr x1, [x1] @@ -119,7 +102,7 @@ G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x mov x2, x0 ; gcrRegs +[x2] ;; size=28 bbWeight=0.50 PerfScore 4.50
-G_M39544_IG09: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref
+G_M39544_IG08: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -136,13 +119,13 @@ G_M39544_IG09: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {} blr x4 ; gcrRegs -[x2 x20] ;; size=48 bbWeight=1 PerfScore 9.00
-G_M39544_IG10: ; bbWeight=1, epilog, nogc, extend
+G_M39544_IG09: ; bbWeight=1, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=1 PerfScore 3.00
-; Total bytes of code 248, prolog size 16, PerfScore 51.00, instruction count 62, allocated bytes for code 248 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
+; Total bytes of code 204, prolog size 16, PerfScore 44.00, instruction count 51, allocated bytes for code 204 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
; ============================================================ Unwind Info: @@ -153,7 +136,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 62 (0x0003e) Actual length = 248 (0x0000f8)
+ Function Length : 51 (0x00033) Actual length = 204 (0x0000cc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-40 (-16.95%) : 5848.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 ) long -> zero-ref single-def
-; V01 arg0 [V01 ] ( 3, 3 ) ref -> [fp+0x30] do-not-enreg[X] addr-exposed ld-addr-op class-hnd single-def <System.__Canon> -; V02 arg1 [V02 ] ( 3, 3 ) struct ( 8) [fp+0x28] do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Nullable`1[int]>
+; V01 arg0 [V01 ] ( 3, 3 ) ref -> [fp+0x20] do-not-enreg[X] addr-exposed ld-addr-op class-hnd single-def <System.__Canon> +; V02 arg1 [V02 ] ( 3, 3 ) struct ( 8) [fp+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,T04] ( 3, 3 ) int -> x1 -; V06 loc3 [V06 ] ( 4, 2.50) ref -> [fp+0x20] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> -; V07 loc4 [V07 ] ( 5, 3.50) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V05 loc2 [V05,T03] ( 3, 3 ) int -> x1 +; V06 loc3 [V06 ] ( 4, 2.50) ref -> [fp+0x10] 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,T06] ( 4, 2.50) byref -> x0
+; V09 tmp1 [V09,T05] ( 4, 2.50) byref -> x0
; V10 tmp2 [V10,T07] ( 3, 2 ) int -> x19
-; V11 tmp3 [V11,T02] ( 5, 3 ) byref -> x0 -; V12 tmp4 [V12,T08] ( 3, 2 ) int -> x1 -; V13 tmp5 [V13,T09] ( 3, 1.50) int -> x1 "Inline return value spill temp"
+; V11 tmp3 [V11,T06] ( 3, 2.50) byref -> x0 single-def +;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref +; V13 tmp5 [V13,T08] ( 3, 2 ) int -> x1 "Inline return value spill temp"
;* V14 tmp6 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ; V15 tmp7 [V15,T00] ( 6, 12 ) int -> x1 "Inlining Arg"
-; V16 tmp8 [V16 ] ( 5, 3.50) ubyte -> [fp+0x18] do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP -; V17 tmp9 [V17 ] ( 3, 2 ) int -> [fp+0x1C] do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP -; V18 tmp10 [V18,T03] ( 3, 3 ) ref -> x0 single-def "argument with side effect"
+;* 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,T02] ( 3, 3 ) ref -> x0 single-def "argument with side effect"
; V19 cse0 [V19,T01] ( 4, 4 ) int -> x0 "CSE - aggressive"
-; V20 cse1 [V20,T05] ( 3, 3 ) int -> x3 "CSE - aggressive"
+; V20 cse1 [V20,T04] ( 3, 3 ) int -> x3 "CSE - aggressive"
;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M60379_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]! - str x19, [sp, #0x38]
+ stp fp, lr, [sp, #-0x30]! + str x19, [sp, #0x28]
mov fp, sp
- str xzr, [fp, #0x20] // [V06 loc3] - stp x2, x1, [fp, #0x28] // [V02 arg1], [V01 arg0]
+ str xzr, [fp, #0x10] // [V06 loc3] + stp x2, x1, [fp, #0x18] // [V02 arg1], [V01 arg0]
;; size=20 bbWeight=1 PerfScore 4.50 G_M60379_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- add x0, fp, #48 // [V01 arg0]
+ add x0, fp, #32 // [V01 arg0]
; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V06 loc3]
+ ldr x1, [fp, #0x10] // [V06 loc3]
; gcrRegs +[x1] cbnz x1, G_M60379_IG04 ;; size=12 bbWeight=1 PerfScore 3.50 @@ -51,11 +51,11 @@ G_M60379_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, b ldr x0, [x0] ; gcrRegs +[x0] ; byrRegs -[x0]
- str x0, [fp, #0x20] // [V06 loc3] - add x0, fp, #32 // [V06 loc3]
+ str x0, [fp, #0x10] // [V06 loc3] + add x0, fp, #16 // [V06 loc3]
; gcrRegs -[x0] ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V06 loc3]
+ ldr x1, [fp, #0x10] // [V06 loc3]
; gcrRegs +[x1] cbnz x1, G_M60379_IG04 mov w19, wzr @@ -74,33 +74,21 @@ G_M60379_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, b sxtw w19, w0 ;; size=24 bbWeight=0.50 PerfScore 6.75 G_M60379_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- str xzr, [fp, #0x18] // [V07 loc4] - add x0, fp, #40 // [V02 arg1]
+ add x0, fp, #24 // [V02 arg1]
; byrRegs +[x0]
- ldrb w1, [fp, #0x18] // [V16 tmp8] - cbnz w1, G_M60379_IG07 - ;; size=16 bbWeight=1 PerfScore 4.50 -G_M60379_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz - ldr x0, [x0] - ; byrRegs -[x0] - str x0, [fp, #0x18] // [V07 loc4] - add x0, fp, #24 // [V07 loc4] - ; byrRegs +[x0] - ldrb w1, [fp, #0x18] // [V16 tmp8] - cbnz w1, G_M60379_IG07 - mov w1, wzr - b G_M60379_IG09 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M60379_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
ldrb w1, [x0]
- cbnz w1, G_M60379_IG08
+ cbnz w1, G_M60379_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M60379_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; byrRegs -[x0]
mov w1, wzr
- b G_M60379_IG09 - ;; size=16 bbWeight=0.50 PerfScore 2.75 -G_M60379_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref
+ b G_M60379_IG08 + ;; size=8 bbWeight=0.50 PerfScore 0.75 +G_M60379_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref + ; byrRegs +[x0]
ldr w1, [x0, #0x04] ;; size=4 bbWeight=0.50 PerfScore 1.50
-G_M60379_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M60379_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; byrRegs -[x0] movz w0, #0xD1FFAB1E movk w0, #0xD1FFAB1E LSL #16 @@ -122,13 +110,13 @@ G_M60379_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mul w1, w1, w0 eor w0, w1, w1, LSR #16 ;; size=76 bbWeight=1 PerfScore 21.00
-G_M60379_IG10: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x38] - ldp fp, lr, [sp], #0x40
+G_M60379_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x28] + ldp fp, lr, [sp], #0x30
ret lr ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 236, prolog size 16, PerfScore 57.50, instruction count 59, allocated bytes for code 236 (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 196, prolog size 16, PerfScore 51.00, instruction count 49, allocated bytes for code 196 (MethodHash=6b5b1424) for method System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
; ============================================================ Unwind Info: @@ -139,7 +127,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 59 (0x0003b) Actual length = 236 (0x0000ec)
+ Function Length : 49 (0x00031) Actual length = 196 (0x0000c4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -147,8 +135,8 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 07 save_reg X#0 Z#7 (0x07); str x19, [sp, #56] - 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40] + 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
E4 end E4 end E4 end

+36 (+16.36%) : 1693.dasm - System.Array:SortSystem.__Canon (FullOpts)

@@ -8,24 +8,26 @@ ; 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) long -> x19 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x1 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x20 class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Comparison`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) struct (16) 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 (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp3 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 4 ) int -> x22 "Inlining Arg" -; V09 tmp5 [V09,T06] ( 2, 4 ) byref -> x21 single-def "Inlining Arg"
+; V08 tmp4 [V08,T08] ( 2, 4 ) int -> x20 "Inlining Arg" +; V09 tmp5 [V09,T07] ( 2, 4 ) byref -> x22 single-def "Inlining Arg"
;* V10 tmp6 [V10 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP ;* V11 tmp7 [V11 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V12 tmp8 [V12,T09] ( 2, 2 ) byref -> x21 single-def "field V05._reference (fldOffset=0x0)" P-INDEP -; V13 tmp9 [V13,T10] ( 2, 2 ) int -> x22 "field V05._length (fldOffset=0x8)" P-INDEP -; V14 tmp10 [V14,T08] ( 2, 4 ) long -> x0 "argument with side effect" -; V15 rat0 [V15,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat1 [V16,T03] ( 3, 5.60) long -> x0 "spilling expr" -; V17 rat2 [V17,T04] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+; V12 tmp8 [V12,T10] ( 2, 2 ) byref -> x22 single-def "field V05._reference (fldOffset=0x0)" P-INDEP +; V13 tmp9 [V13,T11] ( 2, 2 ) int -> x20 "field V05._length (fldOffset=0x8)" P-INDEP +; V14 tmp10 [V14,T09] ( 2, 4 ) long -> x0 "argument with side effect" +;* V15 rat0 [V15,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V16 rat1 [V16,T03] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V17 rat2 [V17,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V18 rat3 [V18,T04] ( 3, 5.60) long -> x0 "spilling expr" +; V19 rat4 [V19,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -36,19 +38,32 @@ G_M37190_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] mov x19, x0
- mov x20, x2
+ mov x20, x1
; gcrRegs +[x20]
- ;; size=28 bbWeight=1 PerfScore 5.50 -G_M37190_IG02: ; bbWeight=1, gcrefRegs=100002 {x1 x20}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x1] - cbz x1, G_M37190_IG08 - cbz x20, G_M37190_IG09 - add x21, x1, #16 - ; byrRegs +[x21] - ldr w22, [x1, #0x08]
+ mov x21, x2 + ; gcrRegs +[x21] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M37190_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M37190_IG10 + cbz x21, G_M37190_IG11 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M37190_IG04 + ;; size=20 bbWeight=1 PerfScore 9.00 +G_M37190_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M37190_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + add x22, x20, #16 + ; byrRegs +[x22] + ldr w20, [x20, #0x08] + ; gcrRegs -[x20]
mov w0, #1 movz x1, #0xD1FFAB1E // code for <unknown method>
- ; gcrRegs -[x1]
movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 ldr x1, [x1] @@ -56,43 +71,43 @@ G_M37190_IG02: ; bbWeight=1, gcrefRegs=100002 {x1 x20}, byrefRegs=0000 {} ldr x0, [x19, #0x38] ldr x1, [x0, #0x08] cmp x1, #24
- ble G_M37190_IG05 - ;; size=56 bbWeight=1 PerfScore 19.00 -G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
+ ble G_M37190_IG07 + ;; size=48 bbWeight=1 PerfScore 17.00 +G_M37190_IG05: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref, isz
ldr x0, [x0, #0x18]
- cbz x0, G_M37190_IG05
+ cbz x0, G_M37190_IG07
;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref - b G_M37190_IG06
+G_M37190_IG06: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + b G_M37190_IG08
;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+G_M37190_IG07: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref
mov x0, x19 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M37190_IG06: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref - mov x1, x21
+G_M37190_IG08: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + mov x1, x22
; byrRegs +[x1]
- mov w2, w22 - mov x3, x20
+ mov w2, w20 + mov x3, x21
; gcrRegs +[x3] movz x4, #0xD1FFAB1E // code for <unknown method> movk x4, #0xD1FFAB1E LSL #16 movk x4, #1 LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x3 x20] - ; byrRegs -[x1 x21]
+ ; gcrRegs -[x3 x21] + ; byrRegs -[x1 x22]
;; size=32 bbWeight=1 PerfScore 7.00
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M37190_IG09: ; bbWeight=1, epilog, nogc, extend
ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M37190_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -101,7 +116,7 @@ G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_unix #0 ;; size=28 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
mov w0, #29 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -111,7 +126,7 @@ G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_unix #0 ;; size=28 bbWeight=0 PerfScore 0.00
-; Total bytes of code 220, prolog size 20, PerfScore 40.42, instruction count 55, allocated bytes for code 220 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
+; Total bytes of code 256, prolog size 20, PerfScore 48.52, instruction count 64, allocated bytes for code 256 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
; ============================================================ Unwind Info: @@ -122,7 +137,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 55 (0x00037) Actual length = 220 (0x0000dc)
+ Function Length : 64 (0x00040) Actual length = 256 (0x000100)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+48 (+33.33%) : 7300.dasm - System.MemoryExtensions:AsSpanSystem.__Canon:System.Span`1System.__Canon

@@ -8,64 +8,81 @@ ; 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) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) struct (16) [fp+0x20] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ArraySegment`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) struct (16) [fp+0x20] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ArraySegment`1[System.__Canon]>
;* V02 arg1 [V02 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <System.Index> ;* V03 loc0 [V03 ] ( 0, 0 ) int -> zero-ref ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V05 tmp1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref multireg-ret "Return value temp for multireg return" <System.Span`1[System.__Canon]>
-; V08 tmp4 [V08,T03] ( 5, 5 ) int -> x19 "Inline stloc first use temp" -; V09 tmp5 [V09,T07] ( 2, 4 ) int -> x1 "Inlining Arg" -; V10 tmp6 [V10,T04] ( 3, 3 ) int -> x3 single-def "field V02._value (fldOffset=0x0)" P-INDEP -; V11 tmp7 [V11,T10] ( 2, 2 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP -; V12 tmp8 [V12,T11] ( 2, 2 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP -; V13 tmp9 [V13,T09] ( 3, 3 ) struct (16) [fp+0x10] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <System.Span`1[System.__Canon]> -; V14 tmp10 [V14,T08] ( 2, 4 ) long -> x0 "argument with side effect" -; V15 rat0 [V15,T06] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat1 [V16,T02] ( 3, 5.60) long -> x1 "spilling expr" -; V17 rat2 [V17,T05] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V08 tmp4 [V08,T04] ( 5, 5 ) int -> x21 "Inline stloc first use temp" +; V09 tmp5 [V09,T08] ( 2, 4 ) int -> x0 "Inlining Arg" +; V10 tmp6 [V10,T05] ( 3, 3 ) int -> x20 single-def "field V02._value (fldOffset=0x0)" P-INDEP +; V11 tmp7 [V11,T11] ( 2, 2 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP +; V12 tmp8 [V12,T12] ( 2, 2 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP +; V13 tmp9 [V13,T10] ( 3, 3 ) struct (16) [fp+0x10] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <System.Span`1[System.__Canon]> +; V14 tmp10 [V14,T09] ( 2, 4 ) long -> x0 "argument with side effect" +;* V15 rat0 [V15,T13] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V16 rat1 [V16,T02] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V17 rat2 [V17,T07] ( 3, 4 ) long -> x0 "runtime lookup" +; V18 rat3 [V18,T03] ( 3, 5.60) long -> x0 "spilling expr" +; V19 rat4 [V19,T06] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 G_M44554_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]! - str x19, [sp, #0x38]
+ stp fp, lr, [sp, #-0x50]! + stp x19, x20, [sp, #0x38] + str x21, [sp, #0x48]
mov fp, sp str xzr, [fp, #0x10] // [V13 tmp9] str x0, [fp, #0x30] stp x1, x2, [fp, #0x20] // [V01 arg0], [V01 arg0+0x08]
- ;; size=24 bbWeight=1 PerfScore 5.50
+ mov x19, x0 + mov w20, w3 + ;; size=36 bbWeight=1 PerfScore 7.50
G_M44554_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr w1, [fp, #0x2C] // [V01 arg0+0x0c] - sxtw w19, w3 - add w1, w3, w1 - cmp w19, #0 - csinc w19, w19, w1, ge - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M44554_IG05 - ;; size=36 bbWeight=1 PerfScore 11.50 -G_M44554_IG03: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M44554_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M44554_IG04: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - mov x0, x2 - b G_M44554_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M44554_IG05: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M44554_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M44554_IG03: ; bbWeight=0.20, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M44554_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M44554_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + ldr w0, [fp, #0x2C] // [V01 arg0+0x0c] + sxtw w21, w20 + add w0, w20, w0 + cmp w21, #0 + csinc w21, w21, w0, ge + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M44554_IG07 + ;; size=36 bbWeight=1 PerfScore 11.50 +G_M44554_IG05: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M44554_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M44554_IG06: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + b G_M44554_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M44554_IG07: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M44554_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
ldp x1, x2, [fp, #0x20] // [V01 arg0], [V01 arg0+0x08] ; gcrRegs +[x1]
- mov w3, w19
+ mov w3, w21
movz x4, #0xD1FFAB1E // code for System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],int):System.Span`1[System.__Canon] movk x4, #0xD1FFAB1E LSL #16 movk x4, #1 LSL #32 @@ -77,13 +94,14 @@ G_M44554_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ldr x0, [fp, #0x10] // [V13 tmp9] ldr w1, [fp, #0x18] // [V13 tmp9+0x08] ;; size=40 bbWeight=1 PerfScore 14.00
-G_M44554_IG07: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x38] - ldp fp, lr, [sp], #0x40
+G_M44554_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x48] + ldp x19, x20, [sp, #0x38] + ldp fp, lr, [sp], #0x50
ret lr
- ;; size=12 bbWeight=1 PerfScore 4.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 144, prolog size 20, PerfScore 40.06, instruction count 36, allocated bytes for code 144 (MethodHash=f5e951f5) for method System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],System.Index):System.Span`1[System.__Canon] (FullOpts)
+; Total bytes of code 192, prolog size 24, PerfScore 50.52, instruction count 48, allocated bytes for code 192 (MethodHash=f5e951f5) for method System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],System.Index):System.Span`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -94,7 +112,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -102,10 +120,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 07 save_reg X#0 Z#7 (0x07); str x19, [sp, #56] - 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! - E4 end - E4 end
+ D0 89 save_reg X#2 Z#9 (0x09); str x21, [sp, #72] + C8 07 save_regp X#0 Z#7 (0x07); stp x19, x20, [sp, #56] + 89 save_fplr_x #9 (0x09); stp fp, lr, [sp, #-80]!
E4 end E4 end

+44 (+36.67%) : 7290.dasm - System.MemoryExtensions:ReverseSystem.__Canon (FullOpts)

@@ -8,74 +8,91 @@ ; 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) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 4.28) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[System.__Canon]> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V04 tmp2 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[System.__Canon]>
-; V06 tmp4 [V06,T02] ( 2, 1.50) byref -> x20 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V07 tmp5 [V07,T01] ( 3, 2.50) int -> x19 single-def "field V01._length (fldOffset=0x8)" P-INDEP
+; V06 tmp4 [V06,T02] ( 2, 1.50) byref -> x21 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V07 tmp5 [V07,T01] ( 3, 2.50) int -> x20 single-def "field V01._length (fldOffset=0x8)" P-INDEP
;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
-; V10 tmp8 [V10,T06] ( 2, 2 ) long -> x0 "argument with side effect" -; V11 rat0 [V11,T05] ( 3, 2 ) long -> x0 "runtime lookup" -; V12 rat1 [V12,T03] ( 3, 2.80) long -> x1 "spilling expr" -; V13 rat2 [V13,T04] ( 3, 2.24) long -> x2 "fgMakeTemp is creating a new local variable"
+; V10 tmp8 [V10,T07] ( 2, 2 ) long -> x0 "argument with side effect" +;* V11 rat0 [V11,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat1 [V12,T03] ( 2, 2 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V13 rat2 [V13,T06] ( 3, 2 ) long -> x0 "runtime lookup" +; V14 rat3 [V14,T04] ( 3, 2.80) long -> x0 "spilling expr" +; V15 rat4 [V15,T05] ( 3, 2.24) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M12375_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18] - mov x20, x1 - ; byrRegs +[x20] - mov w19, w2 - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M12375_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, byref, isz - cmp w19, #1 - ble G_M12375_IG08
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; byrRegs +[x21] + mov w20, w2 + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M12375_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref, isz + cmp w20, #1 + ble G_M12375_IG10
;; size=8 bbWeight=1 PerfScore 1.50
-G_M12375_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, byref, isz - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M12375_IG06 - ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M12375_IG04: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M12375_IG06 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M12375_IG05: ; bbWeight=0.32, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, byref - mov x0, x2 - b G_M12375_IG07 - ;; size=8 bbWeight=0.32 PerfScore 0.48 -G_M12375_IG06: ; bbWeight=0.18, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, byref
+G_M12375_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M12375_IG05 + ;; size=12 bbWeight=0.50 PerfScore 3.50 +G_M12375_IG04: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.18 PerfScore 0.45 -G_M12375_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=100000 {x20}, byref - mov w2, w19 - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.10 PerfScore 0.30 +G_M12375_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M12375_IG08 + ;; size=16 bbWeight=0.50 PerfScore 3.75 +G_M12375_IG06: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M12375_IG08 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M12375_IG07: ; bbWeight=0.32, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref + b G_M12375_IG09 + ;; size=4 bbWeight=0.32 PerfScore 0.32 +G_M12375_IG08: ; bbWeight=0.18, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M12375_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=200000 {x21}, byref + mov w2, w20 + mov x1, x21
; byrRegs +[x1] movz x3, #0xD1FFAB1E // code for System.SpanHelpers:Reverse[System.__Canon](byref,ulong) movk x3, #0xD1FFAB1E LSL #16 movk x3, #1 LSL #32 ldr x3, [x3] blr x3
- ; byrRegs -[x1 x20]
+ ; byrRegs -[x1 x21]
;; size=28 bbWeight=0.50 PerfScore 3.25
-G_M12375_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - ldp x19, x20, [sp, #0x20]
+G_M12375_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 120, prolog size 16, PerfScore 18.53, instruction count 30, allocated bytes for code 120 (MethodHash=d5a0cfa8) for method System.MemoryExtensions:Reverse[System.__Canon](System.Span`1[System.__Canon]) (FullOpts)
+; Total bytes of code 164, prolog size 20, PerfScore 25.76, instruction count 41, allocated bytes for code 164 (MethodHash=d5a0cfa8) for method System.MemoryExtensions:Reverse[System.__Canon](System.Span`1[System.__Canon]) (FullOpts)
; ============================================================ Unwind Info: @@ -86,7 +103,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 120 (0x000078)
+ Function Length : 41 (0x00029) Actual length = 164 (0x0000a4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -94,10 +111,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] + C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
- E4 end - E4 end

libraries_tests.run.osx.arm64.Release.mch

-4 (-3.33%) : 1062.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable1[ubyte]](System.String):System.Nullable1[ubyte]:this (Tier0)

@@ -5,29 +5,28 @@ ; partially interruptible ; Final local variable assignments ;
-; V00 this [V00 ] ( 1, 1 ) ref -> [fp+0x38] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions> -; V01 arg1 [V01 ] ( 1, 1 ) ref -> [fp+0x30] do-not-enreg[] class-hnd <System.String> -; V02 loc0 [V02 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <<unknown class>> -; V03 loc1 [V03 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[S] must-init ld-addr-op <System.Nullable`1[ubyte]>
+; V00 this [V00 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions> +; V01 arg1 [V01 ] ( 1, 1 ) ref -> [fp+0x20] do-not-enreg[] class-hnd <System.String> +; V02 loc0 [V02 ] ( 1, 1 ) ref -> [fp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <<unknown class>> +; V03 loc1 [V03 ] ( 1, 1 ) struct ( 8) [fp+0x10] do-not-enreg[S] must-init ld-addr-op <System.Nullable`1[ubyte]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05 ] ( 1, 1 ) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed "pseudo return buffer" <System.Nullable`1[ubyte]>
;
-; Lcl frame size = 48
+; Lcl frame size = 32
G_M29704_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]!
+ stp fp, lr, [sp, #-0x30]!
mov fp, sp
- str xzr, [fp, #0x28] // [V02 loc0] - str xzr, [fp, #0x20] // [V03 loc1] - str x0, [fp, #0x38] // [V00 this] - str x1, [fp, #0x30] // [V01 arg1]
+ str xzr, [fp, #0x18] // [V02 loc0] + str xzr, [fp, #0x10] // [V03 loc1] + str x0, [fp, #0x28] // [V00 this] + str x1, [fp, #0x20] // [V01 arg1]
;; size=24 bbWeight=1 PerfScore 5.50 G_M29704_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr x0, [fp, #0x38] // [V00 this]
+ ldr x0, [fp, #0x28] // [V00 this]
; gcrRegs +[x0] ldr x0, [x0, #0x08]
- add x2, fp, #40 // [V02 loc0] - ldr x1, [fp, #0x30] // [V01 arg1]
+ add x2, fp, #24 // [V02 loc0] + ldr x1, [fp, #0x20] // [V01 arg1]
; gcrRegs +[x1] movz x3, #0xD1FFAB1E // code for <unknown method> movk x3, #0xD1FFAB1E LSL #16 @@ -37,30 +36,31 @@ G_M29704_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x3 ; gcrRegs -[x0-x1] cbz w0, G_M29704_IG04
- add x0, fp, #24 // [V05 tmp1] - ldr x2, [fp, #0x28] // [V02 loc0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ldr w0, [fp, #0x18] // [V05 tmp1] - ;; size=72 bbWeight=1 PerfScore 24.00
+ ldr x1, [fp, #0x18] // [V02 loc0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldrh w0, [x0] + ; byrRegs -[x0] + ;; size=68 bbWeight=1 PerfScore 24.50
G_M29704_IG03: ; bbWeight=1, epilog, nogc, extend
- ldp fp, lr, [sp], #0x40
+ ldp fp, lr, [sp], #0x30
ret lr ;; size=8 bbWeight=1 PerfScore 2.00 G_M29704_IG04: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- strh wzr, [fp, #0x20] // [V03 loc1] - ldr w0, [fp, #0x20] // [V03 loc1]
+ strh wzr, [fp, #0x10] // [V03 loc1] + ldr w0, [fp, #0x10] // [V03 loc1]
;; size=8 bbWeight=1 PerfScore 3.00 G_M29704_IG05: ; bbWeight=1, epilog, nogc, extend
- ldp fp, lr, [sp], #0x40
+ ldp fp, lr, [sp], #0x30
ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 120, prolog size 16, PerfScore 36.50, instruction count 30, allocated bytes for code 120 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
+; Total bytes of code 116, prolog size 16, PerfScore 37.00, instruction count 29, allocated bytes for code 116 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
; ============================================================ Unwind Info: @@ -71,7 +71,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 120 (0x000078)
+ Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -82,7 +82,7 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
E4 end E4 end

+0 (0.00%) : 238.dasm - Xunit.ConsoleClient.DiagnosticMessageSink:OnMessage(Xunit.Abstractions.IMessageSinkMessage):ubyte:this (Tier0)

@@ -43,7 +43,7 @@ G_M24802_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- movz x2, #0xD1FFAB1E // code for CORINFO_HELP_ISINSTANCEOFINTERFACE
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_INITINSTCLASS
movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2] @@ -79,9 +79,11 @@ G_M24802_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #42
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #2 LSL #32 ldr x0, [x0] @@ -185,9 +187,11 @@ G_M24802_IG06: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #42
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #2 LSL #32 ldr x0, [x0]

+0 (0.00%) : 934.dasm - Xunit.Sdk.SerializationHelper:GetType(System.String,System.String):System.Type (Tier0)

@@ -43,9 +43,11 @@ G_M16960_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #15
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #2 LSL #32 ldr x0, [x0] @@ -73,9 +75,11 @@ G_M16960_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #15
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #2 LSL #32 ldr x0, [x0] @@ -127,7 +131,7 @@ G_M16960_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_NEWSFAST
+ bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 str x0, [fp, #0x60] // [V05 tmp1] @@ -148,7 +152,7 @@ G_M16960_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_NEWSFAST
+ bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 str x0, [fp, #0x58] // [V06 tmp2]

+4 (+1.64%) : 3824.dasm - System.PlatformDetection+<>c:<.cctor>b_5094():ubyte:this (Tier0)

@@ -78,27 +78,30 @@ G_M61529_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ;; size=32 bbWeight=1 PerfScore 9.00 G_M61529_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0]
+ ldr x1, [fp, #0x18] // [V07 tmp5] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #2 LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldrh w1, [x0] + strh w1, [fp, #0x40]
add x0, fp, #64 // [V01 loc0]
- ldr x2, [fp, #0x18] // [V07 tmp5] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #2 LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - add x0, fp, #64 // [V01 loc0]
+ ; byrRegs -[x0]
movz x1, #0xD1FFAB1E // code for <unknown method> movk x1, #0xD1FFAB1E LSL #16 movk x1, #2 LSL #32 ldr x1, [x1] blr x1
- ;; size=48 bbWeight=1 PerfScore 11.00
+ ;; size=52 bbWeight=1 PerfScore 14.50
G_M61529_IG06: ; bbWeight=1, epilog, nogc, extend ldp fp, lr, [sp], #0x50 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 244, prolog size 24, PerfScore 62.00, instruction count 61, allocated bytes for code 244 (MethodHash=de510fa6) for method System.PlatformDetection+<>c:<.cctor>b__509_4():ubyte:this (Tier0)
+; Total bytes of code 248, prolog size 24, PerfScore 65.50, instruction count 62, allocated bytes for code 248 (MethodHash=de510fa6) for method System.PlatformDetection+<>c:<.cctor>b__509_4():ubyte:this (Tier0)
; ============================================================ Unwind Info: @@ -109,7 +112,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 61 (0x0003d) Actual length = 244 (0x0000f4)
+ Function Length : 62 (0x0003e) Actual length = 248 (0x0000f8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+48 (+33.33%) : 4658.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,90 +9,111 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.20) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.28) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.20) byref -> x19 single-def
+; V00 this [V00,T02] ( 3, 2.20) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 3.55) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.20) byref -> x20 single-def
; V03 loc0 [V03,T03] ( 7, 3.81) ref -> x0 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, 1.62) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 1.62) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T07] ( 3, 0.81) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 0.81) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 1.14) long -> x0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 0.91) long -> x0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 0.91) long -> x0 "fgMakeTemp is creating a new local variable" +;* V12 rat3 [V12,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat4 [V13,T06] ( 3, 1.14) long -> x0 "spilling expr" +; V14 rat5 [V14,T08] ( 2, 0.65) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG08
+ cbnz x0, G_M58319_IG11
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38] - ldr x2, [x0, #0x08] - cmp x2, #24
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24
ble G_M58319_IG06 ;; size=16 bbWeight=0.20 PerfScore 1.52
-G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
ldr x0, [x0, #0x18] cbz x0, G_M58319_IG06 ;; size=8 bbWeight=0.16 PerfScore 0.65
-G_M58319_IG05: ; bbWeight=0.13, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG05: ; bbWeight=0.13, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG07 ;; size=4 bbWeight=0.13 PerfScore 0.13
-G_M58319_IG06: ; bbWeight=0.07, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG06: ; bbWeight=0.07, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #2 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.07 PerfScore 0.22
-G_M58319_IG07: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG07: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M58319_IG09 + ;; size=36 bbWeight=0.20 PerfScore 2.23 +G_M58319_IG08: ; bbWeight=0.16, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M58319_IG10 + ;; size=8 bbWeight=0.16 PerfScore 0.65 +G_M58319_IG09: ; bbWeight=0.07, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #2 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.07 PerfScore 0.22 +G_M58319_IG10: ; bbWeight=0.20, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.20 PerfScore 1.42 -G_M58319_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.20 PerfScore 0.71 +G_M58319_IG11: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 144, prolog size 20, PerfScore 18.44, instruction count 36, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 192, prolog size 20, PerfScore 20.33, instruction count 48, allocated bytes for code 192 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -103,7 +124,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -111,9 +132,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+33.33%) : 5183.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,88 +9,109 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T02] ( 5, 4.36) long -> x1 single-def -; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T01] ( 7, 7 ) ref -> x0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V00 this [V00,T06] ( 3, 3 ) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T01] ( 7, 5.72) long -> x19 single-def +; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T02] ( 7, 7 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T00] ( 4, 8 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T07] ( 3, 4 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 4 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T04] ( 3, 5.60) long -> x0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable" +;* V12 rat3 [V12,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat4 [V13,T05] ( 3, 5.60) long -> x0 "spilling expr" +; V14 rat5 [V14,T08] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07 - ldr x0, [x1, #0x38]
+ cbnz x0, G_M58319_IG10 + ldr x0, [x19, #0x38]
; gcrRegs -[x0]
- ldr x2, [x0, #0x08] - cmp x2, #24
+ ldr x1, [x0, #0x08] + cmp x1, #24
ble G_M58319_IG05 ;; size=24 bbWeight=1 PerfScore 11.50
-G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
ldr x0, [x0, #0x18] cbz x0, G_M58319_IG05 ;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M58319_IG06: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M58319_IG08 + ;; size=36 bbWeight=1 PerfScore 11.00 +G_M58319_IG07: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M58319_IG08: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M58319_IG09: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=1 PerfScore 7.00 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=1 PerfScore 3.50 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 144, prolog size 20, PerfScore 33.92, instruction count 36, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 192, prolog size 20, PerfScore 45.20, instruction count 48, allocated bytes for code 192 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -101,7 +122,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -109,9 +130,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

librariestestsnotieredcompilation.run.osx.arm64.Release.mch

-20 (-20.83%) : 2806.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 -> x1 class-hnd single-def <System.Reflection.PropertyInfo>
+; V01 arg1 [V01,T00] ( 3, 3 ) ref -> x1 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 -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <<unknown class>>
+; V03 tmp1 [V03,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 0 @@ -21,7 +19,7 @@ G_M28645_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x10]! mov fp, sp ;; size=8 bbWeight=1 PerfScore 1.50
-G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1] mov x0, x1 ; gcrRegs +[x0] @@ -37,28 +35,19 @@ G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byre blr x3 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M28645_IG05 - ;; size=48 bbWeight=1 PerfScore 9.50 -G_M28645_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #1 LSL #32 - cmp x2, x3 - beq G_M28645_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M28645_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M28645_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=1 PerfScore 11.00 +G_M28645_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 96, prolog size 8, PerfScore 14.69, instruction count 24, allocated bytes for code 96 (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 76, prolog size 8, PerfScore 14.50, instruction count 19, allocated bytes for code 76 (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: @@ -69,7 +58,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 24 (0x00018) Actual length = 96 (0x000060)
+ Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-32 (-9.41%) : 3060.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)

@@ -12,11 +12,9 @@ ; V01 arg1 [V01,T02] ( 4, 3.50) byref -> x21 single-def ; V02 arg2 [V02,T01] ( 5, 3.50) byref -> x20 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 -> x0 "Inline return value spill temp"
+; V04 tmp1 [V04,T03] ( 3, 1.50) ubyte -> x0 "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 -> [fp+0x10] 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) long -> x1 "fgMakeTemp is creating a new local variable" -; V08 tmp5 [V08,T03] ( 3, 2.25) ref -> x15 class-hnd "spilling QMark2" <<unknown class>>
+; V06 tmp3 [V06 ] ( 4, 2 ) ref -> [fp+0x10] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.Object>
; ; Lcl frame size = 8 @@ -66,7 +64,7 @@ G_M30064_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=300000 {x20 blr x4 ; gcrRegs -[x1] ; byrRegs -[x3]
- cbz w0, G_M30064_IG10
+ cbz w0, G_M30064_IG07
;; size=104 bbWeight=1 PerfScore 22.00 G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=300000 {x20 x21}, byref, isz ldr x0, [x19, #0x20] @@ -81,80 +79,61 @@ G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=300000 { ldr x3, [x11] blr x3 ; gcrRegs -[x0 x19]
- cbz w0, G_M30064_IG07
+ cbz w0, G_M30064_IG04
ldr x1, [fp, #0x10] // [V06 tmp3] ; gcrRegs +[x1] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_ISINSTANCEOFARRAY
+ bl CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[x1] +[x0]
- cbz x0, G_M30064_IG07 - ldr x15, [fp, #0x10] // [V06 tmp3] - ; gcrRegs +[x15] - mov x0, x15 - cbz x0, G_M30064_IG06 - ;; size=80 bbWeight=0.50 PerfScore 10.25 -G_M30064_IG04: ; bbWeight=0.25, gcrefRegs=8000 {x15}, byrefRegs=300000 {x20 x21}, byref, isz - ; gcrRegs -[x0] - ldr x0, [fp, #0x10] // [V06 tmp3] - ; gcrRegs +[x0] - ldr x0, [x0] - ; gcrRegs -[x0] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - cmp x0, x1 - beq G_M30064_IG06 - ;; size=28 bbWeight=0.25 PerfScore 2.00 -G_M30064_IG05: ; bbWeight=0.12, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref - ; gcrRegs -[x15] - mov x0, x1
+ cbz x0, G_M30064_IG04
ldr x1, [fp, #0x10] // [V06 tmp3] ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] mov x15, x0 ; gcrRegs +[x15]
- ;; size=16 bbWeight=0.12 PerfScore 0.50 -G_M30064_IG06: ; bbWeight=0.50, gcrefRegs=8000 {x15}, byrefRegs=300000 {x20 x21}, byref - ; gcrRegs -[x0]
mov x14, x20 ; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
; byrRegs -[x14] mov w0, #1
- b G_M30064_IG08 - ;; size=16 bbWeight=0.50 PerfScore 1.50 -G_M30064_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref
+ b G_M30064_IG05 + ;; size=108 bbWeight=0.50 PerfScore 12.50 +G_M30064_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref
str xzr, [x20] mov w0, wzr ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M30064_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref, isz
+G_M30064_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref, isz
str xzr, [fp, #0x10] // [V06 tmp3]
- cbz w0, G_M30064_IG10
+ cbz w0, G_M30064_IG07
mov w0, #1 ;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M30064_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M30064_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M30064_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, gcvars, byref
+G_M30064_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, gcvars, byref
str xzr, [x21] str xzr, [x20] mov w0, wzr ;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M30064_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M30064_IG08: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 340, prolog size 20, PerfScore 50.50, instruction count 85, allocated bytes for code 340 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
+; Total bytes of code 308, prolog size 20, PerfScore 48.75, instruction count 77, allocated bytes for code 308 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -165,7 +144,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 85 (0x00055) Actual length = 340 (0x000154)
+ Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-5.49%) : 3094.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)

@@ -7,42 +7,40 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5.50) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T02] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T12] ( 3, 2.50) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T11] ( 3, 2.50) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T08] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T07] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T05] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T15] ( 2, 2 ) long -> x0 "argument with side effect" -; V11 tmp8 [V11,T16] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 cse0 [V12,T07] ( 5, 3.50) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T04] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T09] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T13] ( 3, 2 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T14] ( 3, 2 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T11] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+; V10 tmp7 [V10,T14] ( 2, 2 ) long -> x0 "argument with side effect" +; V11 tmp8 [V11,T15] ( 2, 2 ) long -> x0 "argument with side effect" +; V12 cse0 [V12,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T04] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T08] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T12] ( 3, 2 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T09] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T13] ( 3, 2 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -59,56 +57,53 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbz x23, G_M18513_IG11 - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x22]
+ mov x22, x0 + ; gcrRegs +[x22] + cbz x22, G_M18513_IG11 + ;; size=16 bbWeight=1 PerfScore 5.50 +G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x30] cbz x11, G_M18513_IG08 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35
-G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0.50 PerfScore 2.00 G_M18513_IG10: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
tst w20, #255 beq G_M18513_IG16 ldr x0, [x21, #0x38] @@ -116,79 +111,77 @@ G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480 ldr x0, [x0, #0x28] cbz x0, G_M18513_IG13 ;; size=24 bbWeight=0.50 PerfScore 5.75
-G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG14 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16 movn w0, #0 ; gcrRegs -[x0]
- ;; size=40 bbWeight=0.50 PerfScore 3.50
+ ;; size=40 bbWeight=0.50 PerfScore 6.00
G_M18513_IG15: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x20] cbz x0, G_M18513_IG18 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG19 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=0.50 PerfScore 2.50
+ ;; size=20 bbWeight=0.50 PerfScore 3.75
G_M18513_IG20: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 364, prolog size 32, PerfScore 62.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
+; Total bytes of code 344, prolog size 28, PerfScore 61.85, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
; ============================================================ Unwind Info: @@ -199,7 +192,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) ...

+44 (+33.33%) : 5915.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:CollectSystem.__Canon:Microsoft.CodeAnalysis.IncrementalValueProvider1[System.Collections.Immutable.ImmutableArray1[System.__Canon]] (FullOpts)

@@ -8,55 +8,58 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
;* V04 tmp2 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]> ;* V06 tmp4 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp5 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V08 tmp6 [V08,T04] ( 2, 2 ) ref -> x19 single-def "field V01.Node (fldOffset=0x0)" P-INDEP -; V09 tmp7 [V09,T05] ( 2, 2 ) ubyte -> x20 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V10 tmp8 [V10,T06] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP -; V11 tmp9 [V11,T07] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V12 rat0 [V12,T03] ( 3, 4 ) long -> x1 "runtime lookup" -; V13 rat1 [V13,T02] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+; V08 tmp6 [V08,T06] ( 2, 2 ) ref -> x20 single-def "field V01.Node (fldOffset=0x0)" P-INDEP +; V09 tmp7 [V09,T07] ( 2, 2 ) ubyte -> x21 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP +; V11 tmp9 [V11,T09] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V12 rat0 [V12,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V13 rat1 [V13,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +;* V14 rat2 [V14,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V15 rat3 [V15,T03] ( 3, 5.60) long -> x0 "spilling expr" +; V16 rat4 [V16,T04] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M15345_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10] - mov x19, x1 - ; gcrRegs +[x19] - mov w20, w2 - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M15345_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x1, [x0, #0x38] - ldr x1, [x1, #0x10] - cbz x1, G_M15345_IG04
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov w21, w2 + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M15345_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M15345_IG04
;; size=12 bbWeight=1 PerfScore 7.00
-G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
b G_M15345_IG05 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x1 - bl CORINFO_HELP_NEWSFAST
+G_M15345_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - mov x1, x19
+ mov x22, x0 + ; gcrRegs +[x22] + mov x1, x20
; gcrRegs +[x1] mov x2, xzr mov x3, xzr @@ -65,19 +68,36 @@ G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x4, #1 LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x0-x1 x19] - mov x0, x21
+ ; gcrRegs -[x0-x1 x20] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M15345_IG07 + ;; size=56 bbWeight=1 PerfScore 16.00 +G_M15345_IG06: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M15345_IG08 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M15345_IG07: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M15345_IG08: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x22
; gcrRegs +[x0]
- uxtb w1, w20 - ;; size=52 bbWeight=1 PerfScore 10.00 -G_M15345_IG06: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ uxtb w1, w21 + ;; size=8 bbWeight=1 PerfScore 1.00 +G_M15345_IG09: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 28.90, instruction count 33, allocated bytes for code 132 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
+; Total bytes of code 176, prolog size 20, PerfScore 39.68, instruction count 44, allocated bytes for code 176 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
; ============================================================ Unwind Info: @@ -88,7 +108,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 44 (0x0002c) Actual length = 176 (0x0000b0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -96,9 +116,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+44 (+37.93%) : 4721.dasm - System.Linq.ImmutableArrayExtensions:SelectSystem.Canon,System.Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -8,70 +8,87 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.36) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> x20 class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V06 tmp3 [V06,T03] ( 3, 3 ) ref -> x20 single-def "field V01.array (fldOffset=0x0)" P-INDEP -; V07 tmp4 [V07,T06] ( 2, 4 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T01] ( 3, 5.60) long -> x1 "spilling expr" -; V10 rat2 [V10,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T04] ( 3, 3 ) ref -> x21 single-def "field V01.array (fldOffset=0x0)" P-INDEP +; V07 tmp4 [V07,T07] ( 2, 4 ) long -> x0 "argument with side effect" +;* V08 rat0 [V08,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V09 rat1 [V09,T01] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V10 rat2 [V10,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V11 rat3 [V11,T02] ( 3, 5.60) long -> x0 "spilling expr" +; V12 rat4 [V12,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M61273_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18] - mov x20, x1
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2
; gcrRegs +[x20]
- mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M61273_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr wzr, [x20, #0x08] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x10] - cmp x2, #32 - ble G_M61273_IG05 - ;; size=20 bbWeight=1 PerfScore 10.50 -G_M61273_IG03: ; bbWeight=0.80, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x2, [x1, #0x20] - cbz x2, G_M61273_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M61273_IG04: ; bbWeight=0.64, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x0, x2 - b G_M61273_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M61273_IG05: ; bbWeight=0.36, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+ ;; size=32 bbWeight=1 PerfScore 6.00 +G_M61273_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x18] + cbnz x0, G_M61273_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M61273_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M61273_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M61273_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr wzr, [x21, #0x08] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x10] + cmp x1, #32 + ble G_M61273_IG07 + ;; size=20 bbWeight=1 PerfScore 10.50 +G_M61273_IG05: ; bbWeight=0.80, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x20] + cbz x0, G_M61273_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M61273_IG06: ; bbWeight=0.64, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M61273_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M61273_IG07: ; bbWeight=0.36, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M61273_IG08: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x1, x21
; gcrRegs +[x1]
- mov x2, x19
+ mov x2, x20
; gcrRegs +[x2] movz x3, #0xD1FFAB1E // code for <unknown method> movk x3, #0xD1FFAB1E LSL #16 movk x3, #1 LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x1-x2 x19-x20] +[x0]
+ ; gcrRegs -[x1-x2 x20-x21] +[x0]
;; size=28 bbWeight=1 PerfScore 6.50
-G_M61273_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M61273_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 116, prolog size 16, PerfScore 29.56, instruction count 29, allocated bytes for code 116 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 160, prolog size 20, PerfScore 40.52, instruction count 40, allocated bytes for code 160 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -82,7 +99,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
+ Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -90,10 +107,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] + C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
- E4 end - E4 end

+44 (+37.93%) : 9970.dasm - System.Linq.ImmutableArrayExtensions:WhereSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -8,70 +8,87 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.36) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> x20 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V06 tmp3 [V06,T03] ( 3, 3 ) ref -> x20 single-def "field V01.array (fldOffset=0x0)" P-INDEP -; V07 tmp4 [V07,T06] ( 2, 4 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T01] ( 3, 5.60) long -> x1 "spilling expr" -; V10 rat2 [V10,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T04] ( 3, 3 ) ref -> x21 single-def "field V01.array (fldOffset=0x0)" P-INDEP +; V07 tmp4 [V07,T07] ( 2, 4 ) long -> x0 "argument with side effect" +;* V08 rat0 [V08,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V09 rat1 [V09,T01] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V10 rat2 [V10,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V11 rat3 [V11,T02] ( 3, 5.60) long -> x0 "spilling expr" +; V12 rat4 [V12,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M59151_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18] - mov x20, x1
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2
; gcrRegs +[x20]
- mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M59151_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr wzr, [x20, #0x08] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M59151_IG05 - ;; size=20 bbWeight=1 PerfScore 10.50 -G_M59151_IG03: ; bbWeight=0.80, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M59151_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M59151_IG04: ; bbWeight=0.64, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x0, x2 - b G_M59151_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M59151_IG05: ; bbWeight=0.36, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+ ;; size=32 bbWeight=1 PerfScore 6.00 +G_M59151_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M59151_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M59151_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M59151_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M59151_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr wzr, [x21, #0x08] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M59151_IG07 + ;; size=20 bbWeight=1 PerfScore 10.50 +G_M59151_IG05: ; bbWeight=0.80, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M59151_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M59151_IG06: ; bbWeight=0.64, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M59151_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M59151_IG07: ; bbWeight=0.36, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M59151_IG08: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x1, x21
; gcrRegs +[x1]
- mov x2, x19
+ mov x2, x20
; gcrRegs +[x2] movz x3, #0xD1FFAB1E // code for 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] movk x3, #0xD1FFAB1E LSL #16 movk x3, #1 LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x1-x2 x19-x20] +[x0]
+ ; gcrRegs -[x1-x2 x20-x21] +[x0]
;; size=28 bbWeight=1 PerfScore 6.50
-G_M59151_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59151_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 116, prolog size 16, PerfScore 29.56, instruction count 29, allocated bytes for code 116 (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 160, prolog size 20, PerfScore 40.52, instruction count 40, allocated bytes for code 160 (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: @@ -82,7 +99,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
+ Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -90,10 +107,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] + C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
- E4 end - E4 end

realworld.run.osx.arm64.checked.mch

-24 (-4.51%) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,int,int,int):System.Canon[]:this (FullOpts)

@@ -9,23 +9,23 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 6.50) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T09] ( 3, 2.50) long -> x1 single-def -; V02 arg2 [V02,T05] ( 4, 3.50) int -> x2 single-def -; V03 arg3 [V03,T06] ( 4, 3.50) long -> x21 single-def -; V04 arg4 [V04,T07] ( 4, 3.50) int -> x22 single-def -; V05 arg5 [V05,T08] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V01 arg1 [V01,T08] ( 3, 2.50) long -> x1 single-def +; V02 arg2 [V02,T04] ( 4, 3.50) int -> x2 single-def +; V03 arg3 [V03,T05] ( 4, 3.50) long -> x21 single-def +; V04 arg4 [V04,T06] ( 4, 3.50) int -> x22 single-def +; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 6.50) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T11] ( 4, 2.75) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T01] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T10] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T04] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T09] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T10] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -192,38 +192,26 @@ G_M19047_IG13: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG15
+ ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG15
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG14: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG16
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG15: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG19 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG17: ; bbWeight=0.25, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG19 - ;; size=12 bbWeight=0.25 PerfScore 1.12 -G_M19047_IG18: ; bbWeight=0.12, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1 x21] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M19047_IG19: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M19047_IG17: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] @@ -239,7 +227,7 @@ RWD00 dd G_M19047_IG05 - G_M19047_IG02 dd G_M19047_IG10 - G_M19047_IG02
-; Total bytes of code 532, prolog size 24, PerfScore 81.02, instruction count 133, allocated bytes for code 532 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
+; Total bytes of code 508, prolog size 24, PerfScore 79.95, instruction count 127, allocated bytes for code 508 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
; ============================================================ Unwind Info: @@ -250,7 +238,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 133 (0x00085) Actual length = 532 (0x000214)
+ Function Length : 127 (0x0007f) Actual length = 508 (0x0001fc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-3.70%) : 371.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object

@@ -10,23 +10,21 @@ ; ; V00 arg0 [V00,T00] ( 9, 6 ) ref -> x19 class-hnd single-def <System.RuntimeType> ; V01 arg1 [V01,T01] ( 8, 5 ) int -> x20 single-def
-;* V02 loc0 [V02,T12] ( 0, 0 ) ubyte -> zero-ref -; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> x21
+;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref +; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> x21
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T05] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T13] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T03] ( 5, 3.75) ref -> x0 class-hnd "spilling QMark2" <System.Object[]> -; V09 tmp4 [V09,T07] ( 3, 1.50) ref -> x0 -; V10 tmp5 [V10,T08] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> -; V11 tmp6 [V11,T04] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> -;* V12 tmp7 [V12,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> -;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> -;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V15 tmp10 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 5, 5 ) ref -> x0 "Single return block return value" -; V17 cse0 [V17,T10] ( 3, 1.50) long -> x0 "CSE - moderate" -; V18 cse1 [V18,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 3, 1.50) ref -> x0 +; V07 tmp2 [V07,T07] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> +; V08 tmp3 [V08,T03] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> +;* V09 tmp4 [V09,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> +;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> +;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V13 tmp8 [V13,T02] ( 5, 5 ) ref -> x0 "Single return block return value" +; V14 tmp9 [V14,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V15 cse0 [V15,T09] ( 3, 1.50) long -> x0 "CSE - moderate" +; V16 cse1 [V16,T08] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 8 @@ -94,7 +92,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 b G_M32569_IG07 @@ -105,16 +103,18 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #27
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x1, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x1, #0xD1FFAB1E LSL #16 movk x1, #2 LSL #32 ldr x0, [x1] ; gcrRegs +[x0]
+ ; byrRegs -[x0]
;; size=36 bbWeight=0.50 PerfScore 3.75 G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=4 bbWeight=0.50 PerfScore 0.50 G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19] @@ -124,10 +124,10 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[x19] +[x0] ; gcr arg pop 0
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=32 bbWeight=0.50 PerfScore 3.00 G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] @@ -135,18 +135,20 @@ G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 mov w1, #28
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #2 LSL #32 ldr x0, [x0] ; gcrRegs +[x0]
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=40 bbWeight=0.50 PerfScore 4.25 G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19]
- cbz w20, G_M32569_IG14
+ cbz w20, G_M32569_IG11
mov x0, x19 ; gcrRegs +[x0] mov w1, w20 @@ -159,43 +161,32 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M32569_IG13 - ;; size=40 bbWeight=0.50 PerfScore 4.50 -G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #1 LSL #32 - cmp x2, x3 - beq G_M32569_IG13 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref - b G_M32569_IG19 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ b G_M32569_IG16 + ;; size=56 bbWeight=0.50 PerfScore 5.75 +G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x19] ldr x0, [x19, #0x10]
- cbz x0, G_M32569_IG16
+ cbz x0, G_M32569_IG13
bl <unknown method> ; gcrRegs +[x0] ; gcr arg pop 0 mov x20, x0 ; gcrRegs +[x20]
- cbz x20, G_M32569_IG16
+ cbz x20, G_M32569_IG13
ldr x0, [x20] ; gcrRegs -[x0] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 cmp x0, x1
- beq G_M32569_IG15
+ beq G_M32569_IG12
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -209,10 +200,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0 x19] ; gcr arg pop 0 ;; size=80 bbWeight=0.50 PerfScore 10.00
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M32569_IG14
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x20] +[x19] mov x0, x19 ; gcrRegs +[x0] @@ -226,7 +217,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, mov x20, x0 ; gcrRegs +[x20] ;; size=28 bbWeight=0.50 PerfScore 3.25
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -236,14 +227,14 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ldr x1, [x1] ldr wzr, [x0] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M32569_IG18: ; bbWeight=0.50, epilog, nogc, extend
+G_M32569_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x1 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x20] ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -251,7 +242,7 @@ G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 540, prolog size 24, PerfScore 64.94, instruction count 135, allocated bytes for code 540 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
+; Total bytes of code 520, prolog size 24, PerfScore 64.00, instruction count 130, allocated bytes for code 520 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
; ============================================================ Unwind Info: @@ -262,7 +253,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 135 (0x00087) Actual length = 540 (0x00021c)
+ Function Length : 130 (0x00082) Actual length = 520 (0x000208)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-16 (-1.76%) : 13372.dasm - System.Linq.Enumerable:ContainsSystem.__Canon:ubyte (FullOpts)

@@ -7,97 +7,91 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T12] ( 15, 8.12) long -> x21 single-def -; V01 arg0 [V01,T15] ( 5, 5 ) ref -> x22 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 arg1 [V02,T07] ( 4, 18 ) ref -> x19 class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T11] ( 4, 11 ) ref -> x20 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]> -; V04 loc0 [V04,T05] ( 7, 20 ) ref -> [fp+0x20] class-hnd EH-live spill-single-def <<unknown class>> -; V05 loc1 [V05,T09] ( 2, 16 ) ref -> x21 class-hnd <System.__Canon> -; V06 loc2 [V06,T20] ( 3, 3 ) ubyte -> [fp+0x2C] do-not-enreg[Z] EH-live -; V07 loc3 [V07,T06] ( 7, 20 ) ref -> [fp+0x18] class-hnd EH-live spill-single-def <<unknown class>> -; V08 loc4 [V08,T10] ( 2, 16 ) ref -> x1 class-hnd <System.__Canon>
+; V00 TypeCtx [V00,T00] ( 15, 48.92) long -> x19 single-def +; V01 arg0 [V01,T21] ( 5, 5 ) ref -> x22 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 arg1 [V02,T17] ( 4, 18 ) ref -> x20 class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T20] ( 4, 11 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEqualityComparer`1[System.__Canon]> +; V04 loc0 [V04,T15] ( 7, 20 ) ref -> [fp+0x18] class-hnd EH-live spill-single-def <<unknown class>> +; V05 loc1 [V05,T18] ( 2, 16 ) ref -> x22 class-hnd <System.__Canon> +; V06 loc2 [V06,T26] ( 3, 3 ) ubyte -> [fp+0x24] do-not-enreg[Z] EH-live +; V07 loc3 [V07,T16] ( 7, 20 ) ref -> [fp+0x10] class-hnd EH-live spill-single-def <<unknown class>> +; V08 loc4 [V08,T19] ( 2, 16 ) ref -> x22 class-hnd <System.__Canon>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V11 tmp2 [V11,T16] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
+; V11 tmp2 [V11,T22] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
;* V12 tmp3 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V13 tmp4 [V13,T01] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup"
+; V13 tmp4 [V13,T01] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup"
;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V15 tmp6 [V15,T02] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup"
+; V15 tmp6 [V15,T02] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup"
;* V16 tmp7 [V16 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V17 tmp8 [V17,T17] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
+; V17 tmp8 [V17,T23] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
;* V18 tmp9 [V18 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V19 tmp10 [V19,T03] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup"
+; V19 tmp10 [V19,T03] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup"
;* V20 tmp11 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V21 tmp12 [V21,T00] ( 3, 48 ) ref -> x0 "argument with side effect" -; V22 PSPSym [V22,T33] ( 1, 1 ) long -> [fp+0x38] do-not-enreg[V] "PSPSym" -; V23 cse0 [V23,T08] ( 4, 17 ) long -> x24 hoist multi-def "CSE - aggressive" -; V24 cse1 [V24,T13] ( 2, 8.50) long -> x22 hoist "CSE - aggressive" -; V25 cse2 [V25,T14] ( 2, 8.50) long -> x22 hoist "CSE - aggressive" -; V26 cse3 [V26,T04] ( 12, 26 ) long -> x23 multi-def "CSE - aggressive" -; V27 rat0 [V27,T18] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" -; V28 rat1 [V28,T29] ( 3, 2 ) long -> x24 "runtime lookup" -; V29 rat2 [V29,T21] ( 3, 2.80) long -> x0 "spilling expr" -; V30 rat3 [V30,T25] ( 3, 2.24) long -> x24 "fgMakeTemp is creating a new local variable" -; V31 rat4 [V31,T30] ( 3, 2 ) long -> x22 "runtime lookup" -; V32 rat5 [V32,T22] ( 3, 2.80) long -> x0 "spilling expr" -; V33 rat6 [V33,T26] ( 3, 2.24) long -> x22 "fgMakeTemp is creating a new local variable" -; V34 rat7 [V34,T19] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" -; V35 rat8 [V35,T31] ( 3, 2 ) long -> x24 "runtime lookup" -; V36 rat9 [V36,T23] ( 3, 2.80) long -> x0 "spilling expr" -; V37 rat10 [V37,T27] ( 3, 2.24) long -> x24 "fgMakeTemp is creating a new local variable" -; V38 rat11 [V38,T32] ( 3, 2 ) long -> x22 "runtime lookup" -; V39 rat12 [V39,T24] ( 3, 2.80) long -> x0 "spilling expr" -; V40 rat13 [V40,T28] ( 3, 2.24) long -> x22 "fgMakeTemp is creating a new local variable"
+; V21 tmp12 [V21,T04] ( 3, 48 ) ref -> x0 "argument with side effect" +; V22 PSPSym [V22,T27] ( 1, 1 ) long -> [fp+0x30] do-not-enreg[V] "PSPSym" +; V23 cse0 [V23,T14] ( 12, 26 ) long -> x23 multi-def "CSE - aggressive" +; V24 rat0 [V24,T24] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" +; V25 rat1 [V25,T05] ( 3, 44.80) long -> x0 "spilling expr" +; V26 rat2 [V26,T09] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable" +; V27 rat3 [V27,T13] ( 3, 32 ) long -> x0 "runtime lookup" +; V28 rat4 [V28,T06] ( 3, 44.80) long -> x0 "spilling expr" +; V29 rat5 [V29,T10] ( 3, 35.84) long -> x0 "fgMakeTemp is creating a new local variable" +; V30 rat6 [V30,T25] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" +; V31 rat7 [V31,T07] ( 3, 44.80) long -> x0 "spilling expr" +; V32 rat8 [V32,T11] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable" +; V33 rat9 [V33,T08] ( 3, 44.80) long -> x0 "spilling expr" +; V34 rat10 [V34,T12] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 48
+; Lcl frame size = 40
G_M26627_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x70]! - stp x19, x20, [sp, #0x40] - stp x21, x22, [sp, #0x50] - stp x23, x24, [sp, #0x60]
+ stp fp, lr, [sp, #-0x60]! + stp x19, x20, [sp, #0x38] + stp x21, x22, [sp, #0x48] + str x23, [sp, #0x58]
mov fp, sp
- add x4, sp, #112 - stp x0, x4, [fp, #0x30] // [V22 PSPSym] - mov x21, x0
+ add x4, sp, #96 + stp x0, x4, [fp, #0x28] // [V22 PSPSym] + mov x19, x0
mov x22, x1 ; gcrRegs +[x22]
- mov x19, x2 - ; gcrRegs +[x19] - mov x20, x3
+ mov x20, x2
; gcrRegs +[x20]
+ mov x21, x3 + ; gcrRegs +[x21]
;; size=44 bbWeight=1 PerfScore 8.00
-G_M26627_IG02: ; bbWeight=1, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+G_M26627_IG02: ; bbWeight=1, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref, isz
cbz x22, G_M26627_IG44
- cbnz x20, G_M26627_IG21 - ldr x0, [x21, #0x38]
+ cbnz x21, G_M26627_IG21 + ldr x0, [x19, #0x38]
ldr x11, [x0, #0x10] cbz x11, G_M26627_IG04 ;; size=20 bbWeight=1 PerfScore 9.00
-G_M26627_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x20]
+G_M26627_IG03: ; bbWeight=0.80, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + ; gcrRegs -[x21]
b G_M26627_IG05 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M26627_IG04: ; bbWeight=0.20, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x21
+G_M26627_IG04: ; bbWeight=0.20, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.20 PerfScore 0.70
-G_M26627_IG05: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M26627_IG05: ; bbWeight=1, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref
mov x0, x22 ; gcrRegs +[x0] ldr x1, [x11] blr x1 ; gcrRegs -[x22] ; gcr arg pop 0
- str x0, [fp, #0x20] // [V04 loc0]
+ str x0, [fp, #0x18] // [V04 loc0]
; GC ptr vars +{V04} ;; size=16 bbWeight=1 PerfScore 5.50
-G_M26627_IG06: ; bbWeight=1, gcVars=0000000000000020 {V04}, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M26627_IG06: ; bbWeight=1, gcVars=0000000000008000 {V04}, gcrefRegs=100001 {x0 x20}, byrefRegs=0000 {}, gcvars, byref, isz
movz x23, #0xD1FFAB1E movk x23, #0xD1FFAB1E LSL #16 movk x23, #1 LSL #32 @@ -108,61 +102,58 @@ G_M26627_IG06: ; bbWeight=1, gcVars=0000000000000020 {V04}, gcrefRegs=800 ; gcr arg pop 0 cbz w0, G_M26627_IG18 ;; size=28 bbWeight=1 PerfScore 7.00
-G_M26627_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x21, #0x38]
+G_M26627_IG07: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38]
ldr x1, [x0, #0x08] cmp x1, #24 ble G_M26627_IG10
- ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M26627_IG08: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x24, [x0, #0x18] - cbz x24, G_M26627_IG10 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M26627_IG09: ; bbWeight=0.32, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=8 PerfScore 60.00 +G_M26627_IG08: ; bbWeight=6.40, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x11, [x0, #0x18] + cbz x11, G_M26627_IG10 + ;; size=8 bbWeight=6.40 PerfScore 25.60 +G_M26627_IG09: ; bbWeight=5.12, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
b G_M26627_IG11
- ;; size=4 bbWeight=0.32 PerfScore 0.32 -G_M26627_IG10: ; bbWeight=0.18, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x21
+ ;; size=4 bbWeight=5.12 PerfScore 5.12 +G_M26627_IG10: ; bbWeight=2.88, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov x24, x0 - ;; size=24 bbWeight=0.18 PerfScore 0.63 -G_M26627_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x21, #0x38] - ldr x1, [x0, #0x08] - cmp x1, #40 - ble G_M26627_IG14 - ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M26627_IG12: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x22, [x0, #0x28] - cbz x22, G_M26627_IG14 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M26627_IG13: ; bbWeight=0.32, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - b G_M26627_IG15 - ;; size=4 bbWeight=0.32 PerfScore 0.32 -G_M26627_IG14: ; bbWeight=0.18, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x21 - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ; gcr arg pop 0 - mov x22, x0 - ;; size=24 bbWeight=0.18 PerfScore 0.63 -G_M26627_IG15: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - mov x11, x24 - ldr x0, [fp, #0x20] // [V04 loc0]
+ mov x11, x0 + ;; size=24 bbWeight=2.88 PerfScore 10.08 +G_M26627_IG11: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [fp, #0x18] // [V04 loc0]
; gcrRegs +[x0] ldr x1, [x11] blr x1 ; gcr arg pop 0
- mov x21, x0 - ; gcrRegs +[x21] - mov x0, x22
+ mov x22, x0 + ; gcrRegs +[x22] + ldr x0, [x19, #0x38]
; gcrRegs -[x0]
+ ldr x1, [x0, #0x08] + cmp x1, #40 + ble G_M26627_IG14 + ;; size=32 bbWeight=8 PerfScore 112.00 +G_M26627_IG12: ; bbWeight=6.40, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x28] + cbz x0, G_M26627_IG14 + ;; size=8 bbWeight=6.40 PerfScore 25.60 +G_M26627_IG13: ; bbWeight=5.12, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + b G_M26627_IG15 + ;; size=4 bbWeight=5.12 PerfScore 5.12 +G_M26627_IG14: ; bbWeight=2.88, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=20 bbWeight=2.88 PerfScore 8.64 +G_M26627_IG15: ; bbWeight=8, gcrefRegs=500000 {x20 x22}, byrefRegs=0000 {}, byref, isz
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -170,37 +161,37 @@ G_M26627_IG15: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ...

+40 (+21.28%) : 2148.dasm - Microsoft.FSharp.Collections.PrivateListHelpers:appendToFreshConsTailSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon

@@ -7,62 +7,78 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T09] ( 5, 7.80) long -> x20 single-def -; V01 arg0 [V01,T06] ( 5, 11 ) ref -> x19 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V00 TypeCtx [V00,T08] ( 7, 12.60) long -> x19 single-def +; V01 arg0 [V01,T09] ( 5, 11 ) ref -> x20 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
; V02 arg1 [V02,T02] ( 5, 18 ) ref -> x2 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 -> x21 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V05 loc2 [V05,T11] ( 2, 8 ) ref -> x22 class-hnd <System.__Canon> -; V06 loc3 [V06,T07] ( 3, 12 ) ref -> x0 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V04 loc1 [V04,T11] ( 2, 8 ) ref -> x21 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V05 loc2 [V05,T12] ( 2, 8 ) ref -> x22 class-hnd <System.__Canon> +; V06 loc3 [V06,T10] ( 3, 12 ) ref -> x0 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 ) long -> zero-ref "spilling helperCall"
+; V08 tmp1 [V08,T04] ( 3, 16 ) long -> x23 "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V10 tmp3 [V10,T00] ( 3, 24 ) long -> x23 "argument with side effect" -; V11 tmp4 [V11,T05] ( 2, 16 ) ref -> x2 "argument with side effect" -; V12 cse0 [V12,T08] ( 2, 8 ) long -> x23 "CSE - aggressive" -; V13 cse1 [V13,T03] ( 3, 20 ) ref -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 16 ) long -> x23 "runtime lookup" -; V15 rat1 [V15,T01] ( 3, 22.40) long -> x23 "fgMakeTemp is creating a new local variable"
+; V10 tmp3 [V10,T07] ( 2, 16 ) long -> x24 "argument with side effect" +; V11 tmp4 [V11,T06] ( 2, 16 ) ref -> x2 "argument with side effect" +; V12 cse0 [V12,T03] ( 3, 20 ) ref -> x21 "CSE - aggressive" +; V13 rat0 [V13,T00] ( 3, 22.40) long -> x23 "fgMakeTemp is creating a new local variable" +; V14 rat1 [V14,T05] ( 3, 16 ) long -> x24 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 22.40) long -> x24 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M63806_IG01: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]! - stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp fp, lr, [sp, #-0x50]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30] + stp x23, x24, [sp, #0x40]
mov fp, sp
- str x0, [fp, #0x10] - mov x20, x0 - mov x19, x1 - ; gcrRegs +[x19]
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20]
;; size=32 bbWeight=8 PerfScore 52.00
-G_M63806_IG02: ; bbWeight=8, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG02: ; bbWeight=8, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[x2] ldr x21, [x2, #0x10] ; gcrRegs +[x21]
- cbz x21, G_M63806_IG07
+ cbz x21, G_M63806_IG10
;; size=8 bbWeight=8 PerfScore 32.00
-G_M63806_IG03: ; bbWeight=4, gcrefRegs=280004 {x2 x19 x21}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG03: ; bbWeight=4, gcrefRegs=300004 {x2 x20 x21}, byrefRegs=0000 {}, byref, isz
ldr x22, [x2, #0x08] ; gcrRegs +[x22]
- ldr x0, [x20, #0x38]
+ ldr x0, [x19, #0x38]
ldr x23, [x0, #0x10] cbz x23, G_M63806_IG05 ;; size=16 bbWeight=4 PerfScore 40.00
-G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
+G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref
; gcrRegs -[x2] b G_M63806_IG06 ;; size=4 bbWeight=3.20 PerfScore 3.20
-G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref - mov x0, x20
+G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x23, x0 ;; size=24 bbWeight=0.80 PerfScore 2.80
-G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
+G_M63806_IG06: ; bbWeight=4, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x24, [x0, #0x10] + cbz x24, G_M63806_IG08 + ;; size=12 bbWeight=4 PerfScore 28.00 +G_M63806_IG07: ; bbWeight=3.20, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + b G_M63806_IG09 + ;; size=4 bbWeight=3.20 PerfScore 3.20 +G_M63806_IG08: ; bbWeight=0.80, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + mov x24, x0 + ;; size=24 bbWeight=0.80 PerfScore 2.80 +G_M63806_IG09: ; bbWeight=4, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref
mov x0, x23 movz x1, #0xD1FFAB1E // code for Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:get_Empty():Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 @@ -72,7 +88,7 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=00 ; gcrRegs +[x0] mov x2, x0 ; gcrRegs +[x2]
- mov x0, x23
+ mov x0, x24
; gcrRegs -[x0] mov x1, x22 ; gcrRegs +[x1] @@ -82,33 +98,33 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=00 ldr x3, [x3] blr x3 ; gcrRegs -[x1-x2 x22] +[x0]
- add x14, x19, #16
+ add x14, x20, #16
; byrRegs +[x14] mov x15, x0 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15 x19]
+ ; gcrRegs -[x15 x20]
; byrRegs -[x14] mov x2, x21 ; gcrRegs +[x2]
- mov x19, x0 - ; gcrRegs +[x19]
+ mov x20, x0 + ; gcrRegs +[x20]
b G_M63806_IG02 ;; size=80 bbWeight=4 PerfScore 68.00
-G_M63806_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M63806_IG10: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x2 x21]
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 0.50
-G_M63806_IG08: ; bbWeight=1, epilog, nogc, extend - ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x40
+G_M63806_IG11: ; bbWeight=1, epilog, nogc, extend + ldp x23, x24, [sp, #0x40] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x50
ret lr
- ;; size=20 bbWeight=1 PerfScore 6.00
+ ;; size=20 bbWeight=1 PerfScore 5.00
-; Total bytes of code 188, prolog size 24, PerfScore 204.50, instruction count 47, allocated bytes for code 188 (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 228, prolog size 24, PerfScore 237.50, instruction count 57, allocated bytes for code 228 (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,7 +135,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 47 (0x0002f) Actual length = 188 (0x0000bc)
+ Function Length : 57 (0x00039) Actual length = 228 (0x0000e4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -127,9 +143,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 89 save_fplr_x #9 (0x09); stp fp, lr, [sp, #-80]! + E4 end
E4 end

+44 (+32.35%) : 10734.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastVSystem.__Canon:Microsoft.FSharp.Core.FSharpValueOption`1System.__Canon

@@ -8,10 +8,10 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 3.60) long -> x0 single-def
+; V00 TypeCtx [V00,T02] ( 7, 4.20) long -> x0 single-def
; V01 arg0 [V01,T01] ( 5, 14.50) ref -> x1 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 2, 1 ) ref -> x0 class-hnd single-def <System.__Canon>
+; V03 loc1 [V03,T07] ( 2, 1 ) ref -> x19 class-hnd single-def <System.__Canon>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" @@ -19,25 +19,28 @@ ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]> ;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline ldloca(s) first use temp" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
-; V11 tmp6 [V11,T07] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP -; V12 tmp7 [V12,T09] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
+; V11 tmp6 [V11,T08] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP +; V12 tmp7 [V12,T10] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref "field V09.item (fldOffset=0x0)" P-DEP ;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "field V09._tag (fldOffset=0x8)" P-DEP
-; V15 tmp10 [V15,T08] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T10] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T05] ( 3, 1.50) struct (16) [fp+0x18] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
+; V15 tmp10 [V15,T09] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T11] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T06] ( 3, 1.50) struct (16) [fp+0x10] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
; V18 cse0 [V18,T00] ( 4, 24 ) ref -> x2 "CSE - aggressive"
-; V19 rat0 [V19,T04] ( 3, 2 ) long -> x1 "runtime lookup"
+; V19 rat0 [V19,T05] ( 3, 2 ) long -> x1 "runtime lookup"
; V20 rat1 [V20,T03] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V21 rat2 [V21,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V22 rat3 [V22,T04] ( 2, 2 ) long -> x1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 24
-G_M49887_IG01: ; bbWeight=8, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M49887_IG01: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x30]!
+ str x19, [sp, #0x28]
mov fp, sp
- stp xzr, xzr, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - str x0, [fp, #0x28] - ;; size=16 bbWeight=8 PerfScore 28.00
+ stp xzr, xzr, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + str x0, [fp, #0x20] + ;; size=20 bbWeight=8 PerfScore 36.00
G_M49887_IG02: ; bbWeight=8, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x1] ldr x2, [x1, #0x10] @@ -64,7 +67,7 @@ G_M49887_IG06: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x1, x0 ;; size=20 bbWeight=0.10 PerfScore 0.30 @@ -77,38 +80,54 @@ G_M49887_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr blr x1 ; gcrRegs +[x0] ; gcr arg pop 0
- stp x0, x1, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - ldr x0, [fp, #0x18] // [V17 tmp12] - ldr w1, [fp, #0x20] // [V17 tmp12+0x08]
+ stp x0, x1, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + ldr x0, [fp, #0x10] // [V17 tmp12] + ldr w1, [fp, #0x18] // [V17 tmp12+0x08]
;; size=36 bbWeight=0.50 PerfScore 5.50 G_M49887_IG08: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00 -G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=12 bbWeight=0.50 PerfScore 2.00 +G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] +[x1]
- ldr x0, [x1, #0x08] - ; gcrRegs +[x0] - mov w1, #1
+ ldr x19, [x1, #0x08] + ; gcrRegs +[x19] + ldr x1, [x0, #0x38]
; gcrRegs -[x1]
- ;; size=8 bbWeight=0.50 PerfScore 1.75 -G_M49887_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x1, [x1, #0x10] + cbnz x1, G_M49887_IG11 + ;; size=16 bbWeight=0.50 PerfScore 5.00 +G_M49887_IG10: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=16 bbWeight=0.10 PerfScore 0.25 +G_M49887_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov w1, #1 + mov x0, x19 + ; gcrRegs +[x0] + ;; size=8 bbWeight=0.50 PerfScore 0.50 +G_M49887_IG12: ; bbWeight=0.50, epilog, nogc, extend + ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=12 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 136, prolog size 16, PerfScore 95.45, instruction count 34, allocated bytes for code 136 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
+; Total bytes of code 180, prolog size 20, PerfScore 109.45, instruction count 45, allocated bytes for code 180 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1
+ Code Words : 2
Epilog Count : 2 E bit : 0 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 136 (0x000088)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -119,7 +138,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
+ E4 end + E4 end

+48 (+32.43%) : 9004.dasm - Internal.Utilities.Library.ResultOrException:otherwiseSystem.__Canon:Internal.Utilities.Library.ResultOrException`1System.__Canon

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T02] ( 4, 3 ) byref -> x20 single-def -; V01 TypeCtx [V01,T01] ( 5, 3.60) long -> x0 single-def -; V02 arg0 [V02,T03] ( 4, 3 ) ref -> x2 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]]>
+; V00 RetBuf [V00,T03] ( 4, 3 ) byref -> x21 single-def +; V01 TypeCtx [V01,T01] ( 7, 4.80) long -> x20 single-def +; V02 arg0 [V02,T04] ( 4, 3 ) ref -> x22 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]]>
; V03 arg1 [V03,T00] ( 4, 7 ) byref -> x19 ld-addr-op single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V05 loc1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" @@ -19,83 +19,101 @@ ;* V08 tmp4 [V08 ] ( 0, 0 ) ref -> zero-ref "field V03._exception (fldOffset=0x8)" P-INDEP ;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref "field V03._tag (fldOffset=0x10)" P-INDEP ;* V10 tmp6 [V10 ] ( 0, 0 ) struct (24) zero-ref "Promoted implicit byref" <Internal.Utilities.Library.ResultOrException`1[System.__Canon]>
-; V11 tmp7 [V11,T06] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 rat0 [V12,T05] ( 3, 2 ) long -> x0 "runtime lookup" -; V13 rat1 [V13,T04] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable"
+; V11 tmp7 [V11,T07] ( 2, 2 ) long -> x0 "argument with side effect" +;* V12 rat0 [V12,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat1 [V13,T02] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V14 rat2 [V14,T06] ( 3, 2 ) long -> x0 "runtime lookup" +; V15 rat3 [V15,T05] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 G_M63339_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]!
+ stp fp, lr, [sp, #-0x40]!
stp x19, x20, [sp, #0x20]
+ stp x21, x22, [sp, #0x30]
mov fp, sp str x0, [fp, #0x18]
+ mov x20, x0 + mov x22, x1 + ; gcrRegs +[x22]
mov x19, x2 ; byrRegs +[x19]
- mov x20, x8 - ; byrRegs +[x20] - mov x2, x1 - ; gcrRegs +[x2] - ;; size=28 bbWeight=1 PerfScore 5.00 -G_M63339_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=180000 {x19 x20}, byref, isz - ldr w1, [x19, #0x10] - cmp w1, #1 - beq G_M63339_IG08 - ;; size=12 bbWeight=1 PerfScore 4.50 -G_M63339_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref, isz - ; gcrRegs -[x2] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x10] - cbz x2, G_M63339_IG05 - ;; size=12 bbWeight=0.50 PerfScore 3.50 -G_M63339_IG04: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref - mov x0, x2 - b G_M63339_IG06 - ;; size=8 bbWeight=0.40 PerfScore 0.60 -G_M63339_IG05: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref
+ mov x21, x8 + ; byrRegs +[x21] + ;; size=36 bbWeight=1 PerfScore 6.50 +G_M63339_IG02: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref, isz + ldr x0, [x20, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M63339_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M63339_IG03: ; bbWeight=0.20, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref + mov x0, x20
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=16 bbWeight=0.10 PerfScore 0.25 -G_M63339_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref
+ ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M63339_IG04: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref, isz + ldr w0, [x19, #0x10] + cmp w0, #1 + beq G_M63339_IG10 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M63339_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref, isz + ; gcrRegs -[x22] + ldr x0, [x20, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M63339_IG07 + ;; size=12 bbWeight=0.50 PerfScore 3.50 +G_M63339_IG06: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref + b G_M63339_IG08 + ;; size=4 bbWeight=0.40 PerfScore 0.40 +G_M63339_IG07: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref + mov x0, x20 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=20 bbWeight=0.10 PerfScore 0.30 +G_M63339_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref
ldr x1, [x19] ; gcrRegs +[x1]
- mov x8, x20
+ mov x8, x21
; byrRegs +[x8] movz x2, #0xD1FFAB1E // code for Internal.Utilities.Library.ResultOrException`1[System.__Canon]:NewResult(System.__Canon):Internal.Utilities.Library.ResultOrException`1[System.__Canon] movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 ldr x2, [x2] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M63339_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M63339_IG09: ; bbWeight=0.50, epilog, nogc, extend + ldp x21, x22, [sp, #0x30]
ldp x19, x20, [sp, #0x20]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
br x2 ; gcr arg pop 0
- ;; size=12 bbWeight=0.50 PerfScore 1.50 -G_M63339_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0004 {x2}, byrefRegs=100000 {x20}, gcvars, byref - ; gcrRegs -[x1] +[x2]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M63339_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=400000 {x22}, byrefRegs=200000 {x21}, gcvars, byref + ; gcrRegs -[x1] +[x22]
; byrRegs -[x8 x19]
- mov x0, x2
+ mov x0, x22
; gcrRegs +[x0]
- mov x8, x20
+ mov x8, x21
; byrRegs +[x8] mov x1, xzr
- ldr x2, [x2] - ; gcrRegs -[x2]
+ ldr x2, [x22]
ldr x2, [x2, #0x48] ldr x2, [x2, #0x20] ;; size=24 bbWeight=0.50 PerfScore 5.25
-G_M63339_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M63339_IG11: ; bbWeight=0.50, epilog, nogc, extend + ldp x21, x22, [sp, #0x30]
ldp x19, x20, [sp, #0x20]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
br x2 ; gcr arg pop 0
- ;; size=12 bbWeight=0.50 PerfScore 1.50
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 148, prolog size 28, PerfScore 26.10, instruction count 37, allocated bytes for code 148 (MethodHash=10ca0894) for method Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
+; Total bytes of code 196, prolog size 36, PerfScore 36.05, instruction count 49, allocated bytes for code 196 (MethodHash=10ca0894) for method Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -106,7 +124,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 148 (0x000094)
+ Function Length : 49 (0x00031) Actual length = 196 (0x0000c4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -117,9 +135,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ E6 save_next
C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
- 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end
+ 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end E4 end E4 end

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.osx.arm64.checked.mch 66 14 29 23 -232 +1,120
benchmarks.run_pgo.osx.arm64.checked.mch 58 15 15 28 -524 +660
benchmarks.run_tiered.osx.arm64.checked.mch 47 10 6 31 -456 +264
coreclr_tests.run.osx.arm64.checked.mch 103 70 31 2 -280 +284
libraries.crossgen2.osx.arm64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.osx.arm64.checked.mch 115 16 76 23 -400 +3,648
libraries_tests.run.osx.arm64.Release.mch 18 4 6 8 -244 +184
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 99 18 37 44 -152 +2,676
realworld.run.osx.arm64.checked.mch 84 10 53 21 -96 +4,784
590 157 253 180 -2,384 +13,620

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.osx.arm64.checked.mch 6,540 4 6,536 3 (0.02%) 5,407 (43.81%)
benchmarks.run_pgo.osx.arm64.checked.mch 16,690 15,022 1,668 2 (0.01%) 6,832 (28.56%)
benchmarks.run_tiered.osx.arm64.checked.mch 15,460 13,559 1,901 2 (0.01%) 5,301 (25.06%)
coreclr_tests.run.osx.arm64.checked.mch 1,299 1,091 208 0 (0.00%) 1,505 (47.03%)
libraries.crossgen2.osx.arm64.checked.mch 8,173 10 8,163 0 (0.00%) 2,899 (25.28%)
libraries.pmi.osx.arm64.checked.mch 12,262 12 12,250 0 (0.00%) 4,313 (25.41%)
libraries_tests.run.osx.arm64.Release.mch 6,944 6,418 526 0 (0.00%) 4,405 (37.51%)
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 5,929 0 5,929 1 (0.01%) 4,556 (41.87%)
realworld.run.osx.arm64.checked.mch 10,617 1 10,616 1 (0.01%) 6,033 (35.39%)
83,914 36,117 47,797 9 (0.01%) 41,251 (32.04%)

jit-analyze output

benchmarks.run.osx.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1324952 (overridden on cmd)
Total bytes of diff: 1325840 (overridden on cmd)
Total bytes of delta: 888 (0.07 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         208 : 2145.dasm (19.62 % of base)
         144 : 2189.dasm (45.00 % of base)
          92 : 9362.dasm (13.37 % of base)
          56 : 12219.dasm (6.06 % of base)
          56 : 1918.dasm (36.84 % of base)
          44 : 1316.dasm (14.29 % of base)
          44 : 2765.dasm (7.48 % of base)
          44 : 955.dasm (9.02 % of base)
          44 : 6660.dasm (9.57 % of base)
          40 : 2913.dasm (8.47 % of base)
          40 : 5768.dasm (11.11 % of base)
          40 : 7715.dasm (20.83 % of base)
          40 : 1231.dasm (15.38 % of base)
          40 : 2851.dasm (4.18 % of base)
          32 : 5394.dasm (7.69 % of base)
          32 : 1632.dasm (6.02 % of base)
          28 : 12638.dasm (5.88 % of base)
          28 : 9280.dasm (4.55 % of base)
          24 : 719.dasm (5.45 % of base)
           8 : 12726.dasm (2.33 % of base)

Top file improvements (bytes):
         -48 : 2719.dasm (-10.53 % of base)
         -28 : 3635.dasm (-10.61 % of base)
         -24 : 11045.dasm (-2.02 % of base)
         -24 : 1538.dasm (-3.31 % of base)
         -24 : 86.dasm (-4.51 % of base)
         -20 : 13122.dasm (-4.76 % of base)
         -20 : 371.dasm (-3.70 % of base)
         -20 : 6174.dasm (-5.49 % of base)
          -4 : 5598.dasm (-0.58 % of base)
          -4 : 6071.dasm (-0.29 % of base)
          -4 : 8638.dasm (-1.23 % of base)
          -4 : 834.dasm (-0.82 % of base)
          -4 : 835.dasm (-0.89 % of base)
          -4 : 11313.dasm (-2.78 % of base)

38 total files with Code Size differences (14 improved, 24 regressed), 21 unchanged.

Top method regressions (bytes):
         208 (19.62 % of base) : 2145.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)
         144 (45.00 % of base) : 2189.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          92 (13.37 % of base) : 9362.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)
          56 (6.06 % of base) : 12219.dasm - System.Collections.Immutable.ImmutableQueue:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
          56 (36.84 % of base) : 1918.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          44 (9.57 % of base) : 6660.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)
          44 (9.02 % of base) : 955.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
          44 (7.48 % of base) : 2765.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          44 (14.29 % of base) : 1316.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
          40 (15.38 % of base) : 1231.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          40 (11.11 % of base) : 5768.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          40 (20.83 % of base) : 7715.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
          40 (8.47 % of base) : 2913.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
          40 (4.18 % of base) : 2851.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          32 (6.02 % of base) : 1632.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (FullOpts)
          32 (7.69 % of base) : 5394.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
          28 (4.55 % of base) : 9280.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
          28 (5.88 % of base) : 12638.dasm - System.Collections.Immutable.ImmutableStack:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (FullOpts)
          24 (5.45 % of base) : 719.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)
           8 (2.33 % of base) : 12726.dasm - System.Formats.Tar.TarEntry:ExtractAsRegularFile(System.String):this (FullOpts)

Top method improvements (bytes):
         -48 (-10.53 % of base) : 2719.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -28 (-10.61 % of base) : 3635.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -24 (-3.31 % of base) : 1538.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
         -24 (-4.51 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -24 (-2.02 % of base) : 11045.dasm - System.Xml.Serialization.XmlReflectionImporter:CreateArrayElementsFromAttributes(System.Xml.Serialization.ArrayMapping,System.Xml.Serialization.XmlArrayItemAttributes,System.Type,System.String,System.Xml.Serialization.RecursionLimiter):this (FullOpts)
         -20 (-4.76 % of base) : 13122.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)
         -20 (-5.49 % of base) : 6174.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -20 (-3.70 % of base) : 371.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
          -4 (-1.23 % of base) : 8638.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
          -4 (-2.78 % of base) : 11313.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          -4 (-0.89 % of base) : 835.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.29 % of base) : 6071.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)
          -4 (-0.82 % of base) : 834.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.58 % of base) : 5598.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)

Top method regressions (percentages):
         144 (45.00 % of base) : 2189.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          56 (36.84 % of base) : 1918.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          40 (20.83 % of base) : 7715.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
         208 (19.62 % of base) : 2145.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)
          40 (15.38 % of base) : 1231.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          44 (14.29 % of base) : 1316.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
          92 (13.37 % of base) : 9362.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)
          40 (11.11 % of base) : 5768.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          44 (9.57 % of base) : 6660.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)
          44 (9.02 % of base) : 955.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
          40 (8.47 % of base) : 2913.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
          32 (7.69 % of base) : 5394.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
          44 (7.48 % of base) : 2765.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          56 (6.06 % of base) : 12219.dasm - System.Collections.Immutable.ImmutableQueue:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableQueue`1[System.__Canon] (FullOpts)
          32 (6.02 % of base) : 1632.dasm - System.Array:Sort[int,System.__Canon](int[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[int]) (FullOpts)
          28 (5.88 % of base) : 12638.dasm - System.Collections.Immutable.ImmutableStack:CreateRange[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.Immutable.ImmutableStack`1[System.__Canon] (FullOpts)
           4 (5.56 % of base) : 10412.dasm - System.Convert:ToInt32(System.Object):int (FullOpts)
          24 (5.45 % of base) : 719.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)
          28 (4.55 % of base) : 9280.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
           4 (4.55 % of base) : 7893.dasm - System.Convert:ToBoolean(System.Object,System.IFormatProvider):ubyte (FullOpts)

Top method improvements (percentages):
         -28 (-10.61 % of base) : 3635.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -48 (-10.53 % of base) : 2719.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -20 (-5.49 % of base) : 6174.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -20 (-4.76 % of base) : 13122.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)
         -24 (-4.51 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 371.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -24 (-3.31 % of base) : 1538.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
          -4 (-2.78 % of base) : 11313.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
         -24 (-2.02 % of base) : 11045.dasm - System.Xml.Serialization.XmlReflectionImporter:CreateArrayElementsFromAttributes(System.Xml.Serialization.ArrayMapping,System.Xml.Serialization.XmlArrayItemAttributes,System.Type,System.String,System.Xml.Serialization.RecursionLimiter):this (FullOpts)
          -4 (-1.23 % of base) : 8638.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
          -4 (-0.89 % of base) : 835.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 834.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.58 % of base) : 5598.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 (-0.29 % of base) : 6071.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)


benchmarks.run_pgo.osx.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2517880 (overridden on cmd)
Total bytes of diff: 2518016 (overridden on cmd)
Total bytes of delta: 136 (0.01 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          52 : 11617.dasm (27.08 % of base)
          48 : 17580.dasm (36.36 % of base)
          48 : 17884.dasm (36.36 % of base)
          48 : 19759.dasm (36.36 % of base)
          48 : 21594.dasm (36.36 % of base)
          48 : 23985.dasm (36.36 % of base)
          48 : 25769.dasm (36.36 % of base)
          48 : 8638.dasm (36.36 % of base)
          48 : 16183.dasm (36.36 % of base)
          48 : 21052.dasm (36.36 % of base)
          40 : 22445.dasm (12.35 % of base)
          40 : 24953.dasm (12.35 % of base)
          40 : 6339.dasm (12.35 % of base)
          40 : 19786.dasm (12.35 % of base)
          16 : 5316.dasm (10.53 % of base)

Top file improvements (bytes):
        -140 : 12713.dasm (-8.77 % of base)
         -96 : 6893.dasm (-6.54 % of base)
         -24 : 18683.dasm (-2.87 % of base)
         -24 : 22570.dasm (-2.87 % of base)
         -24 : 24466.dasm (-2.82 % of base)
         -24 : 25877.dasm (-2.86 % of base)
         -24 : 22167.dasm (-2.87 % of base)
         -24 : 8643.dasm (-2.86 % of base)
         -24 : 11737.dasm (-2.82 % of base)
         -24 : 16195.dasm (-2.87 % of base)
         -24 : 19763.dasm (-4.48 % of base)
         -24 : 21064.dasm (-2.84 % of base)
         -20 : 16063.dasm (-5.49 % of base)
         -20 : 19963.dasm (-5.49 % of base)
          -8 : 5385.dasm (-0.69 % of base)

30 total files with Code Size differences (15 improved, 15 regressed), 24 unchanged.

Top method regressions (bytes):
          52 (27.08 % of base) : 11617.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          48 (36.36 % of base) : 17580.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 17884.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19759.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 21594.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23985.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 25769.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 8638.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16183.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 21052.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          40 (12.35 % of base) : 22445.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          40 (12.35 % of base) : 24953.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          40 (12.35 % of base) : 6339.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          40 (12.35 % of base) : 19786.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          16 (10.53 % of base) : 5316.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)

Top method improvements (bytes):
        -140 (-8.77 % of base) : 12713.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -96 (-6.54 % of base) : 6893.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -24 (-2.87 % of base) : 18683.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.87 % of base) : 22570.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.82 % of base) : 24466.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.86 % of base) : 25877.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.87 % of base) : 22167.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.86 % of base) : 8643.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.82 % of base) : 11737.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.87 % of base) : 16195.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-4.48 % of base) : 19763.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.84 % of base) : 21064.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-5.49 % of base) : 16063.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -20 (-5.49 % of base) : 19963.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
          -8 (-0.69 % of base) : 5385.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref,byref):ubyte:this (Tier0)

Top method regressions (percentages):
          48 (36.36 % of base) : 17580.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 17884.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19759.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 21594.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 23985.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 25769.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 8638.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16183.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 21052.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          52 (27.08 % of base) : 11617.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          40 (12.35 % of base) : 22445.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          40 (12.35 % of base) : 24953.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          40 (12.35 % of base) : 6339.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          40 (12.35 % of base) : 19786.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          16 (10.53 % of base) : 5316.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)

Top method improvements (percentages):
        -140 (-8.77 % of base) : 12713.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -96 (-6.54 % of base) : 6893.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -20 (-5.49 % of base) : 16063.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -20 (-5.49 % of base) : 19963.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -24 (-4.48 % of base) : 19763.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.87 % of base) : 18683.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.87 % of base) : 22570.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.87 % of base) : 22167.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.87 % of base) : 16195.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.86 % of base) : 25877.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.86 % of base) : 8643.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.84 % of base) : 21064.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.82 % of base) : 24466.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.82 % of base) : 11737.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
          -8 (-0.69 % of base) : 5385.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref,byref):ubyte:this (Tier0)


benchmarks.run_tiered.osx.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2370724 (overridden on cmd)
Total bytes of diff: 2370532 (overridden on cmd)
Total bytes of delta: -192 (-0.01 % of base)
    diff is an improvement.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          56 : 11743.dasm (36.84 % of base)
          52 : 18430.dasm (14.44 % of base)
          52 : 12452.dasm (27.08 % of base)
          48 : 4906.dasm (36.36 % of base)
          40 : 6243.dasm (15.38 % of base)
          16 : 8975.dasm (10.53 % of base)

Top file improvements (bytes):
        -140 : 6523.dasm (-8.77 % of base)
        -124 : 8988.dasm (-14.16 % of base)
         -96 : 9452.dasm (-6.54 % of base)
         -24 : 4915.dasm (-4.51 % of base)
         -20 : 11817.dasm (-3.70 % of base)
         -20 : 7501.dasm (-5.49 % of base)
         -16 : 12187.dasm (-3.36 % of base)
          -8 : 9005.dasm (-0.69 % of base)
          -4 : 12457.dasm (-1.15 % of base)
          -4 : 13125.dasm (-0.89 % of base)

16 total files with Code Size differences (10 improved, 6 regressed), 28 unchanged.

Top method regressions (bytes):
          56 (36.84 % of base) : 11743.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          52 (14.44 % of base) : 18430.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
          52 (27.08 % of base) : 12452.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          48 (36.36 % of base) : 4906.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          40 (15.38 % of base) : 6243.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          16 (10.53 % of base) : 8975.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)

Top method improvements (bytes):
        -140 (-8.77 % of base) : 6523.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
        -124 (-14.16 % of base) : 8988.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
         -96 (-6.54 % of base) : 9452.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -24 (-4.51 % of base) : 4915.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-5.49 % of base) : 7501.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -20 (-3.70 % of base) : 11817.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -16 (-3.36 % of base) : 12187.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)
          -8 (-0.69 % of base) : 9005.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref,byref):ubyte:this (Tier0)
          -4 (-0.89 % of base) : 13125.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1)
          -4 (-1.15 % of base) : 12457.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1-OSR)

Top method regressions (percentages):
          56 (36.84 % of base) : 11743.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          48 (36.36 % of base) : 4906.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          52 (27.08 % of base) : 12452.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          40 (15.38 % of base) : 6243.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          52 (14.44 % of base) : 18430.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
          16 (10.53 % of base) : 8975.dasm - MicroBenchmarks.Serializers.DataGenerator:Generate[System.Nullable`1[System.DateTimeOffset]]():System.Nullable`1[System.DateTimeOffset] (Tier0)

Top method improvements (percentages):
        -124 (-14.16 % of base) : 8988.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
        -140 (-8.77 % of base) : 6523.dasm - Newtonsoft.Json.Utilities.BoxedPrimitives:.cctor() (Tier0)
         -96 (-6.54 % of base) : 9452.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -20 (-5.49 % of base) : 7501.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -24 (-4.51 % of base) : 4915.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.70 % of base) : 11817.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -16 (-3.36 % of base) : 12187.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)
          -4 (-1.15 % of base) : 12457.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1-OSR)
          -4 (-0.89 % of base) : 13125.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1)
          -8 (-0.69 % of base) : 9005.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref,byref):ubyte:this (Tier0)


coreclr_tests.run.osx.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 313876 (overridden on cmd)
Total bytes of diff: 313880 (overridden on cmd)
Total bytes of delta: 4 (0.00 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          84 : 1014.dasm (20.39 % of base)
          28 : 2515.dasm (9.86 % of base)
          12 : 2213.dasm (7.89 % of base)
          12 : 2245.dasm (8.33 % of base)
          12 : 2425.dasm (7.14 % of base)
          12 : 3122.dasm (6.12 % of base)
          12 : 2060.dasm (7.89 % of base)
          12 : 2495.dasm (6.82 % of base)
          12 : 2505.dasm (6.98 % of base)
           4 : 1960.dasm (3.70 % of base)
           4 : 2355.dasm (3.70 % of base)
           4 : 2445.dasm (3.70 % of base)
           4 : 2475.dasm (3.70 % of base)
           4 : 2485.dasm (3.70 % of base)
           4 : 1979.dasm (3.70 % of base)
           4 : 1967.dasm (3.70 % of base)
           4 : 2295.dasm (3.70 % of base)
           4 : 2415.dasm (3.70 % of base)
           4 : 2455.dasm (3.70 % of base)
           4 : 2465.dasm (3.70 % of base)

Top file improvements (bytes):
          -4 : 1809.dasm (-3.70 % of base)
          -4 : 1997.dasm (-3.70 % of base)
          -4 : 2008.dasm (-3.70 % of base)
          -4 : 2020.dasm (-3.70 % of base)
          -4 : 2031.dasm (-3.70 % of base)
          -4 : 2054.dasm (-3.57 % of base)
          -4 : 2091.dasm (-3.70 % of base)
          -4 : 2121.dasm (-3.70 % of base)
          -4 : 2131.dasm (-3.70 % of base)
          -4 : 2161.dasm (-3.70 % of base)
          -4 : 2171.dasm (-3.57 % of base)
          -4 : 2201.dasm (-3.57 % of base)
          -4 : 2263.dasm (-3.70 % of base)
          -4 : 2325.dasm (-3.03 % of base)
          -4 : 1816.dasm (-3.70 % of base)
          -4 : 1822.dasm (-3.57 % of base)
          -4 : 1991.dasm (-3.70 % of base)
          -4 : 2002.dasm (-3.70 % of base)
          -4 : 2014.dasm (-3.70 % of base)
          -4 : 2025.dasm (-3.70 % of base)

55 total files with Code Size differences (32 improved, 23 regressed), 2 unchanged.

Top method regressions (bytes):
          84 (20.39 % of base) : 1014.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Instrumented Tier1)
          28 (9.86 % of base) : 2515.dasm - NullableTest45:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (7.89 % of base) : 2213.dasm - NullableTest13:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (8.33 % of base) : 2245.dasm - NullableTest16:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (6.12 % of base) : 3122.dasm - NullableTest18:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          12 (7.89 % of base) : 2060.dasm - NullableTest18:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          12 (7.14 % of base) : 2425.dasm - NullableTest34:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (6.82 % of base) : 2495.dasm - NullableTest43:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (6.98 % of base) : 2505.dasm - NullableTest44:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 1960.dasm - NullableTest1:BoxUnboxToQ(IEmpty):ubyte (Tier0)
           4 (2.63 % of base) : 3088.dasm - NullableTest1:BoxUnboxToQ(IEmpty):ubyte (Tier0)
           4 (3.70 % of base) : 1967.dasm - NullableTest2:BoxUnboxToQ(IEmpty):ubyte (Tier0)
           4 (3.70 % of base) : 2295.dasm - NullableTest21:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2355.dasm - NullableTest27:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (2.63 % of base) : 3092.dasm - NullableTest3:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
           4 (3.70 % of base) : 2415.dasm - NullableTest33:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2445.dasm - NullableTest38:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2455.dasm - NullableTest39:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 1979.dasm - NullableTest4:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
           4 (3.70 % of base) : 2465.dasm - NullableTest40:BoxUnboxToQ(System.Object):ubyte (Tier0)

Top method improvements (bytes):
          -4 (-3.70 % of base) : 1809.dasm - NullableTest1:BoxUnboxToQ(System.Enum):ubyte (Tier0)
          -4 (-3.70 % of base) : 2091.dasm - NullableTest1:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2014.dasm - NullableTest10:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.57 % of base) : 2181.dasm - NullableTest10:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2020.dasm - NullableTest11:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2191.dasm - NullableTest11:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2025.dasm - NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.57 % of base) : 2201.dasm - NullableTest12:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2031.dasm - NullableTest13:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.57 % of base) : 2222.dasm - NullableTest14:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.57 % of base) : 2042.dasm - NullableTest15:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.57 % of base) : 2233.dasm - NullableTest15:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.57 % of base) : 2054.dasm - NullableTest17:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2263.dasm - NullableTest18:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2273.dasm - NullableTest19:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 1816.dasm - NullableTest2:BoxUnboxToQ(System.Enum):ubyte (Tier0)
          -4 (-2.63 % of base) : 3042.dasm - NullableTest2:BoxUnboxToQ(System.Enum):ubyte (Tier0)
          -4 (-3.70 % of base) : 2101.dasm - NullableTest2:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.03 % of base) : 2325.dasm - NullableTest24:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.57 % of base) : 1822.dasm - NullableTest3:BoxUnboxToQ(System.Enum):ubyte (Tier0)

Top method regressions (percentages):
          84 (20.39 % of base) : 1014.dasm - System.IO.StreamReader:ValidateArgsAndOpenPath(System.String,System.Text.Encoding,int):System.IO.FileStream (Instrumented Tier1)
          28 (9.86 % of base) : 2515.dasm - NullableTest45:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (8.33 % of base) : 2245.dasm - NullableTest16:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (7.89 % of base) : 2213.dasm - NullableTest13:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (7.89 % of base) : 2060.dasm - NullableTest18:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          12 (7.14 % of base) : 2425.dasm - NullableTest34:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (6.98 % of base) : 2505.dasm - NullableTest44:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (6.82 % of base) : 2495.dasm - NullableTest43:BoxUnboxToQ(System.Object):ubyte (Tier0)
          12 (6.12 % of base) : 3122.dasm - NullableTest18:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
           4 (3.70 % of base) : 1960.dasm - NullableTest1:BoxUnboxToQ(IEmpty):ubyte (Tier0)
           4 (3.70 % of base) : 1967.dasm - NullableTest2:BoxUnboxToQ(IEmpty):ubyte (Tier0)
           4 (3.70 % of base) : 2295.dasm - NullableTest21:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2355.dasm - NullableTest27:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2415.dasm - NullableTest33:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2445.dasm - NullableTest38:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2455.dasm - NullableTest39:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 1979.dasm - NullableTest4:BoxUnboxToQ(IEmptyGen`1[int]):ubyte (Tier0)
           4 (3.70 % of base) : 2465.dasm - NullableTest40:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2475.dasm - NullableTest41:BoxUnboxToQ(System.Object):ubyte (Tier0)
           4 (3.70 % of base) : 2485.dasm - NullableTest42:BoxUnboxToQ(System.Object):ubyte (Tier0)

Top method improvements (percentages):
          -4 (-3.70 % of base) : 1809.dasm - NullableTest1:BoxUnboxToQ(System.Enum):ubyte (Tier0)
          -4 (-3.70 % of base) : 2091.dasm - NullableTest1:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2014.dasm - NullableTest10:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2020.dasm - NullableTest11:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2191.dasm - NullableTest11:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2025.dasm - NullableTest12:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2031.dasm - NullableTest13:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2263.dasm - NullableTest18:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2273.dasm - NullableTest19:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 1816.dasm - NullableTest2:BoxUnboxToQ(System.Enum):ubyte (Tier0)
          -4 (-3.70 % of base) : 2101.dasm - NullableTest2:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2111.dasm - NullableTest3:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2121.dasm - NullableTest4:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2131.dasm - NullableTest5:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 1991.dasm - NullableTest6:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2141.dasm - NullableTest6:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 1997.dasm - NullableTest7:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2151.dasm - NullableTest7:BoxUnboxToQ(System.Object):ubyte (Tier0)
          -4 (-3.70 % of base) : 2002.dasm - NullableTest8:BoxUnboxToQ(System.IComparable):ubyte (Tier0)
          -4 (-3.70 % of base) : 2161.dasm - NullableTest8:BoxUnboxToQ(System.Object):ubyte (Tier0)


libraries.pmi.osx.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1291576 (overridden on cmd)
Total bytes of diff: 1294824 (overridden on cmd)
Total bytes of delta: 3248 (0.25 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         144 : 12069.dasm (53.73 % of base)
         144 : 12166.dasm (25.90 % of base)
         144 : 12168.dasm (25.90 % of base)
         144 : 7298.dasm (75.00 % of base)
         144 : 7318.dasm (75.00 % of base)
         136 : 7302.dasm (58.62 % of base)
         136 : 7320.dasm (58.62 % of base)
         116 : 7296.dasm (87.88 % of base)
         116 : 7316.dasm (87.88 % of base)
         108 : 12090.dasm (25.00 % of base)
         104 : 7304.dasm (44.83 % of base)
         100 : 12097.dasm (19.38 % of base)
         100 : 12116.dasm (19.38 % of base)
         100 : 12126.dasm (19.38 % of base)
         100 : 12136.dasm (19.38 % of base)
         100 : 12146.dasm (19.38 % of base)
          88 : 8774.dasm (19.82 % of base)
          88 : 8781.dasm (20.75 % of base)
          76 : 6939.dasm (27.94 % of base)
          68 : 6937.dasm (30.36 % of base)

Top file improvements (bytes):
         -44 : 11600.dasm (-23.91 % of base)
         -44 : 11604.dasm (-17.74 % of base)
         -40 : 5848.dasm (-16.95 % of base)
         -28 : 491.dasm (-10.61 % of base)
         -24 : 1821.dasm (-3.51 % of base)
         -24 : 1824.dasm (-3.70 % of base)
         -24 : 2962.dasm (-13.33 % of base)
         -24 : 86.dasm (-4.51 % of base)
         -20 : 1193.dasm (-3.76 % of base)
         -20 : 1834.dasm (-12.82 % of base)
         -20 : 1852.dasm (-15.15 % of base)
         -20 : 1853.dasm (-15.15 % of base)
         -20 : 1861.dasm (-15.15 % of base)
         -20 : 1862.dasm (-15.15 % of base)
         -20 : 8739.dasm (-8.47 % of base)
          -8 : 8732.dasm (-3.28 % of base)

63 total files with Code Size differences (16 improved, 47 regressed), 21 unchanged.

Top method regressions (bytes):
         144 (75.00 % of base) : 7318.dasm - System.MemoryExtensions:AsMemory[System.__Canon](System.ArraySegment`1[System.__Canon],int):System.Memory`1[System.__Canon] (FullOpts)
         144 (75.00 % of base) : 7298.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],int):System.Span`1[System.__Canon] (FullOpts)
         144 (53.73 % of base) : 12069.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)
         144 (25.90 % of base) : 12166.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)
         144 (25.90 % of base) : 12168.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)
         136 (58.62 % of base) : 7320.dasm - System.MemoryExtensions:AsMemory[System.__Canon](System.ArraySegment`1[System.__Canon],int,int):System.Memory`1[System.__Canon] (FullOpts)
         136 (58.62 % of base) : 7302.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],int,int):System.Span`1[System.__Canon] (FullOpts)
         116 (87.88 % of base) : 7316.dasm - System.MemoryExtensions:AsMemory[System.__Canon](System.ArraySegment`1[System.__Canon]):System.Memory`1[System.__Canon] (FullOpts)
         116 (87.88 % of base) : 7296.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
         108 (25.00 % of base) : 12090.dasm - System.Numerics.Vector:Dot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
         104 (44.83 % of base) : 7304.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],System.Range):System.Span`1[System.__Canon] (FullOpts)
         100 (19.38 % of base) : 12097.dasm - System.Numerics.Vector:Equals[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.Numerics.Vector`1[System.__Canon] (FullOpts)
         100 (19.38 % of base) : 12116.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)
         100 (19.38 % of base) : 12126.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)
         100 (19.38 % of base) : 12136.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)
         100 (19.38 % of base) : 12146.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)
          88 (19.82 % of base) : 8774.dasm - System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
          88 (20.75 % of base) : 8781.dasm - System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)
          76 (27.94 % of base) : 6939.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[],System.Index):System.Span`1[System.__Canon] (FullOpts)
          68 (30.36 % of base) : 6937.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[],int):System.Span`1[System.__Canon] (FullOpts)

Top method improvements (bytes):
         -44 (-23.91 % of base) : 11600.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -44 (-17.74 % of base) : 11604.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -40 (-16.95 % of base) : 5848.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -28 (-10.61 % of base) : 491.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -24 (-3.70 % of base) : 1824.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.EventInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
         -24 (-3.51 % of base) : 1821.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
         -24 (-13.33 % of base) : 2962.dasm - System.RuntimeType+RuntimeTypeCache:get_FunctionPointerReturnAndParameterTypes():System.Type[]:this (FullOpts)
         -24 (-4.51 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-12.82 % of base) : 1834.dasm - System.Attribute:CreateAttributeArrayHelper(System.Type,int):System.Attribute[] (FullOpts)
         -20 (-15.15 % of base) : 1861.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly):System.Attribute[] (FullOpts)
         -20 (-15.15 % of base) : 1862.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,ubyte):System.Attribute[] (FullOpts)
         -20 (-15.15 % of base) : 1852.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Module):System.Attribute[] (FullOpts)
         -20 (-15.15 % of base) : 1853.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Module,ubyte):System.Attribute[] (FullOpts)
         -20 (-3.76 % of base) : 1193.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -20 (-8.47 % of base) : 8739.dasm - System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,int):int (FullOpts)
          -8 (-3.28 % of base) : 8732.dasm - System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,int):int (FullOpts)

Top method regressions (percentages):
         116 (87.88 % of base) : 7316.dasm - System.MemoryExtensions:AsMemory[System.__Canon](System.ArraySegment`1[System.__Canon]):System.Memory`1[System.__Canon] (FullOpts)
         116 (87.88 % of base) : 7296.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
         144 (75.00 % of base) : 7318.dasm - System.MemoryExtensions:AsMemory[System.__Canon](System.ArraySegment`1[System.__Canon],int):System.Memory`1[System.__Canon] (FullOpts)
         144 (75.00 % of base) : 7298.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],int):System.Span`1[System.__Canon] (FullOpts)
         136 (58.62 % of base) : 7320.dasm - System.MemoryExtensions:AsMemory[System.__Canon](System.ArraySegment`1[System.__Canon],int,int):System.Memory`1[System.__Canon] (FullOpts)
         136 (58.62 % of base) : 7302.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],int,int):System.Span`1[System.__Canon] (FullOpts)
         144 (53.73 % of base) : 12069.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)
         104 (44.83 % of base) : 7304.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],System.Range):System.Span`1[System.__Canon] (FullOpts)
          52 (37.14 % of base) : 7322.dasm - System.MemoryExtensions:CopyTo[System.__Canon](System.__Canon[],System.Span`1[System.__Canon]) (FullOpts)
          56 (36.84 % of base) : 2554.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          44 (36.67 % of base) : 7290.dasm - System.MemoryExtensions:Reverse[System.__Canon](System.Span`1[System.__Canon]) (FullOpts)
          56 (34.15 % of base) : 12035.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)
          48 (33.33 % of base) : 7300.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.ArraySegment`1[System.__Canon],System.Index):System.Span`1[System.__Canon] (FullOpts)
          68 (30.36 % of base) : 6937.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[],int):System.Span`1[System.__Canon] (FullOpts)
          76 (27.94 % of base) : 6939.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[],System.Index):System.Span`1[System.__Canon] (FullOpts)
         144 (25.90 % of base) : 12166.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)
         144 (25.90 % of base) : 12168.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)
         108 (25.00 % of base) : 12090.dasm - System.Numerics.Vector:Dot[System.__Canon](System.Numerics.Vector`1[System.__Canon],System.Numerics.Vector`1[System.__Canon]):System.__Canon (FullOpts)
          64 (21.05 % of base) : 6941.dasm - System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[],System.Range):System.Span`1[System.__Canon] (FullOpts)
          88 (20.75 % of base) : 8781.dasm - System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,System.__Canon,System.__Canon,System.__Canon,int):int (FullOpts)

Top method improvements (percentages):
         -44 (-23.91 % of base) : 11600.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -44 (-17.74 % of base) : 11604.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -40 (-16.95 % of base) : 5848.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -20 (-15.15 % of base) : 1861.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly):System.Attribute[] (FullOpts)
         -20 (-15.15 % of base) : 1862.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,ubyte):System.Attribute[] (FullOpts)
         -20 (-15.15 % of base) : 1852.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Module):System.Attribute[] (FullOpts)
         -20 (-15.15 % of base) : 1853.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Module,ubyte):System.Attribute[] (FullOpts)
         -24 (-13.33 % of base) : 2962.dasm - System.RuntimeType+RuntimeTypeCache:get_FunctionPointerReturnAndParameterTypes():System.Type[]:this (FullOpts)
         -20 (-12.82 % of base) : 1834.dasm - System.Attribute:CreateAttributeArrayHelper(System.Type,int):System.Attribute[] (FullOpts)
         -28 (-10.61 % of base) : 491.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
         -20 (-8.47 % of base) : 8739.dasm - System.SpanHelpers:LastIndexOfAnyExcept[System.__Canon](byref,System.__Canon,int):int (FullOpts)
         -24 (-4.51 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.76 % of base) : 1193.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -24 (-3.70 % of base) : 1824.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.EventInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
         -24 (-3.51 % of base) : 1821.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
          -8 (-3.28 % of base) : 8732.dasm - System.SpanHelpers:IndexOfAnyExcept[System.__Canon](byref,System.__Canon,int):int (FullOpts)


libraries_tests.run.osx.arm64.Release.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1161284 (overridden on cmd)
Total bytes of diff: 1161224 (overridden on cmd)
Total bytes of delta: -60 (-0.01 % of base)
    diff is an improvement.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          76 : 4734.dasm (32.20 % of base)
          48 : 4658.dasm (33.33 % of base)
          48 : 5183.dasm (33.33 % of base)
           4 : 8747.dasm (0.83 % of base)
           4 : 3543.dasm (1.64 % of base)
           4 : 3824.dasm (1.64 % of base)

Top file improvements (bytes):
         -96 : 6856.dasm (-6.54 % of base)
         -92 : 7780.dasm (-5.36 % of base)
         -52 : 868.dasm (-32.50 % of base)
          -4 : 1062.dasm (-3.33 % of base)

10 total files with Code Size differences (4 improved, 6 regressed), 8 unchanged.

Top method regressions (bytes):
          76 (32.20 % of base) : 4734.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Instrumented Tier1)
          48 (33.33 % of base) : 4658.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5183.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
           4 (0.83 % of base) : 8747.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ConstVal:GetDefaultValue(int):Microsoft.CSharp.RuntimeBinder.Semantics.ConstVal (Tier0)
           4 (1.64 % of base) : 3824.dasm - System.PlatformDetection+<>c:<.cctor>b__509_4():ubyte:this (Tier0)
           4 (1.64 % of base) : 3543.dasm - System.PlatformDetection+<>c:<.cctor>b__509_5():ubyte:this (Tier0)

Top method improvements (bytes):
         -96 (-6.54 % of base) : 6856.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -92 (-5.36 % of base) : 7780.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExprConstant:get_Object():System.Object:this (Tier0)
         -52 (-32.50 % of base) : 868.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
          -4 (-3.33 % of base) : 1062.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)

Top method regressions (percentages):
          48 (33.33 % of base) : 4658.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5183.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          76 (32.20 % of base) : 4734.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Instrumented Tier1)
           4 (1.64 % of base) : 3824.dasm - System.PlatformDetection+<>c:<.cctor>b__509_4():ubyte:this (Tier0)
           4 (1.64 % of base) : 3543.dasm - System.PlatformDetection+<>c:<.cctor>b__509_5():ubyte:this (Tier0)
           4 (0.83 % of base) : 8747.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ConstVal:GetDefaultValue(int):Microsoft.CSharp.RuntimeBinder.Semantics.ConstVal (Tier0)

Top method improvements (percentages):
         -52 (-32.50 % of base) : 868.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
         -96 (-6.54 % of base) : 6856.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -92 (-5.36 % of base) : 7780.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExprConstant:get_Object():System.Object:this (Tier0)
          -4 (-3.33 % of base) : 1062.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)

10 total methods with Code Size differences (4 improved, 6 regressed).


librariestestsnotieredcompilation.run.osx.arm64.Release.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1152092 (overridden on cmd)
Total bytes of diff: 1154616 (overridden on cmd)
Total bytes of delta: 2524 (0.22 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         332 : 3518.dasm (19.76 % of base)
         244 : 4141.dasm (20.54 % of base)
         144 : 69.dasm (45.00 % of base)
         136 : 7257.dasm (47.22 % of base)
         132 : 6724.dasm (17.46 % of base)
         128 : 3002.dasm (35.16 % of base)
          96 : 1919.dasm (24.49 % of base)
          88 : 6570.dasm (12.09 % of base)
          84 : 403.dasm (18.42 % of base)
          84 : 2199.dasm (32.81 % of base)
          76 : 24.dasm (32.20 % of base)
          76 : 3498.dasm (11.38 % of base)
          64 : 6579.dasm (84.21 % of base)
          64 : 5869.dasm (61.54 % of base)
          60 : 5919.dasm (48.39 % of base)
          56 : 9318.dasm (36.84 % of base)
          48 : 1107.dasm (23.53 % of base)
          48 : 3543.dasm (6.42 % of base)
          44 : 2891.dasm (7.48 % of base)
          44 : 5892.dasm (18.33 % of base)

Top file improvements (bytes):
         -32 : 3060.dasm (-9.41 % of base)
         -20 : 2806.dasm (-20.83 % of base)
         -20 : 3094.dasm (-5.49 % of base)
         -16 : 750.dasm (-1.76 % of base)
         -12 : 3411.dasm (-1.90 % of base)
          -4 : 255.dasm (-0.68 % of base)
          -4 : 3162.dasm (-0.29 % of base)
          -4 : 397.dasm (-0.90 % of base)
          -4 : 320.dasm (-0.89 % of base)
          -4 : 3233.dasm (-0.78 % of base)
          -4 : 341.dasm (-1.67 % of base)
          -4 : 512.dasm (-0.60 % of base)
          -4 : 5941.dasm (-1.18 % of base)
          -4 : 60.dasm (-0.82 % of base)
          -4 : 6924.dasm (-0.97 % of base)
          -4 : 8736.dasm (-0.96 % of base)
          -4 : 8966.dasm (-1.18 % of base)
          -4 : 993.dasm (-0.27 % of base)

44 total files with Code Size differences (18 improved, 26 regressed), 22 unchanged.

Top method regressions (bytes):
         332 (19.76 % of base) : 3518.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)
         244 (20.54 % of base) : 4141.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)
         144 (45.00 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         136 (47.22 % of base) : 7257.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
         132 (17.46 % of base) : 6724.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)
         128 (35.16 % of base) : 3002.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)
          96 (24.49 % of base) : 1919.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (FullOpts)
          88 (12.09 % of base) : 6570.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)
          84 (32.81 % of base) : 2199.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
          84 (18.42 % of base) : 403.dasm - Xunit.ConfigReader_Json:LoadFile(System.String):Xunit.TestAssemblyConfiguration (FullOpts)
          76 (32.20 % of base) : 24.dasm - Internal.Microsoft.Extensions.DependencyModel.FileWrapper:OpenRead(System.String):System.IO.Stream:this (FullOpts)
          76 (11.38 % of base) : 3498.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (FullOpts)
          64 (61.54 % of base) : 5869.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
          64 (84.21 % of base) : 6579.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
          60 (48.39 % of base) : 5919.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)
          56 (36.84 % of base) : 9318.dasm - System.GC:AllocateUninitializedArray[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](int,ubyte):System.Collections.Immutable.ImmutableArray`1[System.__Canon][] (FullOpts)
          48 (6.42 % of base) : 3543.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)
          48 (23.53 % of base) : 1107.dasm - Xunit.Sdk.ExceptionAggregator:RunAsync[System.__Canon](System.Func`1[System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon]:this (FullOpts)
          44 (33.33 % of base) : 5915.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)
          44 (18.33 % of base) : 5892.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Select[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon]](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.Func`3[System.__Canon,System.Threading.CancellationToken,System.ValueTuple`2[System.__Canon,System.__Canon]]):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.ValueTuple`2[System.__Canon,System.__Canon]] (FullOpts)

Top method improvements (bytes):
         -32 (-9.41 % of base) : 3060.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
         -20 (-20.83 % of base) : 2806.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
         -20 (-5.49 % of base) : 3094.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -16 (-1.76 % of base) : 750.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)
         -12 (-1.90 % of base) : 3411.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
          -4 (-0.68 % of base) : 255.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.67 % of base) : 341.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
          -4 (-1.18 % of base) : 5941.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-1.18 % of base) : 8966.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
          -4 (-0.78 % of base) : 3233.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.96 % of base) : 8736.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.97 % of base) : 6924.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.90 % of base) : 397.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % 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.27 % of base) : 993.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.29 % of base) : 3162.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)
          -4 (-0.82 % of base) : 60.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.60 % of base) : 512.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)

Top method regressions (percentages):
          64 (84.21 % of base) : 6579.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
          64 (61.54 % of base) : 5869.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
          60 (48.39 % of base) : 5919.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)
         136 (47.22 % of base) : 7257.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
         144 (45.00 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
          44 (37.93 % of base) : 4721.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)
          44 (37.93 % of base) : 9970.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)
          56 (36.84 % of base) : 9318.dasm - System.GC:AllocateUninitializedArray[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](int,ubyte):System.Collections.Immutable.ImmutableArray`1[System.__Canon][] (FullOpts)
         128 (35.16 % of base) : 3002.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)
          44 (33.33 % of base) : 5915.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)
          84 (32.81 % of base) : 2199.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
          76 (32.20 % of base) : 24.dasm - Internal.Microsoft.Extensions.DependencyModel.FileWrapper:OpenRead(System.String):System.IO.Stream:this (FullOpts)
          96 (24.49 % of base) : 1919.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (FullOpts)
          32 (23.53 % of base) : 1174.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
          48 (23.53 % of base) : 1107.dasm - Xunit.Sdk.ExceptionAggregator:RunAsync[System.__Canon](System.Func`1[System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon]:this (FullOpts)
         244 (20.54 % of base) : 4141.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)
         332 (19.76 % of base) : 3518.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)
          84 (18.42 % of base) : 403.dasm - Xunit.ConfigReader_Json:LoadFile(System.String):Xunit.TestAssemblyConfiguration (FullOpts)
          44 (18.33 % of base) : 5892.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Select[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon]](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.Func`3[System.__Canon,System.Threading.CancellationToken,System.ValueTuple`2[System.__Canon,System.__Canon]]):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.ValueTuple`2[System.__Canon,System.__Canon]] (FullOpts)
          44 (18.33 % of base) : 5924.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:SelectMany[System.ValueTuple`2[System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.__Canon,System.__Canon]]],System.ValueTuple`2[System.__Canon,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]]]],System.Func`3[System.ValueTuple`2[System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.__Canon,System.__Canon]]],System.Threading.CancellationToken,System.Collections.Immutable.ImmutableArray`1[System.ValueTuple`2[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon]]]]):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.ValueTuple`2[System.__Canon,System.ValueTuple`2[System.__Canon,System.__Canon]]] (FullOpts)

Top method improvements (percentages):
         -20 (-20.83 % of base) : 2806.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
         -32 (-9.41 % of base) : 3060.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
         -20 (-5.49 % of base) : 3094.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -12 (-1.90 % of base) : 3411.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
         -16 (-1.76 % of base) : 750.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
          -4 (-1.67 % of base) : 341.dasm - Interop+Sys+FileDescriptors:.cctor() (FullOpts)
          -4 (-1.18 % of base) : 5941.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-1.18 % of base) : 8966.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
          -4 (-0.97 % of base) : 6924.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.96 % of base) : 8736.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.90 % of base) : 397.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % 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.82 % of base) : 60.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.78 % of base) : 3233.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.68 % of base) : 255.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 (-0.60 % of base) : 512.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.29 % of base) : 3162.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)
          -4 (-0.27 % of base) : 993.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.osx.arm64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os osx -target_arch arm64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1916968 (overridden on cmd)
Total bytes of diff: 1921656 (overridden on cmd)
Total bytes of delta: 4688 (0.24 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         504 : 6297.dasm (51.01 % of base)
         300 : 7873.dasm (30.86 % of base)
         288 : 5213.dasm (16.98 % of base)
         244 : 14835.dasm (20.54 % of base)
         224 : 5959.dasm (49.56 % of base)
         224 : 5969.dasm (50.45 % of base)
         224 : 5948.dasm (49.56 % of base)
         224 : 5972.dasm (49.56 % of base)
         144 : 13455.dasm (43.90 % of base)
         144 : 9960.dasm (16.36 % of base)
         140 : 9658.dasm (12.92 % of base)
         132 : 17073.dasm (17.46 % of base)
         116 : 8114.dasm (16.29 % of base)
         100 : 5970.dasm (29.76 % of base)
          96 : 8658.dasm (5.52 % of base)
          92 : 5967.dasm (26.14 % of base)
          84 : 8589.dasm (23.86 % of base)
          80 : 8576.dasm (8.81 % of base)
          76 : 4622.dasm (23.75 % of base)
          64 : 16767.dasm (84.21 % of base)

Top file improvements (bytes):
         -24 : 86.dasm (-4.51 % of base)
         -20 : 371.dasm (-3.70 % of base)
         -16 : 13372.dasm (-1.76 % of base)
         -12 : 8323.dasm (-1.58 % of base)
          -4 : 13130.dasm (-0.90 % of base)
          -4 : 16754.dasm (-1.25 % of base)
          -4 : 3338.dasm (-0.30 % of base)
          -4 : 827.dasm (-0.82 % of base)
          -4 : 828.dasm (-0.89 % of base)
          -4 : 12514.dasm (-0.51 % of base)

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

Top method regressions (bytes):
         504 (51.01 % of base) : 6297.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)
         300 (30.86 % of base) : 7873.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)
         288 (16.98 % of base) : 5213.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)
         244 (20.54 % of base) : 14835.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)
         224 (50.45 % of base) : 5969.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5972.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)
         224 (49.56 % of base) : 5959.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5948.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         144 (16.36 % of base) : 9960.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)
         144 (43.90 % of base) : 13455.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
         140 (12.92 % of base) : 9658.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)
         132 (17.46 % of base) : 17073.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 (16.29 % of base) : 8114.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)
         100 (29.76 % of base) : 5970.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          96 (5.52 % of base) : 8658.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)
          92 (26.14 % of base) : 5967.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          84 (23.86 % of base) : 8589.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          80 (8.81 % of base) : 8576.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)
          76 (23.75 % of base) : 4622.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 (84.21 % of base) : 16767.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)

Top method improvements (bytes):
         -24 (-4.51 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 371.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -16 (-1.76 % of base) : 13372.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)
         -12 (-1.58 % of base) : 8323.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)
          -4 (-1.25 % of base) : 16754.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-0.90 % of base) : 13130.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 828.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.30 % of base) : 3338.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)
          -4 (-0.82 % of base) : 827.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.51 % of base) : 12514.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)

Top method regressions (percentages):
          64 (84.21 % of base) : 16767.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
         504 (51.01 % of base) : 6297.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)
         224 (50.45 % of base) : 5969.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5972.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)
         224 (49.56 % of base) : 5959.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5948.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         144 (43.90 % of base) : 13455.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
          56 (36.84 % of base) : 11858.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          48 (32.43 % of base) : 9004.dasm - Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          44 (32.35 % of base) : 10734.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
         300 (30.86 % of base) : 7873.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)
          56 (29.79 % of base) : 5896.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)
         100 (29.76 % of base) : 5970.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          92 (26.14 % of base) : 5967.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          84 (23.86 % of base) : 8589.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          76 (23.75 % of base) : 4622.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          40 (21.28 % of base) : 2148.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)
         244 (20.54 % of base) : 14835.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)
          48 (19.05 % of base) : 2383.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)
         132 (17.46 % of base) : 17073.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)

Top method improvements (percentages):
         -24 (-4.51 % of base) : 86.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 371.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -16 (-1.76 % of base) : 13372.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)
         -12 (-1.58 % of base) : 8323.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)
          -4 (-1.25 % of base) : 16754.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-0.90 % of base) : 13130.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 828.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 827.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.51 % of base) : 12514.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
          -4 (-0.30 % of base) : 3338.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)



windows arm64

Diffs are based on 87,579 contexts (27,614 MinOpts, 59,965 FullOpts).

MISSED contexts: base: 7 (0.00%), diff: 56,114 (38.00%)

Overall (+13,532 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 1,162,332 +908
benchmarks.run_pgo.windows.arm64.checked.mch 2,506,252 -856
benchmarks.run_tiered.windows.arm64.checked.mch 2,125,908 +136
coreclr_tests.run.windows.arm64.checked.mch 274,032 +28
libraries.pmi.windows.arm64.checked.mch 1,385,152 +2,660
libraries_tests.run.windows.arm64.Release.mch 689,828 +3,044
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 1,207,948 +3,020
realworld.run.windows.arm64.checked.mch 1,993,076 +4,592

MinOpts (-496 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run_pgo.windows.arm64.checked.mch 1,942,112 -220
benchmarks.run_tiered.windows.arm64.checked.mch 1,889,888 -220
libraries_tests.run.windows.arm64.Release.mch 397,544 -56

FullOpts (+14,028 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 1,162,232 +908
benchmarks.run_pgo.windows.arm64.checked.mch 564,140 -636
benchmarks.run_tiered.windows.arm64.checked.mch 236,020 +356
coreclr_tests.run.windows.arm64.checked.mch 274,032 +28
libraries.pmi.windows.arm64.checked.mch 1,385,152 +2,660
libraries_tests.run.windows.arm64.Release.mch 292,284 +3,100
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 1,207,948 +3,020
realworld.run.windows.arm64.checked.mch 1,992,976 +4,592

Example diffs

benchmarks.run.windows.arm64.checked.mch

-36 (-21.43%) : 5611.dasm - Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)

@@ -9,88 +9,75 @@ ; Final local variable assignments ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V01 tmp1 [V01,T00] ( 7, 14 ) ref -> x0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> -; V02 tmp2 [V02,T01] ( 7, 14 ) ref -> x0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> -; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive" -; V04 cse1 [V04,T03] ( 3, 3 ) long -> x20 "CSE - aggressive"
+; V01 tmp1 [V01,T00] ( 7, 14 ) ref -> x15 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> +; V02 tmp2 [V02,T01] ( 5, 10 ) ref -> x0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> +; V03 cse0 [V03,T02] ( 3, 3 ) ref -> x0 "CSE - aggressive" +; V04 cse1 [V04,T03] ( 3, 3 ) byref -> x1 "CSE - aggressive" +; V05 cse2 [V05,T04] ( 3, 3 ) byref -> x2 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3, 3 ) long -> x3 "CSE - aggressive"
; ; Lcl frame size = 0 G_M11709_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x20]! - stp x19, x20, [sp, #0x10]
+ stp fp, lr, [sp, #-0x10]!
mov fp, sp
- ;; size=12 bbWeight=1 PerfScore 2.50
+ ;; size=8 bbWeight=1 PerfScore 1.50
G_M11709_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movz x19, #0xD1FFAB1E - movk x19, #0xD1FFAB1E LSL #16 - movk x19, #0xD1FFAB1E LSL #32 - mov x0, x19 - bl CORINFO_HELP_NEWFAST
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0]
- str xzr, [x0, #0x10] - add x14, x0, #24 - ; byrRegs +[x14] - mov w15, #4 - stlr w15, [x14]
+ mov x15, x0 + ; gcrRegs +[x15] + str xzr, [x15, #0x10] + add x1, x15, #24 + ; byrRegs +[x1] + mov w14, #4 + stlr w14, [x1] + mov w14, #1 + strb w14, [x15, #0x1C] + add x2, x15, #29 + ; byrRegs +[x2] + stlrb w14, [x2] + str x14, [x15, #0x10] + movz x3, #0xD1FFAB1E // data for <unknown class>:<unknown field> + movk x3, #0xD1FFAB1E LSL #16 + movk x3, #0xD1FFAB1E LSL #32 + mov x14, x3 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + str xzr, [x0, #0x10] + mov w14, #4 + stlr w14, [x1]
mov w14, #1
- ; byrRegs -[x14]
strb w14, [x0, #0x1C]
- add x14, x0, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str x15, [x0, #0x10] - movz x20, #0xD1FFAB1E // data for <unknown class>:<unknown field> - movk x20, #0xD1FFAB1E LSL #16 - movk x20, #0xD1FFAB1E LSL #32 - mov x14, x20 - ; byrRegs -[x14]
+ stlrb w14, [x2] + str xzr, [x0, #0x10] + add x14, x3, #8
mov x15, x0 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15]
- mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - str xzr, [x0, #0x10] - add x14, x0, #24 - ; byrRegs +[x14] - mov w15, #4 - stlr w15, [x14] - mov w14, #1 - ; byrRegs -[x14] - strb w14, [x0, #0x1C] - add x14, x0, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str xzr, [x0, #0x10] - add x14, x20, #8 - ; byrRegs -[x14] - mov x15, x0 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x0 x15] - ;; size=144 bbWeight=1 PerfScore 25.00
+ ; byrRegs -[x1-x2] + ;; size=116 bbWeight=1 PerfScore 21.00
G_M11709_IG03: ; bbWeight=1, epilog, nogc, extend
- ldp x19, x20, [sp, #0x10] - ldp fp, lr, [sp], #0x20
+ ldp fp, lr, [sp], #0x10
ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 168, prolog size 12, PerfScore 30.50, instruction count 42, allocated bytes for code 168 (MethodHash=991dd242) for method Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
+; Total bytes of code 132, prolog size 8, PerfScore 24.50, instruction count 33, allocated bytes for code 132 (MethodHash=991dd242) for method Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 2
+ Code Words : 1
Epilog Count : 1 E bit : 0 X bit : 0 Vers : 0
- Function Length : 42 (0x0002a) Actual length = 168 (0x0000a8)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -98,10 +85,7 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 02 save_regp X#0 Z#2 (0x02); stp x19, x20, [sp, #16] - 83 save_fplr_x #3 (0x03); stp fp, lr, [sp, #-32]! - E4 end - E4 end
+ 81 save_fplr_x #1 (0x01); stp fp, lr, [sp, #-16]!
E4 end E4 end

-48 (-10.53%) : 3541.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute

@@ -8,22 +8,18 @@ ; 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 -> x19 class-hnd single-def <System.Type> -; V01 loc0 [V01,T04] ( 5, 4 ) ref -> x20 class-hnd single-def <System.Collections.Hashtable> -; V02 loc1 [V02,T02] ( 7, 5 ) ref -> x22 class-hnd <System.Attribute[]> -; V03 loc2 [V03,T12] ( 4, 1 ) ref -> [fp+0x18] class-hnd exact EH-live spill-single-def <System.Object>
+; V00 arg0 [V00,T00] ( 6, 4.50) ref -> x19 class-hnd single-def <System.Type> +; V01 loc0 [V01,T02] ( 5, 4 ) ref -> x20 class-hnd single-def <System.Collections.Hashtable> +; V02 loc1 [V02,T01] ( 7, 5 ) ref -> x22 class-hnd <System.Attribute[]> +; V03 loc2 [V03,T08] ( 4, 1 ) ref -> [fp+0x18] class-hnd exact EH-live spill-single-def <System.Object>
; V04 loc3 [V04 ] ( 6, 2.50) ubyte -> [fp+0x20] 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 -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T10] ( 3, 1.25) long -> x2 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T00] ( 5, 6.75) ref -> x22 class-hnd "spilling QMark2" <System.Attribute[]> -; V09 tmp4 [V09,T07] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V10 tmp5 [V10,T11] ( 3, 1.25) long -> x2 "fgMakeTemp is creating a new local variable" -; V11 tmp6 [V11,T05] ( 5, 3.75) ref -> x22 class-hnd "spilling QMark2" <System.Attribute[]> -; V12 tmp7 [V12,T08] ( 2, 2 ) ubyte -> x0 "Inlining Arg" -; V13 PSPSym [V13,T13] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" -; V14 cse0 [V14,T06] ( 4, 3 ) long -> x21 "CSE - aggressive" -; V15 cse1 [V15,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 2, 2 ) ubyte -> x0 "Inlining Arg" +; V07 tmp2 [V07,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V08 tmp3 [V08,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V09 PSPSym [V09,T09] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" +; V10 cse0 [V10,T04] ( 4, 3 ) long -> x21 "CSE - aggressive" +; V11 cse1 [V11,T07] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 32 @@ -33,7 +29,7 @@ G_M8794_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x21, x22, [sp, #0x40] mov fp, sp add x1, sp, #80
- str x1, [fp, #0x28] // [V13 PSPSym]
+ str x1, [fp, #0x28] // [V09 PSPSym]
mov x19, x0 ; gcrRegs +[x19] ;; size=28 bbWeight=1 PerfScore 5.50 @@ -57,44 +53,29 @@ G_M8794_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x22, x1 - ; gcrRegs +[x22] - cbz x22, G_M8794_IG05 - ;; size=56 bbWeight=1 PerfScore 18.50 -G_M8794_IG03: ; bbWeight=0.25, gcrefRegs=580002 {x1 x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- ldr x0, [x22] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M8794_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M8794_IG04: ; bbWeight=0.12, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x22] - mov x0, x2 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x22, x0 ; gcrRegs +[x22]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M8794_IG05: ; bbWeight=1, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - cbz x22, G_M8794_IG08 - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M8794_IG06: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x19-x20]
+ cbz x22, G_M8794_IG05 + ;; size=72 bbWeight=1 PerfScore 21.00 +G_M8794_IG03: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x19-x20]
mov x0, x22 ; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 0.50
-G_M8794_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M8794_IG04: ; bbWeight=1, epilog, nogc, extend
ldp x21, x22, [sp, #0x40] ldp x19, x20, [sp, #0x30] ldp fp, lr, [sp], #0x50 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M8794_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
+G_M8794_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0 x22] +[x19-x20] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 @@ -105,11 +86,11 @@ G_M8794_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=1800 ; GC ptr vars +{V03} str wzr, [fp, #0x20] // [V04 loc3] ;; size=24 bbWeight=0.50 PerfScore 3.25
-G_M8794_IG09: ; bbWeight=0.50, gcVars=0000000000001000 {V03}, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG06: ; bbWeight=0.50, gcVars=0000000000000100 {V03}, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb w1, [fp, #0x20] // [V04 loc3]
- cbz w1, G_M8794_IG11
+ cbz w1, 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 -[x0 x19-x20] movz x1, #0xD1FFAB1E // code for System.Threading.Monitor:ThrowLockTakenException() movk x1, #0xD1FFAB1E LSL #16 @@ -119,14 +100,14 @@ G_M8794_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 brk_windows #0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG08: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[x0 x19-x20] add x1, fp, #32 // [V04 loc3] bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0 ldrb w0, [fp, #0x20] // [V04 loc3]
- cbnz w0, G_M8794_IG12
+ cbnz w0, G_M8794_IG09
movz x1, #8 movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -140,7 +121,7 @@ G_M8794_IG11: ; bbWeight=0.50, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0 ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=52 bbWeight=0.50 PerfScore 6.00
-G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
+G_M8794_IG09: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
mov x0, x20 ; gcrRegs +[x0] mov x1, x19 @@ -151,33 +132,17 @@ G_M8794_IG12: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x22, x1 - ; gcrRegs +[x22] - cbz x22, G_M8794_IG15 - ;; size=28 bbWeight=0.50 PerfScore 3.50 -G_M8794_IG13: ; bbWeight=0.25, gcrefRegs=580002 {x1 x19 x20 x22}, byrefRegs=0000 {}, byref, isz
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- ldr x0, [x22] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M8794_IG15 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M8794_IG14: ; bbWeight=0.12, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x22] - mov x0, x2 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x22, x0 ; gcrRegs +[x22]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=580000 {x19 x20 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - cbnz x22, G_M8794_IG16
+ cbnz x22, G_M8794_IG10
mov x0, x19
- ; gcrRegs +[x0]
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -200,45 +165,45 @@ G_M8794_IG15: ; bbWeight=0.50, gcrefRegs=580000 {x19 x20 x22}, byrefRegs= blr x3 ; gcrRegs -[x0-x2 x19-x20] ; gcr arg pop 0
- ;; size=68 bbWeight=0.50 PerfScore 7.50 -G_M8794_IG16: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
+ ;; size=108 bbWeight=0.50 PerfScore 11.75 +G_M8794_IG10: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
ldrb w0, [fp, #0x20] // [V04 loc3]
- cbz w0, G_M8794_IG06
+ cbz w0, G_M8794_IG03
ldr x0, [fp, #0x18] // [V03 loc2] ; gcrRegs +[x0] ; GC ptr vars -{V03} bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0
- b G_M8794_IG06
+ b G_M8794_IG03
;; size=20 bbWeight=0.50 PerfScore 3.50
-G_M8794_IG17: ; bbWeight=0, gcVars=0000000000001000 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
+G_M8794_IG11: ; bbWeight=0, gcVars=0000000000000100 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc
; gcrRegs -[x22]
- ; GC ptr vars +{V03 V12}
+ ; GC ptr vars +{V03 V08}
stp fp, lr, [sp, #-0x40]! stp x19, x20, [sp, #0x20] stp x21, x22, [sp, #0x30] add x3, fp, #80 str x3, [sp, #0x18] ;; size=20 bbWeight=0 PerfScore 0.00
-G_M8794_IG18: ; bbWeight=0, gcVars=0000000000001000 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8794_IG12: ; bbWeight=0, gcVars=0000000000000100 {V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldrb w0, [fp, #0x20] // [V04 loc3]
- cbz w0, G_M8794_IG19
+ cbz w0, G_M8794_IG13
ldr x0, [fp, #0x18] // [V03 loc2] ; gcrRegs +[x0]
- ; GC ptr vars -{V03 V12}
+ ; GC ptr vars -{V03 V08}
bl <unknown method> ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=16 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
ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 456, prolog size 28, PerfScore 58.25, instruction count 114, allocated bytes for code 456 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
+; Total bytes of code 408, prolog size 28, PerfScore 57.00, instruction count 102, allocated bytes for code 408 (MethodHash=544edda5) for method System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
; ============================================================ Unwind Info: @@ -249,7 +214,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 101 (0x00065) Actual length = 404 (0x000194)
+ Function Length : 89 (0x00059) Actual length = 356 (0x000164)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -286,4 +251,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)
+EH#0: try [G_M8794_IG06..G_M8794_IG10) handled by [G_M8794_IG11..END) (fault)
-20 (-5.49%) : 7789.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
@@ -7,42 +7,40 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5.50) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T02] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T12] ( 3, 2.50) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T11] ( 3, 2.50) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T08] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T07] ( 4, 3 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T05] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T15] ( 2, 2 ) long -> x0 "argument with side effect" -; V11 tmp8 [V11,T16] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 cse0 [V12,T07] ( 5, 3.50) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T04] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T09] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T13] ( 3, 2 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T14] ( 3, 2 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T11] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+; V10 tmp7 [V10,T14] ( 2, 2 ) long -> x0 "argument with side effect" +; V11 tmp8 [V11,T15] ( 2, 2 ) long -> x0 "argument with side effect" +; V12 cse0 [V12,T06] ( 8, 3.80) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T03] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T04] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T08] ( 3, 2.80) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T12] ( 3, 2 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T09] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T13] ( 3, 2 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T10] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -59,56 +57,53 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbz x23, G_M18513_IG11 - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x22]
+ mov x22, x0 + ; gcrRegs +[x22] + cbz x22, G_M18513_IG11 + ;; size=16 bbWeight=1 PerfScore 5.50 +G_M18513_IG06: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG08 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35
-G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG09: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0.50 PerfScore 2.00 G_M18513_IG10: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
tst w20, #255 beq G_M18513_IG16 ldr x0, [x21, #0x38] @@ -116,79 +111,77 @@ G_M18513_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480 ldr x0, [x0, #0x38] cbz x0, G_M18513_IG13 ;; size=24 bbWeight=0.50 PerfScore 5.75
-G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG14 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG16 movn w0, #0 ; gcrRegs -[x0]
- ;; size=40 bbWeight=0.50 PerfScore 3.50
+ ;; size=40 bbWeight=0.50 PerfScore 6.00
G_M18513_IG15: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0.50 PerfScore 3.00 -G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M18513_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG18 ;; size=16 bbWeight=0.50 PerfScore 5.00
-G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG17: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG19 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG18: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG19: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=0.50 PerfScore 2.50
+ ;; size=20 bbWeight=0.50 PerfScore 3.75
G_M18513_IG20: ; bbWeight=0.50, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0.50 PerfScore 3.00
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 364, prolog size 32, PerfScore 62.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
+; Total bytes of code 344, prolog size 28, PerfScore 61.85, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
; ============================================================ Unwind Info: @@ -199,7 +192,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) ...

+44 (+14.29%) : 1136.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpanSystem.__Canon:System.Span`1System.__Canon

@@ -8,26 +8,29 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 3.60) long -> x20 single-def
+; V00 TypeCtx [V00,T01] ( 7, 4.28) long -> x20 single-def
; V01 arg0 [V01,T00] ( 6, 4.50) ref -> x19 class-hnd single-def <System.Collections.Generic.List`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op <System.Span`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 4, 2 ) int -> x21 -; V04 loc2 [V04,T05] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
+; V03 loc1 [V03,T08] ( 4, 2 ) int -> x21 +; V04 loc2 [V04,T07] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T07] ( 3, 2 ) long -> x2 "spilling helperCall"
+; V06 tmp1 [V06,T09] ( 3, 2 ) long -> x2 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V12 tmp7 [V12,T08] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
+; V12 tmp7 [V12,T10] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp10 [V15,T03] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T04] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T09] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP -; V18 tmp13 [V18,T10] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
+; V15 tmp10 [V15,T04] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T05] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T11] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP +; V18 tmp13 [V18,T12] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
; V19 rat0 [V19,T02] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable"
+;* V20 rat1 [V20,T13] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V21 rat2 [V21,T03] ( 3, 2.80) long -> x0 "spilling expr" +; V22 rat3 [V22,T06] ( 2, 1.60) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -45,7 +48,7 @@ G_M30960_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x0, xzr ; byrRegs +[x0] mov w1, wzr
- cbz x19, G_M30960_IG10
+ cbz x19, G_M30960_IG13
;; size=12 bbWeight=1 PerfScore 2.00 G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; byrRegs -[x0] @@ -68,7 +71,7 @@ G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, G_M30960_IG04: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz ldr w0, [x22, #0x08] cmp w0, w21
- blo G_M30960_IG11
+ blo G_M30960_IG14
ldr x0, [x20, #0x38] ldr x2, [x0, #0x10] cbz x2, G_M30960_IG06 @@ -81,7 +84,7 @@ G_M30960_IG06: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x2, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35 G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz @@ -105,9 +108,26 @@ G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=000 ; gcrRegs -[x19] ;; size=60 bbWeight=0.50 PerfScore 8.00 G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
+ ldr x0, [x20, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M30960_IG10 + ;; size=16 bbWeight=0.50 PerfScore 3.75 +G_M30960_IG09: ; bbWeight=0.40, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M30960_IG11 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M30960_IG10: ; bbWeight=0.18, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x20 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M30960_IG11: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
add x19, x22, #16 ; byrRegs +[x19]
- tbz w21, #31, G_M30960_IG09
+ tbz w21, #31, G_M30960_IG12
movz x0, #8 movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -121,19 +141,19 @@ G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {} blr x2 ; gcrRegs -[x22] ;; size=52 bbWeight=0.50 PerfScore 5.00
-G_M30960_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
+G_M30960_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
mov x0, x19 ; byrRegs +[x0] sxtw w1, w21 ;; size=8 bbWeight=0.50 PerfScore 0.50
-G_M30960_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
+G_M30960_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
; byrRegs -[x19] ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M30960_IG14: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[x0] movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowInvalidOperationException_ConcurrentOperationsNotSupported() movk x0, #0xD1FFAB1E LSL #16 @@ -143,7 +163,7 @@ G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { brk_windows #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 308, prolog size 20, PerfScore 39.25, instruction count 77, allocated bytes for code 308 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
+; Total bytes of code 352, prolog size 20, PerfScore 45.14, instruction count 88, allocated bytes for code 352 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -154,7 +174,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
+ Function Length : 88 (0x00058) Actual length = 352 (0x000160)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+15.38%) : 3026.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) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x19 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T06] ( 3, 3 ) ref -> x22 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> x20 single-def -; V04 arg3 [V04,T03] ( 4, 4 ) int -> x21 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T07] ( 3, 3 ) ref -> x23 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> x21 single-def +; V04 arg3 [V04,T03] ( 4, 4 ) int -> x22 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,80 +24,96 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T04] ( 3, 6 ) ref -> x0 single-def "argument with side effect"
-; V16 cse0 [V16,T09] ( 3, 3 ) int -> x1 "CSE - aggressive" -; V17 rat0 [V17,T08] ( 3, 4 ) long -> x1 "runtime lookup" -; V18 rat1 [V18,T05] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T07] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T10] ( 3, 3 ) int -> x0 "CSE - aggressive" +;* V17 rat0 [V17,T11] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T05] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T06] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- str x0, [fp, #0x18] - mov x19, x1 - ; gcrRegs +[x19] - mov x22, x2 - ; gcrRegs +[x22] - mov w20, w3 - mov w21, w4 - ;; size=36 bbWeight=1 PerfScore 6.50 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - cbz x19, G_M13831_IG08 - ldr w1, [x19, #0x08] - cmp w1, w20 - blo G_M13831_IG09 - sub w1, w1, w20 - cmp w1, w21 - blo G_M13831_IG10 - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M13831_IG05 - ;; size=44 bbWeight=1 PerfScore 15.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ldr x1, [x1, #0x18] - cbz x1, G_M13831_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - b G_M13831_IG06 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+ str x0, [fp, #0x10] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x23, x2 + ; gcrRegs +[x23] + mov w21, w3 + mov w22, w4 + ;; size=44 bbWeight=1 PerfScore 8.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M13831_IG10 + ldr w0, [x20, #0x08] + cmp w0, w21 + blo G_M13831_IG11 + sub w0, w0, w21 + cmp w0, w22 + blo G_M13831_IG12 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M13831_IG04 + ;; size=40 bbWeight=1 PerfScore 14.50 +G_M13831_IG03: ; bbWeight=0.20, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M13831_IG04: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M13831_IG07 + ;; size=16 bbWeight=1 PerfScore 7.50 +G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M13831_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + b G_M13831_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x1
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1 ; gcrRegs +[x0]
- mov x1, x19
+ mov x1, x20
; gcrRegs +[x1]
- mov x2, x22
+ mov x2, x23
; gcrRegs +[x2]
- mov w3, w20 - mov w4, w21
+ mov w3, w21 + mov w4, w22
ldr x5, [x0] ldr x5, [x5, #0x50] ldr x5, [x5] blr x5
- ; gcrRegs -[x0-x2 x19 x22] - ;; size=56 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0-x2 x20 x23] + ;; size=52 bbWeight=1 PerfScore 17.50 +G_M13831_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=20 bbWeight=1 PerfScore 6.00 +G_M13831_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_windows #0 ;; size=28 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -114,7 +130,7 @@ G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x0 brk_windows #0 ;; size=24 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -123,7 +139,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_windows #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 260, prolog size 20, PerfScore 48.42, instruction count 65, allocated bytes for code 260 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
+; Total bytes of code 300, prolog size 24, PerfScore 59.02, instruction count 75, allocated bytes for code 300 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
; ============================================================ Unwind Info: @@ -134,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 65 (0x00041) Actual length = 260 (0x000104)
+ Function Length : 75 (0x0004b) Actual length = 300 (0x00012c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,10 +158,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! E4 end
- E4 end - E4 end

+40 (+20.83%) : 7127.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) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x1 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x19 class-hnd single-def <System.Comparison`1[System.__Canon]>
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T02] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Comparison`1[System.__Canon]>
;* V03 loc0 [V03 ] ( 0, 0 ) struct (16) 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 (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp3 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp4 [V08,T07] ( 2, 4 ) int -> x21 "Inlining Arg" -; V09 tmp5 [V09,T06] ( 2, 4 ) byref -> x20 single-def "Inlining Arg"
+; V08 tmp4 [V08,T08] ( 2, 4 ) int -> x20 "Inlining Arg" +; V09 tmp5 [V09,T07] ( 2, 4 ) byref -> x22 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=0x8)" P-INDEP
-; V14 tmp10 [V14,T09] ( 2, 2 ) byref -> x20 single-def "field V05._reference (fldOffset=0x0)" P-INDEP -; V15 tmp11 [V15,T10] ( 2, 2 ) int -> x21 "field V05._length (fldOffset=0x8)" P-INDEP -; V16 tmp12 [V16,T08] ( 2, 4 ) long -> x0 "argument with side effect" -; V17 rat0 [V17,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V18 rat1 [V18,T03] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V14 tmp10 [V14,T10] ( 2, 2 ) byref -> x22 single-def "field V05._reference (fldOffset=0x0)" P-INDEP +; V15 tmp11 [V15,T11] ( 2, 2 ) int -> x20 "field V05._length (fldOffset=0x8)" P-INDEP +; V16 tmp12 [V16,T09] ( 2, 4 ) long -> x0 "argument with side effect" +;* V17 rat0 [V17,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T03] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T04] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M37190_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10] - mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 5.00 -G_M37190_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x1] - cbz x1, G_M37190_IG08 - cbz x19, G_M37190_IG09 - add x20, x1, #16 - ; byrRegs +[x20] - ldr w21, [x1, #0x08] - ldr x1, [x0, #0x38] - ; gcrRegs -[x1] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M37190_IG05 - ;; size=32 bbWeight=1 PerfScore 13.00 -G_M37190_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M37190_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M37190_IG04: ; bbWeight=0.64, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - mov x0, x2 - b G_M37190_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M37190_IG05: ; bbWeight=0.36, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x21, x2 + ; gcrRegs +[x21] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M37190_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M37190_IG10 + cbz x21, G_M37190_IG11 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M37190_IG04 + ;; size=20 bbWeight=1 PerfScore 9.00 +G_M37190_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M37190_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M37190_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + add x22, x20, #16 + ; byrRegs +[x22] + ldr w20, [x20, #0x08] + ; gcrRegs -[x20] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M37190_IG07 + ;; size=24 bbWeight=1 PerfScore 11.00 +G_M37190_IG05: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M37190_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M37190_IG06: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + b G_M37190_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M37190_IG07: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M37190_IG08: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=400000 {x22}, byref + mov x1, x22
; byrRegs +[x1]
- mov w2, w21 - mov x3, x19
+ mov w2, w20 + mov x3, x21
; gcrRegs +[x3] movz x4, #0xD1FFAB1E // code for <unknown method> movk x4, #0xD1FFAB1E LSL #16 movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x3 x19] - ; byrRegs -[x1 x20]
+ ; gcrRegs -[x3 x21] + ; byrRegs -[x1 x22]
;; size=32 bbWeight=1 PerfScore 7.00
-G_M37190_IG07: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+G_M37190_IG09: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M37190_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -96,7 +112,7 @@ G_M37190_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_windows #0 ;; size=28 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
mov w0, #29 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M37190_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_windows #0 ;; size=28 bbWeight=0 PerfScore 0.00
-; Total bytes of code 192, prolog size 20, PerfScore 35.06, instruction count 48, allocated bytes for code 192 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
+; Total bytes of code 232, prolog size 20, PerfScore 42.52, instruction count 58, allocated bytes for code 232 (MethodHash=c2626eb9) for method System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
; ============================================================ Unwind Info: @@ -117,7 +133,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
+ Function Length : 58 (0x0003a) Actual length = 232 (0x0000e8)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -125,9 +141,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

benchmarks.run_pgo.windows.arm64.checked.mch

-20 (-5.49%) : 21245.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)

@@ -8,42 +8,40 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 1186 ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T03] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T11] ( 3, 2 ) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T10] ( 3, 2 ) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T12] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T11] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T07] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T16] ( 2, 0 ) long -> x0 "argument with side effect"
+; V10 tmp7 [V10,T15] ( 2, 0 ) long -> x0 "argument with side effect"
; V11 tmp8 [V11,T08] ( 2, 4 ) long -> x0 "argument with side effect"
-; V12 cse0 [V12,T10] ( 5, 3 ) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T13] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
+; V12 cse0 [V12,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T12] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T13] ( 3, 0 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T14] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -60,118 +58,114 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbnz x23, G_M18513_IG11
+ mov x22, x0 + ; gcrRegs +[x22] + cbnz x22, G_M18513_IG11
tst w20, #255 bne G_M18513_IG15
- ;; size=28 bbWeight=1 PerfScore 7.50 -G_M18513_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x23]
+ ;; size=24 bbWeight=1 PerfScore 7.00 +G_M18513_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG08 ;; size=16 bbWeight=1 PerfScore 10.00
-G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M18513_IG09: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG09: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 7.50
G_M18513_IG10: ; bbWeight=1, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x1 x22] +[x23]
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x1] +[x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG12 b G_M18513_IG13 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG12: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M18513_IG13: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0 PerfScore 0.00 G_M18513_IG14: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0 PerfScore 0.00 -G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x38] cbz x0, G_M18513_IG16 b G_M18513_IG17 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG16: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06 @@ -179,14 +173,13 @@ G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 { ; gcrRegs -[x0] ;; size=40 bbWeight=0 PerfScore 0.00 G_M18513_IG18: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 364, prolog size 32, PerfScore 51.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
+; Total bytes of code 344, prolog size 28, PerfScore 50.60, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
; ============================================================ Unwind Info: @@ -197,7 +190,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -211,9 +204,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next ...

-20 (-5.49%) : 14698.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)

@@ -8,42 +8,40 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 3214 ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
+; V00 this [V00,T00] ( 7, 5 ) ref -> x19 this class-hnd single-def <System.Linq.OrderedEnumerable`1[System.__Canon]>
; V01 arg1 [V01,T03] ( 4, 3 ) ubyte -> x20 single-def
-; V02 loc0 [V02,T11] ( 3, 2 ) ref -> x23 class-hnd single-def <<unknown class>>
+; V02 loc0 [V02,T10] ( 3, 2 ) ref -> x22 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp5 [V08,T12] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
+; V08 tmp5 [V08,T11] ( 4, 0 ) long -> x11 "VirtualCall with runtime lookup"
; V09 tmp6 [V09,T07] ( 2, 4 ) long -> x0 "argument with side effect"
-; V10 tmp7 [V10,T16] ( 2, 0 ) long -> x0 "argument with side effect"
+; V10 tmp7 [V10,T15] ( 2, 0 ) long -> x0 "argument with side effect"
; V11 tmp8 [V11,T08] ( 2, 4 ) long -> x0 "argument with side effect"
-; V12 cse0 [V12,T10] ( 5, 3 ) ref -> x22 "CSE - aggressive" -; V13 cse1 [V13,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V15 rat1 [V15,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V16 rat2 [V16,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V17 rat3 [V17,T13] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" -; V18 rat4 [V18,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V19 rat5 [V19,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V20 rat6 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" -; V21 rat7 [V21,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
+; V12 cse0 [V12,T09] ( 8, 3.20) long -> x21 "CSE - aggressive" +; V13 rat0 [V13,T04] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V14 rat1 [V14,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V16 rat3 [V16,T12] ( 3, 0 ) long -> x11 "fgMakeTemp is creating a new local variable" +; V17 rat4 [V17,T13] ( 3, 0 ) long -> x0 "runtime lookup" +; V18 rat5 [V18,T14] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat6 [V19,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat7 [V20,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M18513_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10]
+ str x0, [fp, #0x18]
mov x19, x0 ; gcrRegs +[x19] mov w20, w1
- ;; size=32 bbWeight=1 PerfScore 6.50
+ ;; size=28 bbWeight=1 PerfScore 5.50
G_M18513_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x21, [x19] mov x0, x21 @@ -60,118 +58,114 @@ G_M18513_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=16 bbWeight=0.20 PerfScore 0.50 G_M18513_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x19, #0x08] - ; gcrRegs +[x22] - mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- mov x23, x0 - ; gcrRegs +[x23] - cbnz x23, G_M18513_IG11
+ mov x22, x0 + ; gcrRegs +[x22] + cbnz x22, G_M18513_IG11
tst w20, #255 bne G_M18513_IG15
- ;; size=28 bbWeight=1 PerfScore 7.50 -G_M18513_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0 x23]
+ ;; size=24 bbWeight=1 PerfScore 7.00 +G_M18513_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x30] cbz x0, G_M18513_IG08 ;; size=16 bbWeight=1 PerfScore 10.00
-G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG07: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M18513_IG09 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG08: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M18513_IG09: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x1, x22
+G_M18513_IG09: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2]
- ;; size=20 bbWeight=1 PerfScore 5.00
+ ;; size=20 bbWeight=1 PerfScore 7.50
G_M18513_IG10: ; bbWeight=1, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x1 x22] +[x23]
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M18513_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x1] +[x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x11, [x0, #0x40] cbz x11, G_M18513_IG12 b G_M18513_IG13 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG12: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG12: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M18513_IG13: ; bbWeight=0, gcrefRegs=880000 {x19 x23}, byrefRegs=0000 {}, byref
+G_M18513_IG13: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
uxtb w1, w20
- mov x0, x23
+ mov x0, x22
; gcrRegs +[x0] ldr x2, [x11] ;; size=12 bbWeight=0 PerfScore 0.00 G_M18513_IG14: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 br x2 ; gcr arg pop 0
- ;; size=20 bbWeight=0 PerfScore 0.00 -G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0 x23] +[x22]
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M18513_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0 x22]
ldr x0, [x21, #0x38] ldr x0, [x0] ldr x0, [x0, #0x38] cbz x0, G_M18513_IG16 b G_M18513_IG17 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG16: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+G_M18513_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x21 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG
; gcr arg pop 0 ;; size=20 bbWeight=0 PerfScore 0.00
-G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - mov x1, x22
+G_M18513_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x1, [x19, #0x08]
; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06
- mov x1, x22
+ ldr x1, [x19, #0x08]
; gcrRegs +[x1] movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_ISINSTANCEOFINTERFACE
+ bl CORINFO_HELP_INITINSTCLASS
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 cbnz x0, G_M18513_IG06 @@ -179,14 +173,13 @@ G_M18513_IG17: ; bbWeight=0, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 { ; gcrRegs -[x0] ;; size=40 bbWeight=0 PerfScore 0.00 G_M18513_IG18: ; bbWeight=0, epilog, nogc, extend
- ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18]
+ ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=20 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 364, prolog size 32, PerfScore 51.60, instruction count 91, allocated bytes for code 364 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
+; Total bytes of code 344, prolog size 28, PerfScore 50.60, instruction count 86, allocated bytes for code 344 (MethodHash=4000b7ae) for method System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
; ============================================================ Unwind Info: @@ -197,7 +190,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -211,9 +204,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next ...

-28 (-5.15%) : 5153.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,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,T01] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> -; V01 arg1 [V01,T09] ( 3, 2.11) long -> x1 single-def -; V02 arg2 [V02,T04] ( 4, 3.11) int -> x2 single-def -; V03 arg3 [V03,T05] ( 4, 3.11) long -> x21 single-def -; V04 arg4 [V04,T06] ( 4, 3.11) int -> x22 single-def -; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V00 this [V00,T00] ( 10, 4 ) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]> +; V01 arg1 [V01,T08] ( 3, 2.11) long -> x1 single-def +; V02 arg2 [V02,T03] ( 4, 3.11) int -> x2 single-def +; V03 arg3 [V03,T04] ( 4, 3.11) long -> x21 single-def +; V04 arg4 [V04,T05] ( 4, 3.11) int -> x22 single-def +; V05 arg5 [V05,T06] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 4 ) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T11] ( 10, 3.25) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T11] ( 9, 3 ) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T10] ( 4, 3.50) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -; V13 tmp4 [V13,T14] ( 2, 0.44) ref -> x0 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 (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V17 tmp8 [V17,T12] ( 2, 2 ) long -> x21 "field V16.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V18 tmp9 [V18,T13] ( 2, 2 ) int -> x22 "field V16.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V19 rat0 [V19,T08] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V20 rat1 [V20,T03] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V11 tmp2 [V11,T14] ( 2, 0.44) ref -> x0 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 (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V15 tmp6 [V15,T12] ( 2, 2 ) long -> x21 "field V14.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V16 tmp7 [V16,T13] ( 2, 2 ) int -> x22 "field V14.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V17 tmp8 [V17,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V18 rat0 [V18,T07] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V19 rat1 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat2 [V20,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -48,7 +48,7 @@ G_M19047_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov w20, w6 ;; size=44 bbWeight=1 PerfScore 8.00 G_M19047_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- cbnz w2, G_M19047_IG07
+ cbnz w2, G_M19047_IG11
;; size=4 bbWeight=1 PerfScore 1.00 G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz str x21, [fp, #0x18] // [V07 loc0] @@ -57,7 +57,7 @@ G_M19047_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x21, xzr ; gcrRegs +[x21] cmp w20, #6
- bhi G_M19047_IG19
+ bhi G_M19047_IG16
mov w1, w20 adr x0, [@RWD00] ldr w0, [x0, x1, LSL #2] @@ -69,18 +69,62 @@ G_M19047_IG04: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG10
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref + mov x1, x21 + ; gcrRegs +[x1] + bl CORINFO_HELP_CHKCASTINTERFACE + ; gcrRegs -[x1 x21] +[x0]
;; size=8 bbWeight=1 PerfScore 1.50
-G_M19047_IG06: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref - b G_M19047_IG08 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M19047_IG07: ; bbWeight=0.11, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG06: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x58] + ldp x21, x22, [sp, #0x48] + ldp x19, x20, [sp, #0x38] + ldp fp, lr, [sp], #0x60 + ret lr + ;; size=20 bbWeight=1 PerfScore 6.00 +G_M19047_IG07: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[x0] +[x21] + ldr x0, [x19] + ldr x1, [x0, #0x38] + ldr x1, [x1] + ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG04 + ;; size=20 bbWeight=1 PerfScore 13.00 +G_M19047_IG08: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref + mov x0, x2 + b G_M19047_IG05 + ;; size=8 bbWeight=0.80 PerfScore 1.20 +G_M19047_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.50 PerfScore 4.00 +G_M19047_IG10: ; bbWeight=0.39, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x21] + add x1, fp, #24 // [V07 loc0] + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + mov x21, x0 + ; gcrRegs +[x21] + b G_M19047_IG07 + ;; size=36 bbWeight=0.39 PerfScore 3.11 +G_M19047_IG11: ; bbWeight=0.11, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -97,68 +141,7 @@ G_M19047_IG07: ; bbWeight=0.11, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0] b G_M19047_IG03 ;; size=48 bbWeight=0.11 PerfScore 1.33
-G_M19047_IG08: ; bbWeight=0.50, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x0 x21] - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG10 - ;; size=12 bbWeight=0.50 PerfScore 2.25 -G_M19047_IG09: ; bbWeight=0.25, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1 - mov x1, x21 - ; gcrRegs +[x1] - bl CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[x1 x21] +[x0] - ;; size=12 bbWeight=0.25 PerfScore 0.50 -G_M19047_IG10: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc - ldr x23, [sp, #0x58] - ldp x21, x22, [sp, #0x48] - ldp x19, x20, [sp, #0x38] - ldp fp, lr, [sp], #0x60 - ret lr - ;; size=20 bbWeight=1 PerfScore 6.00 -G_M19047_IG11: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0] +[x21] - ldr x0, [x19] - ldr x1, [x0, #0x38] - ldr x1, [x1] - ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG04 - ;; size=20 bbWeight=1 PerfScore 13.00 -G_M19047_IG12: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - b G_M19047_IG05 - ;; size=4 bbWeight=0.80 PerfScore 0.80 -G_M19047_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x21] - add x1, fp, #24 // [V07 loc0] - mov x0, x19 - ; gcrRegs +[x0] - movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateProperties(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimePropertyInfo[]:this - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - ldr x2, [x2] - blr x2 - mov x21, x0 - ; gcrRegs +[x21] - b G_M19047_IG11 - ;; size=36 bbWeight=0.50 PerfScore 4.00 -G_M19047_IG14: ; bbWeight=0.39, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0 x21] - add x1, fp, #24 // [V07 loc0] - mov x0, x19 - ; gcrRegs +[x0] - movz x2, #0xD1FFAB1E // code for System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:PopulateFields(System.RuntimeType+RuntimeTypeCache+Filter):System.Reflection.RuntimeFieldInfo[]:this - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - ldr x2, [x2] - blr x2 - mov x21, x0 - ; gcrRegs +[x21] - b G_M19047_IG11 - ;; size=36 bbWeight=0.39 PerfScore 3.11 -G_M19047_IG15: ; bbWeight=0.11, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0 x21]
+G_M19047_IG12: ; bbWeight=0.11, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
add x1, fp, #24 // [V07 loc0] mov x0, x19 ; gcrRegs +[x0] @@ -169,9 +152,9 @@ G_M19047_IG15: ; bbWeight=0.11, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, blr x2 mov x21, x0 ; gcrRegs +[x21]
- b G_M19047_IG11
+ b G_M19047_IG07
;; size=36 bbWeight=0.11 PerfScore 0.89
-G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG13: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -183,9 +166,9 @@ G_M19047_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by blr x2 mov x21, x0 ; gcrRegs +[x21]
- b G_M19047_IG11
+ b G_M19047_IG07
;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -197,9 +180,9 @@ G_M19047_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by blr x2 mov x21, x0 ; gcrRegs +[x21]
- b G_M19047_IG11
+ b G_M19047_IG07
;; size=36 bbWeight=0 PerfScore 0.00
-G_M19047_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M19047_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x21] add x1, fp, #24 // [V07 loc0] mov x0, x19 @@ -211,9 +194,9 @@ G_M19047_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by blr x2 mov x21, x0 ; gcrRegs +[x21]
- b G_M19047_IG11
...

+48 (+36.36%) : 14856.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 3, 2.57) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.69) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.57) byref -> x19 single-def
+; V00 this [V00,T04] ( 3, 2.57) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 4.46) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.57) byref -> x20 single-def
; V03 loc0 [V03,T02] ( 7, 5.29) ref -> x0 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,T03] ( 4, 4.57) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T03] ( 4, 4.57) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 2.29) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 2.29) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 3.20) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 1.83) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.57, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.57, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.57 PerfScore 4.00
-G_M58319_IG04: ; bbWeight=0.46, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.46, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.46 PerfScore 0.46
-G_M58319_IG05: ; bbWeight=0.11, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.11, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.11 PerfScore 0.34
-G_M58319_IG06: ; bbWeight=0.57, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.57, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.57 PerfScore 6.29 +G_M58319_IG07: ; bbWeight=0.46, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.46 PerfScore 1.83 +G_M58319_IG08: ; bbWeight=0.21, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.21 PerfScore 0.62 +G_M58319_IG09: ; bbWeight=0.57, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.57 PerfScore 4.00 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.57 PerfScore 2.00 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 23.30, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 29.53, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+36.36%) : 16168.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.19) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.23) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.19) byref -> x19 single-def
+; V00 this [V00,T02] ( 3, 2.19) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 3.50) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.19) byref -> x20 single-def
; V03 loc0 [V03,T03] ( 7, 3.78) ref -> x0 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, 1.56) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 1.56) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 0.78) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 0.78) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 1.09) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 1.09) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 0.62) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.19, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.19, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.19 PerfScore 1.36
-G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.16, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.16 PerfScore 0.16
-G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.04, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.04 PerfScore 0.12
-G_M58319_IG06: ; bbWeight=0.19, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.19, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.19 PerfScore 2.14 +G_M58319_IG07: ; bbWeight=0.16, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.16 PerfScore 0.62 +G_M58319_IG08: ; bbWeight=0.07, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.07 PerfScore 0.21 +G_M58319_IG09: ; bbWeight=0.19, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.19 PerfScore 1.36 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.19 PerfScore 0.68 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 17.49, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 19.28, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+36.36%) : 16644.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,84 +9,105 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.17) ref -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.20) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.17) byref -> x19 single-def
+; V00 this [V00,T02] ( 3, 2.17) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 3.43) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.17) byref -> x20 single-def
; V03 loc0 [V03,T03] ( 7, 3.68) ref -> x0 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, 1.36) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 1.36) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 0.68) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 0.68) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 0.95) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 0.95) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 0.54) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.17, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.17, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.17 PerfScore 1.19
-G_M58319_IG04: ; bbWeight=0.14, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.14, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.14 PerfScore 0.14
-G_M58319_IG05: ; bbWeight=0.03, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.03, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.03 PerfScore 0.10
-G_M58319_IG06: ; bbWeight=0.17, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.17, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.17 PerfScore 1.87 +G_M58319_IG07: ; bbWeight=0.14, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.14 PerfScore 0.54 +G_M58319_IG08: ; bbWeight=0.06, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.06 PerfScore 0.18 +G_M58319_IG09: ; bbWeight=0.17, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.17 PerfScore 1.19 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.17 PerfScore 0.59 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 17.11, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 18.61, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -97,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -105,9 +126,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

benchmarks.run_tiered.windows.arm64.checked.mch

-24 (-4.51%) : 1021.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,int,int,int):System.Canon[]:this (Tier1)

@@ -9,23 +9,23 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 6.50) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T09] ( 3, 2.50) long -> x1 single-def -; V02 arg2 [V02,T05] ( 4, 3.50) int -> x2 single-def -; V03 arg3 [V03,T06] ( 4, 3.50) long -> x21 single-def -; V04 arg4 [V04,T07] ( 4, 3.50) int -> x22 single-def -; V05 arg5 [V05,T08] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V01 arg1 [V01,T08] ( 3, 2.50) long -> x1 single-def +; V02 arg2 [V02,T04] ( 4, 3.50) int -> x2 single-def +; V03 arg3 [V03,T05] ( 4, 3.50) long -> x21 single-def +; V04 arg4 [V04,T06] ( 4, 3.50) int -> x22 single-def +; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 6.50) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T11] ( 4, 2.75) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T01] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T10] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T04] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T09] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T10] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -192,38 +192,26 @@ G_M19047_IG13: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG15
+ ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG15
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG14: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG16
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG15: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG19 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG17: ; bbWeight=0.25, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG19 - ;; size=12 bbWeight=0.25 PerfScore 1.12 -G_M19047_IG18: ; bbWeight=0.12, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1 x21] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M19047_IG19: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M19047_IG17: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] @@ -239,7 +227,7 @@ RWD00 dd G_M19047_IG05 - G_M19047_IG02 dd G_M19047_IG10 - G_M19047_IG02
-; Total bytes of code 532, prolog size 24, PerfScore 81.02, instruction count 133, allocated bytes for code 532 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
+; Total bytes of code 508, prolog size 24, PerfScore 79.95, instruction count 127, allocated bytes for code 508 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
; ============================================================ Unwind Info: @@ -250,7 +238,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 133 (0x00085) Actual length = 532 (0x000214)
+ Function Length : 127 (0x0007f) Actual length = 508 (0x0001fc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-3.70%) : 2523.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object

@@ -10,23 +10,21 @@ ; ; V00 arg0 [V00,T00] ( 9, 6 ) ref -> x19 class-hnd single-def <System.RuntimeType> ; V01 arg1 [V01,T01] ( 8, 5 ) int -> x20 single-def
-;* V02 loc0 [V02,T12] ( 0, 0 ) ubyte -> zero-ref -; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> x21
+;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref +; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> x21
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T05] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T13] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T03] ( 5, 3.75) ref -> x0 class-hnd "spilling QMark2" <System.Object[]> -; V09 tmp4 [V09,T07] ( 3, 1.50) ref -> x0 -; V10 tmp5 [V10,T08] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> -; V11 tmp6 [V11,T04] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> -;* V12 tmp7 [V12,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> -;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> -;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V15 tmp10 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 5, 5 ) ref -> x0 "Single return block return value" -; V17 cse0 [V17,T10] ( 3, 1.50) long -> x0 "CSE - moderate" -; V18 cse1 [V18,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 3, 1.50) ref -> x0 +; V07 tmp2 [V07,T07] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> +; V08 tmp3 [V08,T03] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> +;* V09 tmp4 [V09,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> +;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> +;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V13 tmp8 [V13,T02] ( 5, 5 ) ref -> x0 "Single return block return value" +; V14 tmp9 [V14,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V15 cse0 [V15,T09] ( 3, 1.50) long -> x0 "CSE - moderate" +; V16 cse1 [V16,T08] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 8 @@ -94,7 +92,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 b G_M32569_IG07 @@ -105,16 +103,18 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #24
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x1, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x0, [x1] ; gcrRegs +[x0]
+ ; byrRegs -[x0]
;; size=36 bbWeight=0.50 PerfScore 3.75 G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=4 bbWeight=0.50 PerfScore 0.50 G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19] @@ -124,10 +124,10 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[x19] +[x0] ; gcr arg pop 0
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=32 bbWeight=0.50 PerfScore 3.00 G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] @@ -135,18 +135,20 @@ G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #25
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] ; gcrRegs +[x0]
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=40 bbWeight=0.50 PerfScore 4.25 G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19]
- cbz w20, G_M32569_IG14
+ cbz w20, G_M32569_IG11
mov x0, x19 ; gcrRegs +[x0] mov w1, w20 @@ -159,43 +161,32 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M32569_IG13 - ;; size=40 bbWeight=0.50 PerfScore 4.50 -G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M32569_IG13 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref - b G_M32569_IG19 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ b G_M32569_IG16 + ;; size=56 bbWeight=0.50 PerfScore 5.75 +G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x19] ldr x0, [x19, #0x10]
- cbz x0, G_M32569_IG16
+ cbz x0, G_M32569_IG13
bl <unknown method> ; gcrRegs +[x0] ; gcr arg pop 0 mov x20, x0 ; gcrRegs +[x20]
- cbz x20, G_M32569_IG16
+ cbz x20, G_M32569_IG13
ldr x0, [x20] ; gcrRegs -[x0] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 cmp x0, x1
- beq G_M32569_IG15
+ beq G_M32569_IG12
movz x1, #8 movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -209,10 +200,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0 x19] ; gcr arg pop 0 ;; size=80 bbWeight=0.50 PerfScore 10.00
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M32569_IG14
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x20] +[x19] mov x0, x19 ; gcrRegs +[x0] @@ -226,7 +217,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, mov x20, x0 ; gcrRegs +[x20] ;; size=28 bbWeight=0.50 PerfScore 3.25
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -236,14 +227,14 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ldr x1, [x1] ldr wzr, [x0] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M32569_IG18: ; bbWeight=0.50, epilog, nogc, extend
+G_M32569_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x1 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x20] ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -251,7 +242,7 @@ G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 540, prolog size 24, PerfScore 64.94, instruction count 135, allocated bytes for code 540 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
+; Total bytes of code 520, prolog size 24, PerfScore 64.00, instruction count 130, allocated bytes for code 520 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
; ============================================================ Unwind Info: @@ -262,7 +253,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 135 (0x00087) Actual length = 540 (0x00021c)
+ Function Length : 130 (0x00082) Actual length = 520 (0x000208)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-16 (-3.36%) : 14523.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)

@@ -9,98 +9,99 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T07] ( 5, 14 ) int -> x19 single-def -; V01 arg1 [V01,T08] ( 8, 11 ) ref -> x20 class-hnd single-def <System.IO.MemoryStream> -; V02 arg2 [V02,T10] ( 3, 3 ) ubyte -> x21 single-def -; V03 loc0 [V03,T09] ( 2, 10 ) int -> x24 -; V04 loc1 [V04,T12] ( 1, 2 ) int -> x25 -; V05 loc2 [V05,T18] ( 1, 64 ) double -> d9 -; V06 loc3 [V06,T06] ( 4, 26 ) int -> x23
+; V00 arg0 [V00 ] ( 5, 14 ) int -> [fp+0xFC] do-not-enreg[X] addr-exposed single-def tier0-frame +; V01 arg1 [V01,T07] ( 8, 11 ) ref -> x19 class-hnd single-def <System.IO.MemoryStream> +; V02 arg2 [V02,T08] ( 3, 3 ) ubyte -> x20 single-def +; V03 loc0 [V03 ] ( 2, 10 ) int -> [fp+0xE8] do-not-enreg[X] addr-exposed tier0-frame +; V04 loc1 [V04,T10] ( 1, 2 ) int -> x23 +; V05 loc2 [V05,T16] ( 1, 64 ) double -> d9 +; V06 loc3 [V06,T06] ( 4, 26 ) int -> x22
; V07 loc4 [V07,T04] ( 8, 28 ) int -> x4 ; V08 loc5 [V08,T02] ( 7, 38 ) int -> x3
-; V09 loc6 [V09,T16] ( 2, 66 ) double -> d8 -; V10 loc7 [V10,T05] ( 5, 28 ) int -> x22 -; V11 loc8 [V11,T13] ( 8,450 ) double -> d16 -; V12 loc9 [V12,T14] ( 7,386 ) double -> d17 -; V13 loc10 [V13,T17] ( 2, 66 ) double -> d18
+; V09 loc6 [V09,T14] ( 2, 66 ) double -> d8 +; V10 loc7 [V10,T05] ( 5, 28 ) int -> x21 +; V11 loc8 [V11,T11] ( 8,450 ) double -> d16 +; V12 loc9 [V12,T12] ( 7,386 ) double -> d17 +; V13 loc10 [V13,T15] ( 2, 66 ) double -> d18
; V14 loc11 [V14,T01] ( 4, 50 ) int -> x2
-; V15 loc12 [V15,T15] ( 2,128 ) double -> d19
+; V15 loc12 [V15,T13] ( 2,128 ) double -> d19
;# V16 OutArgs [V16 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V17 tmp1 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Single-def Box Helper" <<unknown class>> -;* V18 tmp2 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Single-def Box Helper" <<unknown class>> -; V19 tmp3 [V19,T00] ( 2, 64 ) int -> x2 "dup spill" -; V20 tmp4 [V20,T03] ( 2, 32 ) int -> x3 "dup spill" -; V21 tmp5 [V21,T11] ( 2, 2 ) ref -> x1 single-def "argument with side effect"
+; V17 tmp1 [V17,T00] ( 2, 64 ) int -> x2 "dup spill" +; V18 tmp2 [V18,T03] ( 2, 32 ) int -> x3 "dup spill" +;* V19 tmp3 [V19 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" +;* V20 tmp4 [V20 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" +; V21 tmp5 [V21,T09] ( 2, 2 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 8 G_M48919_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x60]!
+ stp fp, lr, [sp, #-0x50]!
stp d8, d9, [sp, #0x18] stp x19, x20, [sp, #0x28] stp x21, x22, [sp, #0x38]
- stp x23, x24, [sp, #0x48] - str x25, [sp, #0x58]
+ str x23, [sp, #0x48]
mov fp, sp
- ldr w19, [fp, #0xD1FFAB1E] - ldr x20, [fp, #0xD1FFAB1E] - ; gcrRegs +[x20] - ldp w24, w21, [fp, #0xF8] - ldr w25, [fp, #0xF4] - ldr d9, [fp, #0xE8] - ldp w4, w23, [fp, #0xE0] - ldr w3, [fp, #0xDC] - ldr d8, [fp, #0xD0] - ldr w22, [fp, #0xCC] - ldp d17, d16, [fp, #0xB8] - ldr d18, [fp, #0xB0] - ldr w2, [fp, #0xAC] - ;; size=76 bbWeight=0.01 PerfScore 0.31 -G_M48919_IG02: ; bbWeight=0.01, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M48919_IG11
+ ldr x19, [fp, #0xF0] + ; gcrRegs +[x19] + ldr w20, [fp, #0xEC] + ldr w23, [fp, #0xE4] + ldr d9, [fp, #0xD8] + ldp w4, w22, [fp, #0xD0] + ldr w3, [fp, #0xCC] + ldr d8, [fp, #0xC0] + ldr w21, [fp, #0xBC] + ldp d17, d16, [fp, #0xA8] + ldr d18, [fp, #0xA0] + ldr w2, [fp, #0x9C] + ;; size=68 bbWeight=0.01 PerfScore 0.28 +G_M48919_IG02: ; bbWeight=0.01, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + b G_M48919_IG10
;; size=4 bbWeight=0.01 PerfScore 0.01
-G_M48919_IG03: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M48919_IG03: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
mov w4, wzr mov w3, wzr
- scvtf d16, w23
+ scvtf d16, w22
fmov d17, #2.0000 fmul d16, d16, d17
- scvtf d17, w24
+ ldr w0, [fp, #0xE8] // [V03 loc0] + scvtf d17, w0
fdiv d16, d16, d17 fmov d17, #1.0000 fsub d8, d16, d17
- mov w22, wzr - cmp w19, #0 - bgt G_M48919_IG10 - ;; size=48 bbWeight=2 PerfScore 64.00 -G_M48919_IG04: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+ mov w21, wzr + ldr w0, [fp, #0xFC] // [V00 arg0] + cmp w0, #0 + bgt G_M48919_IG09 + ;; size=56 bbWeight=2 PerfScore 72.00 +G_M48919_IG04: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
cbz w3, G_M48919_IG06 ;; size=4 bbWeight=8 PerfScore 8.00
-G_M48919_IG05: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG05: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
neg w1, w3 add w1, w1, #8 lsl w1, w4, w1 eor w1, w1, #255 uxtb w1, w1
- mov x0, x20
+ mov x0, x19
; gcrRegs +[x0]
- ldr x2, [x20]
+ ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2] blr x2 ; gcrRegs -[x0] ; gcr arg pop 0 ;; size=40 bbWeight=2 PerfScore 26.00
-G_M48919_IG06: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - add w23, w23, #1 - cmp w23, w24
+G_M48919_IG06: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + add w22, w22, #1 + ldr w0, [fp, #0xE8] // [V03 loc0] + cmp w22, w0
blt G_M48919_IG03
- ;; size=12 bbWeight=8 PerfScore 16.00 -G_M48919_IG07: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - tst w21, #255 - beq G_M48919_IG17
+ ;; size=16 bbWeight=8 PerfScore 32.00 +G_M48919_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + tst w20, #255 + beq G_M48919_IG16
;; size=8 bbWeight=1 PerfScore 1.50
-G_M48919_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
movz x0, #0xD1FFAB1E // code for System.ConsolePal:OpenStandardOutput():System.IO.Stream movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -110,37 +111,31 @@ G_M48919_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x38]
- ;; size=40 bbWeight=0.50 PerfScore 7.75 -G_M48919_IG09: ; bbWeight=0.50, epilog, nogc, extend - ldr x25, [sp, #0x58] - ldp x23, x24, [sp, #0x48] - ldp x21, x22, [sp, #0x38] - ldp x19, x20, [sp, #0x28] - ldp d8, d9, [sp, #0x18] - ldp fp, lr, [sp], #0x60 - add sp, sp, #176 - br x2
+ blr x2 + ; gcrRegs -[x0-x1 x19]
; gcr arg pop 0
- ;; size=32 bbWeight=0.50 PerfScore 4.25 -G_M48919_IG10: ; bbWeight=2, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0-x1]
+ b G_M48919_IG16 + ;; size=48 bbWeight=0.50 PerfScore 8.75 +G_M48919_IG09: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs +[x19]
movi v16.16b, #0 movi v17.16b, #0
- scvtf d18, w22
+ scvtf d18, w21
fmov d19, #2.0000 fmul d18, d18, d19
- scvtf d19, w19
+ ldr w1, [fp, #0xFC] // [V00 arg0] + scvtf d19, w1
fdiv d18, d18, d19 fmov d19, #1.5000 fsub d18, d18, d19
- sxtw w2, w25
+ sxtw w2, w23
lsl w4, w4, #1
- ;; size=44 bbWeight=2 PerfScore 63.00 -G_M48919_IG11: ; bbWeight=64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+ ;; size=48 bbWeight=2 PerfScore 67.00 +G_M48919_IG10: ; bbWeight=64, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
fmul d19, d16, d16 fmul d20, d17, d17 fsub d19, d19, d20 @@ -153,28 +148,28 @@ G_M48919_IG11: ; bbWeight=64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, fmul d20, d17, d17 fadd d19, d19, d20 fcmp d19, d9
- ble G_M48919_IG13
+ ble G_M48919_IG12
;; size=52 bbWeight=64 PerfScore 2080.00
-G_M48919_IG12: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG11: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
orr w4, w4, #1
- b G_M48919_IG14
+ b G_M48919_IG13
;; size=8 bbWeight=8 PerfScore 12.00
-G_M48919_IG13: ; bbWeight=16, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M48919_IG12: ; bbWeight=16, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
sub w2, w2, #1 cmp w2, #0
- bgt G_M48919_IG11
+ bgt G_M48919_IG10
;; size=12 bbWeight=16 PerfScore 32.00
-G_M48919_IG14: ; bbWeight=8, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M48919_IG13: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
add w3, w3, #1 cmp w3, #8
- bne G_M48919_IG16
+ bne G_M48919_IG15
;; size=12 bbWeight=8 PerfScore 16.00
-G_M48919_IG15: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M48919_IG14: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
eor w1, w4, #255 uxtb w1, w1
- mov x0, x20
+ mov x0, x19
; gcrRegs +[x0]
- ldr x2, [x20]
+ ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2] blr x2 @@ -183,52 +178,49 @@ G_M48919_IG15: ; bbWeight=2, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b mov w4, wzr mov w3, wzr ...

+44 (+14.29%) : 18346.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpanSystem.__Canon:System.Span`1System.__Canon

@@ -8,26 +8,29 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 3.60) long -> x20 single-def
+; V00 TypeCtx [V00,T01] ( 7, 4.28) long -> x20 single-def
; V01 arg0 [V01,T00] ( 6, 4.50) ref -> x19 class-hnd single-def <System.Collections.Generic.List`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op <System.Span`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 4, 2 ) int -> x21 -; V04 loc2 [V04,T05] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
+; V03 loc1 [V03,T08] ( 4, 2 ) int -> x21 +; V04 loc2 [V04,T07] ( 4, 2 ) ref -> x22 class-hnd single-def <<unknown class>>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T07] ( 3, 2 ) long -> x2 "spilling helperCall"
+; V06 tmp1 [V06,T09] ( 3, 2 ) long -> x2 "spilling helperCall"
;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]> ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V12 tmp7 [V12,T08] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
+; V12 tmp7 [V12,T10] ( 2, 2 ) byref -> x19 single-def "Inlining Arg"
;* V13 tmp8 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V15 tmp10 [V15,T03] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T04] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T09] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP -; V18 tmp13 [V18,T10] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
+; V15 tmp10 [V15,T04] ( 3, 2.50) byref -> x0 "field V02._reference (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T05] ( 3, 2.50) int -> x1 "field V02._length (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T11] ( 2, 1 ) byref -> x0 single-def "field V07._reference (fldOffset=0x0)" P-INDEP +; V18 tmp13 [V18,T12] ( 2, 1 ) int -> x1 "field V07._length (fldOffset=0x8)" P-INDEP
; V19 rat0 [V19,T02] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable"
+;* V20 rat1 [V20,T13] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V21 rat2 [V21,T03] ( 3, 2.80) long -> x0 "spilling expr" +; V22 rat3 [V22,T06] ( 2, 1.60) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -45,7 +48,7 @@ G_M30960_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by mov x0, xzr ; byrRegs +[x0] mov w1, wzr
- cbz x19, G_M30960_IG10
+ cbz x19, G_M30960_IG13
;; size=12 bbWeight=1 PerfScore 2.00 G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; byrRegs -[x0] @@ -68,7 +71,7 @@ G_M30960_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, G_M30960_IG04: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz ldr w0, [x22, #0x08] cmp w0, w21
- blo G_M30960_IG11
+ blo G_M30960_IG14
ldr x0, [x20, #0x38] ldr x2, [x0, #0x10] cbz x2, G_M30960_IG06 @@ -81,7 +84,7 @@ G_M30960_IG06: ; bbWeight=0.10, gcrefRegs=480000 {x19 x22}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x2, x0 ;; size=24 bbWeight=0.10 PerfScore 0.35 G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz @@ -105,9 +108,26 @@ G_M30960_IG07: ; bbWeight=0.50, gcrefRegs=480000 {x19 x22}, byrefRegs=000 ; gcrRegs -[x19] ;; size=60 bbWeight=0.50 PerfScore 8.00 G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
+ ldr x0, [x20, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M30960_IG10 + ;; size=16 bbWeight=0.50 PerfScore 3.75 +G_M30960_IG09: ; bbWeight=0.40, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M30960_IG11 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M30960_IG10: ; bbWeight=0.18, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x20 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M30960_IG11: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
add x19, x22, #16 ; byrRegs +[x19]
- tbz w21, #31, G_M30960_IG09
+ tbz w21, #31, G_M30960_IG12
movz x0, #8 movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -121,19 +141,19 @@ G_M30960_IG08: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=0000 {} blr x2 ; gcrRegs -[x22] ;; size=52 bbWeight=0.50 PerfScore 5.00
-G_M30960_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
+G_M30960_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
mov x0, x19 ; byrRegs +[x0] sxtw w1, w21 ;; size=8 bbWeight=0.50 PerfScore 0.50
-G_M30960_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
+G_M30960_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, epilog, nogc
; byrRegs -[x19] ldp x21, x22, [sp, #0x30] ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x40 ret lr ;; size=16 bbWeight=1 PerfScore 4.00
-G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M30960_IG14: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[x0] movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowInvalidOperationException_ConcurrentOperationsNotSupported() movk x0, #0xD1FFAB1E LSL #16 @@ -143,7 +163,7 @@ G_M30960_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { brk_windows #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 308, prolog size 20, PerfScore 39.25, instruction count 77, allocated bytes for code 308 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
+; Total bytes of code 352, prolog size 20, PerfScore 45.14, instruction count 88, allocated bytes for code 352 (MethodHash=041e870f) for method System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
; ============================================================ Unwind Info: @@ -154,7 +174,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
+ Function Length : 88 (0x00058) Actual length = 352 (0x000160)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+15.38%) : 9703.dasm - System.Array:IndexOfSystem.__Canon:int (Tier1)

@@ -8,11 +8,11 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 4.36) long -> x0 single-def -; V01 arg0 [V01,T00] ( 5, 5 ) ref -> x19 class-hnd single-def <System.__Canon[]> -; V02 arg1 [V02,T06] ( 3, 3 ) ref -> x22 ld-addr-op class-hnd single-def <System.__Canon> -; V03 arg2 [V03,T01] ( 5, 5 ) int -> x20 single-def -; V04 arg3 [V04,T03] ( 4, 4 ) int -> x21 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def +; V01 arg0 [V01,T01] ( 5, 5 ) ref -> x20 class-hnd single-def <System.__Canon[]> +; V02 arg1 [V02,T07] ( 3, 3 ) ref -> x23 ld-addr-op class-hnd single-def <System.__Canon> +; V03 arg2 [V03,T02] ( 5, 5 ) int -> x21 single-def +; V04 arg3 [V04,T03] ( 4, 4 ) int -> x22 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,80 +24,96 @@ ;* V13 tmp4 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V14 tmp5 [V14 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" ; V15 tmp6 [V15,T04] ( 3, 6 ) ref -> x0 single-def "argument with side effect"
-; V16 cse0 [V16,T09] ( 3, 3 ) int -> x1 "CSE - aggressive" -; V17 rat0 [V17,T08] ( 3, 4 ) long -> x1 "runtime lookup" -; V18 rat1 [V18,T05] ( 3, 5.60) long -> x1 "spilling expr" -; V19 rat2 [V19,T07] ( 3, 4.48) long -> x1 "fgMakeTemp is creating a new local variable"
+; V16 cse0 [V16,T10] ( 3, 3 ) int -> x0 "CSE - aggressive" +;* V17 rat0 [V17,T11] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V18 rat1 [V18,T05] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V19 rat2 [V19,T09] ( 3, 4 ) long -> x0 "runtime lookup" +; V20 rat3 [V20,T06] ( 3, 5.60) long -> x0 "spilling expr" +; V21 rat4 [V21,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M13831_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- str x0, [fp, #0x18] - mov x19, x1 - ; gcrRegs +[x19] - mov x22, x2 - ; gcrRegs +[x22] - mov w20, w3 - mov w21, w4 - ;; size=36 bbWeight=1 PerfScore 6.50 -G_M13831_IG02: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - cbz x19, G_M13831_IG08 - ldr w1, [x19, #0x08] - cmp w1, w20 - blo G_M13831_IG09 - sub w1, w1, w20 - cmp w1, w21 - blo G_M13831_IG10 - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M13831_IG05 - ;; size=44 bbWeight=1 PerfScore 15.00 -G_M13831_IG03: ; bbWeight=0.80, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref, isz - ldr x1, [x1, #0x18] - cbz x1, G_M13831_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M13831_IG04: ; bbWeight=0.64, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - b G_M13831_IG06 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M13831_IG05: ; bbWeight=0.36, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref
+ str x0, [fp, #0x10] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov x23, x2 + ; gcrRegs +[x23] + mov w21, w3 + mov w22, w4 + ;; size=44 bbWeight=1 PerfScore 8.00 +G_M13831_IG02: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M13831_IG10 + ldr w0, [x20, #0x08] + cmp w0, w21 + blo G_M13831_IG11 + sub w0, w0, w21 + cmp w0, w22 + blo G_M13831_IG12 + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M13831_IG04 + ;; size=40 bbWeight=1 PerfScore 14.50 +G_M13831_IG03: ; bbWeight=0.20, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M13831_IG04: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M13831_IG07 + ;; size=16 bbWeight=1 PerfScore 7.50 +G_M13831_IG05: ; bbWeight=0.80, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M13831_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M13831_IG06: ; bbWeight=0.64, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + b G_M13831_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M13831_IG07: ; bbWeight=0.36, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M13831_IG06: ; bbWeight=1, gcrefRegs=480000 {x19 x22}, byrefRegs=0000 {}, byref - mov x0, x1
+G_M13831_IG08: ; bbWeight=1, gcrefRegs=900000 {x20 x23}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E // code for System.Collections.Generic.EqualityComparer`1[System.__Canon]:get_Default():System.Collections.Generic.EqualityComparer`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1 ; gcrRegs +[x0]
- mov x1, x19
+ mov x1, x20
; gcrRegs +[x1]
- mov x2, x22
+ mov x2, x23
; gcrRegs +[x2]
- mov w3, w20 - mov w4, w21
+ mov w3, w21 + mov w4, w22
ldr x5, [x0] ldr x5, [x5, #0x50] ldr x5, [x5] blr x5
- ; gcrRegs -[x0-x2 x19 x22] - ;; size=56 bbWeight=1 PerfScore 18.00 -G_M13831_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0-x2 x20 x23] + ;; size=52 bbWeight=1 PerfScore 17.50 +G_M13831_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=20 bbWeight=1 PerfScore 6.00 +G_M13831_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #2 movz x1, #0xD1FFAB1E // code for System.ThrowHelper:ThrowArgumentNullException(int) movk x1, #0xD1FFAB1E LSL #16 @@ -106,7 +122,7 @@ G_M13831_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { blr x1 brk_windows #0 ;; size=28 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowStartIndexArgumentOutOfRange_ArgumentOutOfRange_IndexMustBeLessOrEqual() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -114,7 +130,7 @@ G_M13831_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref blr x0 brk_windows #0 ;; size=24 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
movz x0, #0xD1FFAB1E // code for System.ThrowHelper:ThrowCountArgumentOutOfRange_ArgumentOutOfRange_Count() movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -123,7 +139,7 @@ G_M13831_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref brk_windows #0 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 260, prolog size 20, PerfScore 48.42, instruction count 65, allocated bytes for code 260 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
+; Total bytes of code 300, prolog size 24, PerfScore 59.02, instruction count 75, allocated bytes for code 300 (MethodHash=0c9bc9f8) for method System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
; ============================================================ Unwind Info: @@ -134,7 +150,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 65 (0x00041) Actual length = 260 (0x000104)
+ Function Length : 75 (0x0004b) Actual length = 300 (0x00012c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -142,10 +158,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! E4 end
- E4 end - E4 end

+48 (+36.36%) : 1012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -8,84 +8,105 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T00] ( 5, 3.60) long -> x1 single-def -; V02 arg1 [V02,T01] ( 4, 3.50) byref -> x19 single-def
+; V00 this [V00,T03] ( 3, 2.50) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T00] ( 7, 4.28) long -> x19 single-def +; V02 arg1 [V02,T01] ( 4, 3.50) byref -> x20 single-def
; V03 loc0 [V03,T02] ( 7, 5 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T04] ( 4, 4 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T06] ( 3, 2 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T08] ( 3, 2 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T05] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
+;* V11 rat2 [V11,T09] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V12 rat3 [V12,T06] ( 3, 2.80) long -> x0 "spilling expr" +; V13 rat4 [V13,T07] ( 2, 1.60) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07
+ cbnz x0, G_M58319_IG10
;; size=8 bbWeight=1 PerfScore 4.00
-G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
; gcrRegs -[x0]
- ldr x0, [x1, #0x38]
+ ldr x0, [x19, #0x38]
ldr x0, [x0, #0x10] cbz x0, G_M58319_IG05 ;; size=12 bbWeight=0.50 PerfScore 3.50
-G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.40, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.40 PerfScore 0.40
-G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.10, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.10 PerfScore 0.30
-G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M58319_IG08 + ;; size=36 bbWeight=0.50 PerfScore 5.50 +G_M58319_IG07: ; bbWeight=0.40, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.40 PerfScore 1.60 +G_M58319_IG08: ; bbWeight=0.18, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.18 PerfScore 0.54 +G_M58319_IG09: ; bbWeight=0.50, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=0.50 PerfScore 3.50 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=0.50 PerfScore 1.75 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 22.20, instruction count 33, allocated bytes for code 132 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 180, prolog size 20, PerfScore 27.59, instruction count 45, allocated bytes for code 180 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -96,7 +117,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -104,9 +125,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

coreclr_tests.run.windows.arm64.checked.mch

-4 (-0.82%) : 503.dasm - System.Linq.Enumerable:TryGetFirstSystem.__Canon:System.__Canon (FullOpts)

@@ -7,26 +7,24 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T06] ( 7, 4.88) long -> x20 single-def -; V01 arg0 [V01,T07] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> -; V02 arg1 [V02,T01] ( 5, 19 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,ubyte]> -; V03 arg2 [V03,T08] ( 4, 4 ) byref -> x22 single-def -; V04 loc0 [V04,T02] ( 7, 20 ) ref -> [fp+0x20] class-hnd EH-live spill-single-def <<unknown class>> -; V05 loc1 [V05,T03] ( 3, 17 ) ref -> x20 class-hnd <System.__Canon> -; V06 loc2 [V06,T14] ( 2, 2 ) ref -> [fp+0x18] do-not-enreg[Z] must-init class-hnd EH-live <System.__Canon>
+; V00 TypeCtx [V00,T05] ( 7, 15.08) long -> x20 single-def +; V01 arg0 [V01,T08] ( 4, 4 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> +; V02 arg1 [V02,T03] ( 5, 19 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,ubyte]> +; V03 arg2 [V03,T09] ( 4, 4 ) byref -> x22 single-def +; V04 loc0 [V04,T04] ( 7, 20 ) ref -> [fp+0x20] class-hnd EH-live spill-single-def <<unknown class>> +; V05 loc1 [V05,T06] ( 3, 17 ) ref -> x23 class-hnd <System.__Canon> +; V06 loc2 [V06,T12] ( 2, 2 ) ref -> [fp+0x18] 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 ) long -> zero-ref "spilling helperCall"
-; V10 tmp2 [V10,T09] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
+; V10 tmp2 [V10,T10] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup"
;* V11 tmp3 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V12 tmp4 [V12,T00] ( 3, 48 ) long -> x11 "VirtualCall with runtime lookup" -; V13 PSPSym [V13,T15] ( 1, 1 ) long -> [fp+0x30] do-not-enreg[V] "PSPSym" -; V14 cse0 [V14,T05] ( 2, 8.50) long -> x23 hoist "CSE - aggressive" -; V15 cse1 [V15,T04] ( 6, 13 ) long -> x21 multi-def "CSE - aggressive" -; V16 rat0 [V16,T10] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" -; V17 rat1 [V17,T13] ( 3, 2 ) long -> x23 "runtime lookup" -; V18 rat2 [V18,T11] ( 3, 2.80) long -> x0 "spilling expr" -; V19 rat3 [V19,T12] ( 3, 2.24) long -> x23 "fgMakeTemp is creating a new local variable"
+; V12 tmp4 [V12,T00] ( 4, 48 ) long -> x11 "VirtualCall with runtime lookup" +; V13 PSPSym [V13,T13] ( 1, 1 ) long -> [fp+0x30] do-not-enreg[V] "PSPSym" +; V14 cse0 [V14,T07] ( 6, 13 ) long -> x21 multi-def "CSE - aggressive" +; V15 rat0 [V15,T11] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" +; V16 rat1 [V16,T01] ( 3, 44.80) long -> x0 "spilling expr" +; V17 rat2 [V17,T02] ( 3, 35.84) long -> x11 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -47,8 +45,8 @@ G_M62024_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x22, x3 ; byrRegs +[x22] ;; size=48 bbWeight=1 PerfScore 9.00
-G_M62024_IG02: ; bbWeight=1, gcVars=0000000000004000 {V06}, gcrefRegs=280000 {x19 x21}, byrefRegs=400000 {x22}, gcvars, byref, isz - ; GC ptr vars +{V06 V14}
+G_M62024_IG02: ; bbWeight=1, gcVars=0000000000001000 {V06}, gcrefRegs=280000 {x19 x21}, byrefRegs=400000 {x22}, gcvars, byref, isz + ; GC ptr vars +{V06 V12}
cbz x21, G_M62024_IG21 cbz x19, G_M62024_IG22 ldr x0, [x20, #0x38] @@ -63,7 +61,7 @@ G_M62024_IG04: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=400 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.20 PerfScore 0.70 @@ -77,8 +75,8 @@ G_M62024_IG05: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=400000 str x0, [fp, #0x20] // [V04 loc0] ; GC ptr vars +{V04} ;; size=16 bbWeight=1 PerfScore 5.50
-G_M62024_IG06: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=80001 {x0 x19}, byrefRegs=400000 {x22}, gcvars, byref, isz - ; GC ptr vars -{V14}
+G_M62024_IG06: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=80001 {x0 x19}, byrefRegs=400000 {x22}, gcvars, byref, isz + ; GC ptr vars -{V12}
movz x21, #24 movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 @@ -89,38 +87,37 @@ G_M62024_IG06: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs ; gcr arg pop 0 cbz w0, G_M62024_IG14 ;; size=28 bbWeight=1 PerfScore 7.00
-G_M62024_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz
+G_M62024_IG07: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz
ldr x0, [x20, #0x38] ldr x1, [x0, #0x08] cmp x1, #24 ble G_M62024_IG10
- ;; size=16 bbWeight=0.50 PerfScore 3.75 -G_M62024_IG08: ; bbWeight=0.40, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz - ldr x23, [x0, #0x18] - cbz x23, G_M62024_IG10 - ;; size=8 bbWeight=0.40 PerfScore 1.60 -G_M62024_IG09: ; bbWeight=0.32, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
+ ;; size=16 bbWeight=8 PerfScore 60.00 +G_M62024_IG08: ; bbWeight=6.40, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz + ldr x11, [x0, #0x18] + cbz x11, G_M62024_IG10 + ;; size=8 bbWeight=6.40 PerfScore 25.60 +G_M62024_IG09: ; bbWeight=5.12, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
b G_M62024_IG11
- ;; size=4 bbWeight=0.32 PerfScore 0.32 -G_M62024_IG10: ; bbWeight=0.18, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
+ ;; size=4 bbWeight=5.12 PerfScore 5.12 +G_M62024_IG10: ; bbWeight=2.88, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- mov x23, x0 - ;; size=24 bbWeight=0.18 PerfScore 0.63
+ mov x11, x0 + ;; size=24 bbWeight=2.88 PerfScore 10.08
G_M62024_IG11: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22}, byref, isz
- mov x11, x23
ldr x0, [fp, #0x20] // [V04 loc0] ; gcrRegs +[x0] ldr x1, [x11] blr x1 ; gcr arg pop 0
- mov x20, x0 - ; gcrRegs +[x20] - mov x1, x20
+ mov x23, x0 + ; gcrRegs +[x23] + mov x1, x23
; gcrRegs +[x1] ldr x0, [x19, #0x08] ldr x2, [x19, #0x18] @@ -133,23 +130,23 @@ G_M62024_IG11: ; bbWeight=8, gcrefRegs=80000 {x19}, byrefRegs=400000 {x22 mov x11, x21 ldr x1, [x11] blr x1
- ; gcrRegs -[x0 x20]
+ ; gcrRegs -[x0 x23]
; gcr arg pop 0
- cbnz w0, G_M62024_IG11 - ;; size=60 bbWeight=8 PerfScore 184.00
+ cbnz w0, G_M62024_IG07 + ;; size=56 bbWeight=8 PerfScore 180.00
G_M62024_IG12: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=400000 {x22}, byref ; gcrRegs -[x19] b G_M62024_IG14 ;; size=4 bbWeight=1 PerfScore 1.00
-G_M62024_IG13: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=400000 {x22}, byref - ; gcrRegs +[x20]
+G_M62024_IG13: ; bbWeight=1, gcrefRegs=800000 {x23}, byrefRegs=400000 {x22}, byref + ; gcrRegs +[x23]
mov w0, #1 strb w0, [x22]
- str x20, [fp, #0x18] // [V06 loc2]
+ str x23, [fp, #0x18] // [V06 loc2]
b G_M62024_IG15 ;; size=16 bbWeight=1 PerfScore 3.50
-G_M62024_IG14: ; bbWeight=1, gcVars=0000000000000004 {V04}, gcrefRegs=0000 {}, byrefRegs=400000 {x22}, gcvars, byref - ; gcrRegs -[x20]
+G_M62024_IG14: ; bbWeight=1, gcVars=0000000000000010 {V04}, gcrefRegs=0000 {}, byrefRegs=400000 {x22}, gcvars, byref + ; gcrRegs -[x23]
; GC ptr vars -{V06} ldr x0, [fp, #0x20] // [V04 loc0] ; gcrRegs +[x0] @@ -161,17 +158,17 @@ G_M62024_IG14: ; bbWeight=1, gcVars=0000000000000004 {V04}, gcrefRegs=000 ; gcr arg pop 0 b G_M62024_IG19 ;; size=20 bbWeight=1 PerfScore 7.50
-G_M62024_IG15: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M62024_IG15: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[x22]
- ; GC ptr vars +{V02 V04 V06 V14}
+ ; GC ptr vars +{V04 V06 V12}
ldr x0, [fp, #0x30] // [V13 PSPSym] bl G_M62024_IG23 ;; size=8 bbWeight=1 PerfScore 3.00 G_M62024_IG16: ; bbWeight=1, nogc, extend nop ;; size=4 bbWeight=1 PerfScore 0.50
-G_M62024_IG17: ; bbWeight=1, gcVars=0000000000004000 {V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; GC ptr vars -{V02 V04 V14}
+G_M62024_IG17: ; bbWeight=1, gcVars=0000000000001000 {V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + ; GC ptr vars -{V04 V12}
ldr x0, [fp, #0x18] // [V06 loc2] ; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 2.00 @@ -217,8 +214,8 @@ G_M62024_IG22: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 brk_windows #0 ;; size=28 bbWeight=0 PerfScore 0.00
-G_M62024_IG23: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc - ; GC ptr vars +{V02 V04 V06 V14}
+G_M62024_IG23: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet prolog, nogc + ; GC ptr vars +{V04 V06 V12}
stp fp, lr, [sp, #-0x40]! stp x19, x20, [sp, #0x18] stp x21, x22, [sp, #0x28] @@ -226,7 +223,7 @@ G_M62024_IG23: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs add x3, fp, #96 str x3, [sp, #0x10] ;; size=24 bbWeight=1 PerfScore 5.50
-G_M62024_IG24: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M62024_IG24: ; bbWeight=1, gcVars=0000000000001010 {V04 V06}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [fp, #0x20] // [V04 loc0] ; gcrRegs +[x0] cbz x0, G_M62024_IG25 @@ -235,7 +232,7 @@ G_M62024_IG24: ; bbWeight=1, gcVars=0000000000004004 {V04 V06}, gcrefRegs movk x21, #0xD1FFAB1E LSL #32 add x11, x21, #8 ldr x1, [x11]
- ; GC ptr vars -{V02 V04 V14}
+ ; GC ptr vars -{V04 V12}
blr x1 ; gcrRegs -[x0] ; gcr arg pop 0 @@ -248,7 +245,7 @@ G_M62024_IG25: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 12.00
-; Total bytes of code 488, prolog size 48, PerfScore 279.80, instruction count 122, allocated bytes for code 488 (MethodHash=c4780db7) for method System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
+; Total bytes of code 484, prolog size 48, PerfScore 370.30, instruction count 121, allocated bytes for code 484 (MethodHash=c4780db7) for method System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -259,7 +256,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 103 (0x00067) Actual length = 412 (0x00019c)
+ Function Length : 102 (0x00066) Actual length = 408 (0x000198)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+8 (+2.67%) : 19698.dasm - Test_lifetime2:f4():int (FullOpts)

@@ -11,10 +11,10 @@ ;* V00 loc0 [V00 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <Test_lifetime2+B> ;* V01 loc1 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <Test_lifetime2+C> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T02] ( 2, 3 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Test_lifetime2+B> -; V04 tmp2 [V04,T03] ( 2, 3 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Test_lifetime2+C>
+; V03 tmp1 [V03,T01] ( 3, 5 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <Test_lifetime2+B> +; V04 tmp2 [V04,T02] ( 3, 5 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Test_lifetime2+C>
; V05 cse0 [V05,T00] ( 9, 9 ) long -> x21 "CSE - aggressive"
-; V06 cse1 [V06,T01] ( 3, 3 ) long -> x19 "CSE - aggressive"
+; V06 cse1 [V06,T03] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -29,7 +29,7 @@ G_M20594_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x19, #0xD1FFAB1E LSL #16 movk x19, #0xD1FFAB1E LSL #32 mov x0, x19
- bl CORINFO_HELP_NEWFAST
+ bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0] mov x20, x0 ; gcrRegs +[x20] @@ -40,6 +40,7 @@ G_M20594_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs -[x0] add w0, w0, #1 str w0, [x21]
+ ldrsb wzr, [x20]
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -49,7 +50,7 @@ G_M20594_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr x1, [x1] blr x1 add x0, x19, #0xD1FFAB1E
- bl CORINFO_HELP_NEWFAST
+ bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0] mov x19, x0 ; gcrRegs +[x19] @@ -59,6 +60,7 @@ G_M20594_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str w0, [x21] add w0, w1, #1 str w0, [x21, #0x04]
+ ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 @@ -84,7 +86,7 @@ G_M20594_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, cmp w0, #2 ccmp w1, #1, 0, eq beq G_M20594_IG05
- ;; size=212 bbWeight=1 PerfScore 49.00
+ ;; size=220 bbWeight=1 PerfScore 55.00
G_M20594_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x19-x20] movz x0, #0xD1FFAB1E @@ -114,7 +116,7 @@ G_M20594_IG06: ; bbWeight=0.50, epilog, nogc, extend ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 300, prolog size 16, PerfScore 61.50, instruction count 75, allocated bytes for code 300 (MethodHash=0cc6af8d) for method Test_lifetime2:f4():int (FullOpts)
+; Total bytes of code 308, prolog size 16, PerfScore 67.50, instruction count 77, allocated bytes for code 308 (MethodHash=0cc6af8d) for method Test_lifetime2:f4():int (FullOpts)
; ============================================================ Unwind Info: @@ -125,7 +127,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 75 (0x0004b) Actual length = 300 (0x00012c)
+ Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+24 (+5.45%) : 20614.dasm - System.Linq.Enumerable:ConcatSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -8,32 +8,31 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 9, 5.56) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 11, 6.16) long -> x19 single-def
; V01 arg0 [V01,T01] ( 7, 5.50) ref -> x20 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]> ; V02 arg1 [V02,T02] ( 7, 5 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.__Canon]>
-; V03 loc0 [V03,T12] ( 4, 2 ) ref -> x0 class-hnd single-def <System.Linq.Enumerable+ConcatIterator`1[System.__Canon]>
+; V03 loc0 [V03,T11] ( 4, 2 ) ref -> x0 class-hnd single-def <System.Linq.Enumerable+ConcatIterator`1[System.__Canon]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T06] ( 2, 4 ) long -> x0 "spilling helperCall" -; V06 tmp2 [V06,T15] ( 2, 2 ) long -> x0 "spilling helperCall"
+; V05 tmp1 [V05,T05] ( 3, 4 ) long -> x0 "spilling helperCall" +; V06 tmp2 [V06,T12] ( 3, 2 ) long -> x0 "spilling helperCall"
; V07 tmp3 [V07,T13] ( 3, 2 ) long -> x0 "spilling helperCall" ; V08 tmp4 [V08,T04] ( 5, 5 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Enumerable+Concat2Iterator`1[System.__Canon]> ; V09 tmp5 [V09,T14] ( 3, 2 ) long -> x0 "spilling helperCall"
-; V10 cse0 [V10,T09] ( 3, 2.50) long -> x22 "CSE - aggressive" -; V11 rat0 [V11,T05] ( 3, 4 ) long -> x22 "runtime lookup" -; V12 rat1 [V12,T03] ( 3, 5.60) long -> x22 "fgMakeTemp is creating a new local variable" -; V13 rat2 [V13,T07] ( 3, 2.80) long -> x0 "spilling expr" -; V14 rat3 [V14,T10] ( 3, 2.24) long -> x0 "fgMakeTemp is creating a new local variable" -; V15 rat4 [V15,T08] ( 3, 2.80) long -> x0 "spilling expr" -; V16 rat5 [V16,T11] ( 3, 2.24) long -> x0 "fgMakeTemp is creating a new local variable"
+; V10 rat0 [V10,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V11 rat1 [V11,T06] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable" +; V12 rat2 [V12,T07] ( 3, 2.80) long -> x0 "spilling expr" +; V13 rat3 [V13,T09] ( 3, 2.24) long -> x0 "fgMakeTemp is creating a new local variable" +; V14 rat4 [V14,T08] ( 3, 2.80) long -> x0 "spilling expr" +; V15 rat5 [V15,T10] ( 3, 2.24) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M54395_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]! - stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp fp, lr, [sp, #-0x30]! + stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18]
+ str x0, [fp, #0x10]
mov x19, x0 mov x20, x1 ; gcrRegs +[x20] @@ -41,11 +40,11 @@ G_M54395_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs +[x21] ;; size=32 bbWeight=1 PerfScore 6.00 G_M54395_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
- cbz x20, G_M54395_IG22 - cbz x21, G_M54395_IG23
+ cbz x20, G_M54395_IG25 + cbz x21, G_M54395_IG26
ldr x0, [x19, #0x38]
- ldr x22, [x0, #0x10] - cbz x22, G_M54395_IG04
+ ldr x0, [x0, #0x10] + cbz x0, G_M54395_IG04
;; size=20 bbWeight=1 PerfScore 9.00 G_M54395_IG03: ; bbWeight=0.80, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref b G_M54395_IG05 @@ -55,11 +54,9 @@ G_M54395_IG04: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=000 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x22, x0 - ;; size=24 bbWeight=0.20 PerfScore 0.70
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60
G_M54395_IG05: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
- mov x0, x22
mov x1, x20 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte @@ -69,21 +66,35 @@ G_M54395_IG05: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 { blr x2 ; gcrRegs -[x1] cbz w0, G_M54395_IG08
- ;; size=32 bbWeight=1 PerfScore 7.50
+ ;; size=28 bbWeight=1 PerfScore 7.00
G_M54395_IG06: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref ; gcrRegs -[x20] mov x0, x21 ; gcrRegs +[x0] ;; size=4 bbWeight=0.50 PerfScore 0.25 G_M54395_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20] - ldp fp, lr, [sp], #0x40
+ ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18] + ldp fp, lr, [sp], #0x30
ret lr
- ;; size=16 bbWeight=0.50 PerfScore 2.00
+ ;; size=16 bbWeight=0.50 PerfScore 2.50
G_M54395_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs -[x0] +[x20]
- mov x0, x22
+ ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M54395_IG10 + ;; size=12 bbWeight=0.50 PerfScore 3.50 +G_M54395_IG09: ; bbWeight=0.40, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M54395_IG11 + ;; size=4 bbWeight=0.40 PerfScore 0.40 +G_M54395_IG10: ; bbWeight=0.10, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.10 PerfScore 0.30 +G_M54395_IG11: ; bbWeight=0.50, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
mov x1, x21 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for System.Linq.Enumerable:IsEmptyArray[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte @@ -92,65 +103,65 @@ G_M54395_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=300 ldr x2, [x2] blr x2 ; gcrRegs -[x1]
- cbz w0, G_M54395_IG10
+ cbz w0, G_M54395_IG13
mov x0, x20 ; gcrRegs +[x0]
- ;; size=36 bbWeight=0.50 PerfScore 4.00 -G_M54395_IG09: ; bbWeight=0.50, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20] - ldp fp, lr, [sp], #0x40
+ ;; size=32 bbWeight=0.50 PerfScore 3.75 +G_M54395_IG12: ; bbWeight=0.50, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18] + ldp fp, lr, [sp], #0x30
ret lr
- ;; size=16 bbWeight=0.50 PerfScore 2.00 -G_M54395_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.50 +G_M54395_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] ldr x0, [x19, #0x38] ldr x1, [x0, #0x08] cmp x1, #24
- ble G_M54395_IG13
+ ble G_M54395_IG16
;; size=16 bbWeight=0.50 PerfScore 3.75
-G_M54395_IG11: ; bbWeight=0.40, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
+G_M54395_IG14: ; bbWeight=0.40, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
ldr x0, [x0, #0x18]
- cbz x0, G_M54395_IG13
+ cbz x0, G_M54395_IG16
;; size=8 bbWeight=0.40 PerfScore 1.60
-G_M54395_IG12: ; bbWeight=0.32, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref - b G_M54395_IG14
+G_M54395_IG15: ; bbWeight=0.32, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M54395_IG17
;; size=4 bbWeight=0.32 PerfScore 0.32
-G_M54395_IG13: ; bbWeight=0.18, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref
+G_M54395_IG16: ; bbWeight=0.18, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref
mov x0, x19 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.18 PerfScore 0.54
-G_M54395_IG14: ; bbWeight=0.50, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
+G_M54395_IG17: ; bbWeight=0.50, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
mov x1, x20 ; gcrRegs +[x1]
- bl CORINFO_HELP_ISINSTANCEOFCLASS
+ bl CORINFO_HELP_ISINSTANCEOFARRAY
; gcrRegs -[x1] +[x0]
- cbnz x0, G_M54395_IG20
+ cbnz x0, G_M54395_IG23
ldr x0, [x19, #0x38] ; gcrRegs -[x0] ldr x1, [x0, #0x08] cmp x1, #32
- ble G_M54395_IG17
+ ble G_M54395_IG20
;; size=28 bbWeight=0.50 PerfScore 5.00
-G_M54395_IG15: ; bbWeight=0.40, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
+G_M54395_IG18: ; bbWeight=0.40, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz
ldr x0, [x0, #0x20]
- cbz x0, G_M54395_IG17
+ cbz x0, G_M54395_IG20
;; size=8 bbWeight=0.40 PerfScore 1.60
-G_M54395_IG16: ; bbWeight=0.32, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref - b G_M54395_IG18
+G_M54395_IG19: ; bbWeight=0.32, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M54395_IG21
;; size=4 bbWeight=0.32 PerfScore 0.32
-G_M54395_IG17: ; bbWeight=0.18, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref
+G_M54395_IG20: ; bbWeight=0.18, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref
mov x0, x19 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.18 PerfScore 0.54
-G_M54395_IG18: ; bbWeight=0.50, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref - bl CORINFO_HELP_NEWSFAST
+G_M54395_IG21: ; bbWeight=0.50, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] mov x19, x0 ; gcrRegs +[x19] @@ -174,13 +185,13 @@ G_M54395_IG18: ; bbWeight=0.50, gcrefRegs=300000 {x20 x21}, byrefRegs=000 mov x0, x19 ; gcrRegs +[x0] ;; size=44 bbWeight=0.50 PerfScore 4.00
-G_M54395_IG19: ; bbWeight=0.50, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20] - ldp fp, lr, [sp], #0x40
+G_M54395_IG22: ; bbWeight=0.50, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18] + ldp fp, lr, [sp], #0x30
ret lr
- ;; size=16 bbWeight=0.50 PerfScore 2.00 -G_M54395_IG20: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=200001 {x0 x21}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=0.50 PerfScore 2.50 +G_M54395_IG23: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=200001 {x0 x21}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x19] +[x21] mov x1, x21 ; gcrRegs +[x1] @@ -188,13 +199,13 @@ G_M54395_IG20: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=200 ldr x2, [x2, #0x58] ldr x2, [x2, #0x10] ;; size=16 bbWeight=0.50 PerfScore 4.75
-G_M54395_IG21: ; bbWeight=0.50, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20] - ldp fp, lr, [sp], #0x40
+G_M54395_IG24: ; bbWeight=0.50, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18] + ldp fp, lr, [sp], #0x30
br x2
- ;; size=16 bbWeight=0.50 PerfScore 2.00 -G_M54395_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=0.50 PerfScore 2.50 +G_M54395_IG25: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
...

libraries.pmi.windows.arm64.checked.mch

-44 (-23.91%) : 5830.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[int]]:GetHashCode():int:this (FullOpts)

@@ -10,30 +10,30 @@ ; ; V00 this [V00,T00] ( 6, 5.50) byref -> x19 this single-def ;* V01 TypeCtx [V01 ] ( 0, 0 ) long -> zero-ref single-def
-; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x20] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> -; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x10] 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 -> x0 -; V07 tmp3 [V07,T05] ( 3, 2 ) int -> x0 -; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> x1 single-def "impAppendStmt"
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> x0 +; V07 tmp3 [V07,T04] ( 3, 2 ) int -> x0 +; V08 tmp4 [V08,T01] ( 3, 4.03) byref -> x1 single-def "impAppendStmt"
;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref
-; V10 tmp6 [V10,T03] ( 4, 2.02) byref -> x2
+;* 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 -> x1 -; V13 tmp9 [V13,T07] ( 3, 1 ) int -> x1 "Inline return value spill temp"
+;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref +; V13 tmp9 [V13,T05] ( 3, 1.50) int -> x1 "Inline return value spill temp"
;* V14 tmp10 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V15 tmp11 [V15 ] ( 5, 3.50) ubyte -> [fp+0x18] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP -; V16 tmp12 [V16 ] ( 3, 2 ) int -> [fp+0x1C] 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 -> x0 single-def "argument with side effect" ;
-; Lcl frame size = 24
+; Lcl frame size = 8
G_M34277_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - str x19, [sp, #0x28]
+ stp fp, lr, [sp, #-0x20]! + str x19, [sp, #0x18]
mov fp, sp
- str xzr, [fp, #0x20] // [V02 loc0]
+ str xzr, [fp, #0x10] // [V02 loc0]
mov x19, x0 ; byrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00 @@ -41,7 +41,7 @@ G_M34277_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, by ldrsb wzr, [x19] mov x0, x19 ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V02 loc0]
+ ldr x1, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x1] cbnz x1, G_M34277_IG04 ;; size=16 bbWeight=1 PerfScore 6.50 @@ -50,11 +50,11 @@ G_M34277_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, ; byrRegs -[x0] ldr x0, [x19] ; gcrRegs +[x0]
- str x0, [fp, #0x20] // [V02 loc0] - add x0, fp, #32 // [V02 loc0]
+ str x0, [fp, #0x10] // [V02 loc0] + add x0, fp, #16 // [V02 loc0]
; gcrRegs -[x0] ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V02 loc0]
+ ldr x1, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x1] cbnz x1, G_M34277_IG04 mov w0, wzr @@ -76,52 +76,33 @@ G_M34277_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=80001 {x0 x1 G_M34277_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref, isz add x1, x19, #8 ; byrRegs +[x1]
- str xzr, [fp, #0x18] // [V03 loc1] - mov x2, x1 - ; byrRegs +[x2] - ldrb w3, [fp, #0x18] // [V15 tmp11] - cbnz w3, G_M34277_IG07 - ;; size=20 bbWeight=1 PerfScore 5.00 -G_M34277_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0002 {x1}, byref, isz - ; byrRegs -[x2 x19] - ldr x2, [x1] - str x2, [fp, #0x18] // [V03 loc1] - add x2, fp, #24 // [V03 loc1] - ; byrRegs +[x2] - ldrb w1, [fp, #0x18] // [V15 tmp11] - ; byrRegs -[x1] - cbnz w1, G_M34277_IG07
+ ldrb w2, [x1] + cbnz w2, G_M34277_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M34277_IG06: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; byrRegs -[x1 x19]
mov w1, wzr
- b G_M34277_IG10 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M34277_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref, isz - ldrb w1, [x2] - cbnz w1, G_M34277_IG09 - ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M34277_IG08: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; byrRegs -[x2] - mov w1, wzr - b G_M34277_IG10
+ b G_M34277_IG08
;; size=8 bbWeight=0.48 PerfScore 0.73
-G_M34277_IG09: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref - ; byrRegs +[x2] - ldr w1, [x2, #0x04]
+G_M34277_IG07: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0002 {x1}, byref + ; byrRegs +[x1] + ldr w1, [x1, #0x04] + ; byrRegs -[x1]
;; size=4 bbWeight=0.02 PerfScore 0.05
-G_M34277_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ; byrRegs -[x2]
+G_M34277_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2] blr x2 ;; size=20 bbWeight=1 PerfScore 5.50
-G_M34277_IG11: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x28] - ldp fp, lr, [sp], #0x30
+G_M34277_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20
ret lr ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 184, prolog size 16, PerfScore 43.27, instruction count 46, allocated bytes for code 184 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
+; Total bytes of code 140, prolog size 16, PerfScore 36.28, instruction count 35, allocated bytes for code 140 (MethodHash=4c2b7a1a) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
; ============================================================ Unwind Info: @@ -132,7 +113,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 46 (0x0002e) Actual length = 184 (0x0000b8)
+ Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -140,8 +121,8 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ D0 03 save_reg X#0 Z#3 (0x03); str x19, [sp, #24] + 83 save_fplr_x #3 (0x03); stp fp, lr, [sp, #-32]!
E4 end E4 end E4 end

-44 (-17.74%) : 5834.dasm - System.ValueTuple2[System.__Canon,System.Nullable1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)

@@ -11,22 +11,22 @@ ; V00 this [V00,T00] ( 6, 5.50) byref -> x19 this single-def ;* V01 TypeCtx [V01 ] ( 0, 0 ) long -> zero-ref single-def ; V02 loc0 [V02 ] ( 4, 2.50) ref -> [fp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon>
-; V03 loc1 [V03 ] ( 5, 3.50) struct ( 8) [fp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;# V04 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 -> x0 -; V07 tmp3 [V07,T05] ( 3, 2 ) ref -> x20
+; V06 tmp2 [V06,T03] ( 3, 2 ) byref -> x0 +; V07 tmp3 [V07,T04] ( 3, 2 ) ref -> x20
; V08 tmp4 [V08,T01] ( 3, 5 ) byref -> x0 single-def "impAppendStmt" ;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref single-def ;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref single-def
-; V11 tmp7 [V11,T03] ( 4, 2.50) byref -> x1
+;* 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 -> x2 -; V15 tmp11 [V15,T07] ( 3, 1.50) ref -> x2 class-hnd "Inline return value spill temp" <System.String>
+;* V14 tmp10 [V14 ] ( 0, 0 ) ref -> zero-ref +; V15 tmp11 [V15,T05] ( 3, 2 ) ref -> x2 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 -> [fp+0x10] do-not-enreg[X] addr-exposed "field V03.hasValue (fldOffset=0x0)" P-DEP -; V18 tmp14 [V18 ] ( 3, 2 ) int -> [fp+0x14] 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 -> x0 single-def "argument with side effect" ; ; Lcl frame size = 16 @@ -79,38 +79,21 @@ G_M39544_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19 ; gcrRegs -[x0] add x0, x19, #8 ; byrRegs +[x0]
- str xzr, [fp, #0x10] // [V03 loc1] - mov x1, x0 - ; byrRegs +[x1] - ldrb w2, [fp, #0x10] // [V17 tmp13] - cbnz w2, G_M39544_IG07 - ;; size=20 bbWeight=1 PerfScore 5.00 -G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, byref, isz - ; byrRegs -[x1 x19] - ldr x1, [x0] - str x1, [fp, #0x10] // [V03 loc1] - add x1, fp, #16 // [V03 loc1] - ; byrRegs +[x1] - ldrb w0, [fp, #0x10] // [V17 tmp13] - ; byrRegs -[x0] - cbnz w0, G_M39544_IG07 - mov x2, xzr - ; gcrRegs +[x2] - b G_M39544_IG09 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x1}, byref, isz - ; gcrRegs -[x2] - ldrb w0, [x1] - cbnz w0, G_M39544_IG08
+ ldrb w1, [x0] + cbnz w1, G_M39544_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M39544_IG06: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + ; byrRegs -[x0 x19]
movz x2, #8 movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32
- b G_M39544_IG09 - ;; size=24 bbWeight=0.50 PerfScore 3.25 -G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x1}, byref - ldr w0, [x1, #0x04]
+ b G_M39544_IG08 + ;; size=16 bbWeight=0.50 PerfScore 1.25 +G_M39544_IG07: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, byref + ; byrRegs +[x0] + ldr w0, [x0, #0x04] + ; byrRegs -[x0]
movz x1, #0xD1FFAB1E // code for System.Number:Int32ToDecStr(int):System.String
- ; byrRegs -[x1]
movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] @@ -119,7 +102,7 @@ G_M39544_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0002 {x mov x2, x0 ; gcrRegs +[x2] ;; size=28 bbWeight=0.50 PerfScore 4.50
-G_M39544_IG09: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref
+G_M39544_IG08: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -136,13 +119,13 @@ G_M39544_IG09: ; bbWeight=1, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {} blr x4 ; gcrRegs -[x2 x20] ;; size=48 bbWeight=1 PerfScore 9.00
-G_M39544_IG10: ; bbWeight=1, epilog, nogc, extend
+G_M39544_IG09: ; bbWeight=1, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=1 PerfScore 3.00
-; Total bytes of code 248, prolog size 16, PerfScore 51.00, instruction count 62, allocated bytes for code 248 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
+; Total bytes of code 204, prolog size 16, PerfScore 44.00, instruction count 51, allocated bytes for code 204 (MethodHash=50db6587) for method System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
; ============================================================ Unwind Info: @@ -153,7 +136,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 62 (0x0003e) Actual length = 248 (0x0000f8)
+ Function Length : 51 (0x00033) Actual length = 204 (0x0000cc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-40 (-16.95%) : 3167.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 ) long -> zero-ref single-def
-; V01 arg0 [V01 ] ( 3, 3 ) ref -> [fp+0x30] do-not-enreg[X] addr-exposed ld-addr-op class-hnd single-def <System.__Canon> -; V02 arg1 [V02 ] ( 3, 3 ) struct ( 8) [fp+0x28] do-not-enreg[XS] addr-exposed ld-addr-op single-def <System.Nullable`1[int]>
+; V01 arg0 [V01 ] ( 3, 3 ) ref -> [fp+0x20] do-not-enreg[X] addr-exposed ld-addr-op class-hnd single-def <System.__Canon> +; V02 arg1 [V02 ] ( 3, 3 ) struct ( 8) [fp+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,T03] ( 3, 3 ) int -> x1
-; V06 loc3 [V06 ] ( 4, 2.50) ref -> [fp+0x20] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.__Canon> -; V07 loc4 [V07 ] ( 5, 3.50) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed ld-addr-op <System.Nullable`1[int]>
+; V06 loc3 [V06 ] ( 4, 2.50) ref -> [fp+0x10] 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,T06] ( 4, 2.50) byref -> x0
+; V09 tmp1 [V09,T05] ( 4, 2.50) byref -> x0
; V10 tmp2 [V10,T07] ( 3, 2 ) int -> x19
-; V11 tmp3 [V11,T05] ( 5, 2.52) byref -> x0 -; V12 tmp4 [V12,T08] ( 3, 2 ) int -> x1 -; V13 tmp5 [V13,T09] ( 3, 1 ) int -> x1 "Inline return value spill temp"
+; V11 tmp3 [V11,T06] ( 3, 2.02) byref -> x0 single-def +;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref +; V13 tmp5 [V13,T08] ( 3, 1.50) int -> x1 "Inline return value spill temp"
;* V14 tmp6 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ; V15 tmp7 [V15,T00] ( 6, 12 ) int -> x1 "Inlining Arg"
-; V16 tmp8 [V16 ] ( 5, 3.50) ubyte -> [fp+0x18] do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP -; V17 tmp9 [V17 ] ( 3, 2 ) int -> [fp+0x1C] 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,T02] ( 3, 3 ) ref -> x0 single-def "argument with side effect" ; V19 cse0 [V19,T01] ( 4, 4 ) int -> x0 "CSE - aggressive" ; V20 cse1 [V20,T04] ( 3, 3 ) int -> x3 "CSE - aggressive" ;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M60379_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]! - str x19, [sp, #0x38]
+ stp fp, lr, [sp, #-0x30]! + str x19, [sp, #0x28]
mov fp, sp
- str xzr, [fp, #0x20] // [V06 loc3] - stp x2, x1, [fp, #0x28] // [V02 arg1], [V01 arg0]
+ str xzr, [fp, #0x10] // [V06 loc3] + stp x2, x1, [fp, #0x18] // [V02 arg1], [V01 arg0]
;; size=20 bbWeight=1 PerfScore 4.50 G_M60379_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- add x0, fp, #48 // [V01 arg0]
+ add x0, fp, #32 // [V01 arg0]
; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V06 loc3]
+ ldr x1, [fp, #0x10] // [V06 loc3]
; gcrRegs +[x1] cbnz x1, G_M60379_IG04 ;; size=12 bbWeight=1 PerfScore 3.50 @@ -51,11 +51,11 @@ G_M60379_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, b ldr x0, [x0] ; gcrRegs +[x0] ; byrRegs -[x0]
- str x0, [fp, #0x20] // [V06 loc3] - add x0, fp, #32 // [V06 loc3]
+ str x0, [fp, #0x10] // [V06 loc3] + add x0, fp, #16 // [V06 loc3]
; gcrRegs -[x0] ; byrRegs +[x0]
- ldr x1, [fp, #0x20] // [V06 loc3]
+ ldr x1, [fp, #0x10] // [V06 loc3]
; gcrRegs +[x1] cbnz x1, G_M60379_IG04 mov w19, wzr @@ -74,37 +74,21 @@ G_M60379_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, b sxtw w19, w0 ;; size=24 bbWeight=0.50 PerfScore 6.75 G_M60379_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- str xzr, [fp, #0x18] // [V07 loc4] - add x0, fp, #40 // [V02 arg1]
+ add x0, fp, #24 // [V02 arg1]
; byrRegs +[x0]
- ldrb w1, [fp, #0x18] // [V16 tmp8] - cbnz w1, G_M60379_IG07 - ;; size=16 bbWeight=1 PerfScore 4.50 -G_M60379_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz - ldr x0, [x0] - ; byrRegs -[x0] - str x0, [fp, #0x18] // [V07 loc4] - add x0, fp, #24 // [V07 loc4] - ; byrRegs +[x0] - ldrb w1, [fp, #0x18] // [V16 tmp8] - cbnz w1, G_M60379_IG07 - mov w1, wzr - b G_M60379_IG10 - ;; size=28 bbWeight=0.50 PerfScore 4.50 -G_M60379_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
ldrb w1, [x0]
- cbnz w1, G_M60379_IG09 - ;; size=8 bbWeight=0.50 PerfScore 2.00 -G_M60379_IG08: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ cbnz w1, G_M60379_IG07 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M60379_IG06: ; bbWeight=0.48, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; byrRegs -[x0] mov w1, wzr
- b G_M60379_IG10
+ b G_M60379_IG08
;; size=8 bbWeight=0.48 PerfScore 0.73
-G_M60379_IG09: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref
+G_M60379_IG07: ; bbWeight=0.02, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref
; byrRegs +[x0] ldr w1, [x0, #0x04] ;; size=4 bbWeight=0.02 PerfScore 0.05
-G_M60379_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M60379_IG08: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; byrRegs -[x0] movz w0, #0xD1FFAB1E movk w0, #0xD1FFAB1E LSL #16 @@ -126,13 +110,13 @@ G_M60379_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mul w1, w1, w0 eor w0, w1, w1, LSR #16 ;; size=76 bbWeight=1 PerfScore 21.00
-G_M60379_IG11: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x38] - ldp fp, lr, [sp], #0x40
+G_M60379_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x28] + ldp fp, lr, [sp], #0x30
ret lr ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 236, prolog size 16, PerfScore 56.03, instruction count 59, allocated bytes for code 236 (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 196, prolog size 16, PerfScore 49.53, instruction count 49, allocated bytes for code 196 (MethodHash=6b5b1424) for method System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
; ============================================================ Unwind Info: @@ -143,7 +127,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 59 (0x0003b) Actual length = 236 (0x0000ec)
+ Function Length : 49 (0x00031) Actual length = 196 (0x0000c4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -151,8 +135,8 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 07 save_reg X#0 Z#7 (0x07); str x19, [sp, #56] - 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40] + 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
E4 end E4 end E4 end

+48 (+16.22%) : 22974.dasm - Microsoft.FSharp.Collections.MapTreeModule:mkIterator[System.Canon,System.Nullable1[int]](Microsoft.FSharp.Collections.MapTree2[System.Canon,System.Nullable1[int]]):Microsoft.FSharp.Collections.MapTreeModule+MapIterator2[System.__Canon,System.Nullable`1[int]] (FullOpts)

@@ -8,38 +8,38 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 9, 6.92) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 11, 8.12) long -> x19 single-def
; V01 arg0 [V01,T06] ( 3, 3 ) ref -> x20 class-hnd single-def <Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.Nullable`1[int]]> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03,T16] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V04 tmp2 [V04,T02] ( 3, 6 ) long -> x21 "spilling helperCall" -; V05 tmp3 [V05,T09] ( 3, 4 ) long -> x22 "spilling helperCall"
+; V03 tmp1 [V03,T09] ( 3, 4 ) long -> x21 "spilling helperCall" +; V04 tmp2 [V04,T10] ( 3, 4 ) long -> x22 "spilling helperCall" +; V05 tmp3 [V05,T11] ( 3, 4 ) long -> x23 "spilling helperCall"
; V06 tmp4 [V06,T01] ( 4, 8 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.Nullable`1[int]]> ;* V07 tmp5 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp6 [V08,T12] ( 2, 4 ) ref -> x15 class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V09 tmp7 [V09,T13] ( 2, 4 ) ref -> x2 single-def "argument with side effect" -; V10 tmp8 [V10,T14] ( 2, 4 ) ref -> x1 single-def "argument with side effect" -; V11 cse0 [V11,T15] ( 2, 2 ) long -> x21 "CSE - aggressive" -; V12 rat0 [V12,T10] ( 3, 4 ) long -> x21 "runtime lookup" -; V13 rat1 [V13,T03] ( 3, 5.60) long -> x21 "fgMakeTemp is creating a new local variable" -; V14 rat2 [V14,T04] ( 3, 5.60) long -> x0 "spilling expr" -; V15 rat3 [V15,T07] ( 3, 4.48) long -> x22 "fgMakeTemp is creating a new local variable" -; V16 rat4 [V16,T11] ( 3, 4 ) long -> x0 "runtime lookup" -; V17 rat5 [V17,T05] ( 3, 5.60) long -> x0 "spilling expr" -; V18 rat6 [V18,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+; V08 tmp6 [V08,T13] ( 2, 4 ) ref -> x15 class-hnd exact single-def "Inlining Arg" <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V09 tmp7 [V09,T14] ( 2, 4 ) ref -> x2 single-def "argument with side effect" +; V10 tmp8 [V10,T15] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V11 rat0 [V11,T02] ( 3, 5.60) long -> x21 "fgMakeTemp is creating a new local variable" +; V12 rat1 [V12,T03] ( 3, 5.60) long -> x22 "fgMakeTemp is creating a new local variable" +; V13 rat2 [V13,T04] ( 3, 5.60) long -> x0 "spilling expr" +; V14 rat3 [V14,T07] ( 3, 4.48) long -> x23 "fgMakeTemp is creating a new local variable" +; V15 rat4 [V15,T12] ( 3, 4 ) long -> x0 "runtime lookup" +; V16 rat5 [V16,T05] ( 3, 5.60) long -> x0 "spilling expr" +; V17 rat6 [V17,T08] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M59459_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x20] - stp x21, x22, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- str x0, [fp, #0x18]
+ str x0, [fp, #0x10]
mov x19, x0 mov x20, x1 ; gcrRegs +[x20]
- ;; size=28 bbWeight=1 PerfScore 5.50
+ ;; size=32 bbWeight=1 PerfScore 6.50
G_M59459_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz ldr x0, [x19, #0x38] ldr x21, [x0, #0x18] @@ -53,52 +53,68 @@ G_M59459_IG04: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {} movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x21, x0 ;; size=24 bbWeight=0.20 PerfScore 0.70 G_M59459_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz ldr x0, [x19, #0x38]
- ldr x1, [x0, #0x10] - cmp x1, #32 - ble G_M59459_IG08 - ;; size=16 bbWeight=1 PerfScore 7.50 -G_M59459_IG06: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x22, [x0, #0x20] - cbz x22, G_M59459_IG08 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M59459_IG07: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M59459_IG09 - ;; size=4 bbWeight=0.64 PerfScore 0.64 -G_M59459_IG08: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+ ldr x22, [x0, #0x18] + cbz x22, G_M59459_IG07 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M59459_IG06: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M59459_IG08 + ;; size=4 bbWeight=0.80 PerfScore 0.80 +G_M59459_IG07: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
mov x0, x19 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x22, x0
+ ;; size=24 bbWeight=0.20 PerfScore 0.70 +G_M59459_IG08: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x10] + cmp x1, #32 + ble G_M59459_IG11 + ;; size=16 bbWeight=1 PerfScore 7.50 +G_M59459_IG09: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x23, [x0, #0x20] + cbz x23, G_M59459_IG11 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M59459_IG10: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M59459_IG12 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M59459_IG11: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + mov x23, x0
;; size=24 bbWeight=0.36 PerfScore 1.26
-G_M59459_IG09: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M59459_IG12: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
ldr x0, [x19, #0x38] ldr x1, [x0, #0x10] cmp x1, #40
- ble G_M59459_IG12
+ ble G_M59459_IG15
;; size=16 bbWeight=1 PerfScore 7.50
-G_M59459_IG10: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M59459_IG13: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
ldr x0, [x0, #0x28]
- cbz x0, G_M59459_IG12
+ cbz x0, G_M59459_IG15
;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M59459_IG11: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M59459_IG13
+G_M59459_IG14: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M59459_IG16
;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M59459_IG12: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M59459_IG15: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
mov x0, x19 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M59459_IG13: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - bl CORINFO_HELP_NEWSFAST
+G_M59459_IG16: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] mov x19, x0 ; gcrRegs +[x19] @@ -114,7 +130,7 @@ G_M59459_IG13: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ; gcrRegs +[x2] mov x1, x20 ; gcrRegs +[x1]
- mov x0, x21
+ mov x0, x22
; gcrRegs -[x0] movz x3, #0xD1FFAB1E // code for Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:Cons(System.__Canon,Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] movk x3, #0xD1FFAB1E LSL #16 @@ -124,7 +140,7 @@ G_M59459_IG13: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ; gcrRegs -[x1-x2 x20] +[x0] mov x1, x0 ; gcrRegs +[x1]
- mov x0, x22
+ mov x0, x23
; gcrRegs -[x0] movz x2, #0xD1FFAB1E // code for Microsoft.FSharp.Collections.MapTreeModule:collapseLHS[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] movk x2, #0xD1FFAB1E LSL #16 @@ -143,14 +159,15 @@ G_M59459_IG13: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b mov x0, x19 ; gcrRegs +[x0] ;; size=112 bbWeight=1 PerfScore 24.50
-G_M59459_IG14: ; bbWeight=1, epilog, nogc, extend - ldp x21, x22, [sp, #0x30] - ldp x19, x20, [sp, #0x20]
+G_M59459_IG17: ; bbWeight=1, epilog, nogc, extend + ldr x23, [sp, #0x38] + ldp x21, x22, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x40 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00
+ ;; size=20 bbWeight=1 PerfScore 6.00
-; Total bytes of code 296, prolog size 20, PerfScore 67.52, instruction count 74, allocated bytes for code 296 (MethodHash=953017bc) for method Microsoft.FSharp.Collections.MapTreeModule:mkIterator[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
+; Total bytes of code 344, prolog size 24, PerfScore 79.02, instruction count 86, allocated bytes for code 344 (MethodHash=953017bc) for method Microsoft.FSharp.Collections.MapTreeModule:mkIterator[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
; ============================================================ Unwind Info: @@ -161,7 +178,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 74 (0x0004a) Actual length = 296 (0x000128)
+ Function Length : 86 (0x00056) Actual length = 344 (0x000158)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -169,10 +186,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! E4 end
- E4 end - E4 end

+48 (+18.75%) : 19305.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.Canon,System.Nullable1[int]](Microsoft.FSharp.Control.AsyncActivation1[System.Canon],System.Nullable1[int],Microsoft.FSharp.Core.FSharpFunc2[System.Nullable`1[int],System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)

@@ -8,24 +8,27 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 7, 4.20) long -> [fp+0x28] EH-live single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]>
-; V02 arg1 [V02,T03] ( 3, 3 ) struct ( 8) [fp+0x28] do-not-enreg[S] single-def <System.Nullable`1[int]>
+; V02 arg1 [V02,T03] ( 3, 3 ) struct ( 8) [fp+0x20] do-not-enreg[S] single-def <System.Nullable`1[int]>
; V03 arg2 [V03,T01] ( 4, 4 ) ref -> x3 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.__Canon]>
-; V04 loc0 [V04,T08] ( 2, 2 ) ref -> x20 class-hnd single-def <<unknown class>> -; V05 loc1 [V05,T07] ( 3, 2 ) ubyte -> [fp+0x24] do-not-enreg[M] EH-live
+; V04 loc0 [V04,T08] ( 2, 2 ) ref -> x19 class-hnd single-def <<unknown class>> +; V05 loc1 [V05,T07] ( 3, 2 ) ubyte -> [fp+0x1C] do-not-enreg[M] EH-live
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V07 tmp1 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp2 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 tmp3 [V09,T11] ( 2, 0 ) ref -> x0 class-hnd single-def "Inline stloc first use temp" <<unknown class>> -; V10 tmp4 [V10,T12] ( 2, 0 ) ref -> x19 class-hnd single-def "Inline stloc first use temp" <<unknown class>> -; V11 tmp5 [V11,T13] ( 2, 0 ) ref -> x20 class-hnd single-def "impAppendStmt" <<unknown class>>
+; V09 tmp3 [V09,T13] ( 2, 0 ) ref -> x0 class-hnd single-def "Inline stloc first use temp" <<unknown class>> +; V10 tmp4 [V10,T14] ( 2, 0 ) ref -> x19 class-hnd single-def "Inline stloc first use temp" <<unknown class>> +; V11 tmp5 [V11,T15] ( 2, 0 ) ref -> x20 class-hnd single-def "impAppendStmt" <<unknown class>>
; V12 tmp6 [V12,T10] ( 3, 0 ) ref -> x0 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
-; V13 tmp7 [V13,T04] ( 4, 2 ) ref -> [fp+0x18] EH-live single-def "field V01.contents (fldOffset=0x0)" P-INDEP
+; V13 tmp7 [V13,T04] ( 4, 2 ) ref -> [fp+0x10] EH-live single-def "field V01.contents (fldOffset=0x0)" P-INDEP
; V14 tmp8 [V14,T06] ( 2, 4 ) long -> x0 "argument with side effect" ; V15 PSPSym [V15,T09] ( 1, 1 ) long -> [fp+0x38] do-not-enreg[V] "PSPSym" ; V16 rat0 [V16,T05] ( 3, 4 ) long -> x0 "runtime lookup"
-; V17 rat1 [V17,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable"
+; V17 rat1 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +;* V18 rat2 [V18,T16] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V19 rat3 [V19,T11] ( 3, 0 ) long -> x1 "spilling expr" +; V20 rat4 [V20,T12] ( 2, 0 ) long -> x1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 48 @@ -35,51 +38,52 @@ G_M8309_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {} mov fp, sp add x4, sp, #80 stp x0, x4, [fp, #0x30] // [V15 PSPSym]
- str x1, [fp, #0x18] // [V13 tmp7]
+ str x0, [fp, #0x28] // [V00 TypeCtx] + str x1, [fp, #0x10] // [V13 tmp7]
; GC ptr vars +{V13}
- str x2, [fp, #0x28] // [V02 arg1] - mov x19, x0 - ;; size=32 bbWeight=1 PerfScore 6.50
+ str x2, [fp, #0x20] // [V02 arg1] + ;; size=32 bbWeight=1 PerfScore 7.00
G_M8309_IG02: ; bbWeight=1, gcVars=0000000000000010 {V13}, gcrefRegs=0008 {x3}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs +[x3]
- str wzr, [fp, #0x24] // [V05 loc1]
+ str wzr, [fp, #0x1C] // [V05 loc1]
;; size=4 bbWeight=1 PerfScore 1.00 G_M8309_IG03: ; bbWeight=1, gcrefRegs=0008 {x3}, byrefRegs=0000 {}, byref mov x0, x3 ; gcrRegs +[x0]
- ldr x1, [fp, #0x28] // [V02 arg1]
+ ldr x1, [fp, #0x20] // [V02 arg1]
ldr x3, [x3] ; gcrRegs -[x3] ldr x3, [x3, #0x48] ldr x3, [x3, #0x20] blr x3 ; gcr arg pop 0
- mov x20, x0 - ; gcrRegs +[x20]
+ mov x19, x0 + ; gcrRegs +[x19]
mov w0, #1 ; gcrRegs -[x0]
- str w0, [fp, #0x24] // [V05 loc1]
+ str w0, [fp, #0x1C] // [V05 loc1]
;; size=36 bbWeight=1 PerfScore 14.50
-G_M8309_IG04: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0, #0x18] - cbz x0, G_M8309_IG06 - ;; size=12 bbWeight=1 PerfScore 7.00 -G_M8309_IG05: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M8309_IG04: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ldr x0, [fp, #0x28] // [V00 TypeCtx] + ldr x1, [x0, #0x38] + ldr x2, [x1, #0x18] + cbz x2, G_M8309_IG06 + ;; size=16 bbWeight=1 PerfScore 9.00 +G_M8309_IG05: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov x0, x2
b G_M8309_IG07
- ;; size=4 bbWeight=0.80 PerfScore 0.80 -G_M8309_IG06: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - mov x0, x19
+ ;; size=8 bbWeight=0.80 PerfScore 1.20 +G_M8309_IG06: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M8309_IG07: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - mov x1, x20
+ ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M8309_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov x1, x19
; gcrRegs +[x1]
- ldr x2, [fp, #0x18] // [V13 tmp7]
+ ldr x2, [fp, #0x10] // [V13 tmp7]
; gcrRegs +[x2] movz x3, #0xD1FFAB1E // code for <unknown method> movk x3, #0xD1FFAB1E LSL #16 @@ -93,16 +97,32 @@ G_M8309_IG08: ; bbWeight=1, epilog, nogc, extend ; gcr arg pop 0 ;; size=12 bbWeight=1 PerfScore 3.00 G_M8309_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc
- ; gcrRegs -[x1-x2 x20]
+ ; gcrRegs -[x1-x2 x19]
stp fp, lr, [sp, #-0x30]! stp x19, x20, [sp, #0x20] add x3, fp, #80 str x3, [sp, #0x18] ;; size=16 bbWeight=0 PerfScore 0.00 G_M8309_IG10: ; bbWeight=0, gcVars=0000000000000010 {V13}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
- ldr w0, [fp, #0x24] // [V05 loc1] - cbnz w0, G_M8309_IG12 - ldr x2, [fp, #0x18] // [V13 tmp7]
+ ldr w0, [fp, #0x1C] // [V05 loc1] + cbnz w0, G_M8309_IG14 + ldr x0, [fp, #0x28] // [V00 TypeCtx] + ldr x1, [x0, #0x38] + ldr x2, [x1, #0x10] + cmp x2, #32 + ble G_M8309_IG11 + ldr x1, [x1, #0x20] + cbnz x1, G_M8309_IG12 + ;; size=36 bbWeight=0 PerfScore 0.00 +G_M8309_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=16 bbWeight=0 PerfScore 0.00 +G_M8309_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x2, [fp, #0x10] // [V13 tmp7]
; gcrRegs +[x2] ldr x0, [x2, #0x10] ; gcrRegs +[x0] @@ -118,7 +138,7 @@ G_M8309_IG10: ; bbWeight=0, gcVars=0000000000000010 {V13}, gcrefRegs=0000 movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ; GC ptr vars -{V13}
- bl CORINFO_HELP_NEWSFAST
+ bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs -[x1-x2] +[x0] ; gcr arg pop 0 add x14, x0, #8 @@ -135,19 +155,19 @@ G_M8309_IG10: ; bbWeight=0, gcVars=0000000000000010 {V13}, gcrefRegs=0000 bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15 x20] ; byrRegs -[x14]
- ;; size=72 bbWeight=0 PerfScore 0.00 -G_M8309_IG11: ; bbWeight=0, funclet epilog, nogc, extend
+ ;; size=64 bbWeight=0 PerfScore 0.00 +G_M8309_IG13: ; bbWeight=0, funclet epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0 PerfScore 0.00
-G_M8309_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet epilog, nogc
+G_M8309_IG14: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, funclet epilog, nogc
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 256, prolog size 32, PerfScore 40.40, instruction count 64, allocated bytes for code 256 (MethodHash=b65adf8a) for method Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
+; Total bytes of code 304, prolog size 32, PerfScore 43.20, instruction count 76, allocated bytes for code 304 (MethodHash=b65adf8a) for method Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
; ============================================================ Unwind Info: @@ -158,7 +178,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 37 (0x00025) Actual length = 148 (0x000094)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -181,7 +201,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 28 (0x0001c) Actual length = 112 (0x000070)
+ Function Length : 39 (0x00027) Actual length = 156 (0x00009c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+44 (+32.35%) : 26574.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastVSystem.__Canon:Microsoft.FSharp.Core.FSharpValueOption`1System.__Canon

@@ -8,10 +8,10 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 3.60) long -> x0 single-def
+; V00 TypeCtx [V00,T02] ( 7, 4.20) long -> x0 single-def
; V01 arg0 [V01,T01] ( 5, 14.50) ref -> x1 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 2, 1 ) ref -> x0 class-hnd single-def <System.__Canon>
+; V03 loc1 [V03,T07] ( 2, 1 ) ref -> x19 class-hnd single-def <System.__Canon>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" @@ -19,25 +19,28 @@ ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]> ;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline ldloca(s) first use temp" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
-; V11 tmp6 [V11,T07] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP -; V12 tmp7 [V12,T09] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
+; V11 tmp6 [V11,T08] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP +; V12 tmp7 [V12,T10] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref "field V09.item (fldOffset=0x0)" P-DEP ;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "field V09._tag (fldOffset=0x8)" P-DEP
-; V15 tmp10 [V15,T08] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T10] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T05] ( 3, 1.50) struct (16) [fp+0x18] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
+; V15 tmp10 [V15,T09] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T11] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T06] ( 3, 1.50) struct (16) [fp+0x10] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
; V18 cse0 [V18,T00] ( 4, 24 ) ref -> x2 "CSE - aggressive"
-; V19 rat0 [V19,T04] ( 3, 2 ) long -> x1 "runtime lookup"
+; V19 rat0 [V19,T05] ( 3, 2 ) long -> x1 "runtime lookup"
; V20 rat1 [V20,T03] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V21 rat2 [V21,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V22 rat3 [V22,T04] ( 2, 2 ) long -> x1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 24
-G_M49887_IG01: ; bbWeight=8, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M49887_IG01: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x30]!
+ str x19, [sp, #0x28]
mov fp, sp
- stp xzr, xzr, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - str x0, [fp, #0x28] - ;; size=16 bbWeight=8 PerfScore 28.00
+ stp xzr, xzr, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + str x0, [fp, #0x20] + ;; size=20 bbWeight=8 PerfScore 36.00
G_M49887_IG02: ; bbWeight=8, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x1] ldr x2, [x1, #0x10] @@ -64,7 +67,7 @@ G_M49887_IG06: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x1, x0 ;; size=20 bbWeight=0.10 PerfScore 0.30 @@ -77,38 +80,54 @@ G_M49887_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr blr x1 ; gcrRegs +[x0] ; gcr arg pop 0
- stp x0, x1, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - ldr x0, [fp, #0x18] // [V17 tmp12] - ldr w1, [fp, #0x20] // [V17 tmp12+0x08]
+ stp x0, x1, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + ldr x0, [fp, #0x10] // [V17 tmp12] + ldr w1, [fp, #0x18] // [V17 tmp12+0x08]
;; size=36 bbWeight=0.50 PerfScore 5.50 G_M49887_IG08: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00 -G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=12 bbWeight=0.50 PerfScore 2.00 +G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] +[x1]
- ldr x0, [x1, #0x08] - ; gcrRegs +[x0] - mov w1, #1
+ ldr x19, [x1, #0x08] + ; gcrRegs +[x19] + ldr x1, [x0, #0x38]
; gcrRegs -[x1]
- ;; size=8 bbWeight=0.50 PerfScore 1.75 -G_M49887_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x1, [x1, #0x10] + cbnz x1, G_M49887_IG11 + ;; size=16 bbWeight=0.50 PerfScore 5.00 +G_M49887_IG10: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=16 bbWeight=0.10 PerfScore 0.25 +G_M49887_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov w1, #1 + mov x0, x19 + ; gcrRegs +[x0] + ;; size=8 bbWeight=0.50 PerfScore 0.50 +G_M49887_IG12: ; bbWeight=0.50, epilog, nogc, extend + ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=12 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 136, prolog size 16, PerfScore 95.45, instruction count 34, allocated bytes for code 136 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
+; Total bytes of code 180, prolog size 20, PerfScore 109.45, instruction count 45, allocated bytes for code 180 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1
+ Code Words : 2
Epilog Count : 2 E bit : 0 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 136 (0x000088)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -119,7 +138,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
+ E4 end + E4 end

libraries_tests.run.windows.arm64.Release.mch

-4 (-3.33%) : 2425.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable1[ubyte]](System.String):System.Nullable1[ubyte]:this (Tier0)

@@ -5,29 +5,28 @@ ; partially interruptible ; Final local variable assignments ;
-; V00 this [V00 ] ( 1, 1 ) ref -> [fp+0x38] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions> -; V01 arg1 [V01 ] ( 1, 1 ) ref -> [fp+0x30] do-not-enreg[] class-hnd <System.String> -; V02 loc0 [V02 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <<unknown class>> -; V03 loc1 [V03 ] ( 1, 1 ) struct ( 8) [fp+0x20] do-not-enreg[S] must-init ld-addr-op <System.Nullable`1[ubyte]>
+; V00 this [V00 ] ( 1, 1 ) ref -> [fp+0x28] do-not-enreg[] this class-hnd <Xunit.TestFrameworkOptions> +; V01 arg1 [V01 ] ( 1, 1 ) ref -> [fp+0x20] do-not-enreg[] class-hnd <System.String> +; V02 loc0 [V02 ] ( 1, 1 ) ref -> [fp+0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <<unknown class>> +; V03 loc1 [V03 ] ( 1, 1 ) struct ( 8) [fp+0x10] do-not-enreg[S] must-init ld-addr-op <System.Nullable`1[ubyte]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05 ] ( 1, 1 ) struct ( 8) [fp+0x18] do-not-enreg[XS] addr-exposed "pseudo return buffer" <System.Nullable`1[ubyte]>
;
-; Lcl frame size = 48
+; Lcl frame size = 32
G_M29704_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]!
+ stp fp, lr, [sp, #-0x30]!
mov fp, sp
- str xzr, [fp, #0x28] // [V02 loc0] - str xzr, [fp, #0x20] // [V03 loc1] - str x0, [fp, #0x38] // [V00 this] - str x1, [fp, #0x30] // [V01 arg1]
+ str xzr, [fp, #0x18] // [V02 loc0] + str xzr, [fp, #0x10] // [V03 loc1] + str x0, [fp, #0x28] // [V00 this] + str x1, [fp, #0x20] // [V01 arg1]
;; size=24 bbWeight=1 PerfScore 5.50 G_M29704_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- ldr x0, [fp, #0x38] // [V00 this]
+ ldr x0, [fp, #0x28] // [V00 this]
; gcrRegs +[x0] ldr x0, [x0, #0x08]
- add x2, fp, #40 // [V02 loc0] - ldr x1, [fp, #0x30] // [V01 arg1]
+ add x2, fp, #24 // [V02 loc0] + ldr x1, [fp, #0x20] // [V01 arg1]
; gcrRegs +[x1] movz x3, #0xD1FFAB1E // code for <unknown method> movk x3, #0xD1FFAB1E LSL #16 @@ -37,30 +36,31 @@ G_M29704_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x3 ; gcrRegs -[x0-x1] cbz w0, G_M29704_IG04
- add x0, fp, #24 // [V05 tmp1] - ldr x2, [fp, #0x28] // [V02 loc0] - ; gcrRegs +[x2] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - bl CORINFO_HELP_UNBOX_NULLABLE - ; gcrRegs -[x2] - ldr w0, [fp, #0x18] // [V05 tmp1] - ;; size=72 bbWeight=1 PerfScore 24.00
+ ldr x1, [fp, #0x18] // [V02 loc0] + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_UNBOX + ; gcrRegs -[x1] + ; byrRegs +[x0] + ldrh w0, [x0] + ; byrRegs -[x0] + ;; size=68 bbWeight=1 PerfScore 24.50
G_M29704_IG03: ; bbWeight=1, epilog, nogc, extend
- ldp fp, lr, [sp], #0x40
+ ldp fp, lr, [sp], #0x30
ret lr ;; size=8 bbWeight=1 PerfScore 2.00 G_M29704_IG04: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- strh wzr, [fp, #0x20] // [V03 loc1] - ldr w0, [fp, #0x20] // [V03 loc1]
+ strh wzr, [fp, #0x10] // [V03 loc1] + ldr w0, [fp, #0x10] // [V03 loc1]
;; size=8 bbWeight=1 PerfScore 3.00 G_M29704_IG05: ; bbWeight=1, epilog, nogc, extend
- ldp fp, lr, [sp], #0x40
+ ldp fp, lr, [sp], #0x30
ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 120, prolog size 16, PerfScore 36.50, instruction count 30, allocated bytes for code 120 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
+; Total bytes of code 116, prolog size 16, PerfScore 37.00, instruction count 29, allocated bytes for code 116 (MethodHash=9a568bf7) for method Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)
; ============================================================ Unwind Info: @@ -71,7 +71,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 120 (0x000078)
+ Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -82,7 +82,7 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
E4 end E4 end

+0 (0.00%) : 2101.dasm - System.Console:add_CancelKeyPress(System.ConsoleCancelEventHandler) (Tier0)

@@ -41,9 +41,11 @@ G_M41435_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #18
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -67,15 +69,19 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #18
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #18
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -98,7 +104,7 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_CHKCASTCLASS
+ bl CORINFO_HELP_CHKCASTARRAY
; gcrRegs -[x1] +[x0] ; gcr arg pop 0 movz x14, #0xD1FFAB1E // data for <unknown class>:<unknown field> @@ -112,9 +118,11 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #18
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -135,7 +143,7 @@ G_M41435_IG03: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWSFAST
+ bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 str x0, [fp, #0x20] // [V07 tmp3] @@ -175,11 +183,13 @@ G_M41435_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #18
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 ldr x1, [fp, #0x38] // [V03 loc2] ; gcrRegs +[x1] movn w0, #1
+ ; byrRegs -[x0]
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 @@ -198,11 +208,13 @@ G_M41435_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #18
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 ldr x1, [fp, #0x38] // [V03 loc2] ; gcrRegs +[x1] movn w0, #2
+ ; byrRegs -[x0]
movz x2, #0xD1FFAB1E // code for <unknown method> movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32

+0 (0.00%) : 2297.dasm - Xunit.Sdk.SerializationHelper:GetType(System.String,System.String):System.Type (Tier0)

@@ -43,9 +43,11 @@ G_M16960_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #15
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -73,9 +75,11 @@ G_M16960_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #15
- bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE
+ bl CORINFO_HELP_GETSHARED_GCSTATIC_BASE + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] @@ -127,7 +131,7 @@ G_M16960_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWSFAST
+ bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 str x0, [fp, #0x60] // [V05 tmp1] @@ -148,7 +152,7 @@ G_M16960_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWSFAST
+ bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 str x0, [fp, #0x58] // [V06 tmp2]

+48 (+33.33%) : 7392.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,88 +9,109 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T02] ( 5, 4.36) long -> x1 single-def -; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T01] ( 7, 7 ) ref -> x0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V00 this [V00,T06] ( 3, 3 ) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T01] ( 7, 5.72) long -> x19 single-def +; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T02] ( 7, 7 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T00] ( 4, 8 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T07] ( 3, 4 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 4 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T04] ( 3, 5.60) long -> x0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable" +;* V12 rat3 [V12,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat4 [V13,T05] ( 3, 5.60) long -> x0 "spilling expr" +; V14 rat5 [V14,T08] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07 - ldr x0, [x1, #0x38]
+ cbnz x0, G_M58319_IG10 + ldr x0, [x19, #0x38]
; gcrRegs -[x0]
- ldr x2, [x0, #0x08] - cmp x2, #24
+ ldr x1, [x0, #0x08] + cmp x1, #24
ble G_M58319_IG05 ;; size=24 bbWeight=1 PerfScore 11.50
-G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
ldr x0, [x0, #0x18] cbz x0, G_M58319_IG05 ;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M58319_IG06: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M58319_IG08 + ;; size=36 bbWeight=1 PerfScore 11.00 +G_M58319_IG07: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M58319_IG08: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M58319_IG09: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=1 PerfScore 7.00 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=1 PerfScore 3.50 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 144, prolog size 20, PerfScore 33.92, instruction count 36, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 192, prolog size 20, PerfScore 45.20, instruction count 48, allocated bytes for code 192 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -101,7 +122,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -109,9 +130,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+33.33%) : 8504.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,88 +9,109 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T02] ( 5, 4.36) long -> x1 single-def -; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T01] ( 7, 7 ) ref -> x0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V00 this [V00,T06] ( 3, 3 ) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T01] ( 7, 5.72) long -> x19 single-def +; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T02] ( 7, 7 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T00] ( 4, 8 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T07] ( 3, 4 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 4 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T04] ( 3, 5.60) long -> x0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable" +;* V12 rat3 [V12,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat4 [V13,T05] ( 3, 5.60) long -> x0 "spilling expr" +; V14 rat5 [V14,T08] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07 - ldr x0, [x1, #0x38]
+ cbnz x0, G_M58319_IG10 + ldr x0, [x19, #0x38]
; gcrRegs -[x0]
- ldr x2, [x0, #0x08] - cmp x2, #24
+ ldr x1, [x0, #0x08] + cmp x1, #24
ble G_M58319_IG05 ;; size=24 bbWeight=1 PerfScore 11.50
-G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
ldr x0, [x0, #0x18] cbz x0, G_M58319_IG05 ;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M58319_IG06: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M58319_IG08 + ;; size=36 bbWeight=1 PerfScore 11.00 +G_M58319_IG07: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M58319_IG08: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M58319_IG09: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=1 PerfScore 7.00 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=1 PerfScore 3.50 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 144, prolog size 20, PerfScore 33.92, instruction count 36, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 192, prolog size 20, PerfScore 45.20, instruction count 48, allocated bytes for code 192 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -101,7 +122,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -109,9 +130,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+48 (+33.33%) : 8644.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCacheSystem.__Canon:System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

@@ -9,88 +9,109 @@ ; 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 -> x20 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> -; V01 TypeCtx [V01,T02] ( 5, 4.36) long -> x1 single-def -; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T01] ( 7, 7 ) ref -> x0 class-hnd <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V00 this [V00,T06] ( 3, 3 ) ref -> x21 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache> +; V01 TypeCtx [V01,T01] ( 7, 5.72) long -> x19 single-def +; V02 arg1 [V02,T03] ( 4, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T02] ( 7, 7 ) ref -> x0 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 -> x21 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
+; V06 tmp1 [V06,T00] ( 4, 8 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 rat0 [V09,T07] ( 3, 4 ) long -> x0 "runtime lookup"
+; V09 rat0 [V09,T09] ( 3, 4 ) long -> x0 "runtime lookup"
; V10 rat1 [V10,T04] ( 3, 5.60) long -> x0 "spilling expr"
-; V11 rat2 [V11,T06] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
+; V11 rat2 [V11,T07] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable" +;* V12 rat3 [V12,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat4 [V13,T05] ( 3, 5.60) long -> x0 "spilling expr" +; V14 rat5 [V14,T08] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M58319_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x1, [fp, #0x10] - mov x20, x0 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M58319_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - ldr x0, [x19]
+ str x1, [fp, #0x18] + mov x21, x0 + ; gcrRegs +[x21] + mov x19, x1 + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M58319_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x20]
; gcrRegs +[x0]
- cbnz x0, G_M58319_IG07 - ldr x0, [x1, #0x38]
+ cbnz x0, G_M58319_IG10 + ldr x0, [x19, #0x38]
; gcrRegs -[x0]
- ldr x2, [x0, #0x08] - cmp x2, #24
+ ldr x1, [x0, #0x08] + cmp x1, #24
ble G_M58319_IG05 ;; size=24 bbWeight=1 PerfScore 11.50
-G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M58319_IG03: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz
ldr x0, [x0, #0x18] cbz x0, G_M58319_IG05 ;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M58319_IG04: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref
b G_M58319_IG06 ;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - mov x0, x1
+G_M58319_IG05: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.36 PerfScore 1.08
-G_M58319_IG06: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - bl CORINFO_HELP_NEWSFAST
+G_M58319_IG06: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - add x14, x21, #16
+ mov x22, x0 + ; gcrRegs +[x22] + add x14, x22, #16
; byrRegs +[x14]
- mov x15, x20
+ mov x15, x21
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x0 x15 x20]
+ ; gcrRegs -[x0 x15 x21]
; byrRegs -[x14]
+ ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #32 + ble G_M58319_IG08 + ;; size=36 bbWeight=1 PerfScore 11.00 +G_M58319_IG07: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref, isz + ldr x0, [x0, #0x20] + cbnz x0, G_M58319_IG09 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M58319_IG08: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref
mov x0, x19
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M58319_IG09: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=100000 {x20}, byref + mov x0, x20
; byrRegs +[x0]
- mov x1, x21
+ mov x1, x22
; gcrRegs +[x1] mov x2, xzr bl <unknown method> ; gcrRegs -[x1] +[x0]
- ; byrRegs -[x0 x19]
+ ; byrRegs -[x0 x20]
cmp x0, #0
- csel x0, x0, x21, ne - ;; size=44 bbWeight=1 PerfScore 7.00 -G_M58319_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x21] - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ csel x0, x0, x22, ne + ;; size=24 bbWeight=1 PerfScore 3.50 +G_M58319_IG10: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x22] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 144, prolog size 20, PerfScore 33.92, instruction count 36, allocated bytes for code 144 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
+; Total bytes of code 192, prolog size 20, PerfScore 45.20, instruction count 48, allocated bytes for code 192 (MethodHash=863b1c30) for method System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
; ============================================================ Unwind Info: @@ -101,7 +122,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 36 (0x00024) Actual length = 144 (0x000090)
+ Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -109,9 +130,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

librariestestsnotieredcompilation.run.windows.arm64.Release.mch

-20 (-20.83%) : 2782.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 -> x1 class-hnd single-def <System.Reflection.PropertyInfo>
+; V01 arg1 [V01,T00] ( 3, 3 ) ref -> x1 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 -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <<unknown class>>
+; V03 tmp1 [V03,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 0 @@ -21,7 +19,7 @@ G_M28645_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x10]! mov fp, sp ;; size=8 bbWeight=1 PerfScore 1.50
-G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1] mov x0, x1 ; gcrRegs +[x0] @@ -37,28 +35,19 @@ G_M28645_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byre blr x3 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M28645_IG05 - ;; size=48 bbWeight=1 PerfScore 9.50 -G_M28645_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M28645_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M28645_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M28645_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=1 PerfScore 11.00 +G_M28645_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 96, prolog size 8, PerfScore 14.69, instruction count 24, allocated bytes for code 96 (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 76, prolog size 8, PerfScore 14.50, instruction count 19, allocated bytes for code 76 (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: @@ -69,7 +58,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 24 (0x00018) Actual length = 96 (0x000060)
+ Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-32 (-9.41%) : 3042.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)

@@ -12,11 +12,9 @@ ; V01 arg1 [V01,T02] ( 4, 3.50) byref -> x21 single-def ; V02 arg2 [V02,T01] ( 5, 3.50) byref -> x20 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 -> x0 "Inline return value spill temp"
+; V04 tmp1 [V04,T03] ( 3, 1.50) ubyte -> x0 "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 -> [fp+0x10] 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) long -> x1 "fgMakeTemp is creating a new local variable" -; V08 tmp5 [V08,T03] ( 3, 2.25) ref -> x15 class-hnd "spilling QMark2" <<unknown class>>
+; V06 tmp3 [V06 ] ( 4, 2 ) ref -> [fp+0x10] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.Object>
; ; Lcl frame size = 8 @@ -66,7 +64,7 @@ G_M30064_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=300000 {x20 blr x4 ; gcrRegs -[x1] ; byrRegs -[x3]
- cbz w0, G_M30064_IG10
+ cbz w0, G_M30064_IG07
;; size=104 bbWeight=1 PerfScore 22.00 G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=300000 {x20 x21}, byref, isz ldr x0, [x19, #0x20] @@ -81,80 +79,61 @@ G_M30064_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=300000 { ldr x3, [x11] blr x3 ; gcrRegs -[x0 x19]
- cbz w0, G_M30064_IG07
+ cbz w0, G_M30064_IG04
ldr x1, [fp, #0x10] // [V06 tmp3] ; gcrRegs +[x1] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_ISINSTANCEOFARRAY
+ bl CORINFO_HELP_ISINSTANCEOFINTERFACE
; gcrRegs -[x1] +[x0]
- cbz x0, G_M30064_IG07 - ldr x15, [fp, #0x10] // [V06 tmp3] - ; gcrRegs +[x15] - mov x0, x15 - cbz x0, G_M30064_IG06 - ;; size=80 bbWeight=0.50 PerfScore 10.25 -G_M30064_IG04: ; bbWeight=0.25, gcrefRegs=8000 {x15}, byrefRegs=300000 {x20 x21}, byref, isz - ; gcrRegs -[x0] - ldr x0, [fp, #0x10] // [V06 tmp3] - ; gcrRegs +[x0] - ldr x0, [x0] - ; gcrRegs -[x0] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - cmp x0, x1 - beq G_M30064_IG06 - ;; size=28 bbWeight=0.25 PerfScore 2.00 -G_M30064_IG05: ; bbWeight=0.12, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref - ; gcrRegs -[x15] - mov x0, x1
+ cbz x0, G_M30064_IG04
ldr x1, [fp, #0x10] // [V06 tmp3] ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] mov x15, x0 ; gcrRegs +[x15]
- ;; size=16 bbWeight=0.12 PerfScore 0.50 -G_M30064_IG06: ; bbWeight=0.50, gcrefRegs=8000 {x15}, byrefRegs=300000 {x20 x21}, byref - ; gcrRegs -[x0]
mov x14, x20 ; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
; byrRegs -[x14] mov w0, #1
- b G_M30064_IG08 - ;; size=16 bbWeight=0.50 PerfScore 1.50 -G_M30064_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref
+ b G_M30064_IG05 + ;; size=108 bbWeight=0.50 PerfScore 12.50 +G_M30064_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref
str xzr, [x20] mov w0, wzr ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M30064_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref, isz
+G_M30064_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, byref, isz
str xzr, [fp, #0x10] // [V06 tmp3]
- cbz w0, G_M30064_IG10
+ cbz w0, G_M30064_IG07
mov w0, #1 ;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M30064_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M30064_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M30064_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, gcvars, byref
+G_M30064_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=300000 {x20 x21}, gcvars, byref
str xzr, [x21] str xzr, [x20] mov w0, wzr ;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M30064_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M30064_IG08: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 340, prolog size 20, PerfScore 50.50, instruction count 85, allocated bytes for code 340 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
+; Total bytes of code 308, prolog size 20, PerfScore 48.75, instruction count 77, allocated bytes for code 308 (MethodHash=d8648a8f) for method Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
; ============================================================ Unwind Info: @@ -165,7 +144,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 85 (0x00055) Actual length = 340 (0x000154)
+ Function Length : 77 (0x0004d) Actual length = 308 (0x000134)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-8 (-7.41%) : 2073.dasm - InterfaceForwarder:GetInt():int:this (FullOpts)

@@ -7,12 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <InterfaceForwarder>
+; V00 this [V00,T00] ( 3, 3 ) ref -> x0 this class-hnd single-def <InterfaceForwarder>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V02 tmp1 [V02,T04] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" -; V03 tmp2 [V03,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" -; V04 tmp3 [V04,T02] ( 2, 4 ) ref -> x0 single-def "argument with side effect" -; V05 cse0 [V05,T03] ( 3, 3 ) long -> x19 "CSE - aggressive"
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x0 single-def "argument with side effect" +; V03 tmp2 [V03,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V04 tmp3 [V04,T03] ( 2, 4 ) ref -> x0 single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,20 +20,18 @@ G_M16792_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp
- mov x19, x0 - ; gcrRegs +[x19] - ;; size=16 bbWeight=1 PerfScore 3.00 -G_M16792_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x1, x19
+ ;; size=12 bbWeight=1 PerfScore 2.50 +G_M16792_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref + ; gcrRegs +[x0] + mov x1, x0
; gcrRegs +[x1] movz x0, #0xD1FFAB1E
+ ; gcrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_CHKCASTINTERFACE
+ bl CORINFO_HELP_ISINSTANCEOFANY
; gcrRegs -[x1] +[x0]
- mov x0, x19
movz x19, #0xD1FFAB1E // code for <unknown method>
- ; gcrRegs -[x19]
movk x19, #0xD1FFAB1E LSL #16 movk x19, #0xD1FFAB1E LSL #32 mov x11, x19 @@ -45,19 +43,19 @@ G_M16792_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_CHKCASTINTERFACE
+ bl CORINFO_HELP_ISINSTANCEOFANY
; gcrRegs -[x1] +[x0] add x11, x19, #8 ldr wzr, [x0] ldr x1, [x11]
- ;; size=80 bbWeight=1 PerfScore 19.00
+ ;; size=76 bbWeight=1 PerfScore 18.50
G_M16792_IG03: ; bbWeight=1, epilog, nogc, extend ldr x19, [sp, #0x18] ldp fp, lr, [sp], #0x20 br x1 ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 108, prolog size 12, PerfScore 26.00, instruction count 27, allocated bytes for code 108 (MethodHash=d59cbe67) for method InterfaceForwarder:GetInt():int:this (FullOpts)
+; Total bytes of code 100, prolog size 12, PerfScore 25.00, instruction count 25, allocated bytes for code 100 (MethodHash=d59cbe67) for method InterfaceForwarder:GetInt():int:this (FullOpts)
; ============================================================ Unwind Info: @@ -68,7 +66,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 25 (0x00019) Actual length = 100 (0x000064)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+44 (+33.33%) : 9143.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:CollectSystem.__Canon:Microsoft.CodeAnalysis.IncrementalValueProvider1[System.Collections.Immutable.ImmutableArray1[System.__Canon]] (FullOpts)

@@ -8,55 +8,58 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x21 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.BatchNode`1[System.__Canon]>
;* V04 tmp2 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "NewObj constructor temp" <Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]> ;* V06 tmp4 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V07 tmp5 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V08 tmp6 [V08,T04] ( 2, 2 ) ref -> x19 single-def "field V01.Node (fldOffset=0x0)" P-INDEP -; V09 tmp7 [V09,T05] ( 2, 2 ) ubyte -> x20 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V10 tmp8 [V10,T06] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP -; V11 tmp9 [V11,T07] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP -; V12 rat0 [V12,T03] ( 3, 4 ) long -> x1 "runtime lookup" -; V13 rat1 [V13,T02] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+; V08 tmp6 [V08,T06] ( 2, 2 ) ref -> x20 single-def "field V01.Node (fldOffset=0x0)" P-INDEP +; V09 tmp7 [V09,T07] ( 2, 2 ) ubyte -> x21 single-def "field V01.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> x0 single-def "field V05.Node (fldOffset=0x0)" P-INDEP +; V11 tmp9 [V11,T09] ( 2, 2 ) ubyte -> x1 "field V05.CatchAnalyzerExceptions (fldOffset=0x8)" P-INDEP +; V12 rat0 [V12,T05] ( 3, 4 ) long -> x0 "runtime lookup" +; V13 rat1 [V13,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +;* V14 rat2 [V14,T10] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V15 rat3 [V15,T03] ( 3, 5.60) long -> x0 "spilling expr" +; V16 rat4 [V16,T04] ( 2, 3.20) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M15345_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x18] - str x21, [sp, #0x28]
+ stp fp, lr, [sp, #-0x40]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30]
mov fp, sp
- str x0, [fp, #0x10] - mov x19, x1 - ; gcrRegs +[x19] - mov w20, w2 - ;; size=28 bbWeight=1 PerfScore 5.50 -G_M15345_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x1, [x0, #0x38] - ldr x1, [x1, #0x10] - cbz x1, G_M15345_IG04
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20] + mov w21, w2 + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M15345_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M15345_IG04
;; size=12 bbWeight=1 PerfScore 7.00
-G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG03: ; bbWeight=0.80, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
b G_M15345_IG05 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M15345_IG04: ; bbWeight=0.20, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - mov x1, x0
+ bl CORINFO_HELP_MEMCPY
;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x1 - bl CORINFO_HELP_NEWSFAST
+G_M15345_IG05: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + bl CORINFO_HELP_NEWFAST_MAYBEFROZEN
; gcrRegs +[x0]
- mov x21, x0 - ; gcrRegs +[x21] - mov x1, x19
+ mov x22, x0 + ; gcrRegs +[x22] + mov x1, x20
; gcrRegs +[x1] mov x2, xzr mov x3, xzr @@ -65,19 +68,36 @@ G_M15345_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] blr x4
- ; gcrRegs -[x0-x1 x19] - mov x0, x21
+ ; gcrRegs -[x0-x1 x20] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M15345_IG07 + ;; size=56 bbWeight=1 PerfScore 16.00 +G_M15345_IG06: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbnz x0, G_M15345_IG08 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M15345_IG07: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M15345_IG08: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + mov x0, x22
; gcrRegs +[x0]
- uxtb w1, w20 - ;; size=52 bbWeight=1 PerfScore 10.00 -G_M15345_IG06: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x30
+ uxtb w1, w21 + ;; size=8 bbWeight=1 PerfScore 1.00 +G_M15345_IG09: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x40
ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00
+ ;; size=16 bbWeight=1 PerfScore 4.00
-; Total bytes of code 132, prolog size 20, PerfScore 28.90, instruction count 33, allocated bytes for code 132 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
+; Total bytes of code 176, prolog size 20, PerfScore 39.68, instruction count 44, allocated bytes for code 176 (MethodHash=59b2c40e) for method Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:Collect[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon]):Microsoft.CodeAnalysis.IncrementalValueProvider`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
; ============================================================ Unwind Info: @@ -88,7 +108,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 33 (0x00021) Actual length = 132 (0x000084)
+ Function Length : 44 (0x0002c) Actual length = 176 (0x0000b0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -96,9 +116,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] - C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]! + E4 end
E4 end E4 end

+44 (+37.93%) : 8457.dasm - System.Linq.ImmutableArrayExtensions:WhereSystem.__Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -8,70 +8,87 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.36) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,ubyte]>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> x20 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 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V06 tmp3 [V06,T03] ( 3, 3 ) ref -> x20 single-def "field V01.array (fldOffset=0x0)" P-INDEP -; V07 tmp4 [V07,T06] ( 2, 4 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T01] ( 3, 5.60) long -> x1 "spilling expr" -; V10 rat2 [V10,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T04] ( 3, 3 ) ref -> x21 single-def "field V01.array (fldOffset=0x0)" P-INDEP +; V07 tmp4 [V07,T07] ( 2, 4 ) long -> x0 "argument with side effect" +;* V08 rat0 [V08,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V09 rat1 [V09,T01] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V10 rat2 [V10,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V11 rat3 [V11,T02] ( 3, 5.60) long -> x0 "spilling expr" +; V12 rat4 [V12,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M59151_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18] - mov x20, x1
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2
; gcrRegs +[x20]
- mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M59151_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr wzr, [x20, #0x08] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x08] - cmp x2, #24 - ble G_M59151_IG05 - ;; size=20 bbWeight=1 PerfScore 10.50 -G_M59151_IG03: ; bbWeight=0.80, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x2, [x1, #0x18] - cbz x2, G_M59151_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M59151_IG04: ; bbWeight=0.64, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x0, x2 - b G_M59151_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M59151_IG05: ; bbWeight=0.36, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+ ;; size=32 bbWeight=1 PerfScore 6.00 +G_M59151_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M59151_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M59151_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M59151_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M59151_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr wzr, [x21, #0x08] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x08] + cmp x1, #24 + ble G_M59151_IG07 + ;; size=20 bbWeight=1 PerfScore 10.50 +G_M59151_IG05: ; bbWeight=0.80, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x18] + cbz x0, G_M59151_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M59151_IG06: ; bbWeight=0.64, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M59151_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M59151_IG07: ; bbWeight=0.36, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M59151_IG08: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x1, x21
; gcrRegs +[x1]
- mov x2, x19
+ mov x2, x20
; gcrRegs +[x2] movz x3, #0xD1FFAB1E // code for 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] movk x3, #0xD1FFAB1E LSL #16 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x1-x2 x19-x20] +[x0]
+ ; gcrRegs -[x1-x2 x20-x21] +[x0]
;; size=28 bbWeight=1 PerfScore 6.50
-G_M59151_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59151_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 116, prolog size 16, PerfScore 29.56, instruction count 29, allocated bytes for code 116 (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 160, prolog size 20, PerfScore 40.52, instruction count 40, allocated bytes for code 160 (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: @@ -82,7 +99,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
+ Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -90,10 +107,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] + C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
- E4 end - E4 end

+44 (+37.93%) : 4438.dasm - System.Linq.ImmutableArrayExtensions:SelectSystem.Canon,System.Canon:System.Collections.Generic.IEnumerable`1System.__Canon

@@ -8,70 +8,87 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T00] ( 5, 4.36) long -> x0 single-def
+; V00 TypeCtx [V00,T00] ( 7, 5.56) long -> x19 single-def
;* V01 arg0 [V01 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
-; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x19 class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
+; V02 arg1 [V02,T03] ( 3, 3 ) ref -> x20 class-hnd single-def <System.Func`2[System.__Canon,System.__Canon]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V06 tmp3 [V06,T03] ( 3, 3 ) ref -> x20 single-def "field V01.array (fldOffset=0x0)" P-INDEP -; V07 tmp4 [V07,T06] ( 2, 4 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 4 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T01] ( 3, 5.60) long -> x1 "spilling expr" -; V10 rat2 [V10,T04] ( 3, 4.48) long -> x2 "fgMakeTemp is creating a new local variable"
+; V06 tmp3 [V06,T04] ( 3, 3 ) ref -> x21 single-def "field V01.array (fldOffset=0x0)" P-INDEP +; V07 tmp4 [V07,T07] ( 2, 4 ) long -> x0 "argument with side effect" +;* V08 rat0 [V08,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V09 rat1 [V09,T01] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V10 rat2 [V10,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V11 rat3 [V11,T02] ( 3, 5.60) long -> x0 "spilling expr" +; V12 rat4 [V12,T05] ( 3, 4.48) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M61273_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp
- str x0, [fp, #0x18] - mov x20, x1
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2
; gcrRegs +[x20]
- mov x19, x2 - ; gcrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M61273_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr wzr, [x20, #0x08] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x10] - cmp x2, #32 - ble G_M61273_IG05 - ;; size=20 bbWeight=1 PerfScore 10.50 -G_M61273_IG03: ; bbWeight=0.80, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x2, [x1, #0x20] - cbz x2, G_M61273_IG05 - ;; size=8 bbWeight=0.80 PerfScore 3.20 -G_M61273_IG04: ; bbWeight=0.64, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x0, x2 - b G_M61273_IG06 - ;; size=8 bbWeight=0.64 PerfScore 0.96 -G_M61273_IG05: ; bbWeight=0.36, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+ ;; size=32 bbWeight=1 PerfScore 6.00 +G_M61273_IG02: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0, #0x18] + cbnz x0, G_M61273_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M61273_IG03: ; bbWeight=0.20, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD - ;; size=16 bbWeight=0.36 PerfScore 0.90 -G_M61273_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - mov x1, x20
+ bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M61273_IG04: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr wzr, [x21, #0x08] + ldr x0, [x19, #0x38] + ldr x1, [x0, #0x10] + cmp x1, #32 + ble G_M61273_IG07 + ;; size=20 bbWeight=1 PerfScore 10.50 +G_M61273_IG05: ; bbWeight=0.80, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref, isz + ldr x0, [x0, #0x20] + cbz x0, G_M61273_IG07 + ;; size=8 bbWeight=0.80 PerfScore 3.20 +G_M61273_IG06: ; bbWeight=0.64, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + b G_M61273_IG08 + ;; size=4 bbWeight=0.64 PerfScore 0.64 +G_M61273_IG07: ; bbWeight=0.36, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ;; size=20 bbWeight=0.36 PerfScore 1.08 +G_M61273_IG08: ; bbWeight=1, gcrefRegs=300000 {x20 x21}, byrefRegs=0000 {}, byref + mov x1, x21
; gcrRegs +[x1]
- mov x2, x19
+ mov x2, x20
; gcrRegs +[x2] movz x3, #0xD1FFAB1E // code for <unknown method> movk x3, #0xD1FFAB1E LSL #16 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x1-x2 x19-x20] +[x0]
+ ; gcrRegs -[x1-x2 x20-x21] +[x0]
;; size=28 bbWeight=1 PerfScore 6.50
-G_M61273_IG07: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M61273_IG09: ; bbWeight=1, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 116, prolog size 16, PerfScore 29.56, instruction count 29, allocated bytes for code 116 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
+; Total bytes of code 160, prolog size 20, PerfScore 40.52, instruction count 40, allocated bytes for code 160 (MethodHash=f31810a6) for method System.Linq.ImmutableArrayExtensions:Select[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon]):System.Collections.Generic.IEnumerable`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -82,7 +99,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 29 (0x0001d) Actual length = 116 (0x000074)
+ Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -90,10 +107,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
+ D0 85 save_reg X#2 Z#5 (0x05); str x21, [sp, #40] + C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
- E4 end - E4 end

realworld.run.windows.arm64.checked.mch

-36 (-21.43%) : 14240.dasm - Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)

@@ -9,88 +9,75 @@ ; Final local variable assignments ; ;# V00 OutArgs [V00 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V01 tmp1 [V01,T00] ( 7, 14 ) ref -> x0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> -; V02 tmp2 [V02,T01] ( 7, 14 ) ref -> x0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> -; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive" -; V04 cse1 [V04,T03] ( 3, 3 ) long -> x20 "CSE - aggressive"
+; V01 tmp1 [V01,T00] ( 7, 14 ) ref -> x15 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> +; V02 tmp2 [V02,T01] ( 5, 10 ) ref -> x0 class-hnd exact single-def "NewObj constructor temp" <Microsoft.Win32.SafeHandles.SafeChainEngineHandle> +; V03 cse0 [V03,T02] ( 3, 3 ) ref -> x0 "CSE - aggressive" +; V04 cse1 [V04,T03] ( 3, 3 ) byref -> x1 "CSE - aggressive" +; V05 cse2 [V05,T04] ( 3, 3 ) byref -> x2 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3, 3 ) long -> x3 "CSE - aggressive"
; ; Lcl frame size = 0 G_M11709_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x20]! - stp x19, x20, [sp, #0x10]
+ stp fp, lr, [sp, #-0x10]!
mov fp, sp
- ;; size=12 bbWeight=1 PerfScore 2.50
+ ;; size=8 bbWeight=1 PerfScore 1.50
G_M11709_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- movz x19, #0xD1FFAB1E - movk x19, #0xD1FFAB1E LSL #16 - movk x19, #0xD1FFAB1E LSL #32 - mov x0, x19 - bl CORINFO_HELP_NEWFAST
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_DBLROUND
; gcrRegs +[x0]
- str xzr, [x0, #0x10] - add x14, x0, #24 - ; byrRegs +[x14] - mov w15, #4 - stlr w15, [x14]
+ mov x15, x0 + ; gcrRegs +[x15] + str xzr, [x15, #0x10] + add x1, x15, #24 + ; byrRegs +[x1] + mov w14, #4 + stlr w14, [x1] + mov w14, #1 + strb w14, [x15, #0x1C] + add x2, x15, #29 + ; byrRegs +[x2] + stlrb w14, [x2] + str x14, [x15, #0x10] + movz x3, #0xD1FFAB1E // data for <unknown class>:<unknown field> + movk x3, #0xD1FFAB1E LSL #16 + movk x3, #0xD1FFAB1E LSL #32 + mov x14, x3 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + str xzr, [x0, #0x10] + mov w14, #4 + stlr w14, [x1]
mov w14, #1
- ; byrRegs -[x14]
strb w14, [x0, #0x1C]
- add x14, x0, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str x15, [x0, #0x10] - movz x20, #0xD1FFAB1E // data for <unknown class>:<unknown field> - movk x20, #0xD1FFAB1E LSL #16 - movk x20, #0xD1FFAB1E LSL #32 - mov x14, x20 - ; byrRegs -[x14]
+ stlrb w14, [x2] + str xzr, [x0, #0x10] + add x14, x3, #8
mov x15, x0 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15]
- mov x0, x19 - bl CORINFO_HELP_NEWFAST - ; gcrRegs +[x0] - str xzr, [x0, #0x10] - add x14, x0, #24 - ; byrRegs +[x14] - mov w15, #4 - stlr w15, [x14] - mov w14, #1 - ; byrRegs -[x14] - strb w14, [x0, #0x1C] - add x14, x0, #29 - ; byrRegs +[x14] - mov w15, #1 - stlrb w15, [x14] - str xzr, [x0, #0x10] - add x14, x20, #8 - ; byrRegs -[x14] - mov x15, x0 - ; gcrRegs +[x15] - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x0 x15] - ;; size=144 bbWeight=1 PerfScore 25.00
+ ; byrRegs -[x1-x2] + ;; size=116 bbWeight=1 PerfScore 21.00
G_M11709_IG03: ; bbWeight=1, epilog, nogc, extend
- ldp x19, x20, [sp, #0x10] - ldp fp, lr, [sp], #0x20
+ ldp fp, lr, [sp], #0x10
ret lr
- ;; size=12 bbWeight=1 PerfScore 3.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 168, prolog size 12, PerfScore 30.50, instruction count 42, allocated bytes for code 168 (MethodHash=991dd242) for method Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
+; Total bytes of code 132, prolog size 8, PerfScore 24.50, instruction count 33, allocated bytes for code 132 (MethodHash=991dd242) for method Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 2
+ Code Words : 1
Epilog Count : 1 E bit : 0 X bit : 0 Vers : 0
- Function Length : 42 (0x0002a) Actual length = 168 (0x0000a8)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -98,10 +85,7 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- C8 02 save_regp X#0 Z#2 (0x02); stp x19, x20, [sp, #16] - 83 save_fplr_x #3 (0x03); stp fp, lr, [sp, #-32]! - E4 end - E4 end
+ 81 save_fplr_x #1 (0x01); stp fp, lr, [sp, #-16]!
E4 end E4 end

-24 (-4.51%) : 85.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.Canon]:GetListByName(ulong,int,ulong,int,int,int):System.Canon[]:this (FullOpts)

@@ -9,23 +9,23 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 10, 6.50) ref -> x19 this class-hnd single-def <System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]>
-; V01 arg1 [V01,T09] ( 3, 2.50) long -> x1 single-def -; V02 arg2 [V02,T05] ( 4, 3.50) int -> x2 single-def -; V03 arg3 [V03,T06] ( 4, 3.50) long -> x21 single-def -; V04 arg4 [V04,T07] ( 4, 3.50) int -> x22 single-def -; V05 arg5 [V05,T08] ( 3, 3 ) int -> x23 single-def -; V06 arg6 [V06,T02] ( 4, 4 ) int -> x20 single-def
+; V01 arg1 [V01,T08] ( 3, 2.50) long -> x1 single-def +; V02 arg2 [V02,T04] ( 4, 3.50) int -> x2 single-def +; V03 arg3 [V03,T05] ( 4, 3.50) long -> x21 single-def +; V04 arg4 [V04,T06] ( 4, 3.50) int -> x22 single-def +; V05 arg5 [V05,T07] ( 3, 3 ) int -> x23 single-def +; V06 arg6 [V06,T01] ( 4, 4 ) int -> x20 single-def
; V07 loc0 [V07 ] ( 10, 6.50) struct (24) [fp+0x18] do-not-enreg[XSF] addr-exposed ld-addr-op <System.RuntimeType+RuntimeTypeCache+Filter>
-; V08 loc1 [V08,T03] ( 10, 5.62) ref -> x21 class-hnd <<unknown class>>
+; V08 loc1 [V08,T03] ( 9, 5.50) ref -> x21 class-hnd <<unknown class>>
;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V10 tmp1 [V10,T11] ( 4, 2.75) long -> x1 "spilling helperCall" -;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp3 [V12,T01] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon[]> -;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> -; V14 tmp5 [V14,T12] ( 2, 2 ) long -> x21 "field V13.m_pStringHeap (fldOffset=0x0)" P-INDEP -; V15 tmp6 [V15,T13] ( 2, 2 ) int -> x22 "field V13.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP -; V16 rat0 [V16,T10] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V17 rat1 [V17,T04] ( 3, 5.60) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V10 tmp1 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp2 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.MdUtf8String> +; V12 tmp3 [V12,T12] ( 2, 2 ) long -> x21 "field V11.m_pStringHeap (fldOffset=0x0)" P-INDEP +; V13 tmp4 [V13,T13] ( 2, 2 ) int -> x22 "field V11.m_StringHeapByteLength (fldOffset=0x8)" P-INDEP +; V14 tmp5 [V14,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V15 rat0 [V15,T09] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V16 rat1 [V16,T10] ( 3, 4 ) long -> x0 "runtime lookup" +; V17 rat2 [V17,T02] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 40 @@ -192,38 +192,26 @@ G_M19047_IG13: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 { ldr x0, [x19] ldr x1, [x0, #0x38] ldr x1, [x1]
- ldr x1, [x1, #0x18] - cbz x1, G_M19047_IG15
+ ldr x2, [x1, #0x18] + cbz x2, G_M19047_IG15
;; size=20 bbWeight=1 PerfScore 13.00 G_M19047_IG14: ; bbWeight=0.80, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M19047_IG16
- ;; size=4 bbWeight=0.80 PerfScore 0.80
+ ;; size=8 bbWeight=0.80 PerfScore 1.20
G_M19047_IG15: ; bbWeight=0.20, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_CLASS - mov x1, x0 - ;; size=20 bbWeight=0.20 PerfScore 0.60 -G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref, isz - mov x0, x21 - ; gcrRegs +[x0] - cbz x0, G_M19047_IG19 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M19047_IG17: ; bbWeight=0.25, gcrefRegs=280001 {x0 x19 x21}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - cmp x2, x1 - beq G_M19047_IG19 - ;; size=12 bbWeight=0.25 PerfScore 1.12 -G_M19047_IG18: ; bbWeight=0.12, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ bl CORINFO_HELP_RUNTIMEHANDLE_METHOD_LOG + ;; size=16 bbWeight=0.20 PerfScore 0.50 +G_M19047_IG16: ; bbWeight=1, gcrefRegs=280000 {x19 x21}, byrefRegs=0000 {}, byref
mov x1, x21 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTARRAY
+ bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1 x21] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M19047_IG19: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M19047_IG17: ; bbWeight=1, epilog, nogc, extend
ldr x23, [sp, #0x58] ldp x21, x22, [sp, #0x48] ldp x19, x20, [sp, #0x38] @@ -239,7 +227,7 @@ RWD00 dd G_M19047_IG05 - G_M19047_IG02 dd G_M19047_IG10 - G_M19047_IG02
-; Total bytes of code 532, prolog size 24, PerfScore 81.02, instruction count 133, allocated bytes for code 532 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
+; Total bytes of code 508, prolog size 24, PerfScore 79.95, instruction count 127, allocated bytes for code 508 (MethodHash=02b3b598) for method System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
; ============================================================ Unwind Info: @@ -250,7 +238,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 133 (0x00085) Actual length = 532 (0x000214)
+ Function Length : 127 (0x0007f) Actual length = 508 (0x0001fc)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-20 (-3.70%) : 383.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object

@@ -10,23 +10,21 @@ ; ; V00 arg0 [V00,T00] ( 9, 6 ) ref -> x19 class-hnd single-def <System.RuntimeType> ; V01 arg1 [V01,T01] ( 8, 5 ) int -> x20 single-def
-;* V02 loc0 [V02,T12] ( 0, 0 ) ubyte -> zero-ref -; V03 loc1 [V03,T06] ( 3, 2 ) ubyte -> x21
+;* V02 loc0 [V02,T11] ( 0, 0 ) ubyte -> zero-ref +; V03 loc1 [V03,T04] ( 3, 2 ) ubyte -> x21
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Object[]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T05] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V07 tmp2 [V07,T13] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp3 [V08,T03] ( 5, 3.75) ref -> x0 class-hnd "spilling QMark2" <System.Object[]> -; V09 tmp4 [V09,T07] ( 3, 1.50) ref -> x0 -; V10 tmp5 [V10,T08] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> -; V11 tmp6 [V11,T04] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> -;* V12 tmp7 [V12,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> -;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> -;* V14 tmp9 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V15 tmp10 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 5, 5 ) ref -> x0 "Single return block return value" -; V17 cse0 [V17,T10] ( 3, 1.50) long -> x0 "CSE - moderate" -; V18 cse1 [V18,T09] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V06 tmp1 [V06,T06] ( 3, 1.50) ref -> x0 +; V07 tmp2 [V07,T07] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.RuntimeType+RuntimeTypeCache> +; V08 tmp3 [V08,T03] ( 4, 2 ) ref -> x20 class-hnd single-def "Inline stloc first use temp" <System.Object> +;* V09 tmp4 [V09,T10] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType+RuntimeTypeCache> +;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.RuntimeType+RuntimeTypeCache> +;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V13 tmp8 [V13,T02] ( 5, 5 ) ref -> x0 "Single return block return value" +; V14 tmp9 [V14,T05] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V15 cse0 [V15,T09] ( 3, 1.50) long -> x0 "CSE - moderate" +; V16 cse1 [V16,T08] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 8 @@ -94,7 +92,7 @@ G_M32569_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs +[x0] ; gcr arg pop 0 b G_M32569_IG07 @@ -105,16 +103,18 @@ G_M32569_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #27
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x1, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 ldr x0, [x1] ; gcrRegs +[x0]
+ ; byrRegs -[x0]
;; size=36 bbWeight=0.50 PerfScore 3.75 G_M32569_IG07: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=4 bbWeight=0.50 PerfScore 0.50 G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19] @@ -124,10 +124,10 @@ G_M32569_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_NEWARR_1_OBJ
+ bl CORINFO_HELP_NEWARR_1_MAYBEFROZEN
; gcrRegs -[x19] +[x0] ; gcr arg pop 0
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=32 bbWeight=0.50 PerfScore 3.00 G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] @@ -135,18 +135,20 @@ G_M32569_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #28
- bl CORINFO_HELP_CLASSINIT_SHARED_DYNAMICCLASS
+ bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE_DYNAMICCLASS + ; byrRegs +[x0]
; gcr arg pop 0 movz x0, #0xD1FFAB1E // data for <unknown class>:<unknown field>
+ ; byrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] ; gcrRegs +[x0]
- b G_M32569_IG19
+ b G_M32569_IG16
;; size=40 bbWeight=0.50 PerfScore 4.25 G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] +[x19]
- cbz w20, G_M32569_IG14
+ cbz w20, G_M32569_IG11
mov x0, x19 ; gcrRegs +[x0] mov w1, w20 @@ -159,43 +161,32 @@ G_M32569_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M32569_IG13 - ;; size=40 bbWeight=0.50 PerfScore 4.50 -G_M32569_IG11: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M32569_IG13 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M32569_IG12: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTARRAY
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTINTERFACE
; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref - b G_M32569_IG19 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ b G_M32569_IG16 + ;; size=56 bbWeight=0.50 PerfScore 5.75 +G_M32569_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x19] ldr x0, [x19, #0x10]
- cbz x0, G_M32569_IG16
+ cbz x0, G_M32569_IG13
bl <unknown method> ; gcrRegs +[x0] ; gcr arg pop 0 mov x20, x0 ; gcrRegs +[x20]
- cbz x20, G_M32569_IG16
+ cbz x20, G_M32569_IG13
ldr x0, [x20] ; gcrRegs -[x0] movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 cmp x0, x1
- beq G_M32569_IG15
+ beq G_M32569_IG12
movz x1, #8 movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -209,10 +200,10 @@ G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0 x19] ; gcr arg pop 0 ;; size=80 bbWeight=0.50 PerfScore 10.00
-G_M32569_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - b G_M32569_IG17
+G_M32569_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref + b G_M32569_IG14
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M32569_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x20] +[x19] mov x0, x19 ; gcrRegs +[x0] @@ -226,7 +217,7 @@ G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, mov x20, x0 ; gcrRegs +[x20] ;; size=28 bbWeight=0.50 PerfScore 3.25
-G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M32569_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] mov x0, x20 ; gcrRegs +[x0] @@ -236,14 +227,14 @@ G_M32569_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ldr x1, [x1] ldr wzr, [x0] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M32569_IG18: ; bbWeight=0.50, epilog, nogc, extend
+G_M32569_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x1 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M32569_IG16: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x20] ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -251,7 +242,7 @@ G_M32569_IG19: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 540, prolog size 24, PerfScore 64.94, instruction count 135, allocated bytes for code 540 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
+; Total bytes of code 520, prolog size 24, PerfScore 64.00, instruction count 130, allocated bytes for code 520 (MethodHash=915d80c6) for method System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
; ============================================================ Unwind Info: @@ -262,7 +253,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 135 (0x00087) Actual length = 540 (0x00021c)
+ Function Length : 130 (0x00082) Actual length = 520 (0x000208)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+21.28%) : 2049.dasm - Microsoft.FSharp.Collections.PrivateListHelpers:appendToFreshConsTailSystem.__Canon:Microsoft.FSharp.Collections.FSharpList`1System.__Canon

@@ -7,62 +7,78 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T09] ( 5, 7.80) long -> x20 single-def -; V01 arg0 [V01,T06] ( 5, 11 ) ref -> x19 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V00 TypeCtx [V00,T08] ( 7, 12.60) long -> x19 single-def +; V01 arg0 [V01,T09] ( 5, 11 ) ref -> x20 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
; V02 arg1 [V02,T02] ( 5, 18 ) ref -> x2 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 -> x21 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> -; V05 loc2 [V05,T11] ( 2, 8 ) ref -> x22 class-hnd <System.__Canon> -; V06 loc3 [V06,T07] ( 3, 12 ) ref -> x0 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
+; V04 loc1 [V04,T11] ( 2, 8 ) ref -> x21 class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> +; V05 loc2 [V05,T12] ( 2, 8 ) ref -> x22 class-hnd <System.__Canon> +; V06 loc3 [V06,T10] ( 3, 12 ) ref -> x0 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 ) long -> zero-ref "spilling helperCall"
+; V08 tmp1 [V08,T04] ( 3, 16 ) long -> x23 "spilling helperCall"
;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V10 tmp3 [V10,T00] ( 3, 24 ) long -> x23 "argument with side effect" -; V11 tmp4 [V11,T05] ( 2, 16 ) ref -> x2 "argument with side effect" -; V12 cse0 [V12,T08] ( 2, 8 ) long -> x23 "CSE - aggressive" -; V13 cse1 [V13,T03] ( 3, 20 ) ref -> x21 "CSE - aggressive" -; V14 rat0 [V14,T04] ( 3, 16 ) long -> x23 "runtime lookup" -; V15 rat1 [V15,T01] ( 3, 22.40) long -> x23 "fgMakeTemp is creating a new local variable"
+; V10 tmp3 [V10,T07] ( 2, 16 ) long -> x24 "argument with side effect" +; V11 tmp4 [V11,T06] ( 2, 16 ) ref -> x2 "argument with side effect" +; V12 cse0 [V12,T03] ( 3, 20 ) ref -> x21 "CSE - aggressive" +; V13 rat0 [V13,T00] ( 3, 22.40) long -> x23 "fgMakeTemp is creating a new local variable" +; V14 rat1 [V14,T05] ( 3, 16 ) long -> x24 "runtime lookup" +; V15 rat2 [V15,T01] ( 3, 22.40) long -> x24 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M63806_IG01: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]! - stp x19, x20, [sp, #0x18] - stp x21, x22, [sp, #0x28] - str x23, [sp, #0x38]
+ stp fp, lr, [sp, #-0x50]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30] + stp x23, x24, [sp, #0x40]
mov fp, sp
- str x0, [fp, #0x10] - mov x20, x0 - mov x19, x1 - ; gcrRegs +[x19]
+ str x0, [fp, #0x18] + mov x19, x0 + mov x20, x1 + ; gcrRegs +[x20]
;; size=32 bbWeight=8 PerfScore 52.00
-G_M63806_IG02: ; bbWeight=8, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG02: ; bbWeight=8, gcrefRegs=100004 {x2 x20}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[x2] ldr x21, [x2, #0x10] ; gcrRegs +[x21]
- cbz x21, G_M63806_IG07
+ cbz x21, G_M63806_IG10
;; size=8 bbWeight=8 PerfScore 32.00
-G_M63806_IG03: ; bbWeight=4, gcrefRegs=280004 {x2 x19 x21}, byrefRegs=0000 {}, byref, isz
+G_M63806_IG03: ; bbWeight=4, gcrefRegs=300004 {x2 x20 x21}, byrefRegs=0000 {}, byref, isz
ldr x22, [x2, #0x08] ; gcrRegs +[x22]
- ldr x0, [x20, #0x38]
+ ldr x0, [x19, #0x38]
ldr x23, [x0, #0x10] cbz x23, G_M63806_IG05 ;; size=16 bbWeight=4 PerfScore 40.00
-G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
+G_M63806_IG04: ; bbWeight=3.20, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref
; gcrRegs -[x2] b G_M63806_IG06 ;; size=4 bbWeight=3.20 PerfScore 3.20
-G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref - mov x0, x20
+G_M63806_IG05: ; bbWeight=0.80, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
mov x23, x0 ;; size=24 bbWeight=0.80 PerfScore 2.80
-G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=0000 {}, byref
+G_M63806_IG06: ; bbWeight=4, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref, isz + ldr x0, [x19, #0x38] + ldr x24, [x0, #0x10] + cbz x24, G_M63806_IG08 + ;; size=12 bbWeight=4 PerfScore 28.00 +G_M63806_IG07: ; bbWeight=3.20, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + b G_M63806_IG09 + ;; size=4 bbWeight=3.20 PerfScore 3.20 +G_M63806_IG08: ; bbWeight=0.80, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref + mov x0, x19 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + mov x24, x0 + ;; size=24 bbWeight=0.80 PerfScore 2.80 +G_M63806_IG09: ; bbWeight=4, gcrefRegs=700000 {x20 x21 x22}, byrefRegs=0000 {}, byref
mov x0, x23 movz x1, #0xD1FFAB1E // code for Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:get_Empty():Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] movk x1, #0xD1FFAB1E LSL #16 @@ -72,7 +88,7 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=00 ; gcrRegs +[x0] mov x2, x0 ; gcrRegs +[x2]
- mov x0, x23
+ mov x0, x24
; gcrRegs -[x0] mov x1, x22 ; gcrRegs +[x1] @@ -82,33 +98,33 @@ G_M63806_IG06: ; bbWeight=4, gcrefRegs=680000 {x19 x21 x22}, byrefRegs=00 ldr x3, [x3] blr x3 ; gcrRegs -[x1-x2 x22] +[x0]
- add x14, x19, #16
+ add x14, x20, #16
; byrRegs +[x14] mov x15, x0 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15 x19]
+ ; gcrRegs -[x15 x20]
; byrRegs -[x14] mov x2, x21 ; gcrRegs +[x2]
- mov x19, x0 - ; gcrRegs +[x19]
+ mov x20, x0 + ; gcrRegs +[x20]
b G_M63806_IG02 ;; size=80 bbWeight=4 PerfScore 68.00
-G_M63806_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M63806_IG10: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x2 x21]
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0] ;; size=4 bbWeight=1 PerfScore 0.50
-G_M63806_IG08: ; bbWeight=1, epilog, nogc, extend - ldr x23, [sp, #0x38] - ldp x21, x22, [sp, #0x28] - ldp x19, x20, [sp, #0x18] - ldp fp, lr, [sp], #0x40
+G_M63806_IG11: ; bbWeight=1, epilog, nogc, extend + ldp x23, x24, [sp, #0x40] + ldp x21, x22, [sp, #0x30] + ldp x19, x20, [sp, #0x20] + ldp fp, lr, [sp], #0x50
ret lr
- ;; size=20 bbWeight=1 PerfScore 6.00
+ ;; size=20 bbWeight=1 PerfScore 5.00
-; Total bytes of code 188, prolog size 24, PerfScore 204.50, instruction count 47, allocated bytes for code 188 (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 228, prolog size 24, PerfScore 237.50, instruction count 57, allocated bytes for code 228 (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,7 +135,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 47 (0x0002f) Actual length = 188 (0x0000bc)
+ Function Length : 57 (0x00039) Actual length = 228 (0x0000e4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -127,9 +143,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- D1 07 save_reg X#4 Z#7 (0x07); str x23, [sp, #56]
E6 save_next
- C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24] - 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ E6 save_next + C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32] + 89 save_fplr_x #9 (0x09); stp fp, lr, [sp, #-80]! + E4 end
E4 end

+44 (+32.35%) : 10612.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastVSystem.__Canon:Microsoft.FSharp.Core.FSharpValueOption`1System.__Canon

@@ -8,10 +8,10 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 5, 3.60) long -> x0 single-def
+; V00 TypeCtx [V00,T02] ( 7, 4.20) long -> x0 single-def
; V01 arg0 [V01,T01] ( 5, 14.50) ref -> x1 class-hnd <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]>
-; V03 loc1 [V03,T06] ( 2, 1 ) ref -> x0 class-hnd single-def <System.__Canon>
+; V03 loc1 [V03,T07] ( 2, 1 ) ref -> x19 class-hnd single-def <System.__Canon>
;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" @@ -19,25 +19,28 @@ ;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]> ;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline ldloca(s) first use temp" <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
-; V11 tmp6 [V11,T07] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP -; V12 tmp7 [V12,T09] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
+; V11 tmp6 [V11,T08] ( 2, 1 ) ref -> x0 single-def "field V07.item (fldOffset=0x0)" P-INDEP +; V12 tmp7 [V12,T10] ( 2, 1 ) int -> x1 single-def "field V07._tag (fldOffset=0x8)" P-INDEP
;* V13 tmp8 [V13 ] ( 0, 0 ) ref -> zero-ref "field V09.item (fldOffset=0x0)" P-DEP ;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "field V09._tag (fldOffset=0x8)" P-DEP
-; V15 tmp10 [V15,T08] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP -; V16 tmp11 [V16,T10] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP -; V17 tmp12 [V17,T05] ( 3, 1.50) struct (16) [fp+0x18] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
+; V15 tmp10 [V15,T09] ( 2, 1 ) ref -> x0 single-def "field V10.item (fldOffset=0x0)" P-INDEP +; V16 tmp11 [V16,T11] ( 2, 1 ) int -> x1 single-def "field V10._tag (fldOffset=0x8)" P-INDEP +; V17 tmp12 [V17,T06] ( 3, 1.50) struct (16) [fp+0x10] do-not-enreg[SFR] multireg-ret must-init "Return value temp for multi-reg return (rejected tail call)." <Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon]>
; V18 cse0 [V18,T00] ( 4, 24 ) ref -> x2 "CSE - aggressive"
-; V19 rat0 [V19,T04] ( 3, 2 ) long -> x1 "runtime lookup"
+; V19 rat0 [V19,T05] ( 3, 2 ) long -> x1 "runtime lookup"
; V20 rat1 [V20,T03] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
+;* V21 rat2 [V21,T12] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V22 rat3 [V22,T04] ( 2, 2 ) long -> x1 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 32
+; Lcl frame size = 24
-G_M49887_IG01: ; bbWeight=8, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M49887_IG01: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x30]!
+ str x19, [sp, #0x28]
mov fp, sp
- stp xzr, xzr, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - str x0, [fp, #0x28] - ;; size=16 bbWeight=8 PerfScore 28.00
+ stp xzr, xzr, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + str x0, [fp, #0x20] + ;; size=20 bbWeight=8 PerfScore 36.00
G_M49887_IG02: ; bbWeight=8, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x1] ldr x2, [x1, #0x10] @@ -64,7 +67,7 @@ G_M49887_IG06: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0 mov x1, x0 ;; size=20 bbWeight=0.10 PerfScore 0.30 @@ -77,38 +80,54 @@ G_M49887_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr blr x1 ; gcrRegs +[x0] ; gcr arg pop 0
- stp x0, x1, [fp, #0x18] // [V17 tmp12], [V17 tmp12+0x08] - ldr x0, [fp, #0x18] // [V17 tmp12] - ldr w1, [fp, #0x20] // [V17 tmp12+0x08]
+ stp x0, x1, [fp, #0x10] // [V17 tmp12], [V17 tmp12+0x08] + ldr x0, [fp, #0x10] // [V17 tmp12] + ldr w1, [fp, #0x18] // [V17 tmp12+0x08]
;; size=36 bbWeight=0.50 PerfScore 5.50 G_M49887_IG08: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00 -G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=12 bbWeight=0.50 PerfScore 2.00 +G_M49887_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] +[x1]
- ldr x0, [x1, #0x08] - ; gcrRegs +[x0] - mov w1, #1
+ ldr x19, [x1, #0x08] + ; gcrRegs +[x19] + ldr x1, [x0, #0x38]
; gcrRegs -[x1]
- ;; size=8 bbWeight=0.50 PerfScore 1.75 -G_M49887_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x1, [x1, #0x10] + cbnz x1, G_M49887_IG11 + ;; size=16 bbWeight=0.50 PerfScore 5.00 +G_M49887_IG10: ; bbWeight=0.10, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=16 bbWeight=0.10 PerfScore 0.25 +G_M49887_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov w1, #1 + mov x0, x19 + ; gcrRegs +[x0] + ;; size=8 bbWeight=0.50 PerfScore 0.50 +G_M49887_IG12: ; bbWeight=0.50, epilog, nogc, extend + ldr x19, [sp, #0x28]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=12 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 136, prolog size 16, PerfScore 95.45, instruction count 34, allocated bytes for code 136 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
+; Total bytes of code 180, prolog size 20, PerfScore 109.45, instruction count 45, allocated bytes for code 180 (MethodHash=bb143d20) for method Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1
+ Code Words : 2
Epilog Count : 2 E bit : 0 X bit : 0 Vers : 0
- Function Length : 34 (0x00022) Actual length = 136 (0x000088)
+ Function Length : 45 (0x0002d) Actual length = 180 (0x0000b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -119,7 +138,10 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ D0 05 save_reg X#0 Z#5 (0x05); str x19, [sp, #40]
85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! E4 end E4 end
+ E4 end + E4 end

+48 (+32.43%) : 8920.dasm - Internal.Utilities.Library.ResultOrException:otherwiseSystem.__Canon:Internal.Utilities.Library.ResultOrException`1System.__Canon

@@ -8,9 +8,9 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 RetBuf [V00,T02] ( 4, 3 ) byref -> x20 single-def -; V01 TypeCtx [V01,T01] ( 5, 3.60) long -> x0 single-def -; V02 arg0 [V02,T03] ( 4, 3 ) ref -> x2 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]]>
+; V00 RetBuf [V00,T03] ( 4, 3 ) byref -> x21 single-def +; V01 TypeCtx [V01,T01] ( 7, 4.80) long -> x20 single-def +; V02 arg0 [V02,T04] ( 4, 3 ) ref -> x22 class-hnd single-def <Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]]>
; V03 arg1 [V03,T00] ( 4, 7 ) byref -> x19 ld-addr-op single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V05 loc1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" @@ -19,83 +19,101 @@ ;* V08 tmp4 [V08 ] ( 0, 0 ) ref -> zero-ref "field V03._exception (fldOffset=0x8)" P-INDEP ;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref "field V03._tag (fldOffset=0x10)" P-INDEP ;* V10 tmp6 [V10 ] ( 0, 0 ) struct (24) zero-ref "Promoted implicit byref" <Internal.Utilities.Library.ResultOrException`1[System.__Canon]>
-; V11 tmp7 [V11,T06] ( 2, 2 ) long -> x0 "argument with side effect" -; V12 rat0 [V12,T05] ( 3, 2 ) long -> x0 "runtime lookup" -; V13 rat1 [V13,T04] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable"
+; V11 tmp7 [V11,T07] ( 2, 2 ) long -> x0 "argument with side effect" +;* V12 rat0 [V12,T08] ( 0, 0 ) long -> zero-ref "runtime lookup" +; V13 rat1 [V13,T02] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V14 rat2 [V14,T06] ( 3, 2 ) long -> x0 "runtime lookup" +; V15 rat3 [V15,T05] ( 3, 2.80) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 G_M63339_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x30]!
+ stp fp, lr, [sp, #-0x40]!
stp x19, x20, [sp, #0x20]
+ stp x21, x22, [sp, #0x30]
mov fp, sp str x0, [fp, #0x18]
+ mov x20, x0 + mov x22, x1 + ; gcrRegs +[x22]
mov x19, x2 ; byrRegs +[x19]
- mov x20, x8 - ; byrRegs +[x20] - mov x2, x1 - ; gcrRegs +[x2] - ;; size=28 bbWeight=1 PerfScore 5.00 -G_M63339_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=180000 {x19 x20}, byref, isz - ldr w1, [x19, #0x10] - cmp w1, #1 - beq G_M63339_IG08 - ;; size=12 bbWeight=1 PerfScore 4.50 -G_M63339_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref, isz - ; gcrRegs -[x2] - ldr x1, [x0, #0x38] - ldr x2, [x1, #0x10] - cbz x2, G_M63339_IG05 - ;; size=12 bbWeight=0.50 PerfScore 3.50 -G_M63339_IG04: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref - mov x0, x2 - b G_M63339_IG06 - ;; size=8 bbWeight=0.40 PerfScore 0.60 -G_M63339_IG05: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref
+ mov x21, x8 + ; byrRegs +[x21] + ;; size=36 bbWeight=1 PerfScore 6.50 +G_M63339_IG02: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref, isz + ldr x0, [x20, #0x38] + ldr x0, [x0, #0x10] + cbnz x0, G_M63339_IG04 + ;; size=12 bbWeight=1 PerfScore 7.00 +G_M63339_IG03: ; bbWeight=0.20, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref + mov x0, x20
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- bl CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ bl CORINFO_HELP_MEMCPY
; gcr arg pop 0
- ;; size=16 bbWeight=0.10 PerfScore 0.25 -G_M63339_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=180000 {x19 x20}, byref
+ ;; size=20 bbWeight=0.20 PerfScore 0.60 +G_M63339_IG04: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=280000 {x19 x21}, byref, isz + ldr w0, [x19, #0x10] + cmp w0, #1 + beq G_M63339_IG10 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M63339_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref, isz + ; gcrRegs -[x22] + ldr x0, [x20, #0x38] + ldr x0, [x0, #0x10] + cbz x0, G_M63339_IG07 + ;; size=12 bbWeight=0.50 PerfScore 3.50 +G_M63339_IG06: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref + b G_M63339_IG08 + ;; size=4 bbWeight=0.40 PerfScore 0.40 +G_M63339_IG07: ; bbWeight=0.10, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref + mov x0, x20 + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_MEMCPY + ; gcr arg pop 0 + ;; size=20 bbWeight=0.10 PerfScore 0.30 +G_M63339_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=280000 {x19 x21}, byref
ldr x1, [x19] ; gcrRegs +[x1]
- mov x8, x20
+ mov x8, x21
; byrRegs +[x8] movz x2, #0xD1FFAB1E // code for Internal.Utilities.Library.ResultOrException`1[System.__Canon]:NewResult(System.__Canon):Internal.Utilities.Library.ResultOrException`1[System.__Canon] movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 ldr x2, [x2] ;; size=24 bbWeight=0.50 PerfScore 4.00
-G_M63339_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M63339_IG09: ; bbWeight=0.50, epilog, nogc, extend + ldp x21, x22, [sp, #0x30]
ldp x19, x20, [sp, #0x20]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
br x2 ; gcr arg pop 0
- ;; size=12 bbWeight=0.50 PerfScore 1.50 -G_M63339_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0004 {x2}, byrefRegs=100000 {x20}, gcvars, byref - ; gcrRegs -[x1] +[x2]
+ ;; size=16 bbWeight=0.50 PerfScore 2.00 +G_M63339_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=400000 {x22}, byrefRegs=200000 {x21}, gcvars, byref + ; gcrRegs -[x1] +[x22]
; byrRegs -[x8 x19]
- mov x0, x2
+ mov x0, x22
; gcrRegs +[x0]
- mov x8, x20
+ mov x8, x21
; byrRegs +[x8] mov x1, xzr
- ldr x2, [x2] - ; gcrRegs -[x2]
+ ldr x2, [x22]
ldr x2, [x2, #0x48] ldr x2, [x2, #0x20] ;; size=24 bbWeight=0.50 PerfScore 5.25
-G_M63339_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M63339_IG11: ; bbWeight=0.50, epilog, nogc, extend + ldp x21, x22, [sp, #0x30]
ldp x19, x20, [sp, #0x20]
- ldp fp, lr, [sp], #0x30
+ ldp fp, lr, [sp], #0x40
br x2 ; gcr arg pop 0
- ;; size=12 bbWeight=0.50 PerfScore 1.50
+ ;; size=16 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 148, prolog size 28, PerfScore 26.10, instruction count 37, allocated bytes for code 148 (MethodHash=10ca0894) for method Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
+; Total bytes of code 196, prolog size 36, PerfScore 36.05, instruction count 49, allocated bytes for code 196 (MethodHash=10ca0894) for method Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
; ============================================================ Unwind Info: @@ -106,7 +124,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 148 (0x000094)
+ Function Length : 49 (0x00031) Actual length = 196 (0x0000c4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -117,9 +135,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
+ E6 save_next
C8 04 save_regp X#0 Z#4 (0x04); stp x19, x20, [sp, #32]
- 85 save_fplr_x #5 (0x05); stp fp, lr, [sp, #-48]! - E4 end
+ 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
E4 end E4 end E4 end

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.arm64.checked.mch 65 14 24 27 -212 +1,120
benchmarks.run_pgo.windows.arm64.checked.mch 120 67 24 29 -1,976 +1,120
benchmarks.run_tiered.windows.arm64.checked.mch 49 9 8 32 -316 +452
coreclr_tests.run.windows.arm64.checked.mch 3 1 2 0 -4 +32
libraries.crossgen2.windows.arm64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.windows.arm64.checked.mch 198 10 30 158 -200 +2,860
libraries_tests.run.windows.arm64.Release.mch 74 2 64 8 -56 +3,100
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 113 21 46 46 -176 +3,196
realworld.run.windows.arm64.checked.mch 89 11 54 24 -132 +4,724
smoke_tests.nativeaot.windows.arm64.checked.mch 0 0 0 0 -0 +0
711 135 252 324 -3,072 +16,604

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.arm64.checked.mch 5,839 1 5,838 2 (0.02%) 4,601 (42.46%)
benchmarks.run_pgo.windows.arm64.checked.mch 15,581 13,024 2,557 1 (0.00%) 6,708 (29.57%)
benchmarks.run_tiered.windows.arm64.checked.mch 14,129 12,008 2,121 1 (0.01%) 4,683 (24.38%)
coreclr_tests.run.windows.arm64.checked.mch 1,237 3 1,234 1 (0.01%) 6,405 (79.68%)
libraries.crossgen2.windows.arm64.checked.mch 7,675 10 7,665 0 (0.00%) 3,315 (29.11%)
libraries.pmi.windows.arm64.checked.mch 17,607 0 17,607 0 (0.00%) 7,257 (28.73%)
libraries_tests.run.windows.arm64.Release.mch 3,532 2,564 968 0 (0.00%) 5,050 (56.25%)
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 6,259 0 6,259 0 (0.00%) 4,832 (42.06%)
realworld.run.windows.arm64.checked.mch 10,676 1 10,675 2 (0.01%) 6,127 (35.62%)
smoke_tests.nativeaot.windows.arm64.checked.mch 5,044 3 5,041 0 (0.00%) 7,136 (56.74%)
87,579 27,614 59,965 7 (0.00%) 56,114 (38.00%)

jit-analyze output

benchmarks.run.windows.arm64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1162332 (overridden on cmd)
Total bytes of diff: 1163240 (overridden on cmd)
Total bytes of delta: 908 (0.08 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         208 : 3140.dasm (19.62 % of base)
         144 : 996.dasm (45.00 % of base)
          92 : 9277.dasm (13.37 % of base)
          80 : 3316.dasm (15.27 % of base)
          56 : 9434.dasm (51.85 % of base)
          56 : 1008.dasm (36.84 % of base)
          44 : 2091.dasm (9.57 % of base)
          44 : 814.dasm (9.02 % of base)
          44 : 1546.dasm (7.48 % of base)
          44 : 1136.dasm (14.29 % of base)
          40 : 3026.dasm (15.38 % of base)
          40 : 3680.dasm (4.18 % of base)
          40 : 7127.dasm (20.83 % of base)
          40 : 1678.dasm (8.47 % of base)
          40 : 1801.dasm (11.11 % of base)
          32 : 3359.dasm (7.69 % of base)
          28 : 9195.dasm (4.55 % of base)
          24 : 577.dasm (5.45 % of base)
           4 : 4787.dasm (2.70 % of base)
           4 : 8432.dasm (4.55 % of base)

Top file improvements (bytes):
         -48 : 3541.dasm (-10.53 % of base)
         -36 : 5611.dasm (-21.43 % of base)
         -24 : 85.dasm (-4.51 % of base)
         -24 : 1516.dasm (-3.31 % of base)
         -20 : 384.dasm (-3.70 % of base)
         -20 : 7789.dasm (-5.49 % of base)
         -12 : 10668.dasm (-2.75 % of base)
          -4 : 10297.dasm (-2.78 % of base)
          -4 : 1561.dasm (-0.58 % of base)
          -4 : 4933.dasm (-0.29 % of base)
          -4 : 5623.dasm (-1.64 % of base)
          -4 : 687.dasm (-0.82 % of base)
          -4 : 688.dasm (-0.89 % of base)
          -4 : 8688.dasm (-1.23 % of base)

36 total files with Code Size differences (14 improved, 22 regressed), 22 unchanged.

Top method regressions (bytes):
         208 (19.62 % of base) : 3140.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)
         144 (45.00 % of base) : 996.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          92 (13.37 % of base) : 9277.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)
          80 (15.27 % of base) : 3316.dasm - System.Array:Sort[System.__Canon,System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          56 (36.84 % of base) : 1008.dasm - System.GC:AllocateUninitializedArray[System.ValueTuple`2[System.__Canon,System.__Canon]](int,ubyte):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          56 (51.85 % of base) : 9434.dasm - System.Net.CredentialCache+CredentialEnumerator+DictionaryEnumeratorHelper:MoveNext[System.__Canon,System.__Canon](byref,byref):ubyte (FullOpts)
          44 (9.57 % of base) : 2091.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)
          44 (9.02 % of base) : 814.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
          44 (7.48 % of base) : 1546.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          44 (14.29 % of base) : 1136.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
          40 (15.38 % of base) : 3026.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          40 (11.11 % of base) : 1801.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          40 (20.83 % of base) : 7127.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
          40 (8.47 % of base) : 1678.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
          40 (4.18 % of base) : 3680.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          32 (7.69 % of base) : 3359.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
          28 (4.55 % of base) : 9195.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
          24 (5.45 % of base) : 577.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)
           4 (2.70 % of base) : 4787.dasm - Newtonsoft.Json.Linq.JContainer:IsMultiContent(System.Object):ubyte:this (FullOpts)
           4 (4.55 % of base) : 9483.dasm - System.Convert:ToBoolean(System.Object,System.IFormatProvider):ubyte (FullOpts)

Top method improvements (bytes):
         -48 (-10.53 % of base) : 3541.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -36 (-21.43 % of base) : 5611.dasm - Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
         -24 (-3.31 % of base) : 1516.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
         -24 (-4.51 % of base) : 85.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-5.49 % of base) : 7789.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -20 (-3.70 % of base) : 384.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -12 (-2.75 % of base) : 10668.dasm - System.Linq.Enumerable:<AggregateByIterator>g__PopulateDictionary|75_0[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerator`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-1.64 % of base) : 5623.dasm - Internal.Win32.Registry:.cctor() (FullOpts)
          -4 (-1.23 % of base) : 8688.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
          -4 (-2.78 % of base) : 10297.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          -4 (-0.89 % of base) : 688.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.29 % of base) : 4933.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)
          -4 (-0.82 % of base) : 687.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.58 % of base) : 1561.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)

Top method regressions (percentages):
          56 (51.85 % of base) : 9434.dasm - System.Net.CredentialCache+CredentialEnumerator+DictionaryEnumeratorHelper:MoveNext[System.__Canon,System.__Canon](byref,byref):ubyte (FullOpts)
         144 (45.00 % of base) : 996.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]]):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          56 (36.84 % of base) : 1008.dasm - System.GC:AllocateUninitializedArray[System.ValueTuple`2[System.__Canon,System.__Canon]](int,ubyte):System.ValueTuple`2[System.__Canon,System.__Canon][] (FullOpts)
          40 (20.83 % of base) : 7127.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (FullOpts)
         208 (19.62 % of base) : 3140.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)
          40 (15.38 % of base) : 3026.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (FullOpts)
          80 (15.27 % of base) : 3316.dasm - System.Array:Sort[System.__Canon,System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          44 (14.29 % of base) : 1136.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (FullOpts)
          92 (13.37 % of base) : 9277.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)
          40 (11.11 % of base) : 1801.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (FullOpts)
          44 (9.57 % of base) : 2091.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)
          44 (9.02 % of base) : 814.dasm - System.Linq.Enumerable:MaxInteger[System.__Canon,int](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,int]):int (FullOpts)
          40 (8.47 % of base) : 1678.dasm - System.Dynamic.Utils.CollectionExtensions:ToReadOnly[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.__Canon] (FullOpts)
          32 (7.69 % of base) : 3359.dasm - System.Collections.Immutable.ImmutableExtensions:AsOrderedCollection[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):System.Collections.Immutable.IOrderedCollection`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]] (FullOpts)
          44 (7.48 % of base) : 1546.dasm - System.Linq.Enumerable:TryGetSingle[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
           4 (5.56 % of base) : 8521.dasm - System.Convert:ToInt32(System.Object):int (FullOpts)
          24 (5.45 % of base) : 577.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)
          28 (4.55 % of base) : 9195.dasm - Sigil.Impl.BufferedILGenerator`1[System.__Canon]:Join[System.__Canon](System.String,System.Collections.Generic.IEnumerable`1[System.__Canon]):System.String (FullOpts)
           4 (4.55 % of base) : 9483.dasm - System.Convert:ToBoolean(System.Object,System.IFormatProvider):ubyte (FullOpts)
           4 (4.55 % of base) : 8432.dasm - System.Convert:ToInt32(System.Object,System.IFormatProvider):int (FullOpts)

Top method improvements (percentages):
         -36 (-21.43 % of base) : 5611.dasm - Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
         -48 (-10.53 % of base) : 3541.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -20 (-5.49 % of base) : 7789.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -24 (-4.51 % of base) : 85.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 384.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -24 (-3.31 % of base) : 1516.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (FullOpts)
          -4 (-2.78 % of base) : 10297.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
         -12 (-2.75 % of base) : 10668.dasm - System.Linq.Enumerable:<AggregateByIterator>g__PopulateDictionary|75_0[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerator`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-1.64 % of base) : 5623.dasm - Internal.Win32.Registry:.cctor() (FullOpts)
          -4 (-1.23 % of base) : 8688.dasm - Jil.Common.ExtensionMethods:ForEach[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Action`1[System.__Canon]) (FullOpts)
          -4 (-0.89 % of base) : 688.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 687.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.58 % of base) : 1561.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 (-0.29 % of base) : 4933.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)


benchmarks.run_pgo.windows.arm64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2506252 (overridden on cmd)
Total bytes of diff: 2505396 (overridden on cmd)
Total bytes of delta: -856 (-0.03 % of base)
    diff is an improvement.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          52 : 19917.dasm (14.44 % of base)
          52 : 18918.dasm (27.08 % of base)
          48 : 10527.dasm (36.36 % of base)
          48 : 14856.dasm (36.36 % of base)
          48 : 15983.dasm (36.36 % of base)
          48 : 12310.dasm (36.36 % of base)
          48 : 14388.dasm (36.36 % of base)
          48 : 16644.dasm (36.36 % of base)
          48 : 12967.dasm (36.36 % of base)
          48 : 14568.dasm (36.36 % of base)
          48 : 19267.dasm (36.36 % of base)
          48 : 2785.dasm (36.36 % of base)
          48 : 6938.dasm (36.36 % of base)
          48 : 6971.dasm (36.36 % of base)
          48 : 11612.dasm (36.36 % of base)
          48 : 15306.dasm (36.36 % of base)
          48 : 16168.dasm (36.36 % of base)
          48 : 16489.dasm (36.36 % of base)
          48 : 19678.dasm (36.36 % of base)
          48 : 2823.dasm (36.36 % of base)

Top file improvements (bytes):
        -124 : 12141.dasm (-14.16 % of base)
         -96 : 18382.dasm (-6.54 % of base)
         -28 : 16178.dasm (-3.30 % of base)
         -28 : 18161.dasm (-3.30 % of base)
         -28 : 19994.dasm (-3.30 % of base)
         -28 : 10828.dasm (-5.15 % of base)
         -28 : 12572.dasm (-5.15 % of base)
         -28 : 15222.dasm (-3.30 % of base)
         -28 : 16085.dasm (-3.30 % of base)
         -28 : 20062.dasm (-3.30 % of base)
         -28 : 20073.dasm (-3.30 % of base)
         -28 : 12539.dasm (-5.15 % of base)
         -28 : 15152.dasm (-5.15 % of base)
         -28 : 15657.dasm (-3.30 % of base)
         -28 : 16493.dasm (-5.15 % of base)
         -28 : 19709.dasm (-3.30 % of base)
         -28 : 19850.dasm (-5.15 % of base)
         -28 : 20315.dasm (-5.15 % of base)
         -28 : 21453.dasm (-3.30 % of base)
         -28 : 22905.dasm (-3.30 % of base)

55 total files with Code Size differences (34 improved, 21 regressed), 20 unchanged.

Top method regressions (bytes):
          52 (14.44 % of base) : 19917.dasm - System.Array:Sort[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon]) (Tier1)
          52 (27.08 % of base) : 18918.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          48 (36.36 % of base) : 10527.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14856.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 15983.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 12310.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14388.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16644.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 12967.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14568.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19267.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 2785.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 6938.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 6971.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 11612.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 15306.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16168.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16489.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19678.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 2823.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (bytes):
        -124 (-14.16 % of base) : 12141.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
         -96 (-6.54 % of base) : 18382.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -28 (-3.30 % of base) : 16178.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 18161.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 19994.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 10828.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 12572.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 15222.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 16085.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 20062.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 20073.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 12539.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 15152.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 15657.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 16493.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 19709.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 19850.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 20315.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 21453.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 22905.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          48 (36.36 % of base) : 10527.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14856.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 15983.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 12310.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14388.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16644.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 12967.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 14568.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19267.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 2785.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 6938.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 6971.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 11612.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 15306.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16168.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 16489.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 19678.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 2823.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (36.36 % of base) : 3056.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          52 (27.08 % of base) : 18918.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)

Top method improvements (percentages):
        -124 (-14.16 % of base) : 12141.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
         -96 (-6.54 % of base) : 18382.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -20 (-5.49 % of base) : 14698.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -20 (-5.49 % of base) : 21245.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (Tier1)
         -28 (-5.15 % of base) : 10828.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 12572.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 12539.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 15152.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 16493.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 19850.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 20315.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 4663.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 6996.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 12316.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 19533.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 20271.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 21635.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 3088.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 4596.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 5153.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)


benchmarks.run_tiered.windows.arm64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 2125908 (overridden on cmd)
Total bytes of diff: 2126044 (overridden on cmd)
Total bytes of delta: 136 (0.01 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         144 : 15297.dasm (45.00 % of base)
          56 : 9663.dasm (36.84 % of base)
          52 : 9600.dasm (27.08 % of base)
          48 : 1012.dasm (36.36 % of base)
          44 : 18346.dasm (14.29 % of base)
          44 : 17445.dasm (9.73 % of base)
          40 : 9703.dasm (15.38 % of base)
          24 : 2813.dasm (5.45 % of base)

Top file improvements (bytes):
        -124 : 8498.dasm (-14.16 % of base)
         -96 : 17020.dasm (-6.54 % of base)
         -24 : 1021.dasm (-4.51 % of base)
         -24 : 7190.dasm (-3.31 % of base)
         -20 : 2523.dasm (-3.70 % of base)
         -16 : 14523.dasm (-3.36 % of base)
          -4 : 18361.dasm (-0.82 % of base)
          -4 : 9588.dasm (-1.15 % of base)
          -4 : 9708.dasm (-0.89 % of base)

17 total files with Code Size differences (9 improved, 8 regressed), 27 unchanged.

Top method regressions (bytes):
         144 (45.00 % of base) : 15297.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
          56 (36.84 % of base) : 9663.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          52 (27.08 % of base) : 9600.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          48 (36.36 % of base) : 1012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          44 (9.73 % of base) : 17445.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)
          44 (14.29 % of base) : 18346.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
          40 (15.38 % of base) : 9703.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          24 (5.45 % of base) : 2813.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)

Top method improvements (bytes):
        -124 (-14.16 % of base) : 8498.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
         -96 (-6.54 % of base) : 17020.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -24 (-3.31 % of base) : 7190.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier1)
         -24 (-4.51 % of base) : 1021.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.70 % of base) : 2523.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -16 (-3.36 % of base) : 14523.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)
          -4 (-0.89 % of base) : 9708.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1)
          -4 (-1.15 % of base) : 9588.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1-OSR)
          -4 (-0.82 % of base) : 18361.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier1)

Top method regressions (percentages):
         144 (45.00 % of base) : 15297.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (Tier1)
          56 (36.84 % of base) : 9663.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (Tier1)
          48 (36.36 % of base) : 1012.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          52 (27.08 % of base) : 9600.dasm - System.Array:Sort[System.__Canon](System.__Canon[],System.Comparison`1[System.__Canon]) (Tier1)
          40 (15.38 % of base) : 9703.dasm - System.Array:IndexOf[System.__Canon](System.__Canon[],System.__Canon,int,int):int (Tier1)
          44 (14.29 % of base) : 18346.dasm - System.Runtime.InteropServices.CollectionsMarshal:AsSpan[System.__Canon](System.Collections.Generic.List`1[System.__Canon]):System.Span`1[System.__Canon] (Tier1)
          44 (9.73 % of base) : 17445.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[System.__Canon,System.__Canon]:GetOrAdd[System.__Canon](System.__Canon,System.Func`3[System.__Canon,System.__Canon,System.__Canon],System.__Canon):System.__Canon:this (Tier1)
          24 (5.45 % of base) : 2813.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)

Top method improvements (percentages):
        -124 (-14.16 % of base) : 8498.dasm - System.Text.Json.Serialization.JsonConverter`1[System.Nullable`1[System.DateTimeOffset]]:TryWrite(System.Text.Json.Utf8JsonWriter,byref,System.Text.Json.JsonSerializerOptions,byref):ubyte:this (Tier0)
         -96 (-6.54 % of base) : 17020.dasm - System.Linq.Expressions.Utils:.cctor() (Tier0)
         -24 (-4.51 % of base) : 1021.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.70 % of base) : 2523.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (Tier1)
         -16 (-3.36 % of base) : 14523.dasm - BenchmarksGame.Mandelbrot_2:DoBench(int,System.IO.MemoryStream,ubyte) (Tier1-OSR)
         -24 (-3.31 % of base) : 7190.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier1)
          -4 (-1.15 % of base) : 9588.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1-OSR)
          -4 (-0.89 % of base) : 9708.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (Tier1)
          -4 (-0.82 % of base) : 18361.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (Tier1)


coreclr_tests.run.windows.arm64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 274032 (overridden on cmd)
Total bytes of diff: 274060 (overridden on cmd)
Total bytes of delta: 28 (0.01 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          24 : 20614.dasm (5.45 % of base)
           8 : 19698.dasm (2.67 % of base)

Top file improvements (bytes):
          -4 : 503.dasm (-0.82 % of base)

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

Top method regressions (bytes):
          24 (5.45 % of base) : 20614.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)
           8 (2.67 % of base) : 19698.dasm - Test_lifetime2:f4():int (FullOpts)

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

Top method regressions (percentages):
          24 (5.45 % of base) : 20614.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)
           8 (2.67 % of base) : 19698.dasm - Test_lifetime2:f4():int (FullOpts)

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

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


libraries.pmi.windows.arm64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1385152 (overridden on cmd)
Total bytes of diff: 1387812 (overridden on cmd)
Total bytes of delta: 2660 (0.19 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
        1364 : 7713.dasm (149.56 % of base)
         228 : 23033.dasm (66.28 % of base)
         132 : 22639.dasm (35.87 % of base)
          76 : 12158.dasm (11.73 % of base)
          76 : 14315.dasm (22.35 % of base)
          68 : 11585.dasm (20.48 % of base)
          68 : 11587.dasm (15.32 % of base)
          64 : 16156.dasm (59.26 % of base)
          64 : 27066.dasm (53.33 % of base)
          52 : 16157.dasm (26.00 % of base)
          52 : 26178.dasm (38.24 % of base)
          48 : 16427.dasm (11.01 % of base)
          48 : 19305.dasm (18.75 % of base)
          48 : 19309.dasm (9.68 % of base)
          48 : 19317.dasm (9.76 % of base)
          48 : 22601.dasm (16.22 % of base)
          48 : 22974.dasm (16.22 % of base)
          48 : 22990.dasm (15.79 % of base)
          44 : 26574.dasm (32.35 % of base)
          40 : 22727.dasm (15.15 % of base)

Top file improvements (bytes):
         -44 : 5830.dasm (-23.91 % of base)
         -44 : 5834.dasm (-17.74 % of base)
         -40 : 3167.dasm (-16.95 % of base)
         -28 : 24686.dasm (-5.43 % of base)
         -16 : 24287.dasm (-5.26 % of base)
         -12 : 24294.dasm (-5.00 % of base)
          -4 : 27650.dasm (-1.45 % of base)
          -4 : 2104.dasm (-4.35 % of base)
          -4 : 24702.dasm (-0.85 % of base)
          -4 : 27646.dasm (-1.45 % of base)

32 total files with Code Size differences (10 improved, 22 regressed), 30 unchanged.

Top method regressions (bytes):
        1364 (149.56 % of base) : 7713.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
         228 (66.28 % of base) : 23033.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)
         132 (35.87 % of base) : 22639.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)
          76 (22.35 % of base) : 14315.dasm - System.Diagnostics.StackTraceSymbols:TryOpenFile(System.String):System.IO.Stream (FullOpts)
          76 (11.73 % of base) : 12158.dasm - System.Resources.RuntimeResourceSet:.ctor(System.String):this (FullOpts)
          68 (15.32 % of base) : 11587.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](long,System.__Canon[],int,int) (FullOpts)
          68 (20.48 % of base) : 11585.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,long,int) (FullOpts)
          64 (59.26 % of base) : 16156.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)
          64 (53.33 % of base) : 27066.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)
          52 (26.00 % of base) : 16157.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:WithContinuations[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.Runtime.ExceptionServices.ExceptionDispatchInfo,Microsoft.FSharp.Control.AsyncReturn]):Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:this (FullOpts)
          52 (38.24 % of base) : 26178.dasm - Microsoft.FSharp.Core.ValueOption:FoldBack[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon],System.Nullable`1[int]):System.Nullable`1[int] (FullOpts)
          48 (15.79 % of base) : 22990.dasm - Microsoft.FSharp.Collections.MapTreeModule:current[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.Nullable`1[int]]):System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
          48 (16.22 % of base) : 22974.dasm - Microsoft.FSharp.Collections.MapTreeModule:mkIterator[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
          48 (16.22 % of base) : 22601.dasm - Microsoft.FSharp.Collections.SetTreeModule:mkIterator[System.__Canon](Microsoft.FSharp.Collections.SetTree`1[System.__Canon]):Microsoft.FSharp.Collections.SetTreeModule+SetIterator`1[System.__Canon] (FullOpts)
          48 (9.68 % of base) : 19309.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallFilterThenInvoke[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.Runtime.ExceptionServices.ExceptionDispatchInfo):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
          48 (18.75 % of base) : 19305.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
          48 (9.76 % of base) : 19317.dasm - Microsoft.FSharp.Control.AsyncPrimitives:TryFinally[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],Microsoft.FSharp.Control.FSharpAsync`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
          48 (11.01 % of base) : 16427.dasm - Microsoft.FSharp.Control.TaskBuilder:RunDynamic[System.__Canon](Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)
          44 (32.35 % of base) : 26574.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
          40 (15.15 % of base) : 22727.dasm - <StartupCode$FSharp-Core>.$Set:loop@914-47[System.__Canon](System.Collections.IEqualityComparer,System.Collections.Generic.IEnumerator`1[System.__Canon],System.Collections.Generic.IEnumerator`1[System.__Canon],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)

Top method improvements (bytes):
         -44 (-23.91 % of base) : 5830.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -44 (-17.74 % of base) : 5834.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -40 (-16.95 % of base) : 3167.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -28 (-5.43 % of base) : 24686.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
         -16 (-5.26 % of base) : 24287.dasm - Microsoft.FSharp.Collections.ListModule:Sum[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon (FullOpts)
         -12 (-5.00 % of base) : 24294.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)
          -4 (-4.35 % of base) : 2104.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.TypeTable+KeyPair`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
          -4 (-0.85 % of base) : 24702.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)
          -4 (-1.45 % of base) : 27646.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice3DFixedDouble1[System.__Canon](System.__Canon[,,],int,int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],System.__Canon[]) (FullOpts)
          -4 (-1.45 % of base) : 27650.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice3DFixedDouble3[System.__Canon](System.__Canon[,,],Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],int,int,System.__Canon[]) (FullOpts)

Top method regressions (percentages):
        1364 (149.56 % of base) : 7713.dasm - System.Text.Unicode.TextSegmentationUtility:GetLengthOfFirstExtendedGraphemeCluster[System.__Canon](System.ReadOnlySpan`1[System.__Canon],System.Text.Unicode.TextSegmentationUtility+DecodeFirstRune`1[System.__Canon]):int (FullOpts)
         228 (66.28 % of base) : 23033.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)
          64 (59.26 % of base) : 16156.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)
          64 (53.33 % of base) : 27066.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)
          52 (38.24 % of base) : 26178.dasm - Microsoft.FSharp.Core.ValueOption:FoldBack[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon],System.Nullable`1[int]):System.Nullable`1[int] (FullOpts)
         132 (35.87 % of base) : 22639.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)
          44 (32.35 % of base) : 26574.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
          52 (26.00 % of base) : 16157.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:WithContinuations[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.Runtime.ExceptionServices.ExceptionDispatchInfo,Microsoft.FSharp.Control.AsyncReturn]):Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:this (FullOpts)
          76 (22.35 % of base) : 14315.dasm - System.Diagnostics.StackTraceSymbols:TryOpenFile(System.String):System.IO.Stream (FullOpts)
          68 (20.48 % of base) : 11585.dasm - System.Runtime.InteropServices.Marshal:CopyToNative[System.__Canon](System.__Canon[],int,long,int) (FullOpts)
          48 (18.75 % of base) : 19305.dasm - Microsoft.FSharp.Control.AsyncPrimitives:CallThenInvoke[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],System.Nullable`1[int],Microsoft.FSharp.Core.FSharpFunc`2[System.Nullable`1[int],System.__Canon]):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
          48 (16.22 % of base) : 22974.dasm - Microsoft.FSharp.Collections.MapTreeModule:mkIterator[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.MapTree`2[System.__Canon,System.Nullable`1[int]]):Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
          48 (16.22 % of base) : 22601.dasm - Microsoft.FSharp.Collections.SetTreeModule:mkIterator[System.__Canon](Microsoft.FSharp.Collections.SetTree`1[System.__Canon]):Microsoft.FSharp.Collections.SetTreeModule+SetIterator`1[System.__Canon] (FullOpts)
          48 (15.79 % of base) : 22990.dasm - Microsoft.FSharp.Collections.MapTreeModule:current[System.__Canon,System.Nullable`1[int]](Microsoft.FSharp.Collections.MapTreeModule+MapIterator`2[System.__Canon,System.Nullable`1[int]]):System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]] (FullOpts)
          68 (15.32 % of base) : 11587.dasm - System.Runtime.InteropServices.Marshal:CopyToManaged[System.__Canon](long,System.__Canon[],int,int) (FullOpts)
          40 (15.15 % of base) : 22727.dasm - <StartupCode$FSharp-Core>.$Set:loop@914-47[System.__Canon](System.Collections.IEqualityComparer,System.Collections.Generic.IEnumerator`1[System.__Canon],System.Collections.Generic.IEnumerator`1[System.__Canon],Microsoft.FSharp.Core.Unit):ubyte (FullOpts)
          36 (14.52 % of base) : 16167.dasm - Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon]:HijackCheckThenCall[System.__Canon](Microsoft.FSharp.Control.AsyncActivation`1[System.__Canon],Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,System.__Canon],System.__Canon):Microsoft.FSharp.Control.AsyncReturn (FullOpts)
          76 (11.73 % of base) : 12158.dasm - System.Resources.RuntimeResourceSet:.ctor(System.String):this (FullOpts)
          36 (11.25 % of base) : 18705.dasm - Microsoft.FSharp.Control.ObservableModule:Partition[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,ubyte],System.IObservable`1[System.__Canon]):System.Tuple`2[System.__Canon,System.__Canon] (FullOpts)
          48 (11.01 % of base) : 16427.dasm - Microsoft.FSharp.Control.TaskBuilder:RunDynamic[System.__Canon](Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[System.__Canon],System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon] (FullOpts)

Top method improvements (percentages):
         -44 (-23.91 % of base) : 5830.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
         -44 (-17.74 % of base) : 5834.dasm - System.ValueTuple`2[System.__Canon,System.Nullable`1[int]]:System.IValueTupleInternal.ToStringEnd():System.String:this (FullOpts)
         -40 (-16.95 % of base) : 3167.dasm - System.HashCode:Combine[System.__Canon,System.Nullable`1[int]](System.__Canon,System.Nullable`1[int]):int (FullOpts)
         -28 (-5.43 % of base) : 24686.dasm - Microsoft.FSharp.Collections.SeqModule:Sum[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon (FullOpts)
         -16 (-5.26 % of base) : 24287.dasm - Microsoft.FSharp.Collections.ListModule:Sum[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):System.__Canon (FullOpts)
         -12 (-5.00 % of base) : 24294.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)
          -4 (-4.35 % of base) : 2104.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.TypeTable+KeyPair`2[System.__Canon,System.Nullable`1[int]]:GetHashCode():int:this (FullOpts)
          -4 (-1.45 % of base) : 27646.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice3DFixedDouble1[System.__Canon](System.__Canon[,,],int,int,Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],System.__Canon[]) (FullOpts)
          -4 (-1.45 % of base) : 27650.dasm - Microsoft.FSharp.Core.Operators+OperatorIntrinsics:SetArraySlice3DFixedDouble3[System.__Canon](System.__Canon[,,],Microsoft.FSharp.Core.FSharpOption`1[int],Microsoft.FSharp.Core.FSharpOption`1[int],int,int,System.__Canon[]) (FullOpts)
          -4 (-0.85 % of base) : 24702.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.windows.arm64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 689828 (overridden on cmd)
Total bytes of diff: 692872 (overridden on cmd)
Total bytes of delta: 3044 (0.44 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
          76 : 5336.dasm (32.20 % of base)
          48 : 1348.dasm (33.33 % of base)
          48 : 4315.dasm (33.33 % of base)
          48 : 4389.dasm (33.33 % of base)
          48 : 4459.dasm (33.33 % of base)
          48 : 4512.dasm (33.33 % of base)
          48 : 5476.dasm (33.33 % of base)
          48 : 5671.dasm (33.33 % of base)
          48 : 6048.dasm (33.33 % of base)
          48 : 6113.dasm (33.33 % of base)
          48 : 6396.dasm (33.33 % of base)
          48 : 6907.dasm (33.33 % of base)
          48 : 7028.dasm (33.33 % of base)
          48 : 7177.dasm (33.33 % of base)
          48 : 7245.dasm (33.33 % of base)
          48 : 7301.dasm (33.33 % of base)
          48 : 7392.dasm (33.33 % of base)
          48 : 7423.dasm (33.33 % of base)
          48 : 7695.dasm (33.33 % of base)
          48 : 7851.dasm (33.33 % of base)

Top file improvements (bytes):
         -52 : 2231.dasm (-32.50 % of base)
          -4 : 2425.dasm (-3.33 % of base)

35 total files with Code Size differences (2 improved, 33 regressed), 8 unchanged.

Top method regressions (bytes):
          76 (32.20 % of base) : 5336.dasm - System.IO.File:OpenRead(System.String):System.IO.FileStream (Instrumented Tier1)
          48 (33.33 % of base) : 1348.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4315.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4389.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4459.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4512.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5476.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5671.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6048.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6113.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6396.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6907.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7028.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7177.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7245.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7301.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7392.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7423.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7695.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7851.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (bytes):
         -52 (-32.50 % of base) : 2231.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
          -4 (-3.33 % of base) : 2425.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)

Top method regressions (percentages):
          48 (33.33 % of base) : 1348.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4315.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4389.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4459.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 4512.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5476.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 5671.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6048.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6113.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6396.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 6907.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7028.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7177.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7245.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7301.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7392.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7423.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7695.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 7851.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)
          48 (33.33 % of base) : 8405.dasm - System.RuntimeType+RuntimeTypeCache:GetMemberCache[System.__Canon](byref):System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:this (Tier1)

Top method improvements (percentages):
         -52 (-32.50 % of base) : 2231.dasm - Xunit.TestFrameworkOptions:SetValue[System.Nullable`1[ubyte]](System.String,System.Nullable`1[ubyte]):this (Tier0)
          -4 (-3.33 % of base) : 2425.dasm - Xunit.TestFrameworkOptions:GetValue[System.Nullable`1[ubyte]](System.String):System.Nullable`1[ubyte]:this (Tier0)


librariestestsnotieredcompilation.run.windows.arm64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1207948 (overridden on cmd)
Total bytes of diff: 1210968 (overridden on cmd)
Total bytes of delta: 3020 (0.25 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         332 : 3499.dasm (19.76 % of base)
         244 : 4071.dasm (20.54 % of base)
         144 : 69.dasm (45.00 % of base)
         136 : 6652.dasm (47.22 % of base)
         132 : 6099.dasm (17.46 % of base)
         128 : 10709.dasm (23.53 % of base)
         128 : 13021.dasm (28.07 % of base)
         128 : 2983.dasm (35.16 % of base)
          96 : 1991.dasm (24.49 % of base)
          92 : 8646.dasm (30.26 % of base)
          88 : 6205.dasm (12.09 % of base)
          84 : 2225.dasm (32.81 % of base)
          84 : 378.dasm (18.42 % of base)
          76 : 24.dasm (32.20 % of base)
          76 : 3479.dasm (11.38 % of base)
          64 : 10155.dasm (30.19 % of base)
          64 : 10703.dasm (16.67 % of base)
          64 : 6207.dasm (84.21 % of base)
          64 : 8002.dasm (61.54 % of base)
          60 : 9146.dasm (48.39 % of base)

Top file improvements (bytes):
         -32 : 3042.dasm (-9.41 % of base)
         -20 : 2782.dasm (-20.83 % of base)
         -20 : 3074.dasm (-5.49 % of base)
         -16 : 759.dasm (-1.76 % of base)
         -12 : 3391.dasm (-1.90 % of base)
          -8 : 10697.dasm (-0.53 % of base)
          -8 : 2073.dasm (-7.41 % of base)
          -8 : 2076.dasm (-6.90 % of base)
          -4 : 11294.dasm (-0.47 % of base)
          -4 : 256.dasm (-0.68 % of base)
          -4 : 3142.dasm (-0.29 % of base)
          -4 : 321.dasm (-0.89 % of base)
          -4 : 3213.dasm (-0.78 % of base)
          -4 : 372.dasm (-0.90 % of base)
          -4 : 488.dasm (-0.60 % of base)
          -4 : 5533.dasm (-1.18 % of base)
          -4 : 60.dasm (-0.82 % of base)
          -4 : 6138.dasm (-0.97 % of base)
          -4 : 7567.dasm (-0.96 % of base)
          -4 : 9831.dasm (-1.18 % of base)

48 total files with Code Size differences (21 improved, 27 regressed), 20 unchanged.

Top method regressions (bytes):
         332 (19.76 % of base) : 3499.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)
         244 (20.54 % of base) : 4071.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)
         144 (45.00 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
         136 (47.22 % of base) : 6652.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
         132 (17.46 % of base) : 6099.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)
         128 (28.07 % of base) : 13021.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)
         128 (23.53 % of base) : 10709.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
         128 (35.16 % of base) : 2983.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)
          96 (24.49 % of base) : 1991.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (FullOpts)
          92 (30.26 % of base) : 8646.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
          88 (12.09 % of base) : 6205.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)
          84 (32.81 % of base) : 2225.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
          84 (18.42 % of base) : 378.dasm - Xunit.ConfigReader_Json:LoadFile(System.String):Xunit.TestAssemblyConfiguration (FullOpts)
          76 (32.20 % of base) : 24.dasm - Internal.Microsoft.Extensions.DependencyModel.FileWrapper:OpenRead(System.String):System.IO.Stream:this (FullOpts)
          76 (11.38 % of base) : 3479.dasm - System.Linq.EnumerableExtensions:SequenceEqual[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]](System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],System.Func`3[System.Collections.Generic.KeyValuePair`2[System.__Canon,int],System.Collections.Generic.KeyValuePair`2[System.__Canon,int],ubyte]):ubyte (FullOpts)
          64 (16.67 % of base) : 10703.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveInaccessibleTypeArguments[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],byref):this (FullOpts)
          64 (30.19 % of base) : 10155.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:SkipBadSeparatedListTokensWithExpectedKind[System.__Canon,System.__Canon](byref,Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxListBuilder`1[System.__Canon],System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`3[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ushort,ubyte],ushort,ushort):int:this (FullOpts)
          64 (61.54 % of base) : 8002.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
          64 (84.21 % of base) : 6207.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
          60 (48.39 % of base) : 9146.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 (bytes):
         -32 (-9.41 % of base) : 3042.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
         -20 (-20.83 % of base) : 2782.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
         -20 (-5.49 % of base) : 3074.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -16 (-1.76 % of base) : 759.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)
         -12 (-1.90 % of base) : 3391.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
          -8 (-7.41 % of base) : 2073.dasm - InterfaceForwarder:GetInt():int:this (FullOpts)
          -8 (-6.90 % of base) : 2076.dasm - InterfaceForwarder:SetInt(int):this (FullOpts)
          -8 (-0.53 % of base) : 10697.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)
          -4 (-0.68 % of base) : 256.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.18 % of base) : 5533.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-1.18 % of base) : 9831.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
          -4 (-0.78 % of base) : 3213.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.96 % of base) : 7567.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.97 % of base) : 6138.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.90 % of base) : 372.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 321.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.27 % of base) : 991.dasm - System.Linq.Enumerable:ToDictionary[System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.Collections.Generic.IEqualityComparer`1[System.__Canon]):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.29 % of base) : 3142.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)
          -4 (-0.82 % of base) : 60.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.47 % of base) : 11294.dasm - System.Linq.Enumerable:TryGetLast[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]],byref):System.ValueTuple`2[System.__Canon,System.__Canon] (FullOpts)

Top method regressions (percentages):
          64 (84.21 % of base) : 6207.dasm - System.Collections.Immutable.ImmutableArray`1[System.__Canon]:As[System.__Canon]():System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
          64 (61.54 % of base) : 8002.dasm - Microsoft.CodeAnalysis.IncrementalValueProviderExtensions:WithTrackingName[System.__Canon](Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon],System.String):Microsoft.CodeAnalysis.IncrementalValuesProvider`1[System.__Canon] (FullOpts)
          60 (48.39 % of base) : 9146.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)
         136 (47.22 % of base) : 6652.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:OverloadResolutionResultIsValid[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]],ubyte):ubyte (FullOpts)
         144 (45.00 % of base) : 69.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):System.__Canon[] (FullOpts)
          44 (37.93 % of base) : 4438.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)
          44 (37.93 % of base) : 8457.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)
          56 (36.84 % of base) : 8022.dasm - System.GC:AllocateUninitializedArray[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](int,ubyte):System.Collections.Immutable.ImmutableArray`1[System.__Canon][] (FullOpts)
         128 (35.16 % of base) : 2983.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)
          44 (33.33 % of base) : 9143.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)
          84 (32.81 % of base) : 2225.dasm - Roslyn.Utilities.StandardFileSystem:OpenFile(System.String,int,int,int):System.IO.Stream:this (FullOpts)
          76 (32.20 % of base) : 24.dasm - Internal.Microsoft.Extensions.DependencyModel.FileWrapper:OpenRead(System.String):System.IO.Stream:this (FullOpts)
          92 (30.26 % of base) : 8646.dasm - System.Collections.Immutable.ImmutableInterlocked:GetOrAdd[System.__Canon,System.__Canon](byref,System.__Canon,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
          64 (30.19 % of base) : 10155.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser:SkipBadSeparatedListTokensWithExpectedKind[System.__Canon,System.__Canon](byref,Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxListBuilder`1[System.__Canon],System.Func`2[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ubyte],System.Func`3[Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser,ushort,ubyte],ushort,ushort):int:this (FullOpts)
         128 (28.07 % of base) : 13021.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)
          96 (24.49 % of base) : 1991.dasm - Xunit.ConsoleClient.TransformFactory:Handler_DirectWrite(System.Xml.Linq.XElement,System.String) (FullOpts)
         128 (23.53 % of base) : 10709.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:RemoveAllInterfaceMembers[System.__Canon](Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.CSharp.MemberResolutionResult`1[System.__Canon]]) (FullOpts)
          32 (23.53 % of base) : 1894.dasm - Xunit.Sdk.CollectionTrackerExtensions:AsTracker[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):Xunit.Sdk.CollectionTracker`1[System.__Canon] (FullOpts)
          48 (23.53 % of base) : 1105.dasm - Xunit.Sdk.ExceptionAggregator:RunAsync[System.__Canon](System.Func`1[System.__Canon]):System.Threading.Tasks.Task`1[System.__Canon]:this (FullOpts)
         244 (20.54 % of base) : 4071.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)

Top method improvements (percentages):
         -20 (-20.83 % of base) : 2782.dasm - Microsoft.VisualStudio.Composition.AttributedPartDiscovery+<>c:<CreatePart>b__6_0(System.Reflection.PropertyInfo):System.Collections.Generic.IEnumerable`1[System.Composition.ExportAttribute]:this (FullOpts)
         -32 (-9.41 % of base) : 3042.dasm - Microsoft.VisualStudio.Composition.ComposableCatalog:TryGetOpenGenericExport(Microsoft.VisualStudio.Composition.ImportDefinition,byref,byref):ubyte (FullOpts)
          -8 (-7.41 % of base) : 2073.dasm - InterfaceForwarder:GetInt():int:this (FullOpts)
          -8 (-6.90 % of base) : 2076.dasm - InterfaceForwarder:SetInt(int):this (FullOpts)
         -20 (-5.49 % of base) : 3074.dasm - System.Linq.OrderedEnumerable`1[System.__Canon]:GetCount(ubyte):int:this (FullOpts)
         -12 (-1.90 % of base) : 3391.dasm - Microsoft.CodeAnalysis.PublicContract:IndexOfNullOrDuplicateItem[System.__Canon](System.Collections.Generic.IReadOnlyList`1[System.__Canon]):int (FullOpts)
         -16 (-1.76 % of base) : 759.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
          -4 (-1.18 % of base) : 5533.dasm - Microsoft.CodeAnalysis.ImmutableArrayExtensions:CreateNameToMembersMap[System.ReadOnlyMemory`1[ushort],System.__Canon,System.__Canon,System.__Canon](System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Object],System.Collections.Generic.Dictionary`2[System.ReadOnlyMemory`1[ushort],System.Collections.Immutable.ImmutableArray`1[System.__Canon]]) (FullOpts)
          -4 (-1.18 % of base) : 9831.dasm - Microsoft.Interop.HashCode:SequentialValuesHash[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon]):int (FullOpts)
          -4 (-0.97 % of base) : 6138.dasm - Roslyn.Utilities.ISetExtensions:AddAll[System.__Canon](System.Collections.Generic.ISet`1[System.__Canon],System.Collections.Generic.IEnumerable`1[System.__Canon]):ubyte (FullOpts)
          -4 (-0.96 % of base) : 7567.dasm - Roslyn.Utilities.Hash:CombineValues[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],int):int (FullOpts)
          -4 (-0.90 % of base) : 372.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 321.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 60.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.78 % of base) : 3213.dasm - Microsoft.VisualStudio.Composition.Utilities:ToDictionary[System.__Canon,System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],int):System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.68 % of base) : 256.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 (-0.60 % of base) : 488.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)
          -8 (-0.53 % of base) : 10697.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)
          -4 (-0.47 % of base) : 11294.dasm - System.Linq.Enumerable:TryGetLast[System.ValueTuple`2[System.__Canon,System.__Canon]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[System.__Canon,System.__Canon]],byref):System.ValueTuple`2[System.__Canon,System.__Canon] (FullOpts)
          -4 (-0.29 % of base) : 3142.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)


realworld.run.windows.arm64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 1993076 (overridden on cmd)
Total bytes of diff: 1997668 (overridden on cmd)
Total bytes of delta: 4592 (0.23 % of base)
    diff is a regression.
    relative diff is a regression.

Detail diffs



Top file regressions (bytes):
         504 : 6210.dasm (51.01 % of base)
         300 : 7789.dasm (30.86 % of base)
         288 : 5122.dasm (16.98 % of base)
         244 : 16268.dasm (20.54 % of base)
         224 : 5861.dasm (49.56 % of base)
         224 : 5872.dasm (49.56 % of base)
         224 : 5882.dasm (50.45 % of base)
         224 : 5885.dasm (49.56 % of base)
         144 : 14679.dasm (43.90 % of base)
         144 : 9876.dasm (16.36 % of base)
         140 : 9574.dasm (12.92 % of base)
         116 : 8030.dasm (16.29 % of base)
         100 : 5883.dasm (29.76 % of base)
          96 : 8574.dasm (5.52 % of base)
          92 : 5880.dasm (26.14 % of base)
          88 : 18191.dasm (12.43 % of base)
          84 : 8505.dasm (23.86 % of base)
          80 : 8492.dasm (8.81 % of base)
          76 : 4534.dasm (23.75 % of base)
          56 : 5809.dasm (29.79 % of base)

Top file improvements (bytes):
         -36 : 14240.dasm (-21.43 % of base)
         -24 : 85.dasm (-4.51 % of base)
         -20 : 383.dasm (-3.70 % of base)
         -16 : 12949.dasm (-1.76 % of base)
         -12 : 8239.dasm (-1.58 % of base)
          -4 : 12498.dasm (-0.51 % of base)
          -4 : 13231.dasm (-0.90 % of base)
          -4 : 2838.dasm (-1.64 % of base)
          -4 : 3243.dasm (-0.30 % of base)
          -4 : 686.dasm (-0.82 % of base)
          -4 : 687.dasm (-0.89 % of base)

42 total files with Code Size differences (11 improved, 31 regressed), 20 unchanged.

Top method regressions (bytes):
         504 (51.01 % of base) : 6210.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)
         300 (30.86 % of base) : 7789.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)
         288 (16.98 % of base) : 5122.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)
         244 (20.54 % of base) : 16268.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)
         224 (50.45 % of base) : 5882.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5885.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)
         224 (49.56 % of base) : 5872.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5861.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         144 (16.36 % of base) : 9876.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)
         144 (43.90 % of base) : 14679.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
         140 (12.92 % of base) : 9574.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)
         116 (16.29 % of base) : 8030.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)
         100 (29.76 % of base) : 5883.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          96 (5.52 % of base) : 8574.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)
          92 (26.14 % of base) : 5880.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          88 (12.43 % of base) : 18191.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)
          84 (23.86 % of base) : 8505.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          80 (8.81 % of base) : 8492.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)
          76 (23.75 % of base) : 4534.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          56 (29.79 % of base) : 5809.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)

Top method improvements (bytes):
         -36 (-21.43 % of base) : 14240.dasm - Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
         -24 (-4.51 % of base) : 85.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 383.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -16 (-1.76 % of base) : 12949.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)
         -12 (-1.58 % of base) : 8239.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)
          -4 (-1.64 % of base) : 2838.dasm - Internal.Win32.Registry:.cctor() (FullOpts)
          -4 (-0.90 % of base) : 13231.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 687.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.30 % of base) : 3243.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)
          -4 (-0.82 % of base) : 686.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.51 % of base) : 12498.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)

Top method regressions (percentages):
         504 (51.01 % of base) : 6210.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)
         224 (50.45 % of base) : 5882.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_binop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5885.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)
         224 (49.56 % of base) : 5872.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_compare_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         224 (49.56 % of base) : 5861.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_rel_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
         144 (43.90 % of base) : 14679.dasm - System.Linq.Enumerable:<ToArray>g__EnumerableToArray|296_0[System.ValueTuple`3[System.__Canon,System.__Canon,long]](System.Collections.Generic.IEnumerable`1[System.ValueTuple`3[System.__Canon,System.__Canon,long]]):System.ValueTuple`3[System.__Canon,System.__Canon,long][] (FullOpts)
          56 (36.84 % of base) : 11620.dasm - System.GC:AllocateUninitializedArray[System.__Canon](int,ubyte):System.__Canon[] (FullOpts)
          48 (32.43 % of base) : 8920.dasm - Internal.Utilities.Library.ResultOrException:otherwise[System.__Canon](Microsoft.FSharp.Core.FSharpFunc`2[System.__Canon,Internal.Utilities.Library.ResultOrException`1[System.__Canon]],Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          44 (32.35 % of base) : 10612.dasm - Microsoft.FSharp.Primitives.Basics.List:tryLastV[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Core.FSharpValueOption`1[System.__Canon] (FullOpts)
         300 (30.86 % of base) : 7789.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)
          56 (29.79 % of base) : 5809.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)
         100 (29.76 % of base) : 5883.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_unop_ty[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          92 (26.14 % of base) : 5880.dasm - FSharp.Compiler.TcGlobals+TcGlobals:mk_hash_sig[System.__Canon](System.__Canon):System.Tuple`2[System.__Canon,System.__Canon]:this (FullOpts)
          84 (23.86 % of base) : 8505.dasm - FSharp.Compiler.NameResolution:OneResult[System.__Canon](Internal.Utilities.Library.ResultOrException`1[System.__Canon]):Internal.Utilities.Library.ResultOrException`1[System.__Canon] (FullOpts)
          76 (23.75 % of base) : 4534.dasm - Microsoft.FSharp.Primitives.Basics.List:rev[System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon] (FullOpts)
          40 (21.28 % of base) : 2049.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)
         244 (20.54 % of base) : 16268.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)
          48 (19.05 % of base) : 2284.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)
         288 (16.98 % of base) : 5122.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)
          52 (16.46 % of base) : 3029.dasm - Internal.Utilities.Collections.AgedLookup`3[System.__Canon,System.__Canon,System.__Canon]:Add[System.__Canon,System.__Canon](Microsoft.FSharp.Collections.FSharpList`1[System.__Canon],System.__Canon,System.__Canon):Microsoft.FSharp.Collections.FSharpList`1[System.__Canon]:this (FullOpts)

Top method improvements (percentages):
         -36 (-21.43 % of base) : 14240.dasm - Microsoft.Win32.SafeHandles.SafeChainEngineHandle:.cctor() (FullOpts)
         -24 (-4.51 % of base) : 85.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (FullOpts)
         -20 (-3.70 % of base) : 383.dasm - System.Reflection.CustomAttribute:CreateAttributeArrayHelper(System.RuntimeType,int):System.Object[] (FullOpts)
         -16 (-1.76 % of base) : 12949.dasm - System.Linq.Enumerable:Contains[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.__Canon,System.Collections.Generic.IEqualityComparer`1[System.__Canon]):ubyte (FullOpts)
          -4 (-1.64 % of base) : 2838.dasm - Internal.Win32.Registry:.cctor() (FullOpts)
         -12 (-1.58 % of base) : 8239.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)
          -4 (-0.90 % of base) : 13231.dasm - System.Linq.Enumerable:All[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.89 % of base) : 687.dasm - System.Linq.Enumerable:Any[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte]):ubyte (FullOpts)
          -4 (-0.82 % of base) : 686.dasm - System.Linq.Enumerable:TryGetFirst[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,ubyte],byref):System.__Canon (FullOpts)
          -4 (-0.51 % of base) : 12498.dasm - System.Linq.Enumerable:TryGetLast[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],byref):System.__Canon (FullOpts)
          -4 (-0.30 % of base) : 3243.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)