Assembly Diffs

linux arm64

Diffs are based on 2,106,096 contexts (1,002,810 MinOpts, 1,103,286 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 142,631 (6.34%)

Overall (-137,056 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 10,908,556 -2,256
benchmarks.run_pgo.linux.arm64.checked.mch 62,521,952 -52,828
benchmarks.run_tiered.linux.arm64.checked.mch 21,455,368 -868
coreclr_tests.run.linux.arm64.checked.mch 477,083,180 -3,888
libraries.pmi.linux.arm64.checked.mch 56,402,696 -16,996
libraries_tests.run.linux.arm64.Release.mch 333,038,924 -33,948
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 130,833,864 -22,876
realworld.run.linux.arm64.checked.mch 11,127,744 -3,396

FullOpts (-137,056 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.arm64.checked.mch 10,566,760 -2,256
benchmarks.run_pgo.linux.arm64.checked.mch 38,846,792 -52,828
benchmarks.run_tiered.linux.arm64.checked.mch 4,163,788 -868
coreclr_tests.run.linux.arm64.checked.mch 128,492,112 -3,888
libraries.pmi.linux.arm64.checked.mch 56,282,712 -16,996
libraries_tests.run.linux.arm64.Release.mch 116,802,896 -33,948
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 117,336,564 -22,876
realworld.run.linux.arm64.checked.mch 10,546,820 -3,396

Example diffs

benchmarks.run.linux.arm64.checked.mch

-28 (-46.67%) : 3417.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-31.58%) : 7097.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.Canon,System.Canon]:b10_1(System.Canon):System.__Canon:this (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> x19 this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> x19 this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.__Canon>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 8 @@ -23,34 +21,22 @@ G_M11807_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M11807_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M11807_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M11807_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M11807_IG03: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3, #0x08] - cmp x2, x3 - beq G_M11807_IG05 - ;; size=28 bbWeight=0.25 PerfScore 4.12 -G_M11807_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x08]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M11807_IG05: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=20 bbWeight=1 PerfScore 13.00 +G_M11807_IG03: ; 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 76, prolog size 16, PerfScore 13.81, instruction count 19, allocated bytes for code 76 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.00, instruction count 13, allocated bytes for code 52 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +47,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
+ Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 435.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 21841.dasm - CscBench:DataflowBench():ubyte (FullOpts)

@@ -38,100 +38,99 @@ ; V27 tmp12 [V27,T01] ( 5, 20 ) ref -> x0 "spilling varStr" ; V28 tmp13 [V28,T13] ( 3, 11 ) int -> x0 "spilling unroll qmark" ; V29 tmp14 [V29,T02] ( 5, 20 ) ref -> x2 class-hnd exact "NewObj constructor temp" <<unknown class>>
-; V30 tmp15 [V30,T24] ( 2, 4 ) ref -> x0 class-hnd single-def "bubbling QMark2" <Microsoft.CodeAnalysis.Text.SourceText> -;* V31 tmp16 [V31 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V32 tmp17 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <<unknown class>> -;* V33 tmp18 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[ubyte]> -;* V34 tmp19 [V34 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> -;* V35 tmp20 [V35 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -; V36 tmp21 [V36,T31] ( 2, 2 ) ref -> x15 class-hnd single-def "Inline return value spill temp" <Microsoft.CodeAnalysis.PortableExecutableReference> -; V37 tmp22 [V37,T25] ( 2, 4 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.IO.Stream> -; V38 tmp23 [V38,T32] ( 2, 2 ) ref -> x24 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.ModuleMetadata> -;* V39 tmp24 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -; V40 tmp25 [V40,T05] ( 7, 14 ) ref -> x25 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> -;* V41 tmp26 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> -;* V42 tmp27 [V42 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V43 tmp28 [V43 ] ( 0, 0 ) ref -> zero-ref -;* V44 tmp29 [V44 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties>
+;* V30 tmp15 [V30 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[ubyte]> +; V31 tmp16 [V31,T24] ( 2, 4 ) ref -> x0 class-hnd single-def "impAppendStmt" <Microsoft.CodeAnalysis.Text.SourceText> +;* V32 tmp17 [V32,T35] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>> +;* V33 tmp18 [V33 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> +;* V34 tmp19 [V34 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +; V35 tmp20 [V35,T31] ( 2, 2 ) ref -> x15 class-hnd single-def "Inline return value spill temp" <Microsoft.CodeAnalysis.PortableExecutableReference> +; V36 tmp21 [V36,T25] ( 2, 4 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.IO.Stream> +; V37 tmp22 [V37,T32] ( 2, 2 ) ref -> x24 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.ModuleMetadata> +;* V38 tmp23 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +; V39 tmp24 [V39,T05] ( 7, 14 ) ref -> x25 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> +;* V40 tmp25 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> +;* V41 tmp26 [V41 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V42 tmp27 [V42 ] ( 0, 0 ) ref -> zero-ref +;* V43 tmp28 [V43 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V44 tmp29 [V44 ] ( 0, 0 ) ref -> zero-ref
;* V45 tmp30 [V45 ] ( 0, 0 ) ref -> zero-ref ;* V46 tmp31 [V46 ] ( 0, 0 ) ref -> zero-ref
-;* V47 tmp32 [V47 ] ( 0, 0 ) ref -> zero-ref -;* V48 tmp33 [V48 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties>
+;* V47 tmp32 [V47 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V48 tmp33 [V48 ] ( 0, 0 ) ref -> zero-ref
;* V49 tmp34 [V49 ] ( 0, 0 ) ref -> zero-ref
-;* V50 tmp35 [V50 ] ( 0, 0 ) ref -> zero-ref -;* V51 tmp36 [V51 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V52 tmp37 [V52 ] ( 0, 0 ) ref -> zero-ref single-def -;* V53 tmp38 [V53 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V54 tmp39 [V54 ] ( 0, 0 ) ref -> zero-ref single-def -;* V55 tmp40 [V55 ] ( 0, 0 ) ref -> zero-ref -;* V56 tmp41 [V56 ] ( 0, 0 ) ref -> zero-ref single-def -;* V57 tmp42 [V57 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V58 tmp43 [V58 ] ( 0, 0 ) ref -> zero-ref single-def -; V59 tmp44 [V59,T33] ( 2, 2 ) ref -> x3 single-def -; V60 tmp45 [V60,T26] ( 2, 4 ) ref -> x24 class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.AssemblyMetadata> -;* V61 tmp46 [V61 ] ( 0, 0 ) ref -> zero-ref single-def -; V62 tmp47 [V62,T34] ( 2, 2 ) ref -> x1 -; V63 tmp48 [V63,T08] ( 4, 12 ) ref -> x0 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.DataFlowAnalysis> -; V64 tmp49 [V64,T00] ( 4, 24 ) ref -> x0 class-hnd "dup spill" <<unknown class>> -;* V65 tmp50 [V65 ] ( 0, 0 ) ref -> zero-ref -; V66 tmp51 [V66,T11] ( 2, 12 ) ref -> x1 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> -; V67 tmp52 [V67,T12] ( 2, 12 ) ref -> x2 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> -; V68 tmp53 [V68,T18] ( 2, 8 ) ref -> x15 class-hnd exact "Inlining Arg" <<unknown class>> -;* V69 tmp54 [V69 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.ISymbol]> -;* V70 tmp55 [V70 ] ( 0, 0 ) ref -> zero-ref single-def "field V05._source (fldOffset=0x0)" P-INDEP -;* V71 tmp56 [V71 ] ( 0, 0 ) ref -> zero-ref single-def "field V07.array (fldOffset=0x0)" P-INDEP -;* V72 tmp57 [V72,T37] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.hasValue (fldOffset=0x0)" P-INDEP -;* V73 tmp58 [V73,T38] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.value (fldOffset=0x1)" P-INDEP -;* V74 tmp59 [V74,T35] ( 0, 0 ) ref -> zero-ref single-def "field V16.array (fldOffset=0x0)" P-INDEP -; V75 tmp60 [V75,T10] ( 3, 12 ) ref -> x23 "field V23.array (fldOffset=0x0)" P-INDEP -;* V76 tmp61 [V76 ] ( 0, 0 ) ref -> zero-ref "field V25.array (fldOffset=0x0)" P-INDEP -;* V77 tmp62 [V77,T39] ( 0, 0 ) ubyte -> zero-ref single-def "field V33.hasValue (fldOffset=0x0)" P-INDEP -;* V78 tmp63 [V78,T40] ( 0, 0 ) ubyte -> zero-ref single-def "field V33.value (fldOffset=0x1)" P-INDEP -;* V79 tmp64 [V79,T36] ( 0, 0 ) ref -> zero-ref single-def "field V34._source (fldOffset=0x0)" P-INDEP -;* V80 tmp65 [V80 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V39._kind (fldOffset=0x0)" P-INDEP -;* V81 tmp66 [V81 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V39._embedInteropTypes (fldOffset=0x1)" P-INDEP -;* V82 tmp67 [V82 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V39.<HasRecursiveAliases>k__BackingField (fldOffset=0x2)" P-INDEP -;* V83 tmp68 [V83 ] ( 0, 0 ) ref -> zero-ref single-def "field V39._aliases (fldOffset=0x8)" P-INDEP -;* V84 tmp69 [V84 ] ( 0, 0 ) ref -> zero-ref "field V69.array (fldOffset=0x0)" P-INDEP -;* V85 tmp70 [V85 ] ( 0, 0 ) ubyte -> zero-ref single-def "V35.[000..001)" -;* V86 tmp71 [V86 ] ( 0, 0 ) ubyte -> zero-ref single-def "V35.[001..002)" -;* V87 tmp72 [V87 ] ( 0, 0 ) ubyte -> zero-ref single-def "V35.[002..003)" -;* V88 tmp73 [V88 ] ( 0, 0 ) ref -> zero-ref single-def "V35.[008..016)" -;* V89 tmp74 [V89 ] ( 0, 0 ) ubyte -> zero-ref "V42.[000..001)" -;* V90 tmp75 [V90 ] ( 0, 0 ) ubyte -> zero-ref "V42.[001..002)" -;* V91 tmp76 [V91 ] ( 0, 0 ) ubyte -> zero-ref "V42.[002..003)" -;* V92 tmp77 [V92 ] ( 0, 0 ) ref -> zero-ref "V42.[008..016)" -;* V93 tmp78 [V93 ] ( 0, 0 ) ubyte -> zero-ref single-def "V51.[000..001)" -;* V94 tmp79 [V94 ] ( 0, 0 ) ubyte -> zero-ref single-def "V51.[001..002)" -;* V95 tmp80 [V95 ] ( 0, 0 ) ubyte -> zero-ref single-def "V51.[002..003)" -;* V96 tmp81 [V96 ] ( 0, 0 ) ref -> zero-ref single-def "V51.[008..016)" -;* V97 tmp82 [V97 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[000..001)" -;* V98 tmp83 [V98 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[001..002)" -;* V99 tmp84 [V99 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[002..003)" -;* V100 tmp85 [V100 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)" -;* V101 tmp86 [V101 ] ( 0, 0 ) ubyte -> zero-ref "V44.[000..001)" -;* V102 tmp87 [V102 ] ( 0, 0 ) ubyte -> zero-ref "V44.[001..002)" -;* V103 tmp88 [V103 ] ( 0, 0 ) ubyte -> zero-ref "V44.[002..003)" -;* V104 tmp89 [V104 ] ( 0, 0 ) ref -> zero-ref "V44.[008..016)" -;* V105 tmp90 [V105 ] ( 0, 0 ) ubyte -> zero-ref single-def "V53.[000..001)" -;* V106 tmp91 [V106 ] ( 0, 0 ) ubyte -> zero-ref single-def "V53.[001..002)" -;* V107 tmp92 [V107 ] ( 0, 0 ) ubyte -> zero-ref single-def "V53.[002..003)" -;* V108 tmp93 [V108 ] ( 0, 0 ) ref -> zero-ref single-def "V53.[008..016)" -;* V109 tmp94 [V109 ] ( 0, 0 ) ubyte -> zero-ref "V48.[000..001)" -;* V110 tmp95 [V110 ] ( 0, 0 ) ubyte -> zero-ref "V48.[001..002)" -;* V111 tmp96 [V111 ] ( 0, 0 ) ubyte -> zero-ref "V48.[002..003)" -;* V112 tmp97 [V112 ] ( 0, 0 ) ref -> zero-ref "V48.[008..016)" -;* V113 tmp98 [V113 ] ( 0, 0 ) ubyte -> zero-ref single-def "V57.[000..001)" -;* V114 tmp99 [V114 ] ( 0, 0 ) ubyte -> zero-ref single-def "V57.[001..002)" -;* V115 tmp100 [V115 ] ( 0, 0 ) ubyte -> zero-ref single-def "V57.[002..003)" -;* V116 tmp101 [V116 ] ( 0, 0 ) ref -> zero-ref single-def "V57.[008..016)" -;* V117 tmp102 [V117 ] ( 0, 0 ) byref -> zero-ref "Spilling address for field-by-field copy" -; V118 tmp103 [V118,T16] ( 4, 8 ) byref -> x14 single-def "Spilling address for field-by-field copy" -; V119 tmp104 [V119,T17] ( 4, 8 ) struct ( 8) [fp+0x10] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[ubyte]> -; V120 tmp105 [V120,T27] ( 2, 4 ) ref -> x0 single-def "argument with side effect" -; V121 tmp106 [V121,T04] ( 2, 16 ) ref -> x1 "argument with side effect" -; V122 cse0 [V122,T23] ( 2, 5 ) ref -> x22 hoist "CSE - moderate" -; V123 cse1 [V123,T09] ( 4, 12 ) long -> x24 "CSE - aggressive"
+;* V50 tmp35 [V50 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V51 tmp36 [V51 ] ( 0, 0 ) ref -> zero-ref single-def +;* V52 tmp37 [V52 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V53 tmp38 [V53 ] ( 0, 0 ) ref -> zero-ref single-def +;* V54 tmp39 [V54 ] ( 0, 0 ) ref -> zero-ref +;* V55 tmp40 [V55 ] ( 0, 0 ) ref -> zero-ref single-def +;* V56 tmp41 [V56 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V57 tmp42 [V57 ] ( 0, 0 ) ref -> zero-ref single-def +; V58 tmp43 [V58,T33] ( 2, 2 ) ref -> x3 single-def +; V59 tmp44 [V59,T26] ( 2, 4 ) ref -> x24 class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.AssemblyMetadata> +;* V60 tmp45 [V60 ] ( 0, 0 ) ref -> zero-ref single-def +; V61 tmp46 [V61,T34] ( 2, 2 ) ref -> x1 +; V62 tmp47 [V62,T08] ( 4, 12 ) ref -> x0 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.DataFlowAnalysis> +; V63 tmp48 [V63,T00] ( 4, 24 ) ref -> x0 class-hnd "dup spill" <<unknown class>> +;* V64 tmp49 [V64 ] ( 0, 0 ) ref -> zero-ref +; V65 tmp50 [V65,T11] ( 2, 12 ) ref -> x1 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> +; V66 tmp51 [V66,T12] ( 2, 12 ) ref -> x2 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> +; V67 tmp52 [V67,T18] ( 2, 8 ) ref -> x15 class-hnd exact "Inlining Arg" <<unknown class>> +;* V68 tmp53 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.ISymbol]> +;* V69 tmp54 [V69 ] ( 0, 0 ) ref -> zero-ref single-def "field V05._source (fldOffset=0x0)" P-INDEP +;* V70 tmp55 [V70 ] ( 0, 0 ) ref -> zero-ref single-def "field V07.array (fldOffset=0x0)" P-INDEP +;* V71 tmp56 [V71,T38] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.hasValue (fldOffset=0x0)" P-INDEP +;* V72 tmp57 [V72,T39] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.value (fldOffset=0x1)" P-INDEP +;* V73 tmp58 [V73,T36] ( 0, 0 ) ref -> zero-ref single-def "field V16.array (fldOffset=0x0)" P-INDEP +; V74 tmp59 [V74,T10] ( 3, 12 ) ref -> x23 "field V23.array (fldOffset=0x0)" P-INDEP +;* V75 tmp60 [V75 ] ( 0, 0 ) ref -> zero-ref "field V25.array (fldOffset=0x0)" P-INDEP +;* V76 tmp61 [V76,T40] ( 0, 0 ) ubyte -> zero-ref single-def "field V30.hasValue (fldOffset=0x0)" P-INDEP +;* V77 tmp62 [V77,T41] ( 0, 0 ) ubyte -> zero-ref single-def "field V30.value (fldOffset=0x1)" P-INDEP +;* V78 tmp63 [V78,T37] ( 0, 0 ) ref -> zero-ref single-def "field V33._source (fldOffset=0x0)" P-INDEP +;* V79 tmp64 [V79 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V38._kind (fldOffset=0x0)" P-INDEP +;* V80 tmp65 [V80 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V38._embedInteropTypes (fldOffset=0x1)" P-INDEP +;* V81 tmp66 [V81 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V38.<HasRecursiveAliases>k__BackingField (fldOffset=0x2)" P-INDEP +;* V82 tmp67 [V82 ] ( 0, 0 ) ref -> zero-ref single-def "field V38._aliases (fldOffset=0x8)" P-INDEP +;* V83 tmp68 [V83 ] ( 0, 0 ) ref -> zero-ref "field V68.array (fldOffset=0x0)" P-INDEP +;* V84 tmp69 [V84 ] ( 0, 0 ) ubyte -> zero-ref single-def "V34.[000..001)" +;* V85 tmp70 [V85 ] ( 0, 0 ) ubyte -> zero-ref single-def "V34.[001..002)" +;* V86 tmp71 [V86 ] ( 0, 0 ) ubyte -> zero-ref single-def "V34.[002..003)" +;* V87 tmp72 [V87 ] ( 0, 0 ) ref -> zero-ref single-def "V34.[008..016)" +;* V88 tmp73 [V88 ] ( 0, 0 ) ubyte -> zero-ref "V41.[000..001)" +;* V89 tmp74 [V89 ] ( 0, 0 ) ubyte -> zero-ref "V41.[001..002)" +;* V90 tmp75 [V90 ] ( 0, 0 ) ubyte -> zero-ref "V41.[002..003)" +;* V91 tmp76 [V91 ] ( 0, 0 ) ref -> zero-ref "V41.[008..016)" +;* V92 tmp77 [V92 ] ( 0, 0 ) ubyte -> zero-ref single-def "V50.[000..001)" +;* V93 tmp78 [V93 ] ( 0, 0 ) ubyte -> zero-ref single-def "V50.[001..002)" +;* V94 tmp79 [V94 ] ( 0, 0 ) ubyte -> zero-ref single-def "V50.[002..003)" +;* V95 tmp80 [V95 ] ( 0, 0 ) ref -> zero-ref single-def "V50.[008..016)" +;* V96 tmp81 [V96 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[000..001)" +;* V97 tmp82 [V97 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[001..002)" +;* V98 tmp83 [V98 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[002..003)" +;* V99 tmp84 [V99 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)" +;* V100 tmp85 [V100 ] ( 0, 0 ) ubyte -> zero-ref "V43.[000..001)" +;* V101 tmp86 [V101 ] ( 0, 0 ) ubyte -> zero-ref "V43.[001..002)" +;* V102 tmp87 [V102 ] ( 0, 0 ) ubyte -> zero-ref "V43.[002..003)" +;* V103 tmp88 [V103 ] ( 0, 0 ) ref -> zero-ref "V43.[008..016)" +;* V104 tmp89 [V104 ] ( 0, 0 ) ubyte -> zero-ref single-def "V52.[000..001)" +;* V105 tmp90 [V105 ] ( 0, 0 ) ubyte -> zero-ref single-def "V52.[001..002)" +;* V106 tmp91 [V106 ] ( 0, 0 ) ubyte -> zero-ref single-def "V52.[002..003)" +;* V107 tmp92 [V107 ] ( 0, 0 ) ref -> zero-ref single-def "V52.[008..016)" +;* V108 tmp93 [V108 ] ( 0, 0 ) ubyte -> zero-ref "V47.[000..001)" +;* V109 tmp94 [V109 ] ( 0, 0 ) ubyte -> zero-ref "V47.[001..002)" +;* V110 tmp95 [V110 ] ( 0, 0 ) ubyte -> zero-ref "V47.[002..003)" +;* V111 tmp96 [V111 ] ( 0, 0 ) ref -> zero-ref "V47.[008..016)" +;* V112 tmp97 [V112 ] ( 0, 0 ) ubyte -> zero-ref single-def "V56.[000..001)" +;* V113 tmp98 [V113 ] ( 0, 0 ) ubyte -> zero-ref single-def "V56.[001..002)" +;* V114 tmp99 [V114 ] ( 0, 0 ) ubyte -> zero-ref single-def "V56.[002..003)" +;* V115 tmp100 [V115 ] ( 0, 0 ) ref -> zero-ref single-def "V56.[008..016)" +;* V116 tmp101 [V116 ] ( 0, 0 ) byref -> zero-ref "Spilling address for field-by-field copy" +; V117 tmp102 [V117,T16] ( 4, 8 ) byref -> x14 single-def "Spilling address for field-by-field copy" +; V118 tmp103 [V118,T17] ( 4, 8 ) struct ( 8) [fp+0x10] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[ubyte]> +; V119 tmp104 [V119,T27] ( 2, 4 ) ref -> x0 single-def "argument with side effect" +; V120 tmp105 [V120,T04] ( 2, 16 ) ref -> x1 "argument with side effect" +; V121 cse0 [V121,T23] ( 2, 5 ) ref -> x22 hoist "CSE - moderate" +; V122 cse1 [V122,T09] ( 4, 12 ) long -> x24 "CSE - aggressive"
; ; Lcl frame size = 184 @@ -157,11 +156,11 @@ G_M35861_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ldr x3, [x3] blr x3 ; gcrRegs +[x0]
- strb wzr, [fp, #0x10] // [V119 tmp104] - strb wzr, [fp, #0x11] // [V119 tmp104+0x01] - ldrh w4, [fp, #0x10] // [V119 tmp104] - mov x5, xzr
+ strb wzr, [fp, #0x10] // [V118 tmp103] + strb wzr, [fp, #0x11] // [V118 tmp103+0x01] + ldrh w4, [fp, #0x10] // [V118 tmp103]
mov x1, xzr
+ mov x5, xzr
movz x2, #0xD1FFAB1E movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 @@ -234,7 +233,7 @@ G_M35861_IG15: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { ;; size=4 bbWeight=1 PerfScore 1.00 G_M35861_IG16: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz str w0, [sp, #0x98] // [V15 OutArgs+0x98]
- ldrh w0, [fp, #0x10] // [V119 tmp104]
+ ldrh w0, [fp, #0x10] // [V118 tmp103]
str w0, [sp, #0x28] // [V15 OutArgs+0x28] mov x0, x20 ; gcrRegs +[x0]

+0 (0.00%) : 9592.dasm - System.Linq.Expressions.Compiler.ILGen:CanEmitILConstant(System.Type):ubyte (FullOpts)

@@ -9,24 +9,19 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T01] ( 3, 3 ) ref -> x0 class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 3, 3 ) int -> x19
+;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.Type>
-; V04 tmp2 [V04,T03] ( 3, 2 ) int -> x19 "Inline return value spill temp" -;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp4 [V06 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V08 tmp6 [V08 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V11 tmp9 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V13 tmp11 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V15 tmp13 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V17 tmp15 [V17 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V18 tmp16 [V18 ] ( 0, 0 ) int -> zero-ref "index expr"
+; V04 tmp2 [V04,T02] ( 4, 3 ) int -> x19 "Inline return value spill temp" +;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> +;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V13 tmp11 [V13 ] ( 0, 0 ) int -> zero-ref "index expr"
; ; Lcl frame size = 8

+0 (0.00%) : 15228.dasm - System.Collections.Generic.SortedSet1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable1[System.Canon],System.Collections.Generic.IComparer`1[System.Canon]):this (FullOpts)

@@ -25,40 +25,41 @@ ; V14 tmp6 [V14,T02] ( 4, 16 ) int -> x22 "impSpillLclRefs" ; V15 tmp7 [V15,T10] ( 2, 8 ) ref -> x15 class-hnd "Strict ordering of exceptions for Array store" <System.__Canon> ; V16 tmp8 [V16,T33] ( 3, 2 ) long -> x1 "spilling helperCall"
-; V17 tmp9 [V17,T34] ( 3, 2 ) long -> x2 "spilling helperCall" -;* V18 tmp10 [V18,T42] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V19 tmp11 [V19 ] ( 0, 0 ) ref -> zero-ref single-def -; V20 tmp12 [V20,T19] ( 4, 3.50) ref -> x15 -;* V21 tmp13 [V21 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V22 tmp14 [V22,T18] ( 2, 4 ) long -> x0 "argument with side effect" -; V23 tmp15 [V23,T39] ( 2, 2 ) long -> x0 "argument with side effect" -; V24 tmp16 [V24,T40] ( 2, 2 ) long -> x0 "argument with side effect"
+;* V17 tmp9 [V17 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V18 tmp10 [V18 ] ( 0, 0 ) ref -> zero-ref single-def +; V19 tmp11 [V19,T19] ( 4, 3.50) ref -> x15 +;* V20 tmp12 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V21 tmp13 [V21,T18] ( 2, 4 ) long -> x0 "argument with side effect" +; V22 tmp14 [V22,T39] ( 2, 2 ) long -> x0 "argument with side effect" +; V23 tmp15 [V23,T40] ( 2, 2 ) long -> x0 "argument with side effect" +; V24 tmp16 [V24,T41] ( 2, 2 ) long -> x0 "argument with side effect"
; V25 tmp17 [V25,T03] ( 2, 16 ) ref -> x1 "argument with side effect" ; V26 cse0 [V26,T15] ( 2, 4.50) long -> x24 hoist "CSE - aggressive" ; V27 cse1 [V27,T09] ( 3, 10 ) long -> x27 "CSE - aggressive"
-; V28 cse2 [V28,T41] ( 3, 1.50) int -> x0 "CSE - conservative"
+; V28 cse2 [V28,T42] ( 3, 1.50) int -> x0 "CSE - conservative"
; V29 cse3 [V29,T07] ( 4, 10.50) int -> x25 hoist "CSE - aggressive" ; V30 cse4 [V30,T05] ( 5, 12.50) byref -> x26 hoist "CSE - aggressive" ; V31 cse5 [V31,T06] ( 3, 12 ) int -> x2 "CSE - aggressive" ; V32 rat0 [V32,T27] ( 3, 2.20) long -> x0 "Spilling to split statement for tree"
-; V33 rat1 [V33,T35] ( 3, 2 ) long -> x1 "runtime lookup"
+; V33 rat1 [V33,T34] ( 3, 2 ) long -> x1 "runtime lookup"
; V34 rat2 [V34,T20] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable" ; V35 rat3 [V35,T16] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" ; V36 rat4 [V36,T17] ( 3, 4 ) long -> x0 "runtime lookup" ; V37 rat5 [V37,T12] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" ; V38 rat6 [V38,T28] ( 3, 2.20) long -> x0 "Spilling to split statement for tree"
-; V39 rat7 [V39,T21] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V40 rat8 [V40,T29] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V41 rat9 [V41,T36] ( 3, 2 ) long -> x0 "runtime lookup" -; V42 rat10 [V42,T22] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V43 rat11 [V43,T30] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V44 rat12 [V44,T37] ( 3, 2 ) long -> x0 "runtime lookup" -; V45 rat13 [V45,T23] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V46 rat14 [V46,T31] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V47 rat15 [V47,T38] ( 3, 2 ) long -> x24 "runtime lookup" -; V48 rat16 [V48,T24] ( 3, 2.80) long -> x24 "fgMakeTemp is creating a new local variable" -; V49 rat17 [V49,T32] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V50 rat18 [V50,T25] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
+; V39 rat7 [V39,T35] ( 3, 2 ) long -> x0 "runtime lookup" +; V40 rat8 [V40,T21] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V41 rat9 [V41,T29] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V42 rat10 [V42,T36] ( 3, 2 ) long -> x0 "runtime lookup" +; V43 rat11 [V43,T22] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V44 rat12 [V44,T30] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V45 rat13 [V45,T37] ( 3, 2 ) long -> x0 "runtime lookup" +; V46 rat14 [V46,T23] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V47 rat15 [V47,T31] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V48 rat16 [V48,T38] ( 3, 2 ) long -> x24 "runtime lookup" +; V49 rat17 [V49,T24] ( 3, 2.80) long -> x24 "fgMakeTemp is creating a new local variable" +; V50 rat18 [V50,T32] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V51 rat19 [V51,T25] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -154,21 +155,22 @@ G_M4921_IG11: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs= cbz x2, G_M4921_IG13 ;; size=20 bbWeight=0.50 PerfScore 6.50 G_M4921_IG12: ; bbWeight=0.40, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M4921_IG14
- ;; size=4 bbWeight=0.40 PerfScore 0.40
+ ;; size=8 bbWeight=0.40 PerfScore 0.60
G_M4921_IG13: ; bbWeight=0.10, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov x2, x0 - ;; size=20 bbWeight=0.10 PerfScore 0.30
+ ;; size=16 bbWeight=0.10 PerfScore 0.25
G_M4921_IG14: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x20] - cmp x0, x2 - beq G_M4921_IG16
+ mov x1, x20 + ; gcrRegs +[x1] + bl CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[x1] +[x0] + cbnz x0, G_M4921_IG16
mov x0, x19
- ; gcrRegs +[x0]
mov x1, x20 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for System.Collections.Generic.SortedSet`1[System.__Canon]:HasEqualComparer(System.Collections.Generic.SortedSet`1[System.__Canon]):ubyte:this @@ -207,7 +209,7 @@ G_M4921_IG14: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs= bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15] ; byrRegs -[x14]
- ;; size=128 bbWeight=0.50 PerfScore 22.50
+ ;; size=128 bbWeight=0.50 PerfScore 21.50
G_M4921_IG15: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, epilog, nogc ldp x27, x28, [sp, #0x60] ldp x25, x26, [sp, #0x50] @@ -414,7 +416,7 @@ G_M4921_IG34: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr brk_unix #0 ;; size=44 bbWeight=0 PerfScore 0.00
-; Total bytes of code 908, prolog size 32, PerfScore 228.95, instruction count 227, allocated bytes for code 908 (MethodHash=e434ecc6) for method System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 908, prolog size 32, PerfScore 228.10, instruction count 227, allocated bytes for code 908 (MethodHash=e434ecc6) for method System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
; ============================================================ Unwind Info:

benchmarks.run_pgo.linux.arm64.checked.mch

-28 (-28.00%) : 7322.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-17.14%) : 80530.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.Canon]:get_Current():System.Canon:this (Tier1)

@@ -8,22 +8,19 @@ ; 1 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 4 ) byref -> x0 this single-def -; V01 TypeCtx [V01,T02] ( 4, 3.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) byref -> x0 this single-def +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x19 single-def
;# 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 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T10] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T08] ( 4, 2.12) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> -; V08 tmp6 [V08,T04] ( 2, 4 ) byref -> x1 single-def "Inlining Arg" -; V09 tmp7 [V09,T03] ( 3, 5 ) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref single-def -;* V11 tmp9 [V11,T11] ( 0, 0 ) int -> zero-ref -; V12 tmp10 [V12,T07] ( 2, 3 ) int -> x2 "Inlining Arg" -; V13 tmp11 [V13,T09] ( 2, 2 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V14 tmp12 [V14,T06] ( 3, 3 ) ref -> x0 single-def "argument with side effect" -; V15 cse0 [V15,T05] ( 4, 3 ) ref -> x0 "CSE - aggressive"
+; V04 tmp2 [V04,T07] ( 3, 2 ) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> +; V05 tmp3 [V05,T03] ( 2, 4 ) byref -> x1 single-def "Inlining Arg" +; V06 tmp4 [V06,T02] ( 3, 5 ) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def +;* V08 tmp6 [V08,T09] ( 0, 0 ) int -> zero-ref +; V09 tmp7 [V09,T06] ( 2, 3 ) int -> x2 "Inlining Arg" +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V11 tmp9 [V11,T05] ( 3, 3 ) ref -> x0 single-def "argument with side effect" +; V12 cse0 [V12,T04] ( 4, 3 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -67,33 +64,21 @@ G_M44215_IG04: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b mov x1, x0 ; gcrRegs +[x1] ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M44215_IG08 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M44215_IG06: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M44215_IG08 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M44215_IG07: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M44215_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 10.00 +G_M44215_IG06: ; 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 140, prolog size 16, PerfScore 31.06, instruction count 35, allocated bytes for code 140 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
+; Total bytes of code 116, prolog size 16, PerfScore 36.00, instruction count 29, allocated bytes for code 116 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -104,7 +89,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ 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)

-48 (-14.63%) : 96266.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.Canon]:get_Item(int):System.Canon:this (Tier1)

@@ -10,22 +10,17 @@ ; Final local variable assignments ; ; V00 this [V00,T02] ( 4, 3.29) byref -> x0 this single-def
-; V01 TypeCtx [V01,T00] ( 5, 3.86) long -> x19 single-def
+; V01 TypeCtx [V01,T00] ( 5, 4 ) long -> x19 single-def
; V02 arg1 [V02,T01] ( 5, 3.29) int -> x2 single-def
-; V03 loc0 [V03,T03] ( 10, 5 ) ref -> x20 class-hnd single-def <Microsoft.CodeAnalysis.SyntaxNode>
+; V03 loc0 [V03,T03] ( 8, 4.29) ref -> x20 class-hnd single-def <Microsoft.CodeAnalysis.SyntaxNode>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T11] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V06 tmp2 [V06 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V07 tmp3 [V07,T09] ( 3, 0.71) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp4 [V08,T07] ( 5, 2.14) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V09 tmp5 [V09,T05] ( 3, 3.57) long -> x1 "fgMakeTemp is creating a new local variable" -; V10 tmp6 [V10,T06] ( 3, 2.86) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -;* V11 tmp7 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -; V12 tmp8 [V12,T04] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V13 tmp9 [V13,T08] ( 3, 1.14) int -> x1 "Inlining Arg" -; V14 tmp10 [V14,T10] ( 4, 0.64) ref -> x1 "guarded devirt return temp" -;* V15 tmp11 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren> -; V16 tmp12 [V16,T12] ( 2, 0 ) ref -> x1 single-def "argument with side effect"
+; V05 tmp1 [V05,T07] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V06 tmp2 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +; V07 tmp3 [V07,T04] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V08 tmp4 [V08,T05] ( 3, 1.14) int -> x1 "Inlining Arg" +; V09 tmp5 [V09,T06] ( 3, 0.57) ref -> x1 "guarded devirt return temp" +;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren> +; V11 tmp7 [V11,T08] ( 2, 0 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 16 @@ -40,57 +35,44 @@ G_M13118_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre ; byrRegs +[x0] ldr x20, [x0, #0x08] ; gcrRegs +[x20]
- cbz x20, G_M13118_IG12
+ cbz x20, G_M13118_IG08
ldr x1, [x20, #0x18] ; gcrRegs +[x1] ldrh w1, [x1, #0x0C] ; gcrRegs -[x1] cmp w1, #1
- beq G_M13118_IG07
+ beq G_M13118_IG05
;; size=24 bbWeight=1 PerfScore 11.50 G_M13118_IG03: ; bbWeight=0.71, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz ; byrRegs -[x0]
- cbnz w2, G_M13118_IG12 - ldr x0, [x20] - ldr x1, [x19, #0x38] - ldr x1, [x1] - ldr x1, [x1] - cmp x0, x1 - beq G_M13118_IG05 - ;; size=28 bbWeight=0.71 PerfScore 10.36 -G_M13118_IG04: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - mov x0, x1
+ cbnz w2, G_M13118_IG08 + ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
mov x1, x20 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1 x20] +[x0]
- b G_M13118_IG06 - ;; size=16 bbWeight=0.36 PerfScore 1.07 -G_M13118_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] +[x20] - mov x0, x20 - ; gcrRegs +[x0] - ;; size=4 bbWeight=0.36 PerfScore 0.18 -G_M13118_IG06: ; bbWeight=0.71, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x20]
+ ;; size=24 bbWeight=0.71 PerfScore 8.21 +G_M13118_IG04: ; bbWeight=0.71, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0.71 PerfScore 2.14
-G_M13118_IG07: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, gcvars, byref, isz
+G_M13118_IG05: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, gcvars, byref, isz
; gcrRegs -[x0] +[x20] ; byrRegs +[x0] ldr w0, [x0] ; byrRegs -[x0] cmp w2, w0
- bhs G_M13118_IG12
+ bhs G_M13118_IG08
lsl w1, w2, #1 ldr x0, [x20] movz x2, #0xD1FFAB1E movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 cmp x0, x2
- bne G_M13118_IG13
+ bne G_M13118_IG09
mov x0, x20 ; gcrRegs +[x0] movz x2, #0xD1FFAB1E // code for Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this @@ -102,32 +84,20 @@ G_M13118_IG07: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100 mov x1, x0 ; gcrRegs +[x1] ;; size=68 bbWeight=0.29 PerfScore 5.14
-G_M13118_IG08: ; bbWeight=0.29, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M13118_IG06: ; bbWeight=0.29, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M13118_IG11 - ;; size=8 bbWeight=0.29 PerfScore 0.43 -G_M13118_IG09: ; bbWeight=0.14, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M13118_IG11 - ;; size=24 bbWeight=0.14 PerfScore 1.93 -G_M13118_IG10: ; bbWeight=0.07, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.07 PerfScore 0.11 -G_M13118_IG11: ; bbWeight=0.29, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=0.29 PerfScore 2.86 +G_M13118_IG07: ; bbWeight=0.29, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0.29 PerfScore 0.86
-G_M13118_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13118_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -157,7 +127,7 @@ G_M13118_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { bl CORINFO_HELP_THROW ; gcrRegs -[x0 x19] ;; size=76 bbWeight=0 PerfScore 0.00
-G_M13118_IG13: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M13118_IG09: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs +[x20] mov x0, x20 ; gcrRegs +[x0] @@ -168,10 +138,10 @@ G_M13118_IG13: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ; gcrRegs -[x20] mov x1, x0 ; gcrRegs +[x1]
- b G_M13118_IG08
+ b G_M13118_IG06
;; size=28 bbWeight=0 PerfScore 0.00
-; Total bytes of code 328, prolog size 16, PerfScore 37.71, instruction count 82, allocated bytes for code 328 (MethodHash=6436ccc1) for method Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
+; Total bytes of code 280, prolog size 16, PerfScore 34.71, instruction count 70, allocated bytes for code 280 (MethodHash=6436ccc1) for method Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -182,7 +152,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 82 (0x00052) Actual length = 328 (0x000148)
+ Function Length : 70 (0x00046) Actual length = 280 (0x000118)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+48 (+2.55%) : 131610.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

@@ -11,43 +11,43 @@ ; ; V00 this [V00,T00] ( 19, 16.97) ref -> x19 this class-hnd single-def <System.Reflection.Emit.DynamicMethod> ; V01 arg1 [V01,T14] ( 4, 4 ) ref -> x24 class-hnd single-def <System.String>
-; V02 arg2 [V02,T19] ( 3, 3 ) int -> x2 single-def -; V03 arg3 [V03,T20] ( 3, 3 ) int -> x3 single-def -; V04 arg4 [V04,T11] ( 7, 4.37) ref -> x22 class-hnd single-def <System.Type> -; V05 arg5 [V05,T09] ( 5, 6.00) ref -> x21 class-hnd single-def <System.Type[]> -; V06 arg6 [V06,T08] ( 10, 7.00) ref -> x20 class-hnd single-def <System.Type>
+; V02 arg2 [V02,T20] ( 3, 3 ) int -> x2 single-def +; V03 arg3 [V03,T21] ( 3, 3 ) int -> x3 single-def +; V04 arg4 [V04,T12] ( 7, 4.37) ref -> x22 class-hnd single-def <System.Type> +; V05 arg5 [V05,T08] ( 5, 6.00) ref -> x21 class-hnd single-def <System.Type[]> +; V06 arg6 [V06,T06] ( 10, 7.00) ref -> x20 class-hnd single-def <System.Type>
; V07 arg7 [V07,T13] ( 7, 4.04) ref -> x23 class-hnd single-def <System.Reflection.Module>
-; V08 arg8 [V08,T42] ( 2, 1 ) ubyte -> [fp+0x70] single-def -; V09 arg9 [V09,T41] ( 1, 1.01) ubyte -> x25 single-def
+; V08 arg8 [V08,T44] ( 2, 1 ) ubyte -> [fp+0x70] single-def +; V09 arg9 [V09,T43] ( 1, 1.01) ubyte -> x25 single-def
; V10 loc0 [V10,T02] ( 7, 12.92) int -> x27
-; V11 loc1 [V11,T07] ( 10, 9.39) ref -> x20 class-hnd exact <System.RuntimeType>
+; V11 loc1 [V11,T07] ( 9, 8.89) ref -> x20 class-hnd exact single-def <System.RuntimeType>
;# V12 OutArgs [V12 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V13 tmp1 [V13,T46] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V13 tmp1 [V13,T48] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
;* V14 tmp2 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp3 [V15 ] ( 0, 0 ) ref -> zero-ref
-; V16 tmp4 [V16,T33] ( 4, 2.70) ref -> x15 -; V17 tmp5 [V17,T29] ( 2, 2.00) int -> x0 -; V18 tmp6 [V18,T40] ( 2, 0.03) int -> x0 -; V19 tmp7 [V19,T30] ( 2, 2.00) int -> x0 -; V20 tmp8 [V20,T35] ( 3, 1.98) ref -> x20 -;* V21 tmp9 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V22 tmp10 [V22,T47] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V23 tmp11 [V23,T45] ( 2, 0.01) int -> x0 -;* V24 tmp12 [V24 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V25 tmp13 [V25,T12] ( 6, 6.11) ref -> x15 class-hnd "spilling QMark2" <System.RuntimeType> -; V26 tmp14 [V26,T48] ( 3, 0 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V27 tmp15 [V27,T04] ( 3, 11.91) ref -> [fp+0x10] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> -;* V28 tmp16 [V28 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -; V29 tmp17 [V29,T01] ( 5, 14.88) ref -> x15 class-hnd "spilling QMark2" <System.RuntimeType> -; V30 tmp18 [V30,T49] ( 3, 0 ) ref -> x22 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V31 tmp19 [V31,T50] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V32 tmp20 [V32,T26] ( 3, 3.97) ref -> x15 "guarded devirt return temp" -; V33 tmp21 [V33,T03] ( 5, 11.91) ref -> x0 "guarded devirt arg temp" -;* V34 tmp22 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V35 tmp23 [V35,T39] ( 3, 1.36) ref -> x22 "guarded devirt return temp" -;* V36 tmp24 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V37 tmp25 [V37,T34] ( 3, 1.99) ref -> x20 "guarded devirt return temp" -;* V38 tmp26 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
+; V16 tmp4 [V16,T35] ( 4, 2.70) ref -> x15 +; V17 tmp5 [V17,T30] ( 2, 2.00) int -> x0 +; V18 tmp6 [V18,T42] ( 2, 0.03) int -> x0 +; V19 tmp7 [V19,T31] ( 2, 2.00) int -> x0 +; V20 tmp8 [V20,T37] ( 3, 1.98) ref -> x20 +; V21 tmp9 [V21,T49] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V22 tmp10 [V22,T47] ( 2, 0.01) int -> x0 +; V23 tmp11 [V23,T34] ( 2, 2.72) ref -> x15 class-hnd exact single-def "dup spill" <System.RuntimeType> +; V24 tmp12 [V24,T50] ( 3, 0 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V25 tmp13 [V25,T04] ( 3, 11.91) ref -> [fp+0x18] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> +; V26 tmp14 [V26,T10] ( 2, 7.94) ref -> x15 class-hnd exact "Strict ordering of exceptions for Array store" <System.RuntimeType> +; V27 tmp15 [V27,T51] ( 3, 0 ) ref -> x22 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V28 tmp16 [V28,T52] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V29 tmp17 [V29,T27] ( 3, 3.97) ref -> x0 "guarded devirt return temp" +; V30 tmp18 [V30,T03] ( 5, 11.91) ref -> x0 "guarded devirt arg temp" +;* V31 tmp19 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V32 tmp20 [V32,T41] ( 3, 1.36) ref -> x22 "guarded devirt return temp" +;* V33 tmp21 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V34 tmp22 [V34,T36] ( 3, 1.99) ref -> x20 "guarded devirt return temp" +;* V35 tmp23 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V36 tmp24 [V36 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V37 tmp25 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V38 tmp26 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp27 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V40 tmp28 [V40 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V41 tmp29 [V41 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" @@ -58,52 +58,51 @@ ;* V46 tmp34 [V46 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V47 tmp35 [V47 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V48 tmp36 [V48 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-;* V49 tmp37 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V50 tmp38 [V50 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V51 tmp39 [V51 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V52 tmp40 [V52,T43] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V53 tmp41 [V53,T22] ( 5, 4.94) ubyte -> x0 "Inline stloc first use temp" -;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> -;* V55 tmp43 [V55 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> -;* V56 tmp44 [V56 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> -;* V57 tmp45 [V57 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> -; V59 tmp47 [V59,T21] ( 12, 4.94) ref -> x23 class-hnd "Inline stloc first use temp" <System.Type> -; V60 tmp48 [V60,T24] ( 3, 4.94) int -> x1 "guarded devirt return temp" -;* V61 tmp49 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V62 tmp50 [V62,T25] ( 3, 4.94) ubyte -> x1 "Inline return value spill temp" -; V63 tmp51 [V63,T23] ( 5, 4.94) ubyte -> x0 "Inline stloc first use temp" -;* V64 tmp52 [V64 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> -;* V65 tmp53 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V66 tmp54 [V66 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> -; V67 tmp55 [V67,T51] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> -;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V69 tmp57 [V69,T36] ( 3, 1.98) int -> x1 -; V70 tmp58 [V70,T38] ( 2, 1.98) ubyte -> x14 "Inline stloc first use temp" -;* V71 tmp59 [V71 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V72 tmp60 [V72 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V73 tmp61 [V73 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V74 tmp62 [V74,T28] ( 2, 3.95) byref -> x14 single-def "Inlining Arg" -;* V75 tmp63 [V75 ] ( 0, 0 ) ref -> zero-ref single-def "field V55.m_type (fldOffset=0x0)" P-INDEP -; V76 tmp64 [V76,T31] ( 5, 2.96) ref -> x0 single-def "field V56.m_type (fldOffset=0x0)" P-INDEP -; V77 tmp65 [V77,T37] ( 2, 1.98) ref -> x0 single-def "field V64.m_type (fldOffset=0x0)" P-INDEP -;* V78 tmp66 [V78 ] ( 0, 0 ) long -> zero-ref "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP -; V79 tmp67 [V79,T32] ( 3, 2.96) long -> x14 "field V71.m_asTAddr (fldOffset=0x0)" P-INDEP -; V80 tmp68 [V80,T05] ( 3, 11.91) ref -> x2 "arr expr" -;* V81 tmp69 [V81,T27] ( 0, 0 ) ref -> zero-ref "arr expr" -; V82 tmp70 [V82,T52] ( 2, 0 ) ref -> x1 "argument with side effect" -; V83 tmp71 [V83,T53] ( 2, 0 ) ref -> x1 "argument with side effect" -; V84 tmp72 [V84,T44] ( 2, 0.07) ref -> x1 single-def "argument with side effect" -; V85 tmp73 [V85,T54] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V86 tmp74 [V86,T55] ( 2, 0 ) ref -> x2 single-def "argument with side effect" -; V87 tmp75 [V87,T56] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V88 tmp76 [V88,T57] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V89 cse0 [V89,T15] ( 3, 5.95) ref -> x14 "CSE - aggressive" -; V90 cse1 [V90,T16] ( 3, 5.95) ref -> x0 "CSE - aggressive" -; V91 cse2 [V91,T10] ( 4, 7.94) long -> x28 "CSE - aggressive" -; V92 cse3 [V92,T17] ( 2, 3.97) ref -> x2 "CSE - moderate" -; V93 cse4 [V93,T06] ( 12, 11.61) long -> [fp+0x18] multi-def "CSE - aggressive" -; V94 cse5 [V94,T18] ( 4, 5.01) int -> x26 "CSE - moderate"
+;* V49 tmp37 [V49,T45] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V50 tmp38 [V50,T23] ( 5, 4.94) ubyte -> x0 "Inline stloc first use temp" +;* V51 tmp39 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> +;* V52 tmp40 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> +;* V53 tmp41 [V53 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> +;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V55 tmp43 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> +; V56 tmp44 [V56,T22] ( 12, 4.94) ref -> x21 class-hnd "Inline stloc first use temp" <System.Type> +; V57 tmp45 [V57,T25] ( 3, 4.94) int -> x1 "guarded devirt return temp" +;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V59 tmp47 [V59,T26] ( 3, 4.94) ubyte -> x1 "Inline return value spill temp" +; V60 tmp48 [V60,T24] ( 5, 4.94) ubyte -> x0 "Inline stloc first use temp" +;* V61 tmp49 [V61 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> +;* V62 tmp50 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V63 tmp51 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V64 tmp52 [V64,T53] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> +;* V65 tmp53 [V65 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V66 tmp54 [V66,T38] ( 3, 1.98) int -> x1 +; V67 tmp55 [V67,T40] ( 2, 1.98) ubyte -> x14 "Inline stloc first use temp" +;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V69 tmp57 [V69 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V70 tmp58 [V70 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V71 tmp59 [V71,T29] ( 2, 3.95) byref -> x14 single-def "Inlining Arg" +;* V72 tmp60 [V72 ] ( 0, 0 ) ref -> zero-ref single-def "field V52.m_type (fldOffset=0x0)" P-INDEP +; V73 tmp61 [V73,T32] ( 5, 2.96) ref -> x0 single-def "field V53.m_type (fldOffset=0x0)" P-INDEP +; V74 tmp62 [V74,T39] ( 2, 1.98) ref -> x0 single-def "field V61.m_type (fldOffset=0x0)" P-INDEP +;* V75 tmp63 [V75 ] ( 0, 0 ) long -> zero-ref "field V65.m_asTAddr (fldOffset=0x0)" P-INDEP +; V76 tmp64 [V76,T33] ( 3, 2.96) long -> x14 "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP +; V77 tmp65 [V77,T05] ( 3, 11.91) ref -> x14 "arr expr" +;* V78 tmp66 [V78,T28] ( 0, 0 ) ref -> zero-ref "arr expr" +; V79 tmp67 [V79,T54] ( 2, 0 ) ref -> x1 "argument with side effect" +; V80 tmp68 [V80,T55] ( 2, 0 ) ref -> x1 "argument with side effect" +; V81 tmp69 [V81,T46] ( 2, 0.07) ref -> x1 single-def "argument with side effect" +; V82 tmp70 [V82,T56] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V83 tmp71 [V83,T57] ( 2, 0 ) ref -> x2 single-def "argument with side effect" +; V84 tmp72 [V84,T58] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V85 tmp73 [V85,T59] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V86 cse0 [V86,T15] ( 3, 5.95) ref -> x14 "CSE - aggressive" +; V87 cse1 [V87,T16] ( 3, 5.95) ref -> x0 "CSE - aggressive" +; V88 cse2 [V88,T09] ( 4, 7.94) long -> x28 "CSE - aggressive" +; V89 cse3 [V89,T17] ( 2, 3.97) ref -> x14 "CSE - moderate" +; V90 cse4 [V90,T19] ( 4, 5.01) int -> x26 "CSE - moderate" +; V91 rat0 [V91,T01] ( 5, 14.88) ref -> x15 class-hnd "replacement local" <System.RuntimeType> +; V92 rat1 [V92,T18] ( 5, 5.09) ref -> x22 class-hnd "replacement local" <System.RuntimeType> +; V93 rat2 [V93,T11] ( 5, 7.41) ref -> x20 class-hnd "replacement local" <System.RuntimeType>
; ; Lcl frame size = 16 @@ -130,13 +129,13 @@ G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w25, [fp, #0x78] // [V09 arg9] ;; size=56 bbWeight=1 PerfScore 11.50 G_M32743_IG02: ; bbWeight=1, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
- cbz x24, G_M32743_IG44
+ cbz x24, G_M32743_IG46
cmp w2, #22 ccmp w3, #1, 0, eq
- bne G_M32743_IG45
+ bne G_M32743_IG47
;; size=16 bbWeight=1 PerfScore 3.00 G_M32743_IG03: ; bbWeight=1.01, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
- cbz x21, G_M32743_IG49
+ cbz x21, G_M32743_IG51
;; size=4 bbWeight=1.01 PerfScore 1.01 G_M32743_IG04: ; bbWeight=1.01, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz ldr w26, [x21, #0x08] @@ -164,30 +163,33 @@ G_M32743_IG05: ; bbWeight=1.98, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x2 ubfiz x28, x27, #3, #32 ldr x0, [x14, x28] ; gcrRegs +[x0]
- cbz x0, G_M32743_IG47
+ cbz x0, G_M32743_IG49
ldr x1, [x19, #0x08] ; gcrRegs +[x1]
- str x1, [fp, #0x10] // [V27 tmp15] - ; GC ptr vars +{V27}
+ str x1, [fp, #0x18] // [V25 tmp13] + ; GC ptr vars +{V25}
ldr x14, [x0] ; byrRegs -[x14]
- movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x14, x2 - bne G_M32743_IG46
+ movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #0xD1FFAB1E LSL #32 + cmp x14, x15 + bne G_M32743_IG48 + ;; size=48 bbWeight=1.98 PerfScore 30.76 +G_M32743_IG06: ; bbWeight=1.98, gcVars=0000000000000010 {V25}, gcrefRegs=1F80003 {x0 x1 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, gcvars, byref, isz
mov x15, x0 ; gcrRegs +[x15]
- ;; size=52 bbWeight=1.98 PerfScore 31.75 -G_M32743_IG06: ; bbWeight=1.98, gcVars=0000000000000010 {V27}, gcrefRegs=1F88002 {x1 x15 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0]
cbz x15, G_M32743_IG09
- ;; size=4 bbWeight=1.98 PerfScore 1.98
+ ;; size=8 bbWeight=1.98 PerfScore 2.98
G_M32743_IG07: ; bbWeight=0.99, gcrefRegs=1F88002 {x1 x15 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
+ ; gcrRegs -[x0]
ldr x14, [x15]
- cmp x14, x2
+ movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #0xD1FFAB1E LSL #32 + cmp x14, x12
beq G_M32743_IG09
- ;; size=12 bbWeight=0.99 PerfScore 4.47
+ ;; size=24 bbWeight=0.99 PerfScore 5.95
G_M32743_IG08: ; bbWeight=0.50, gcrefRegs=1F80002 {x1 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref ; gcrRegs -[x15] mov x15, xzr @@ -196,81 +198,89 @@ G_M32743_IG08: ; bbWeight=0.50, gcrefRegs=1F80002 {x1 x19 x20 x21 x22 x23 G_M32743_IG09: ; bbWeight=1.98, gcrefRegs=1F88002 {x1 x15 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz ldr w14, [x1, #0x08] cmp w27, w14
- bhs G_M32743_IG43
+ bhs G_M32743_IG45
add x14, x1, #16 ; byrRegs +[x14] add x14, x14, x28
- ; GC ptr vars -{V27}
+ ; GC ptr vars -{V25}
...

+16 (+6.90%) : 86978.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,17 +10,15 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,299.98) int -> x19
+; V01 loc0 [V01,T01] ( 4,299.98) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,447.34) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,248.52) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,745.57) ref -> x15 class-hnd "spilling QMark2" <PerfLabTests.Foo[]> -; V06 cse0 [V06,T05] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3, 99.43) ref -> x22 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.01) int -> x20 "CSE - aggressive" -; V09 cse3 [V09,T07] ( 3, 99.43) long -> x21 "CSE - aggressive" -; V10 rat0 [V10,T09] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" -; V11 rat1 [V11,T08] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.Foo[]>
+; V03 cse0 [V03,T03] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4, 99.43) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.01) int -> x20 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3, 99.43) long -> x21 "CSE - aggressive" +; V07 rat0 [V07,T07] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" +; V08 rat1 [V08,T06] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.Foo[]> +; V09 rat2 [V09,T00] ( 5,695.87) ref -> x15 class-hnd "replacement local" <PerfLabTests.Foo[]>
; ; Lcl frame size = 8 @@ -33,12 +31,12 @@ G_M13964_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldr w19, [fp, #0x84] ;; size=24 bbWeight=0.01 PerfScore 0.07 G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ldr w20, [x0]
+ movz x14, #0xD1FFAB1E + movk x14, #0xD1FFAB1E LSL #16 + movk x14, #0xD1FFAB1E LSL #32 + ldr w20, [x14]
cmp w19, w20
- bge G_M13964_IG12
+ bge G_M13964_IG13
;; size=24 bbWeight=0.01 PerfScore 0.06 G_M13964_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movz x21, #0xD1FFAB1E @@ -53,11 +51,11 @@ G_M13964_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr cbz x23, G_M13964_IG06 ;; size=28 bbWeight=0.01 PerfScore 0.06 G_M13964_IG04: ; bbWeight=0.00, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x23] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2
+ ldr x14, [x23] + movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #0xD1FFAB1E LSL #32 + cmp x14, x15
beq G_M13964_IG06 ;; size=24 bbWeight=0.00 PerfScore 0.03 G_M13964_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref @@ -77,45 +75,51 @@ G_M13964_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {} ;; size=36 bbWeight=0 PerfScore 0.00 G_M13964_IG06: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- cbz x23, G_M13964_IG11
+ cbz x23, G_M13964_IG09
;; size=4 bbWeight=99.99 PerfScore 99.99 G_M13964_IG07: ; bbWeight=99.41, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz
+ mov x15, x22 + ; gcrRegs +[x15] + cbnz x15, G_M13964_IG11 + ;; size=8 bbWeight=99.41 PerfScore 149.11 +G_M13964_IG08: ; bbWeight=99.41, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref + add x14, x21, #16 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + ;; size=8 bbWeight=99.41 PerfScore 149.11 +G_M13964_IG09: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz + add w19, w19, #1 + cmp w19, w20 + bge G_M13964_IG13 + ;; size=12 bbWeight=99.99 PerfScore 199.98 +G_M13964_IG10: ; bbWeight=99.98, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + b G_M13964_IG06 + ;; size=4 bbWeight=99.98 PerfScore 99.98 +G_M13964_IG11: ; bbWeight=49.70, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[x15] + ldr x14, [x15] + movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #0xD1FFAB1E LSL #32 + cmp x14, x12 + beq G_M13964_IG08 + ;; size=24 bbWeight=49.70 PerfScore 298.23 +G_M13964_IG12: ; bbWeight=0, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + ; gcrRegs -[x15]
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M13964_IG10 - ;; size=12 bbWeight=99.41 PerfScore 198.82 -G_M13964_IG08: ; bbWeight=49.70, gcrefRegs=C08002 {x1 x15 x22 x23}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M13964_IG10 - ;; size=24 bbWeight=49.70 PerfScore 298.23 -G_M13964_IG09: ; bbWeight=24.85, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
bl CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x15, x0 ; gcrRegs +[x15]
- ;; size=12 bbWeight=24.85 PerfScore 49.70 -G_M13964_IG10: ; bbWeight=99.41, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - add x14, x21, #16 - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15] - ;; size=8 bbWeight=99.41 PerfScore 149.11 -G_M13964_IG11: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz - add w19, w19, #1 - cmp w19, w20 - blt G_M13964_IG06 - ;; size=12 bbWeight=99.99 PerfScore 199.98 -G_M13964_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x22-x23]
+ b G_M13964_IG08 + ;; size=28 bbWeight=0 PerfScore 0.00 +G_M13964_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x0 x15 x22-x23]
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -124,7 +128,7 @@ G_M13964_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 232, prolog size 24, PerfScore 996.06, instruction count 58, allocated bytes for code 232 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 248, prolog size 24, PerfScore 996.63, instruction count 62, allocated bytes for code 248 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -135,7 +139,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 58 (0x0003a) Actual length = 232 (0x0000e8)
+ 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)

+16 (+7.41%) : 125878.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,17 +10,15 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf2.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,299.98) int -> x19
+; V01 loc0 [V01,T01] ( 4,299.98) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,446.54) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,248.08) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,744.24) ref -> x15 class-hnd "spilling QMark2" <PerfLabTests.CastingPerf2.Foo> -; V06 cse0 [V06,T05] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3, 99.25) ref -> x22 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.01) int -> x20 "CSE - aggressive" -; V09 cse3 [V09,T07] ( 3, 99.25) long -> x21 "CSE - aggressive" -; V10 rat0 [V10,T09] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" -; V11 rat1 [V11,T08] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
+; V03 cse0 [V03,T03] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4, 99.25) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.01) int -> x20 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3, 99.25) long -> x21 "CSE - aggressive" +; V07 rat0 [V07,T07] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" +; V08 rat1 [V08,T06] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo> +; V09 rat2 [V09,T00] ( 5,694.62) ref -> x15 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
; ; Lcl frame size = 8 @@ -33,12 +31,12 @@ G_M59156_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldr w19, [fp, #0x84] ;; size=24 bbWeight=0.01 PerfScore 0.06 G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ldr w20, [x0]
+ movz x14, #0xD1FFAB1E + movk x14, #0xD1FFAB1E LSL #16 + movk x14, #0xD1FFAB1E LSL #32 + ldr w20, [x14]
cmp w19, w20
- bge G_M59156_IG12
+ bge G_M59156_IG13
;; size=24 bbWeight=0.01 PerfScore 0.06 G_M59156_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movz x21, #0xD1FFAB1E @@ -53,11 +51,11 @@ G_M59156_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr cbz x23, G_M59156_IG06 ;; size=28 bbWeight=0.01 PerfScore 0.06 G_M59156_IG04: ; bbWeight=0.00, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x23] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2
+ ldr x14, [x23] + movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #0xD1FFAB1E LSL #32 + cmp x14, x15
beq G_M59156_IG06 ;; size=24 bbWeight=0.00 PerfScore 0.03 G_M59156_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref @@ -73,45 +71,51 @@ G_M59156_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {} ;; size=20 bbWeight=0 PerfScore 0.00 G_M59156_IG06: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- cbz x23, G_M59156_IG11
+ cbz x23, G_M59156_IG09
;; size=4 bbWeight=99.99 PerfScore 99.99 G_M59156_IG07: ; bbWeight=99.23, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz
+ mov x15, x22 + ; gcrRegs +[x15] + cbnz x15, G_M59156_IG11 + ;; size=8 bbWeight=99.23 PerfScore 148.85 +G_M59156_IG08: ; bbWeight=99.23, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref + add x14, x21, #80 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + ;; size=8 bbWeight=99.23 PerfScore 148.85 +G_M59156_IG09: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz + add w19, w19, #1 + cmp w19, w20 + bge G_M59156_IG13 + ;; size=12 bbWeight=99.99 PerfScore 199.98 +G_M59156_IG10: ; bbWeight=99.98, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + b G_M59156_IG06 + ;; size=4 bbWeight=99.98 PerfScore 99.98 +G_M59156_IG11: ; bbWeight=49.62, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[x15] + ldr x14, [x15] + movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #0xD1FFAB1E LSL #32 + cmp x14, x12 + beq G_M59156_IG08 + ;; size=24 bbWeight=49.62 PerfScore 297.70 +G_M59156_IG12: ; bbWeight=0, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + ; gcrRegs -[x15]
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M59156_IG10 - ;; size=12 bbWeight=99.23 PerfScore 198.46 -G_M59156_IG08: ; bbWeight=49.62, gcrefRegs=C08002 {x1 x15 x22 x23}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M59156_IG10 - ;; size=24 bbWeight=49.62 PerfScore 297.70 -G_M59156_IG09: ; bbWeight=24.81, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
bl CORINFO_HELP_CHKCASTCLASS_SPECIAL ; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x15, x0 ; gcrRegs +[x15]
- ;; size=12 bbWeight=24.81 PerfScore 49.62 -G_M59156_IG10: ; bbWeight=99.23, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - add x14, x21, #80 - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15] - ;; size=8 bbWeight=99.23 PerfScore 148.85 -G_M59156_IG11: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz - add w19, w19, #1 - cmp w19, w20 - blt G_M59156_IG06 - ;; size=12 bbWeight=99.99 PerfScore 199.98 -G_M59156_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x22-x23]
+ b G_M59156_IG08 + ;; size=28 bbWeight=0 PerfScore 0.00 +G_M59156_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x0 x15 x22-x23]
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -120,7 +124,7 @@ G_M59156_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 216, prolog size 24, PerfScore 994.81, instruction count 54, allocated bytes for code 216 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 232, prolog size 24, PerfScore 995.56, instruction count 58, allocated bytes for code 232 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -131,7 +135,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 54 (0x00036) Actual length = 216 (0x0000d8)
+ 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)

benchmarks.run_tiered.linux.arm64.checked.mch

-28 (-46.67%) : 20117.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 4086.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-25.93%) : 55475.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (Tier1)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> x20 this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 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" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> x20 "CSE - aggressive"
; ; Lcl frame size = 16 @@ -22,47 +21,36 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x19, x20, [sp, #0x20] mov fp, sp str x1, [fp, #0x18]
- mov x20, x0 - ; gcrRegs +[x20] - mov x19, x1 - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ mov x19, x0 + ; gcrRegs +[x19] + ;; size=20 bbWeight=1 PerfScore 4.00 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x20, [x1, #0x38] + ldr x0, [x20]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x10] blr x2
- ; gcrRegs -[x1 x20]
+ ; gcrRegs -[x1 x19]
mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M60617_IG05 - ;; size=44 bbWeight=1 PerfScore 19.50 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M60617_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x20]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=48 bbWeight=1 PerfScore 22.50 +G_M60617_IG03: ; 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 108, prolog size 16, PerfScore 29.81, instruction count 27, allocated bytes for code 108 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
+; Total bytes of code 80, prolog size 16, PerfScore 29.50, instruction count 20, allocated bytes for code 80 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -73,7 +61,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-4 (-2.70%) : 22460.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> x19
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> x15 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> x20 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> x22 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) long -> x21 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> x20 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 0 @@ -28,52 +25,46 @@ G_M56449_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w19, [fp, #0x54] ;; size=20 bbWeight=1 PerfScore 5.50 G_M56449_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ldr w20, [x0]
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + ldr w20, [x1]
cmp w19, w20
- bge G_M56449_IG07
+ bge G_M56449_IG04
movz x21, #0xD1FFAB1E movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 ldr x22, [x21] ; gcrRegs +[x22]
- ;; size=40 bbWeight=1 PerfScore 10.50 -G_M56449_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M56449_IG06 - ;; size=12 bbWeight=4 PerfScore 8.00 -G_M56449_IG04: ; bbWeight=1, gcrefRegs=408002 {x1 x15 x22}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M56449_IG06 - ;; size=24 bbWeight=1 PerfScore 6.00 -G_M56449_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
bl CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
+ ;; size=60 bbWeight=1 PerfScore 13.50 +G_M56449_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0] + mov x1, x22 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[x1] +[x0] + ; gcr arg pop 0 + add x14, x21, #24
mov x15, x0 ; gcrRegs +[x15]
- ;; size=12 bbWeight=0.50 PerfScore 1.00 -G_M56449_IG06: ; bbWeight=4, gcrefRegs=408000 {x15 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - add x14, x21, #24
bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
add w19, w19, #1 cmp w19, w20 blt G_M56449_IG03
- ;; size=20 bbWeight=4 PerfScore 14.00 -G_M56449_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=4 PerfScore 28.00 +G_M56449_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x22] ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] @@ -82,7 +73,7 @@ G_M56449_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 4.50
-; Total bytes of code 148, prolog size 20, PerfScore 49.50, instruction count 37, allocated bytes for code 148 (MethodHash=290d237e) for method PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
+; Total bytes of code 144, prolog size 20, PerfScore 51.50, instruction count 36, allocated bytes for code 144 (MethodHash=290d237e) for method PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -93,7 +84,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 148 (0x000094)
+ Function Length : 36 (0x00024) Actual length = 144 (0x000090)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+12 (+7.32%) : 29156.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> x19
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> x15 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> x20 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> x22 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) long -> x21 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> x20 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 0 @@ -28,36 +25,22 @@ G_M36328_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w19, [fp, #0x54] ;; size=20 bbWeight=1 PerfScore 5.50 G_M36328_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ldr w20, [x0]
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + ldr w20, [x1]
cmp w19, w20
- bge G_M36328_IG07
+ bge G_M36328_IG04
movz x21, #0xD1FFAB1E movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 ldr x22, [x21] ; gcrRegs +[x22]
- ;; size=40 bbWeight=1 PerfScore 10.50 -G_M36328_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M36328_IG06 - ;; size=12 bbWeight=4 PerfScore 8.00 -G_M36328_IG04: ; bbWeight=1, gcrefRegs=408002 {x1 x15 x22}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M36328_IG06 - ;; size=24 bbWeight=1 PerfScore 6.00 -G_M36328_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 @@ -65,19 +48,31 @@ G_M36328_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 blr x2 ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
+ ;; size=76 bbWeight=1 PerfScore 18.00 +G_M36328_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0] + mov x1, x22 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + ; gcrRegs -[x1] +[x0] + ; gcr arg pop 0 + sub x14, x21, #56
mov x15, x0 ; gcrRegs +[x15]
- ;; size=28 bbWeight=0.50 PerfScore 3.25 -G_M36328_IG06: ; bbWeight=4, gcrefRegs=408000 {x15 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - sub x14, x21, #56
bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
add w19, w19, #1 cmp w19, w20 blt G_M36328_IG03
- ;; size=20 bbWeight=4 PerfScore 14.00 -G_M36328_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=4 PerfScore 46.00 +G_M36328_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x22] ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] @@ -86,7 +81,7 @@ G_M36328_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 4.50
-; Total bytes of code 164, prolog size 20, PerfScore 51.75, instruction count 41, allocated bytes for code 164 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
+; Total bytes of code 176, prolog size 20, PerfScore 74.00, instruction count 44, allocated bytes for code 176 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -97,7 +92,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 164 (0x0000a4)
+ 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)

+12 (+7.32%) : 55660.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> x19
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> x15 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> x20 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> x22 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) long -> x21 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> x20 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 0 @@ -28,36 +25,22 @@ G_M50369_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w19, [fp, #0x54] ;; size=20 bbWeight=1 PerfScore 5.50 G_M50369_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ldr w20, [x0]
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + ldr w20, [x1]
cmp w19, w20
- bge G_M50369_IG07
+ bge G_M50369_IG04
movz x21, #0xD1FFAB1E movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 ldr x22, [x21] ; gcrRegs +[x22]
- ;; size=40 bbWeight=1 PerfScore 10.50 -G_M50369_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M50369_IG06 - ;; size=12 bbWeight=4 PerfScore 8.00 -G_M50369_IG04: ; bbWeight=1, gcrefRegs=408002 {x1 x15 x22}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M50369_IG06 - ;; size=24 bbWeight=1 PerfScore 6.00 -G_M50369_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 @@ -65,19 +48,31 @@ G_M50369_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 blr x2 ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
+ ;; size=76 bbWeight=1 PerfScore 18.00 +G_M50369_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0] + mov x1, x22 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2 + ; gcrRegs -[x1] +[x0] + ; gcr arg pop 0 + add x14, x21, #16
mov x15, x0 ; gcrRegs +[x15]
- ;; size=28 bbWeight=0.50 PerfScore 3.25 -G_M50369_IG06: ; bbWeight=4, gcrefRegs=408000 {x15 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - add x14, x21, #16
bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
add w19, w19, #1 cmp w19, w20 blt G_M50369_IG03
- ;; size=20 bbWeight=4 PerfScore 14.00 -G_M50369_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=4 PerfScore 46.00 +G_M50369_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x22] ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] @@ -86,7 +81,7 @@ G_M50369_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 4.50
-; Total bytes of code 164, prolog size 20, PerfScore 51.75, instruction count 41, allocated bytes for code 164 (MethodHash=c13d3b3e) for method PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier1-OSR)
+; Total bytes of code 176, prolog size 20, PerfScore 74.00, instruction count 44, allocated bytes for code 176 (MethodHash=c13d3b3e) for method PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -97,7 +92,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 164 (0x0000a4)
+ 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)

coreclr_tests.run.linux.arm64.checked.mch

-24 (-40.00%) : 216213.dasm - CastExpansionTests:CastToGenericSystem.__Canon:System.Object:this (Tier1)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <CastExpansionTests>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> x2 class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,33 +19,21 @@ G_M64337_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x1, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- mov x0, x2 - ; gcrRegs +[x0] - cbz x0, G_M64337_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M64337_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - cmp x3, x1 - beq G_M64337_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M64337_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ ldr x0, [x1, #0x38] + ldr x0, [x0]
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1-x2] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M64337_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 7.50 +G_M64337_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 8.88, instruction count 15, allocated bytes for code 60 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
+; Total bytes of code 36, prolog size 12, PerfScore 12.00, instruction count 9, allocated bytes for code 36 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
; ============================================================ Unwind Info: @@ -58,7 +44,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-28.57%) : 313344.dasm - Program+TestDelegateFatFunctionPointers:OtherGenericSystem.__Canon:System.__Canon:this (FullOpts)

@@ -8,12 +8,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Program+TestDelegateFatFunctionPointers>
-; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def -; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x2 class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T04] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V04 tmp1 [V04,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T03] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -22,40 +21,30 @@ G_M51557_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x1, [fp, #0x10]
- mov x19, x1 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M51557_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M51557_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ldr x0, [x1, #0x38] + ldr x19, [x0] + mov x0, x19
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFANY ; gcrRegs -[x1-x2] +[x0] mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M51557_IG05 - ;; size=24 bbWeight=1 PerfScore 9.00 -G_M51557_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M51557_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M51557_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ mov x0, x19
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M51557_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=32 bbWeight=1 PerfScore 10.00 +G_M51557_IG03: ; 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 84, prolog size 16, PerfScore 19.81, instruction count 21, allocated bytes for code 84 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 60, prolog size 16, PerfScore 17.50, instruction count 15, allocated bytes for code 60 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +55,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 21 (0x00015) Actual length = 84 (0x000054)
+ Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 312277.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+8 (+2.25%) : 612091.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)

@@ -5,31 +5,30 @@ ; optimized using Dynamic PGO ; fp based frame ; partially interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 169440
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 169440
; 2 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 7, 5 ) ref -> x20 this class-hnd single-def <Internal.TypeSystem.MethodDesc>
+; V00 this [V00,T01] ( 7, 5 ) ref -> x20 this class-hnd single-def <Internal.TypeSystem.MethodDesc>
; V01 arg1 [V01,T00] ( 9, 6 ) ref -> x19 class-hnd single-def <System.Object> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T13] ( 3, 2 ) int -> x0 -;* V04 tmp2 [V04,T07] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp3 [V05,T01] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Internal.TypeSystem.MethodDesc> -; V06 tmp4 [V06,T06] ( 3, 4 ) ref -> x23 class-hnd "impAppendStmt" <Internal.TypeSystem.TypeSystemContext> -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaMethod> -; V08 tmp6 [V08,T10] ( 3, 2 ) ref -> x24 "guarded devirt return temp" -;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaMethod> -; V10 tmp8 [V10,T04] ( 5, 6 ) ref -> x0 class-hnd single-def "spilling ret_expr" <<unknown class>> -; V11 tmp9 [V11,T11] ( 3, 2 ) ref -> x23 "guarded devirt return temp" -;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> -;* V13 tmp11 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Internal.TypeSystem.Ecma.EcmaType> -; V14 tmp12 [V14,T05] ( 5, 6 ) ref -> x0 class-hnd single-def "spilling ret_expr" <<unknown class>> -; V15 tmp13 [V15,T12] ( 3, 2 ) ref -> x24 "guarded devirt return temp" -;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> -;* V17 tmp15 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Internal.TypeSystem.Ecma.EcmaType> -; V18 cse0 [V18,T08] ( 3, 3 ) long -> x21 "CSE - aggressive" -; V19 cse1 [V19,T09] ( 3, 3 ) long -> x22 "CSE - aggressive" -; V20 rat0 [V20,T03] ( 5, 7 ) ref -> x1 class-hnd "replacement local" <Internal.TypeSystem.MethodDesc>
+; V03 tmp1 [V03,T11] ( 3, 2 ) int -> x0 +; V04 tmp2 [V04,T05] ( 3, 4 ) ref -> x23 class-hnd "impAppendStmt" <Internal.TypeSystem.TypeSystemContext> +;* V05 tmp3 [V05,T12] ( 0, 0 ) ref -> zero-ref single-def "guarded devirt arg temp" +;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaMethod> +; V07 tmp5 [V07,T08] ( 3, 2 ) ref -> x24 "guarded devirt return temp" +;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaMethod> +; V09 tmp7 [V09,T03] ( 5, 6 ) ref -> x0 class-hnd single-def "spilling ret_expr" <<unknown class>> +; V10 tmp8 [V10,T09] ( 3, 2 ) ref -> x23 "guarded devirt return temp" +;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> +;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Internal.TypeSystem.Ecma.EcmaType> +; V13 tmp11 [V13,T04] ( 5, 6 ) ref -> x0 class-hnd single-def "spilling ret_expr" <<unknown class>> +; V14 tmp12 [V14,T10] ( 3, 2 ) ref -> x24 "guarded devirt return temp" +;* V15 tmp13 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> +;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <Internal.TypeSystem.Ecma.EcmaType> +; V17 cse0 [V17,T06] ( 3, 3 ) long -> x21 "CSE - aggressive" +; V18 cse1 [V18,T07] ( 3, 3 ) long -> x22 "CSE - aggressive" +; V19 rat0 [V19,T02] ( 5, 7 ) ref -> x1 class-hnd "replacement local" <Internal.TypeSystem.MethodDesc>
; ; Lcl frame size = 0 @@ -47,24 +46,16 @@ G_M13997_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M13997_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz mov x1, x19 ; gcrRegs +[x1]
- cbz x1, G_M13997_IG04
+ cbnz x1, G_M13997_IG04
;; size=8 bbWeight=1 PerfScore 1.50
-G_M13997_IG03: ; bbWeight=0.50, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x1] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - bne G_M13997_IG09 - ;; size=24 bbWeight=0.50 PerfScore 3.00 -G_M13997_IG04: ; bbWeight=1, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref, isz - cbz x1, G_M13997_IG14
+G_M13997_IG03: ; bbWeight=1, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref, isz + cbz x1, G_M13997_IG15
ldr x0, [x19] movz x21, #0xD1FFAB1E movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 cmp x0, x21
- bne G_M13997_IG11
+ bne G_M13997_IG12
ldr x0, [x19, #0x10] ; gcrRegs +[x0] ldr x0, [x0, #0x58] @@ -74,30 +65,43 @@ G_M13997_IG04: ; bbWeight=1, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=000 movk x22, #0xD1FFAB1E LSL #16 movk x22, #0xD1FFAB1E LSL #32 cmp x1, x22
- bne G_M13997_IG10
+ bne G_M13997_IG11
ldr x23, [x0, #0x08] ; gcrRegs +[x23]
- ;; size=64 bbWeight=1 PerfScore 22.00 -G_M13997_IG05: ; bbWeight=1, gcrefRegs=980000 {x19 x20 x23}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0]
+ b G_M13997_IG06 + ;; size=68 bbWeight=1 PerfScore 23.00 +G_M13997_IG04: ; bbWeight=0.50, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0 x23] +[x1] + ldr x0, [x1] + movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + cmp x0, x2 + bne G_M13997_IG10 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M13997_IG05: ; bbWeight=0.25, gcrefRegs=180002 {x1 x19 x20}, byrefRegs=0000 {}, byref + b G_M13997_IG03 + ;; size=4 bbWeight=0.25 PerfScore 0.25 +G_M13997_IG06: ; bbWeight=1, gcrefRegs=980000 {x19 x20 x23}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x1] +[x23]
ldr x0, [x20] cmp x0, x21
- bne G_M13997_IG13
+ bne G_M13997_IG14
ldr x0, [x20, #0x10] ; gcrRegs +[x0] ldr x0, [x0, #0x58] ldr x1, [x0] cmp x1, x22
- bne G_M13997_IG12
+ bne G_M13997_IG13
ldr x24, [x0, #0x08] ; gcrRegs +[x24] ;; size=36 bbWeight=1 PerfScore 18.00
-G_M13997_IG06: ; bbWeight=1, gcrefRegs=1980000 {x19 x20 x23 x24}, byrefRegs=0000 {}, byref
+G_M13997_IG07: ; bbWeight=1, gcrefRegs=1980000 {x19 x20 x23 x24}, byrefRegs=0000 {}, byref
; gcrRegs -[x0] cmp x23, x24 cset x0, eq ;; size=8 bbWeight=1 PerfScore 1.00
-G_M13997_IG07: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+G_M13997_IG08: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x23-x24] movz x1, #0xD1FFAB1E // code for <unknown method> movk x1, #0xD1FFAB1E LSL #16 @@ -107,14 +111,14 @@ G_M13997_IG07: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { cmp x20, x19 cset x0, eq ;; size=28 bbWeight=1 PerfScore 6.50
-G_M13997_IG08: ; bbWeight=1, epilog, nogc, extend
+G_M13997_IG09: ; bbWeight=1, epilog, nogc, extend
ldp x23, x24, [sp, #0x30] ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] ldp fp, lr, [sp], #0x40 ret lr ;; size=20 bbWeight=1 PerfScore 5.00
-G_M13997_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
+G_M13997_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
mov x1, x19 ; gcrRegs +[x1] movz x0, #0xD1FFAB1E @@ -124,9 +128,9 @@ G_M13997_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 ; gcrRegs -[x1] +[x0] mov x1, x0 ; gcrRegs +[x1]
- b G_M13997_IG04
+ b G_M13997_IG03
;; size=28 bbWeight=0 PerfScore 0.00
-G_M13997_IG10: ; bbWeight=0, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref
+G_M13997_IG11: ; bbWeight=0, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x1] ldr x1, [x0] ldr x1, [x1, #0x48] @@ -134,9 +138,9 @@ G_M13997_IG10: ; bbWeight=0, gcrefRegs=180001 {x0 x19 x20}, byrefRegs=000 blr x1 mov x23, x0 ; gcrRegs +[x23]
- b G_M13997_IG05
+ b G_M13997_IG06
;; size=24 bbWeight=0 PerfScore 0.00
-G_M13997_IG11: ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+G_M13997_IG12: ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x23] mov x0, x19 ; gcrRegs +[x0] @@ -146,18 +150,18 @@ G_M13997_IG11: ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { blr x1 mov x23, x0 ; gcrRegs +[x23]
- b G_M13997_IG13
+ b G_M13997_IG14
;; size=28 bbWeight=0 PerfScore 0.00
-G_M13997_IG12: ; bbWeight=0, gcrefRegs=980001 {x0 x19 x20 x23}, byrefRegs=0000 {}, byref
+G_M13997_IG13: ; bbWeight=0, gcrefRegs=980001 {x0 x19 x20 x23}, byrefRegs=0000 {}, byref
ldr x1, [x0] ldr x1, [x1, #0x48] ldr x1, [x1, #0x20] blr x1 mov x24, x0 ; gcrRegs +[x24]
- b G_M13997_IG06
+ b G_M13997_IG07
;; size=24 bbWeight=0 PerfScore 0.00
-G_M13997_IG13: ; bbWeight=0, gcrefRegs=980000 {x19 x20 x23}, byrefRegs=0000 {}, byref
+G_M13997_IG14: ; bbWeight=0, gcrefRegs=980000 {x19 x20 x23}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x24] mov x0, x20 ; gcrRegs +[x0] @@ -167,15 +171,15 @@ G_M13997_IG13: ; bbWeight=0, gcrefRegs=980000 {x19 x20 x23}, byrefRegs=00 blr x1 mov x24, x0 ; gcrRegs +[x24]
- b G_M13997_IG06
+ b G_M13997_IG07
;; size=28 bbWeight=0 PerfScore 0.00
-G_M13997_IG14: ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
+G_M13997_IG15: ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref
; gcrRegs -[x0 x23-x24] mov w0, #1
- b G_M13997_IG07
+ b G_M13997_IG08
;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 356, prolog size 20, PerfScore 62.50, instruction count 89, allocated bytes for code 356 (MethodHash=84ffc952) for method Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
+; Total bytes of code 364, prolog size 20, PerfScore 63.75, instruction count 91, allocated bytes for code 364 (MethodHash=84ffc952) for method Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -186,7 +190,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 89 (0x00059) Actual length = 356 (0x000164)
+ Function Length : 91 (0x0005b) Actual length = 364 (0x00016c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+12 (+2.56%) : 488962.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b_100(System.Object):this (Tier1)

@@ -8,26 +8,26 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.ThreadPoolTaskScheduler+<>c>
-; V01 arg1 [V01,T02] ( 6, 4.12) ref -> x19 class-hnd single-def <System.Object>
+; V01 arg1 [V01,T03] ( 6, 4 ) ref -> x19 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T13] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 8, 10.75) ref -> x20 class-hnd "spilling QMark2" <System.Threading.Tasks.Task> -;* V05 tmp3 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V07 tmp5 [V07,T07] ( 4, 2.50) ubyte -> x22 "Inline return value spill temp" -; V08 tmp6 [V08,T04] ( 4, 3 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V09 tmp7 [V09,T14] ( 3, 1 ) ubyte -> x22 "Inline return value spill temp" -; V10 tmp8 [V10,T09] ( 2, 2 ) byref -> x1 single-def "Inlining Arg" -;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> -; V12 tmp10 [V12,T15] ( 2, 1 ) int -> x0 "Inline stloc first use temp" -; V13 tmp11 [V13,T10] ( 2, 2 ) byref -> x1 single-def "argument with side effect" -; V14 cse0 [V14,T03] ( 7, 5.50) byref -> x21 "CSE - aggressive" -; V15 cse1 [V15,T11] ( 3, 1.50) ref -> x1 "CSE - moderate" -; V16 cse2 [V16,T12] ( 3, 1.50) ref -> x1 "CSE - moderate" -; V17 rat0 [V17,T08] ( 3, 2 ) byref -> x22 "TLS field access" -; V18 rat1 [V18,T05] ( 3, 3 ) long -> x1 "TLS access" -; V19 rat2 [V19,T06] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access" -; V20 rat3 [V20,T01] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <System.Threading.Tasks.Task>
+;* V03 tmp1 [V03 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V04 tmp2 [V04,T00] ( 5, 8 ) ref -> x20 class-hnd single-def "Inlining Arg" <System.Threading.Tasks.Task> +;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V06 tmp4 [V06,T08] ( 4, 2.50) ubyte -> x22 "Inline return value spill temp" +; V07 tmp5 [V07,T05] ( 4, 3 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V08 tmp6 [V08,T14] ( 3, 1 ) ubyte -> x22 "Inline return value spill temp" +; V09 tmp7 [V09,T10] ( 2, 2 ) byref -> x1 single-def "Inlining Arg" +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> +; V11 tmp9 [V11,T15] ( 2, 1 ) int -> x0 "Inline stloc first use temp" +; V12 tmp10 [V12,T11] ( 2, 2 ) byref -> x1 single-def "argument with side effect" +; V13 cse0 [V13,T04] ( 7, 5.50) byref -> x21 "CSE - aggressive" +; V14 cse1 [V14,T12] ( 3, 1.50) ref -> x1 "CSE - moderate" +; V15 cse2 [V15,T13] ( 3, 1.50) ref -> x1 "CSE - moderate" +; V16 rat0 [V16,T09] ( 3, 2 ) byref -> x22 "TLS field access" +; V17 rat1 [V17,T06] ( 3, 3 ) long -> x1 "TLS access" +; V18 rat2 [V18,T07] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access" +; V19 rat3 [V19,T01] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <System.Threading.Tasks.Task> +; V20 rat4 [V20,T02] ( 5, 7 ) ref -> x20 class-hnd "replacement local" <System.Threading.Tasks.Task>
; ; Lcl frame size = 0 @@ -50,7 +50,7 @@ G_M60851_IG03: ; bbWeight=0.50, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 cmp x0, x1
- bne G_M60851_IG21
+ bne G_M60851_IG20
;; size=24 bbWeight=0.50 PerfScore 3.00 G_M60851_IG04: ; bbWeight=1, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz cbnz x2, G_M60851_IG06 @@ -73,29 +73,18 @@ G_M60851_IG05: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, G_M60851_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz mov x20, x19 ; gcrRegs +[x20]
- cbz x20, G_M60851_IG09
+ cbz x20, G_M60851_IG08
;; size=8 bbWeight=1 PerfScore 1.50
-G_M60851_IG07: ; bbWeight=0.25, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x20] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - cmp x0, x1 - beq G_M60851_IG09 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M60851_IG08: ; bbWeight=0.12, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x20] - mov x0, x1 - mov x1, x19 - ; gcrRegs +[x1] - bl CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[x1 x19] +[x0] - ; gcr arg pop 0 - mov x20, x0 - ; gcrRegs +[x20] - ;; size=16 bbWeight=0.12 PerfScore 0.31 -G_M60851_IG09: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0]
+G_M60851_IG07: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + ldr x1, [x20] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + cmp x1, x0 + bne G_M60851_IG21 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M60851_IG08: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x19]
add x21, x20, #52 ; byrRegs +[x21] ldapr w1, [x21] @@ -106,15 +95,15 @@ G_M60851_IG09: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ldapr x1, [x1] ; gcrRegs +[x1] ; byrRegs -[x1]
- cbz x1, G_M60851_IG13
+ cbz x1, G_M60851_IG12
;; size=28 bbWeight=1 PerfScore 9.50
-G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=100002 {x1 x20}, byrefRegs=200000 {x21}, byref, isz
+G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=100002 {x1 x20}, byrefRegs=200000 {x21}, byref, isz
add x0, x1, #56 ; byrRegs +[x0] ldapr w0, [x0] ; byrRegs -[x0] cmp w0, #1
- beq G_M60851_IG12
+ beq G_M60851_IG11
add x1, x1, #64 ; gcrRegs -[x1] ; byrRegs +[x1] @@ -130,25 +119,25 @@ G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=100002 {x1 x20}, byrefRegs=2000 cmp w1, #0 cset x22, ne ;; size=44 bbWeight=0.50 PerfScore 7.00
-G_M60851_IG11: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref - b G_M60851_IG14
+G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref + b G_M60851_IG13
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+G_M60851_IG11: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
mov w22, #1
- b G_M60851_IG14
+ b G_M60851_IG13
;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
mov w22, wzr ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M60851_IG14: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
+G_M60851_IG13: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
ldapr w1, [x21] and w1, w1, #0xD1FFAB1E mov w0, #0xD1FFAB1E cmp w22, #0 ccmp w1, w0, z, eq
- beq G_M60851_IG18
+ beq G_M60851_IG17
;; size=24 bbWeight=1 PerfScore 6.00
-G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
; byrRegs -[x21] mrs x1, tpidr_el0 ldr w0, [x1, #0xD1FFAB1E] @@ -162,7 +151,7 @@ G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} add x22, x1, #16 ; byrRegs +[x22] ;; size=36 bbWeight=0.50 PerfScore 8.00
-G_M60851_IG16: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=400000 {x22}, byref
+G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=400000 {x22}, byref
; byrRegs -[x1] add x1, x22, #80 ; byrRegs +[x1] @@ -174,24 +163,24 @@ G_M60851_IG16: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=400000 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] ;; size=28 bbWeight=0.50 PerfScore 3.00
-G_M60851_IG17: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG16: ; bbWeight=0.50, epilog, nogc, extend
ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] ldp fp, lr, [sp], #0x30 br x3 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.00
-G_M60851_IG18: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
+G_M60851_IG17: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
; gcrRegs -[x0] ; byrRegs -[x1 x22] +[x21] ldapr w0, [x21] and w0, w0, #0xD1FFAB1E cmp w0, #0xD1FFAB1E, LSL #12
- beq G_M60851_IG20
+ beq G_M60851_IG19
ldapr w0, [x21] orr w0, w0, #0xD1FFAB1E swpal w0, w0, [x21]
- tbnz w0, #22, G_M60851_IG20
+ tbnz w0, #22, G_M60851_IG19
mov x0, x20 ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -199,14 +188,14 @@ G_M60851_IG18: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] ;; size=52 bbWeight=0.50 PerfScore 8.75
-G_M60851_IG19: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG18: ; bbWeight=0.50, epilog, nogc, extend
ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] ldp fp, lr, [sp], #0x30 br x1 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.00
-G_M60851_IG20: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M60851_IG19: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x0 x20] ; byrRegs -[x21] ldp x21, x22, [sp, #0x20] @@ -214,7 +203,7 @@ G_M60851_IG20: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.00
-G_M60851_IG21: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
+G_M60851_IG20: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x19] mov x1, x19 ; gcrRegs +[x1] @@ -228,11 +217,25 @@ G_M60851_IG21: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 ; gcrRegs +[x2] b G_M60851_IG04 ;; size=28 bbWeight=0 PerfScore 0.00
+G_M60851_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x2] + mov x1, x19 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTCLASS_SPECIAL + ; gcrRegs -[x1 x19] +[x0] + ; gcr arg pop 0 + mov x20, x0 + ; gcrRegs +[x20] + b G_M60851_IG08 + ;; size=28 bbWeight=0 PerfScore 0.00
G_M60851_IG22: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
- ; gcrRegs -[x0 x2 x19] +[x20]
+ ; gcrRegs -[x0]
; byrRegs +[x21] mov w22, wzr
- b G_M60851_IG11
+ b G_M60851_IG10
;; size=8 bbWeight=0 PerfScore 0.00 G_M60851_IG23: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref ; byrRegs -[x21] @@ -242,10 +245,10 @@ G_M60851_IG23: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ; gcr arg pop 0 mov x22, x0 ; byrRegs +[x22]
- b G_M60851_IG16
+ b G_M60851_IG15
;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 468, prolog size 20, PerfScore 66.31, instruction count 117, allocated bytes for code 468 (MethodHash=8aa4124c) for method System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
...

+36 (+14.06%) : 472959.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -13,58 +13,74 @@ ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V02 tmp1 [V02,T06] ( 3, 2 ) ref -> x0 "guarded devirt return temp" ;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V04 tmp3 [V04,T07] ( 3, 2 ) ubyte -> x1 "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T10] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T08] ( 3, 2 ) int -> x22 -; V09 tmp8 [V09,T09] ( 2, 2 ) ubyte -> x1 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V12 tmp11 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V13 tmp12 [V13,T03] ( 2, 4 ) byref -> x0 single-def "Inlining Arg" -;* V14 tmp13 [V14,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V15 tmp14 [V15,T04] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V16 tmp15 [V16 ] ( 0, 0 ) long -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 tmp16 [V17,T05] ( 3, 3 ) long -> x0 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V18 cse0 [V18,T01] ( 3, 3 ) long -> x20 "CSE - aggressive" -; V19 cse1 [V19,T02] ( 3, 3 ) long -> x21 "CSE - aggressive"
+; V04 tmp3 [V04,T05] ( 4, 2 ) ubyte -> x1 "Inline return value spill temp" +; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> x20 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T07] ( 3, 2 ) int -> x21 +; V08 tmp7 [V08,T08] ( 2, 2 ) ubyte -> x1 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V11 tmp10 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V12 tmp11 [V12,T03] ( 2, 4 ) byref -> x0 single-def "Inlining Arg" +;* V13 tmp12 [V13,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V14 tmp13 [V14 ] ( 0, 0 ) long -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 tmp14 [V15,T04] ( 3, 3 ) long -> x0 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> x20 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x10] - stp x21, x22, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x20, [x19] - movz x21, #0xD1FFAB1E - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - cmp x20, x21 - bne G_M8853_IG10 - ldr x0, [x19, #0x18]
+ ldrsb wzr, [x19] + mov x20, x19 + ; gcrRegs +[x20] + cbz x20, G_M8853_IG05 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x20] + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + cmp x0, x1 + beq G_M8853_IG05 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x20] + mov x20, xzr + ; gcrRegs +[x20] + ;; size=4 bbWeight=0.25 PerfScore 0.12 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M8853_IG13 + ldr x0, [x20, #0x18]
tbnz w0, #1, G_M8853_IG12 ldr w0, [x0] and w0, w0, #0xD1FFAB1E cmp w0, #192, LSL #12
- cset x22, eq - ;; size=48 bbWeight=1 PerfScore 14.50 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - uxtb w1, w22 - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8853_IG04: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cbnz w1, G_M8853_IG08
+ cset x21, eq + ;; size=28 bbWeight=1 PerfScore 9.50 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + uxtb w1, w21 + cbnz w1, G_M8853_IG14 + ;; size=8 bbWeight=1 PerfScore 1.50 +G_M8853_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x20]
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 cmp x19, x0
- beq G_M8853_IG06 - cmp x20, x21
+ beq G_M8853_IG09 + ldr x0, [x19] + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + cmp x0, x1
bne G_M8853_IG11 mov x0, x19 ; gcrRegs +[x0] @@ -74,64 +90,66 @@ G_M8853_IG04: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr ldr x1, [x1] blr x1 ; gcrRegs -[x19]
- ;; size=56 bbWeight=1 PerfScore 11.50 -G_M8853_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ldp x21, x22, [sp, #0x20] - ldp x19, x20, [sp, #0x10]
+ ;; size=68 bbWeight=1 PerfScore 15.00 +G_M8853_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M8853_IG06: ; bbWeight=0.58, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=1 PerfScore 5.00 +G_M8853_IG09: ; bbWeight=0.58, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0] mov x0, xzr ;; size=4 bbWeight=0.58 PerfScore 0.29
-G_M8853_IG07: ; bbWeight=0.58, epilog, nogc, extend - ldp x21, x22, [sp, #0x20] - ldp x19, x20, [sp, #0x10]
+G_M8853_IG10: ; bbWeight=0.58, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=16 bbWeight=0.58 PerfScore 2.34 -G_M8853_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M8853_IG09: ; bbWeight=0, epilog, nogc, extend - ldp x21, x22, [sp, #0x20] - ldp x19, x20, [sp, #0x10] - ldp fp, lr, [sp], #0x30 - ret lr - ;; size=16 bbWeight=0 PerfScore 0.00 -G_M8853_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=0.58 PerfScore 2.92 +G_M8853_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x19] mov x0, x19 ; gcrRegs +[x0] ldr x1, [x19]
+ ldr x1, [x1, #0xA0] + ldr x1, [x1, #0x20] + blr x1 + ; gcrRegs -[x19] + b G_M8853_IG08 + ;; size=24 bbWeight=0 PerfScore 0.00 +G_M8853_IG12: ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0] +[x19-x20] + mov w21, wzr + b G_M8853_IG06 + ;; size=8 bbWeight=0 PerfScore 0.00 +G_M8853_IG13: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x20] + mov x0, x19 + ; gcrRegs +[x0] + ldr x1, [x19]
ldr x1, [x1, #0x78] ldr x1, [x1, #0x18] blr x1 ; gcrRegs -[x0] tst w0, #32 cset x1, ne
- b G_M8853_IG04
+ cbz w1, G_M8853_IG07
;; size=32 bbWeight=0 PerfScore 0.00
-G_M8853_IG11: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x19 - ; gcrRegs +[x0] - ldr x1, [x19] - ldr x1, [x1, #0xA0] - ldr x1, [x1, #0x20] - blr x1
+G_M8853_IG14: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19]
- b G_M8853_IG05 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M8853_IG12: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] +[x19] - mov w22, wzr - b G_M8853_IG03 - ;; size=8 bbWeight=0 PerfScore 0.00
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M8853_IG15: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18] + ldp fp, lr, [sp], #0x30 + ret lr + ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 256, prolog size 16, PerfScore 37.13, instruction count 64, allocated bytes for code 256 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 292, prolog size 16, PerfScore 45.84, instruction count 73, allocated bytes for code 292 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -142,7 +160,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 64 (0x00040) Actual length = 256 (0x000100)
+ Function Length : 73 (0x00049) Actual length = 292 (0x000124)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -156,10 +174,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- E6 save_next - C8 02 save_regp X#0 Z#2 (0x02); stp x19, x20, [sp, #16]
+ 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

libraries.pmi.linux.arm64.checked.mch

-28 (-46.67%) : 144705.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 46063.dasm - Microsoft.FSharp.Core.Operators+Unchecked:UnboxSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,37 +18,19 @@ G_M7606_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M7606_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M7606_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M7606_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M7606_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M7606_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M7606_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M7606_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +41,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-40 (-33.33%) : 252899.dasm - System.Collections.Immutable.ImmutableSortedDictionary2+Builder[System.__Canon,System.Nullable1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)

@@ -8,76 +8,48 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 5, 4.25) ref -> x19 this class-hnd single-def <System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]> -; V01 arg1 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> [fp+0x18] class-hnd "spilling QMark2" <System.__Canon>
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <System.__Canon>
;
-; Lcl frame size = 24
+; Lcl frame size = 8
G_M51997_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 x0, [fp, #0x20]
+ str x0, [fp, #0x10]
mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M51997_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M51997_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M51997_IG07 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M51997_IG03: ; bbWeight=0.25, gcrefRegs=80006 {x1 x2 x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x2] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x0, x3 - str x2, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - beq G_M51997_IG05 - ;; size=32 bbWeight=0.25 PerfScore 4.38 -G_M51997_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2] - ; GC ptr vars -{V04} - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- str x0, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - ;; size=12 bbWeight=0.12 PerfScore 0.31 -G_M51997_IG05: ; bbWeight=1, gcVars=0000000000000001 {V04}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0] - ldp x0, x2, [x19, #0x08] - ; gcrRegs +[x0 x2] - ldr x1, [fp, #0x18] // [V04 tmp2]
+ mov x1, x0
; gcrRegs +[x1]
+ ldp x0, x2, [x19, #0x08] + ; gcrRegs +[x2]
movz x3, #0xD1FFAB1E // code for System.Collections.Immutable.ImmutableSortedDictionary`2+Node[System.__Canon,System.Nullable`1[int]]:ContainsKey(System.__Canon,System.Collections.Generic.IComparer`1[System.__Canon]):ubyte:this movk x3, #0xD1FFAB1E LSL #16 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] ldr wzr, [x0]
- ;; size=28 bbWeight=1 PerfScore 13.50 -G_M51997_IG06: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x28] - ldp fp, lr, [sp], #0x30
+ ;; size=48 bbWeight=1 PerfScore 25.00 +G_M51997_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20
br x3 ; gcr arg pop 0 ;; size=12 bbWeight=1 PerfScore 4.00
-G_M51997_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0-x1] - ; GC ptr vars -{V04} - str x2, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - b G_M51997_IG05 - ;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 120, prolog size 20, PerfScore 28.69, instruction count 30, allocated bytes for code 120 (MethodHash=24b334e2) for method System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 80, prolog size 20, PerfScore 33.00, instruction count 20, allocated bytes for code 80 (MethodHash=24b334e2) for method System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -88,7 +60,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 120 (0x000078)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -96,8 +68,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

+4 (+0.93%) : 179097.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)

@@ -8,23 +8,21 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 18, 10.50) ref -> x19 this class-hnd single-def <Internal.TypeSystem.TypeDesc> -;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <<unknown class>> -; V02 loc1 [V02,T05] ( 3, 1.50) ref -> x21 class-hnd single-def <<unknown class>>
+; V00 this [V00,T00] ( 8, 5.50) ref -> x19 this class-hnd single-def <Internal.TypeSystem.TypeDesc> +; V01 loc0 [V01,T01] ( 12, 6 ) ref -> x20 class-hnd single-def <<unknown class>> +; V02 loc1 [V02,T04] ( 3, 1.50) ref -> x21 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,T03] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp2 [V05,T01] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -; V06 tmp3 [V06,T06] ( 3, 1.50) int -> x2 "Inline return value spill temp" -; V07 tmp4 [V07,T07] ( 3, 1.50) int -> x2 single-def "Inline stloc first use temp" -; V08 tmp5 [V08,T08] ( 3, 1.50) int -> x2 "Inline return value spill temp" -; V09 tmp6 [V09,T09] ( 3, 1.50) int -> x2 single-def "Inline stloc first use temp" -; V10 tmp7 [V10,T02] ( 2, 2 ) ref -> x0 class-hnd single-def "Inlining Arg" <<unknown class>> -;* V11 tmp8 [V11 ] ( 0, 0 ) int -> zero-ref -;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V14 tmp11 [V14,T04] ( 2, 2 ) int -> x0 "argument with side effect" -; V15 cse0 [V15,T10] ( 3, 1.50) long -> x20 "CSE - moderate" -; V16 cse1 [V16,T11] ( 3, 1.50) long -> x20 "CSE - moderate"
+; V04 tmp1 [V04,T05] ( 3, 1.50) int -> x2 "Inline return value spill temp" +; V05 tmp2 [V05,T06] ( 3, 1.50) int -> x2 single-def "Inline stloc first use temp" +; V06 tmp3 [V06,T07] ( 3, 1.50) int -> x2 "Inline return value spill temp" +; V07 tmp4 [V07,T08] ( 3, 1.50) int -> x2 single-def "Inline stloc first use temp" +; V08 tmp5 [V08,T02] ( 2, 2 ) ref -> x0 class-hnd single-def "Inlining Arg" <<unknown class>> +;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref +;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V12 tmp9 [V12,T03] ( 2, 2 ) int -> x0 "argument with side effect" +; V13 cse0 [V13,T09] ( 3, 1.50) long -> x21 "CSE - moderate" +; V14 cse1 [V14,T10] ( 3, 1.50) long -> x20 "CSE - moderate"
; ; Lcl frame size = 8 @@ -48,13 +46,15 @@ G_M17935_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ;; size=24 bbWeight=1 PerfScore 4.00 G_M17935_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- ldr w0, [x19, #0x20]
+ mov x20, x19 + ; gcrRegs +[x20] + ldr w0, [x20, #0x20]
and w2, w0, #63 cbz w2, G_M17935_IG04 b G_M17935_IG05
- ;; size=16 bbWeight=0.50 PerfScore 2.75 -G_M17935_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x19
+ ;; size=20 bbWeight=0.50 PerfScore 3.00 +G_M17935_IG04: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref + mov x0, x20
; gcrRegs +[x0] mov w1, #63 movz x2, #0xD1FFAB1E // code for <unknown method> @@ -65,32 +65,32 @@ G_M17935_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0] sxtw w2, w0 ;; size=32 bbWeight=0.50 PerfScore 3.50
-G_M17935_IG05: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M17935_IG05: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
cmp w2, #21 bne G_M17935_IG06
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0]
- ldr x1, [x19] - ldr x20, [x1, #0x60]
ldr x1, [x20]
+ ldr x21, [x1, #0x60] + ldr x1, [x21]
blr x1 ; gcrRegs -[x0] cbnz w0, G_M17935_IG09
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0]
- ldr x1, [x20, #0x08]
+ ldr x1, [x21, #0x08]
blr x1 ; gcrRegs -[x0] cbnz w0, G_M17935_IG09 ;; size=48 bbWeight=0.50 PerfScore 9.25
-G_M17935_IG06: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr w0, [x19, #0x20]
+G_M17935_IG06: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + ldr w0, [x20, #0x20]
and w2, w0, #63 cbz w2, G_M17935_IG07 b G_M17935_IG08 ;; size=16 bbWeight=0.50 PerfScore 2.75
-G_M17935_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x19
+G_M17935_IG07: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref + mov x0, x20
; gcrRegs +[x0] mov w1, #63 movz x2, #0xD1FFAB1E // code for <unknown method> @@ -101,10 +101,10 @@ G_M17935_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0] sxtw w2, w0 ;; size=32 bbWeight=0.50 PerfScore 3.50
-G_M17935_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M17935_IG08: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
cmp w2, #20 blt G_M17935_IG09
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for Internal.TypeSystem.TypeDesc:get_IsDelegate():ubyte:this movk x1, #0xD1FFAB1E LSL #16 @@ -114,8 +114,8 @@ G_M17935_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x0] cbz w0, G_M17935_IG10 ;; size=36 bbWeight=0.50 PerfScore 4.25
-G_M17935_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - mov x0, x19
+G_M17935_IG09: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + mov x0, x20
; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for Internal.TypeSystem.TypeDesc:get_HasInstantiation():ubyte:this movk x1, #0xD1FFAB1E LSL #16 @@ -139,13 +139,13 @@ G_M17935_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ldr x2, [x2] blr x2 cbz w0, G_M17935_IG10
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0]
- ldr x1, [x19]
+ ldr x1, [x20]
ldr x1, [x1, #0x58] ldr x1, [x1, #0x38] blr x1
- ; gcrRegs -[x0]
+ ; gcrRegs -[x0 x20]
cbnz w0, G_M17935_IG10 mov x0, x19 ; gcrRegs +[x0] @@ -188,7 +188,7 @@ G_M17935_IG13: ; bbWeight=0.50, epilog, nogc, extend ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-; Total bytes of code 432, prolog size 16, PerfScore 69.25, instruction count 108, allocated bytes for code 432 (MethodHash=05dcb9f0) for method Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
+; Total bytes of code 436, prolog size 16, PerfScore 69.50, instruction count 109, allocated bytes for code 436 (MethodHash=05dcb9f0) for method Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -199,7 +199,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 108 (0x0006c) Actual length = 432 (0x0001b0)
+ Function Length : 109 (0x0006d) Actual length = 436 (0x0001b4)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+8 (+1.67%) : 214563.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)

@@ -8,27 +8,26 @@ ; 2 inlinees with PGO data; 5 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T10] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.ColumnTypeConverter> -; V01 arg1 [V01,T11] ( 3, 2.50) ref -> x1 class-hnd single-def <System.ComponentModel.ITypeDescriptorContext> -; V02 arg2 [V02,T12] ( 3, 2.50) ref -> x2 class-hnd single-def <System.Globalization.CultureInfo> -; V03 arg3 [V03,T01] ( 8, 25.02) ref -> x19 class-hnd single-def <System.Object> -; V04 loc0 [V04,T04] ( 8, 21.50) int -> x20
+; V00 this [V00,T09] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.ColumnTypeConverter> +; V01 arg1 [V01,T10] ( 3, 2.50) ref -> x1 class-hnd single-def <System.ComponentModel.ITypeDescriptorContext> +; V02 arg2 [V02,T11] ( 3, 2.50) ref -> x2 class-hnd single-def <System.Globalization.CultureInfo> +; V03 arg3 [V03,T06] ( 7, 9.88) ref -> x19 class-hnd single-def <System.Object> +; V04 loc0 [V04,T03] ( 8, 21.50) int -> x20
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T08] ( 2, 4 ) ubyte -> x0 "Inline return value spill temp"
+; V06 tmp1 [V06,T12] ( 2, 4 ) ubyte -> x0 "Inline return value spill temp"
; V07 tmp2 [V07,T00] ( 6, 62.03) ref -> x0 class-hnd exact "Inlining Arg" <System.String>
-;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -;* V09 tmp4 [V09,T05] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V10 tmp5 [V10,T07] ( 2, 8 ) byref -> x3 "impAppendStmt"
+; V08 tmp3 [V08,T04] ( 4, 20.77) ref -> x1 class-hnd exact "Inline stloc first use temp" <System.String> +; V09 tmp4 [V09,T07] ( 2, 8 ) byref -> x3 "impAppendStmt" +;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "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 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 3, 24.00) ref -> x0 "arr expr" -; V17 tmp12 [V17,T03] ( 3, 24.00) ref -> x0 "argument with side effect" -; V18 tmp13 [V18,T13] ( 3, 3 ) ref -> x0 single-def "arr expr" -;* V19 cse0 [V19,T09] ( 0, 0 ) long -> zero-ref multi-def "CSE - aggressive" -; V20 cse1 [V20,T06] ( 7, 14 ) long -> x21 multi-def "CSE - aggressive"
+; V15 tmp10 [V15,T01] ( 3, 24.00) ref -> x0 "arr expr" +; V16 tmp11 [V16,T02] ( 3, 24.00) ref -> x0 "argument with side effect" +; V17 tmp12 [V17,T13] ( 3, 3 ) ref -> x0 single-def "arr expr" +;* V18 cse0 [V18,T08] ( 0, 0 ) long -> zero-ref multi-def "CSE - aggressive" +; V19 cse1 [V19,T05] ( 7, 14 ) long -> x21 multi-def "CSE - aggressive"
; ; Lcl frame size = 8 @@ -42,7 +41,7 @@ G_M21223_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=20 bbWeight=1 PerfScore 4.00 G_M21223_IG02: ; bbWeight=1, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x0-x2]
- cbz x19, G_M21223_IG15
+ cbz x19, G_M21223_IG16
;; size=4 bbWeight=1 PerfScore 1.00 G_M21223_IG03: ; bbWeight=0.50, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, byref, isz ldr x3, [x19] @@ -50,14 +49,14 @@ G_M21223_IG03: ; bbWeight=0.50, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs movk x4, #0xD1FFAB1E LSL #16 movk x4, #0xD1FFAB1E LSL #32 cmp x3, x4
- bne G_M21223_IG15
+ bne G_M21223_IG16
mov w20, wzr movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr w0, [x0]
- tbz w0, #0, G_M21223_IG18
+ tbz w0, #0, G_M21223_IG19
;; size=48 bbWeight=0.50 PerfScore 6.00 G_M21223_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x1-x2] @@ -69,14 +68,14 @@ G_M21223_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ldr w0, [x0, #0x08] ; gcrRegs -[x0] cmp w0, #0
- ble G_M21223_IG10
+ ble G_M21223_IG11
;; size=28 bbWeight=0.50 PerfScore 4.50 G_M21223_IG05: ; bbWeight=4.00, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x0, [x21] ; gcrRegs +[x0] ldr w1, [x0, #0x08] cmp w20, w1
- bhs G_M21223_IG17
+ bhs G_M21223_IG18
add x0, x0, #16 ; gcrRegs -[x0] ; byrRegs +[x0] @@ -90,21 +89,27 @@ G_M21223_IG05: ; bbWeight=4.00, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 ldrsb wzr, [x0] cmp x0, x19
- beq G_M21223_IG12
+ beq G_M21223_IG13
;; size=52 bbWeight=4.00 PerfScore 102.00
-G_M21223_IG06: ; bbWeight=15.02, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG06: ; bbWeight=1.88, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz + mov x1, x19 + ; gcrRegs +[x1] + cbz x1, G_M21223_IG09 + ;; size=8 bbWeight=1.88 PerfScore 2.82 +G_M21223_IG07: ; bbWeight=15.02, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz
ldr w2, [x0, #0x08]
- ldr w1, [x19, #0x08] - cmp w2, w1 - bne G_M21223_IG08
+ ldr w3, [x1, #0x08] + cmp w2, w3 + bne G_M21223_IG09
;; size=16 bbWeight=15.02 PerfScore 112.63
-G_M21223_IG07: ; bbWeight=2, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG08: ; bbWeight=2, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz
add x3, x0, #12 ; byrRegs +[x3] ldr w2, [x0, #0x08] lsl w2, w2, #1 mov w2, w2
- add x1, x19, #12
+ add x1, x1, #12 + ; gcrRegs -[x1]
; byrRegs +[x1] mov x0, x3 ; gcrRegs -[x0] @@ -117,17 +122,17 @@ G_M21223_IG07: ; bbWeight=2, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, blr x3 ; byrRegs -[x0-x1] ; gcr arg pop 0
- cbnz w0, G_M21223_IG12
+ cbnz w0, G_M21223_IG13
;; size=48 bbWeight=2 PerfScore 25.00
-G_M21223_IG08: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
add w20, w20, #1 movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr w0, [x0]
- tbz w0, #0, G_M21223_IG19
+ tbz w0, #0, G_M21223_IG20
;; size=24 bbWeight=4 PerfScore 24.00
-G_M21223_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG10: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 @@ -138,26 +143,26 @@ G_M21223_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by cmp w0, w20 bgt G_M21223_IG05 ;; size=28 bbWeight=4 PerfScore 36.00
-G_M21223_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M21223_IG11: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ;; size=12 bbWeight=0.50 PerfScore 0.75
-G_M21223_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_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.50
-G_M21223_IG12: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M21223_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr w2, [x0]
- tbz w2, #0, G_M21223_IG20
+ tbz w2, #0, G_M21223_IG21
;; size=20 bbWeight=0.50 PerfScore 2.75
-G_M21223_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 @@ -165,7 +170,7 @@ G_M21223_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs +[x0] ldr w1, [x0, #0x08] cmp w20, w1
- bhs G_M21223_IG17
+ bhs G_M21223_IG18
add x0, x0, #16 ; gcrRegs -[x0] ; byrRegs +[x0] @@ -173,13 +178,13 @@ G_M21223_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs +[x0] ; byrRegs -[x0] ;; size=36 bbWeight=0.50 PerfScore 6.25
-G_M21223_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG15: ; 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_M21223_IG15: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref
+G_M21223_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x1-x2 x19] mov x3, x19 ; gcrRegs +[x3] @@ -188,19 +193,19 @@ G_M21223_IG15: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=800 movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] ;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M21223_IG16: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG17: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x4 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M21223_IG17: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M21223_IG18: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0-x3 x19] bl CORINFO_HELP_RNGCHKFAIL ; gcr arg pop 0 ;; size=4 bbWeight=0 PerfScore 0.00
-G_M21223_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M21223_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x19] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -210,16 +215,16 @@ G_M21223_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcr arg pop 0 b G_M21223_IG04 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M21223_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M21223_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #54 bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE ; gcr arg pop 0
- b G_M21223_IG09
+ b G_M21223_IG10
;; size=24 bbWeight=0 PerfScore 0.00
-G_M21223_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M21223_IG21: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -227,10 +232,10 @@ G_M21223_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov w1, #54 bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE ; gcr arg pop 0
- b G_M21223_IG13
+ b G_M21223_IG14
;; size=24 bbWeight=0 PerfScore 0.00 ...

+4 (+2.63%) : 143389.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,18 +10,17 @@ ; ; V00 this [V00,T02] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> x1 class-hnd single-def <System.Object>
-; V02 loc0 [V02,T06] ( 2, 1 ) ref -> x1 class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T04] ( 3, 1.50) ref -> x1 class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 6, 4.96) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T03] ( 5, 4.35) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T05] ( 4, 1 ) ubyte -> x0 "Inline return value spill temp" -; V08 tmp5 [V08,T04] ( 2, 1.22) byref -> x0 single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 6, 4.96) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T03] ( 5, 4.35) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T06] ( 4, 1 ) ubyte -> x0 "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 1.22) byref -> x0 single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; ; Lcl frame size = 0 @@ -51,12 +50,13 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=8 bbWeight=0.50 PerfScore 1.00 G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[x0-x1]
+ cbz x1, G_M57556_IG04
ldr x2, [x0, #0x08] ; gcrRegs +[x2] ldr x1, [x1, #0x08] cmp x2, x1 beq G_M57556_IG13
- ;; size=16 bbWeight=0.50 PerfScore 3.75
+ ;; size=20 bbWeight=0.50 PerfScore 4.25
G_M57556_IG07: ; bbWeight=0.44, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] cbz x2, G_M57556_IG12 @@ -100,7 +100,7 @@ G_M57556_IG13: ; bbWeight=0.06, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr b G_M57556_IG11 ;; size=8 bbWeight=0.06 PerfScore 0.10
-; Total bytes of code 152, prolog size 8, PerfScore 19.29, instruction count 38, allocated bytes for code 152 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 156, prolog size 8, PerfScore 19.79, instruction count 39, allocated bytes for code 156 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -111,7 +111,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 152 (0x000098)
+ 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)

libraries_tests.run.linux.arm64.Release.mch

-28 (-46.67%) : 621493.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -8,12 +8,10 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 1190 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -22,37 +20,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.50 PerfScore 5.25 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 12.12, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -63,7 +43,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 637448.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -8,12 +8,10 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 1603 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -22,37 +20,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.50 PerfScore 5.25 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 12.12, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -63,7 +43,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-35.29%) : 61973.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.Canon,System.Canon]:Single():System.__Canon:this (Tier1)

@@ -7,12 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> x0 this single-def -; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def
+; V00 this [V00,T01] ( 3, 3 ) byref -> x2 this single-def +; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x2 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,38 +17,25 @@ G_M64707_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x20]! mov fp, sp str x1, [fp, #0x18]
- ;; size=12 bbWeight=1 PerfScore 2.50 -G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz - ; byrRegs +[x0] - ldr x2, [x0] - ; gcrRegs +[x2] - mov x0, x2 - ; gcrRegs +[x0] - ; byrRegs -[x0] - cbz x0, G_M64707_IG05 - ;; size=12 bbWeight=1 PerfScore 4.50 -G_M64707_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - ldr x1, [x1, #0x08] - cmp x3, x1 - beq G_M64707_IG05 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M64707_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1 - mov x1, x2
+ mov x2, x0 + ; byrRegs +[x2] + ;; size=16 bbWeight=1 PerfScore 3.00 +G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref + ldr x0, [x1, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x08] + ldr x1, [x2]
; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[x1-x2] +[x0] - ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M64707_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ; gcrRegs -[x1] +[x0] + ; byrRegs -[x2] + ;; size=20 bbWeight=1 PerfScore 13.00 +G_M64707_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 68, prolog size 12, PerfScore 12.62, instruction count 17, allocated bytes for code 68 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
+; Total bytes of code 44, prolog size 12, PerfScore 18.00, instruction count 11, allocated bytes for code 44 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -62,7 +46,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 17 (0x00011) Actual length = 68 (0x000044)
+ Function Length : 11 (0x0000b) Actual length = 44 (0x00002c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+16 (+8.33%) : 114800.dasm - System.Collections.Immutable.ImmutableDictionary2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)

@@ -8,76 +8,75 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 318 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 6, 3.50) long -> x0 single-def -; V01 arg0 [V01,T03] ( 4, 3 ) ref -> x20 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> -; V02 arg1 [V02,T01] ( 5, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T04] ( 3, 0 ) ref -> x0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
+; V00 TypeCtx [V00,T00] ( 6, 4 ) long -> x19 single-def +; V01 arg0 [V01,T02] ( 4, 3 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> +; V02 arg1 [V02,T01] ( 5, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T03] ( 3, 0 ) ref -> x0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T00] ( 6, 9 ) ref -> x15 class-hnd "spilling QMark2" <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]> -;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V07 tmp3 [V07,T07] ( 2, 0 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 0 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T06] ( 3, 0 ) long -> x2 "fgMakeTemp is creating a new local variable"
+;* V05 tmp1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V06 tmp2 [V06,T06] ( 2, 0 ) long -> x0 "argument with side effect" +; V07 rat0 [V07,T04] ( 3, 0 ) long -> x0 "runtime lookup" +; V08 rat1 [V08,T05] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M59789_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, 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 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M59789_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - mov x15, x20
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M59789_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + mov x0, x19 + mov x1, x21 + ; gcrRegs +[x1] + bl CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[x1] +[x0] + mov x15, x0
; gcrRegs +[x15]
- cbz x15, G_M59789_IG04 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M59789_IG03: ; bbWeight=0.50, gcrefRegs=108000 {x15 x20}, byrefRegs=80000 {x19}, byref - ldr x14, [x15] - cmp x14, x0 - csel x15, x15, xzr, eq - ;; size=12 bbWeight=0.50 PerfScore 2.00 -G_M59789_IG04: ; bbWeight=1, gcrefRegs=108000 {x15 x20}, byrefRegs=80000 {x19}, byref, isz - mov x14, x19
+ mov x14, x20
; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
; byrRegs -[x14]
- ldr x1, [x19] - ; gcrRegs +[x1] - cbz x1, G_M59789_IG06
+ ldr x0, [x20] + ; gcrRegs +[x0] + cbz x0, G_M59789_IG04
mov w0, #1
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M59789_IG05: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0] + ;; size=36 bbWeight=1 PerfScore 8.50 +G_M59789_IG03: ; 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 -G_M59789_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, gcvars, byref, isz - ; gcrRegs -[x1] - ldr x1, [x0, #0x38] - ldr x1, [x1] - ldr x2, [x1, #0x50] - cbz x2, G_M59789_IG07 - mov x0, x2 - b G_M59789_IG08 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M59789_IG07: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+ ;; size=16 bbWeight=1 PerfScore 5.00 +G_M59789_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, gcvars, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x50] + cbz x0, G_M59789_IG05 + b G_M59789_IG06 + ;; size=20 bbWeight=0 PerfScore 0.00 +G_M59789_IG05: ; bbWeight=0, 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_CLASS
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M59789_IG08: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - mov x1, x20
+ ;; size=20 bbWeight=0 PerfScore 0.00 +G_M59789_IG06: ; bbWeight=0, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + mov x1, x21
; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS
- ; gcrRegs -[x1 x20] +[x0] - cbz x0, G_M59789_IG10
+ ; gcrRegs -[x1 x21] +[x0] + cbz x0, G_M59789_IG08
movz x1, #0xD1FFAB1E // code for System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:ToImmutable():System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -85,28 +84,30 @@ G_M59789_IG08: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19 blr x1 mov x15, x0 ; gcrRegs +[x15]
- mov x14, x19
+ mov x14, x20
; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[x0 x15]
- ; byrRegs -[x14 x19]
+ ; byrRegs -[x14 x20]
mov w0, #1 ;; size=48 bbWeight=0 PerfScore 0.00
-G_M59789_IG09: ; bbWeight=0, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59789_IG07: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=0 PerfScore 0.00 -G_M59789_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M59789_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, wzr ;; size=4 bbWeight=0 PerfScore 0.00
-G_M59789_IG11: ; bbWeight=0, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59789_IG09: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 192, prolog size 16, PerfScore 17.00, instruction count 48, allocated bytes for code 192 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
+; Total bytes of code 208, prolog size 20, PerfScore 19.50, instruction count 52, allocated bytes for code 208 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -117,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
+ Function Length : 52 (0x00034) Actual length = 208 (0x0000d0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -131,10 +132,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

+16 (+8.33%) : 695968.dasm - System.Collections.Immutable.ImmutableDictionary2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)

@@ -8,76 +8,75 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 1568 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 6, 3.50) long -> x0 single-def -; V01 arg0 [V01,T03] ( 4, 3 ) ref -> x20 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> -; V02 arg1 [V02,T01] ( 5, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T04] ( 3, 0 ) ref -> x0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
+; V00 TypeCtx [V00,T00] ( 6, 4 ) long -> x19 single-def +; V01 arg0 [V01,T02] ( 4, 3 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> +; V02 arg1 [V02,T01] ( 5, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T03] ( 3, 0 ) ref -> x0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T00] ( 6, 9 ) ref -> x15 class-hnd "spilling QMark2" <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]> -;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V07 tmp3 [V07,T07] ( 2, 0 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 0 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T06] ( 3, 0 ) long -> x2 "fgMakeTemp is creating a new local variable"
+;* V05 tmp1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V06 tmp2 [V06,T06] ( 2, 0 ) long -> x0 "argument with side effect" +; V07 rat0 [V07,T04] ( 3, 0 ) long -> x0 "runtime lookup" +; V08 rat1 [V08,T05] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M59789_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, 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 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M59789_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - mov x15, x20
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M59789_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + mov x0, x19 + mov x1, x21 + ; gcrRegs +[x1] + bl CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[x1] +[x0] + mov x15, x0
; gcrRegs +[x15]
- cbz x15, G_M59789_IG04 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M59789_IG03: ; bbWeight=0.50, gcrefRegs=108000 {x15 x20}, byrefRegs=80000 {x19}, byref - ldr x14, [x15] - cmp x14, x0 - csel x15, x15, xzr, eq - ;; size=12 bbWeight=0.50 PerfScore 2.00 -G_M59789_IG04: ; bbWeight=1, gcrefRegs=108000 {x15 x20}, byrefRegs=80000 {x19}, byref, isz - mov x14, x19
+ mov x14, x20
; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
; byrRegs -[x14]
- ldr x1, [x19] - ; gcrRegs +[x1] - cbz x1, G_M59789_IG06
+ ldr x0, [x20] + ; gcrRegs +[x0] + cbz x0, G_M59789_IG04
mov w0, #1
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M59789_IG05: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0] + ;; size=36 bbWeight=1 PerfScore 8.50 +G_M59789_IG03: ; 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 -G_M59789_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, gcvars, byref, isz - ; gcrRegs -[x1] - ldr x1, [x0, #0x38] - ldr x1, [x1] - ldr x2, [x1, #0x50] - cbz x2, G_M59789_IG07 - mov x0, x2 - b G_M59789_IG08 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M59789_IG07: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+ ;; size=16 bbWeight=1 PerfScore 5.00 +G_M59789_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, gcvars, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x50] + cbz x0, G_M59789_IG05 + b G_M59789_IG06 + ;; size=20 bbWeight=0 PerfScore 0.00 +G_M59789_IG05: ; bbWeight=0, 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_CLASS
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M59789_IG08: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - mov x1, x20
+ ;; size=20 bbWeight=0 PerfScore 0.00 +G_M59789_IG06: ; bbWeight=0, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + mov x1, x21
; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS
- ; gcrRegs -[x1 x20] +[x0] - cbz x0, G_M59789_IG10
+ ; gcrRegs -[x1 x21] +[x0] + cbz x0, G_M59789_IG08
movz x1, #0xD1FFAB1E // code for System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:ToImmutable():System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -85,28 +84,30 @@ G_M59789_IG08: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19 blr x1 mov x15, x0 ; gcrRegs +[x15]
- mov x14, x19
+ mov x14, x20
; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[x0 x15]
- ; byrRegs -[x14 x19]
+ ; byrRegs -[x14 x20]
mov w0, #1 ;; size=48 bbWeight=0 PerfScore 0.00
-G_M59789_IG09: ; bbWeight=0, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59789_IG07: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=0 PerfScore 0.00 -G_M59789_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M59789_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, wzr ;; size=4 bbWeight=0 PerfScore 0.00
-G_M59789_IG11: ; bbWeight=0, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59789_IG09: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 192, prolog size 16, PerfScore 17.00, instruction count 48, allocated bytes for code 192 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
+; Total bytes of code 208, prolog size 20, PerfScore 19.50, instruction count 52, allocated bytes for code 208 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -117,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
+ Function Length : 52 (0x00034) Actual length = 208 (0x0000d0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -131,10 +132,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

+16 (+10.00%) : 475071.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)

@@ -11,13 +11,11 @@ ; ; V00 this [V00,T02] ( 4, 3 ) ref -> x0 this class-hnd <OLEDB.Test.ModuleCore.CTestCase> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T03] ( 3, 4.50) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T06] ( 3, 2.50) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <OLEDB.Test.ModuleCore.CTestModule> -; V05 tmp4 [V05,T07] ( 2, 0 ) ref -> x0 single-def "arg temp" -; V06 cse0 [V06,T05] ( 4, 3 ) ref -> x19 "CSE - aggressive" -; V07 rat0 [V07,T04] ( 3, 4 ) ref -> x1 "Spilling to split statement for tree" -; V08 rat1 [V08,T01] ( 6, 7 ) ref -> x2 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
+; V02 tmp1 [V02,T05] ( 2, 0 ) ref -> x0 single-def "arg temp" +; V03 cse0 [V03,T04] ( 5, 3 ) ref -> x19 "CSE - aggressive" +; V04 rat0 [V04,T03] ( 3, 4 ) ref -> x1 "Spilling to split statement for tree" +; V05 rat1 [V05,T00] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule> +; V06 rat2 [V06,T01] ( 5, 7 ) ref -> x0 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
; ; Lcl frame size = 8 @@ -38,38 +36,42 @@ G_M5100_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref ;; size=16 bbWeight=1 PerfScore 5.00 G_M5100_IG03: ; bbWeight=1, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0-x1]
- cbz x2, G_M5100_IG10 - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M5100_IG04: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x2] - mov x1, x19 - ; gcrRegs +[x1] - mov x0, x1
+ cbz x2, G_M5100_IG07 + mov x0, x19
; gcrRegs +[x0]
- cbz x0, G_M5100_IG07 - ;; size=12 bbWeight=1 PerfScore 2.00 -G_M5100_IG05: ; bbWeight=0.50, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x19] - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M5100_IG07 - ;; size=24 bbWeight=0.50 PerfScore 3.00 -G_M5100_IG06: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3 - bl CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[x1] +[x0] - ; gcr arg pop 0 - ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M5100_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ cbnz x0, G_M5100_IG05 + ;; size=12 bbWeight=1 PerfScore 2.50 +G_M5100_IG04: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x2 x19]
ldr x19, [sp, #0x18] ldp fp, lr, [sp], #0x20 ret lr ;; size=12 bbWeight=1 PerfScore 4.00
-G_M5100_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80006 {x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M5100_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[x19] + ldr x1, [x0] + movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + cmp x1, x2 + beq G_M5100_IG04 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M5100_IG06: ; bbWeight=0.13, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0] + b G_M5100_IG10 + ;; size=4 bbWeight=0.13 PerfScore 0.13 +G_M5100_IG07: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov x1, x19 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTCLASS + ; gcrRegs -[x1 x19] +[x0] + ; gcr arg pop 0 + b G_M5100_IG02 + ;; size=24 bbWeight=0 PerfScore 0.00 +G_M5100_IG08: ; bbWeight=0.50, gcrefRegs=80006 {x1 x2 x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x1-x2 x19] ldr x0, [x2] movz x3, #0xD1FFAB1E @@ -78,7 +80,7 @@ G_M5100_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=8000 cmp x0, x3 beq G_M5100_IG03 ;; size=24 bbWeight=0.50 PerfScore 3.00
-G_M5100_IG09: ; bbWeight=0, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M5100_IG09: ; bbWeight=0, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x2] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -88,7 +90,7 @@ G_M5100_IG09: ; bbWeight=0, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x2, x0 ; gcrRegs +[x2]
- cbnz x2, G_M5100_IG04
+ b G_M5100_IG03
;; size=24 bbWeight=0 PerfScore 0.00 G_M5100_IG10: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref ; gcrRegs -[x0 x2] @@ -100,10 +102,10 @@ G_M5100_IG10: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr bl CORINFO_HELP_CHKCASTCLASS ; gcrRegs -[x1 x19] +[x0] ; gcr arg pop 0
- b G_M5100_IG02
+ b G_M5100_IG04
;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 160, prolog size 12, PerfScore 20.88, instruction count 40, allocated bytes for code 160 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
+; Total bytes of code 176, prolog size 12, PerfScore 20.13, instruction count 44, allocated bytes for code 176 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
; ============================================================ Unwind Info: @@ -114,7 +116,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
+ 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)

librariestestsnotieredcompilation.run.linux.arm64.Release.mch

-28 (-46.67%) : 140911.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 34912.dasm - LamarCodeGeneration.Util.TypeExtensions:AsSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,37 +18,19 @@ G_M24927_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M24927_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M24927_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M24927_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M24927_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M24927_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M24927_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M24927_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M24927_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M24927_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +41,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-40.00%) : 30450.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:b7_2System.__Canon:System.Canon:this (FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> x2 class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,33 +19,21 @@ G_M29555_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x1, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- mov x0, x2 - ; gcrRegs +[x0] - cbz x0, G_M29555_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M29555_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - cmp x3, x1 - beq G_M29555_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M29555_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ ldr x0, [x1, #0x38] + ldr x0, [x0]
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1-x2] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M29555_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 7.50 +G_M29555_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 8.88, instruction count 15, allocated bytes for code 60 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
+; Total bytes of code 36, prolog size 12, PerfScore 12.00, instruction count 9, allocated bytes for code 36 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -58,7 +44,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+43.48%) : 93073.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:b_160():this (FullOpts)

@@ -8,26 +8,25 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8
-G_M51850_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51850_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp mov x19, x0 ; gcrRegs +[x19]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=1 PerfScore 3.00 +G_M51850_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
ldp x0, x1, [x19, #0x08] ; gcrRegs +[x0-x1] ldrsb wzr, [x0] @@ -38,11 +37,9 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ldr x3, [x3] blr x3 ; gcrRegs -[x0-x1]
- ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ldrsb wzr, [x0]
+ ldr x19, [x19, #0x08] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E
- ; gcrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 movz x1, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:ValidateType(System.Object) @@ -50,26 +47,41 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x19] - brk_unix #0 - ;; size=76 bbWeight=0 PerfScore 0.00
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + ;; size=104 bbWeight=1 PerfScore 32.50 +G_M51850_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x2 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 92, prolog size 12, PerfScore 0.00, instruction count 23, allocated bytes for code 92 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
+; Total bytes of code 132, prolog size 12, PerfScore 39.50, instruction count 33, allocated bytes for code 132 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 2
- Epilog Count : 0
+ Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 92 (0x00005c)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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 ----
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

+40 (+43.48%) : 93157.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:b_220():this (FullOpts)

@@ -8,26 +8,25 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataColumnMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8
-G_M18245_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M18245_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp mov x19, x0 ; gcrRegs +[x19]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=1 PerfScore 3.00 +G_M18245_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
ldp x0, x1, [x19, #0x08] ; gcrRegs +[x0-x1] ldrsb wzr, [x0] @@ -38,11 +37,9 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ldr x3, [x3] blr x3 ; gcrRegs -[x0-x1]
- ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ldrsb wzr, [x0]
+ ldr x19, [x19, #0x08] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E
- ; gcrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 movz x1, #0xD1FFAB1E // code for System.Data.Common.DataColumnMappingCollection:ValidateType(System.Object) @@ -50,26 +47,41 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x19] - brk_unix #0 - ;; size=76 bbWeight=0 PerfScore 0.00
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + ;; size=104 bbWeight=1 PerfScore 32.50 +G_M18245_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x2 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 92, prolog size 12, PerfScore 0.00, instruction count 23, allocated bytes for code 92 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
+; Total bytes of code 132, prolog size 12, PerfScore 39.50, instruction count 33, allocated bytes for code 132 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 2
- Epilog Count : 0
+ Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 92 (0x00005c)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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 ----
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

+48 (+92.31%) : 93551.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>cDisplayClass7_0:b2():this (FullOpts)

@@ -8,24 +8,24 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 3, 2 ) ref -> x0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
+; V00 this [V00,T01] ( 3, 3 ) ref -> x0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T01] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V04 tmp3 [V04,T03] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V06 cse0 [V06,T02] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V02 tmp1 [V02,T00] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V03 tmp2 [V03,T03] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V04 cse0 [V04,T02] ( 2, 2 ) ref -> x0 "CSE - aggressive"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
-G_M51219_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG - stp fp, lr, [sp, #-0x10]!
+G_M51219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG + stp fp, lr, [sp, #-0x20]! + str x19, [sp, #0x18]
mov fp, sp
- ;; size=8 bbWeight=0 PerfScore 0.00 -G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
+ ;; size=12 bbWeight=1 PerfScore 2.50 +G_M51219_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
; gcrRegs +[x0]
- ldr x0, [x0, #0x08] - ldrsb wzr, [x0]
+ ldr x19, [x0, #0x08] + ; gcrRegs +[x19] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 @@ -35,26 +35,46 @@ G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byre movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- brk_unix #0 - ;; size=44 bbWeight=0 PerfScore 0.00
+ movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + mov w1, wzr + movz x3, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + movk x3, #0xD1FFAB1E LSL #16 + movk x3, #0xD1FFAB1E LSL #32 + ldr x3, [x3] + ;; size=76 bbWeight=1 PerfScore 20.00 +G_M51219_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x3 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 52, prolog size 8, PerfScore 0.00, instruction count 13, allocated bytes for code 52 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
+; Total bytes of code 100, prolog size 12, PerfScore 26.50, instruction count 25, allocated bytes for code 100 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
+ Function Length : 25 (0x00019) Actual length = 100 (0x000064)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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
- 81 save_fplr_x #1 (0x01); stp fp, lr, [sp, #-16]!
+ ---- Epilog start at index 1 ---- + 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 E4 end

realworld.run.linux.arm64.checked.mch

-24 (-31.58%) : 33118.dasm - System.Management.Automation.PSTypeExtensions+<>c7`1[System.Canon]:b7_1(System.Object):System.Canon:this (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> x19 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> x19 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 8 @@ -23,34 +21,22 @@ G_M56342_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M56342_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M56342_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M56342_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M56342_IG03: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M56342_IG05 - ;; size=28 bbWeight=0.25 PerfScore 4.12 -G_M56342_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M56342_IG05: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=20 bbWeight=1 PerfScore 13.00 +G_M56342_IG03: ; 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 76, prolog size 16, PerfScore 13.81, instruction count 19, allocated bytes for code 76 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.00, instruction count 13, allocated bytes for code 52 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +47,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
+ Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 435.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-25.93%) : 19008.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (FullOpts)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> x20 this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 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" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> x20 "CSE - aggressive"
; ; Lcl frame size = 16 @@ -22,47 +21,36 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x19, x20, [sp, #0x20] mov fp, sp str x1, [fp, #0x18]
- mov x20, x0 - ; gcrRegs +[x20] - mov x19, x1 - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ mov x19, x0 + ; gcrRegs +[x19] + ;; size=20 bbWeight=1 PerfScore 4.00 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x20, [x1, #0x38] + ldr x0, [x20]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x10] blr x2
- ; gcrRegs -[x1 x20]
+ ; gcrRegs -[x1 x19]
mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M60617_IG05 - ;; size=44 bbWeight=1 PerfScore 19.50 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M60617_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x20]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=48 bbWeight=1 PerfScore 22.50 +G_M60617_IG03: ; 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 108, prolog size 16, PerfScore 29.81, instruction count 27, allocated bytes for code 108 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
+; Total bytes of code 80, prolog size 16, PerfScore 29.50, instruction count 20, allocated bytes for code 80 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -73,7 +61,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 9315.dasm - FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo:MangledNameForType(System.String):System.String:this (FullOpts)

@@ -8,36 +8,33 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 4 ) ref -> x19 this class-hnd single-def <FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo> -; V01 arg1 [V01,T01] ( 5, 3.50) ref -> x20 class-hnd single-def <System.String>
+; V00 this [V00,T01] ( 4, 3.50) ref -> x20 this class-hnd single-def <FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo> +; V01 arg1 [V01,T00] ( 5, 3.50) ref -> x19 class-hnd single-def <System.String>
; V02 loc0 [V02 ] ( 2, 1 ) struct ( 8) [fp+0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.FSharp.Core.FSharpValueOption`1[int]> ;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref <Microsoft.FSharp.Core.FSharpValueOption`1[int]> ;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref single-def ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T09] ( 2, 1 ) int -> x0 -; V07 tmp2 [V07,T04] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <Microsoft.FSharp.Core.FSharpValueOption`1[int]>
+; V06 tmp1 [V06,T06] ( 2, 1 ) int -> x0 +; V07 tmp2 [V07,T02] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <Microsoft.FSharp.Core.FSharpValueOption`1[int]>
;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref single-def ;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref single-def ;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref ;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref
-; V12 tmp7 [V12,T10] ( 2, 1 ) int -> x0
+; V12 tmp7 [V12,T07] ( 2, 1 ) int -> x0
; V13 tmp8 [V13 ] ( 2, 2 ) struct ( 8) [fp+0x10] do-not-enreg[XS] addr-exposed ld-addr-op class-hnd exact "Single-def Box Helper" <System.Int32> ;* V14 tmp9 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp10 [V15 ] ( 0, 0 ) ref -> zero-ref single-def
-;* V16 tmp11 [V16,T07] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V17 tmp12 [V17,T02] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V18 tmp13 [V18,T08] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V19 tmp14 [V19,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V20 tmp15 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpValueOption`1[int]> -; V21 tmp16 [V21 ] ( 2, 1 ) int -> [fp+0x18] do-not-enreg[X] addr-exposed "field V02.item (fldOffset=0x0)" P-DEP -; V22 tmp17 [V22 ] ( 2, 1 ) int -> [fp+0x1C] do-not-enreg[X] addr-exposed "field V02._tag (fldOffset=0x4)" P-DEP -;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref single-def "field V03.item (fldOffset=0x0)" P-INDEP -;* V24 tmp19 [V24 ] ( 0, 0 ) int -> zero-ref single-def "field V03._tag (fldOffset=0x4)" P-INDEP -; V25 tmp20 [V25 ] ( 2, 1.50) int -> [fp+0x10] do-not-enreg[X] addr-exposed "field V13.m_value (fldOffset=0x0)" P-DEP -;* V26 tmp21 [V26,T11] ( 0, 0 ) int -> zero-ref single-def "field V20.item (fldOffset=0x0)" P-INDEP -;* V27 tmp22 [V27,T12] ( 0, 0 ) int -> zero-ref single-def "field V20._tag (fldOffset=0x4)" P-INDEP -; V28 tmp23 [V28,T05] ( 2, 2 ) ref -> x2 single-def "argument with side effect" -; V29 tmp24 [V29,T06] ( 2, 2 ) ref -> x2 single-def "argument with side effect"
+;* V16 tmp11 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpValueOption`1[int]> +; V17 tmp12 [V17 ] ( 2, 1 ) int -> [fp+0x18] do-not-enreg[X] addr-exposed "field V02.item (fldOffset=0x0)" P-DEP +; V18 tmp13 [V18 ] ( 2, 1 ) int -> [fp+0x1C] do-not-enreg[X] addr-exposed "field V02._tag (fldOffset=0x4)" P-DEP +;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref single-def "field V03.item (fldOffset=0x0)" P-INDEP +;* V20 tmp15 [V20 ] ( 0, 0 ) int -> zero-ref single-def "field V03._tag (fldOffset=0x4)" P-INDEP +; V21 tmp16 [V21 ] ( 2, 1.50) int -> [fp+0x10] do-not-enreg[X] addr-exposed "field V13.m_value (fldOffset=0x0)" P-DEP +;* V22 tmp17 [V22,T08] ( 0, 0 ) int -> zero-ref single-def "field V16.item (fldOffset=0x0)" P-INDEP +;* V23 tmp18 [V23,T09] ( 0, 0 ) int -> zero-ref single-def "field V16._tag (fldOffset=0x4)" P-INDEP +; V24 tmp19 [V24,T03] ( 2, 2 ) ref -> x2 single-def "argument with side effect" +; V25 tmp20 [V25,T04] ( 2, 2 ) ref -> x2 single-def "argument with side effect" +; V26 cse0 [V26,T05] ( 3, 1.50) ref -> x20 "CSE - moderate"
; ; Lcl frame size = 16 @@ -46,13 +43,13 @@ G_M40596_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 { stp x19, x20, [sp, #0x20] mov fp, sp str xzr, [fp, #0x18] // [V02 loc0]
- mov x19, x0 - ; gcrRegs +[x19] - mov x20, x1
+ mov x20, x0
; gcrRegs +[x20]
+ mov x19, x1 + ; gcrRegs +[x19]
;; size=24 bbWeight=1 PerfScore 4.50 G_M40596_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
- mov x1, x19
+ mov x1, x20
; gcrRegs +[x1] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -63,9 +60,9 @@ G_M40596_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { ;; size=24 bbWeight=1 PerfScore 4.00 G_M40596_IG03: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- ldr w0, [x19, #0x08]
+ ldr w0, [x20, #0x08]
cbz w0, G_M40596_IG04
- mov x0, x20
+ mov x0, x19
; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for FSharp.Compiler.Syntax.PrettyNaming:TryDemangleGenericNameAndPos(System.String):Microsoft.FSharp.Core.FSharpValueOption`1[int] movk x1, #0xD1FFAB1E LSL #16 @@ -97,9 +94,9 @@ G_M40596_IG03: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=000 ; gcrRegs -[x1-x2] cbnz w0, G_M40596_IG06 ;; size=104 bbWeight=0.50 PerfScore 13.25
-G_M40596_IG04: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x19] - mov x0, x20
+G_M40596_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x20] + mov x0, x19
; gcrRegs +[x0] ;; size=4 bbWeight=0.50 PerfScore 0.25 G_M40596_IG05: ; bbWeight=0.50, epilog, nogc, extend @@ -108,15 +105,15 @@ G_M40596_IG05: ; bbWeight=0.50, epilog, nogc, extend ret lr ;; size=12 bbWeight=0.50 PerfScore 1.50 G_M40596_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref
- ; gcrRegs -[x0] +[x19] - ldr w0, [x19, #0x08] - str w0, [fp, #0x10] // [V25 tmp20]
+ ; gcrRegs -[x0] +[x20] + ldr w0, [x20, #0x08] + str w0, [fp, #0x10] // [V21 tmp16]
movz x0, #0xD1FFAB1E // code for <unknown method> movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr x0, [x0] blr x0
- ; gcrRegs -[x19] +[x0]
+ ; gcrRegs -[x20] +[x0]
mov x2, x0 ; gcrRegs +[x2] add x0, fp, #16 // [V13 tmp8] @@ -130,7 +127,7 @@ G_M40596_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180 ; gcrRegs -[x2] +[x0] mov x2, x0 ; gcrRegs +[x2]
- mov x0, x20
+ mov x0, x19
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -139,7 +136,7 @@ G_M40596_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=180 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x2 x20]
+ ; gcrRegs -[x2 x19]
;; size=100 bbWeight=0.50 PerfScore 12.25 G_M40596_IG07: ; bbWeight=0.50, epilog, nogc, extend ldp x19, x20, [sp, #0x20]

+0 (0.00%) : 32312.dasm - System.Linq.Expressions.Compiler.ILGen:CanEmitILConstant(System.Type):ubyte (FullOpts)

@@ -9,24 +9,19 @@ ; Final local variable assignments ; ; V00 arg0 [V00,T01] ( 3, 3 ) ref -> x0 class-hnd single-def <System.Type>
-; V01 loc0 [V01,T02] ( 3, 3 ) int -> x19
+;* V01 loc0 [V01 ] ( 0, 0 ) int -> zero-ref
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.Type>
-; V04 tmp2 [V04,T03] ( 3, 2 ) int -> x19 "Inline return value spill temp" -;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp4 [V06 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V08 tmp6 [V08 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V11 tmp9 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V13 tmp11 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V15 tmp13 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V17 tmp15 [V17 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V18 tmp16 [V18 ] ( 0, 0 ) int -> zero-ref "index expr"
+; V04 tmp2 [V04,T02] ( 4, 3 ) int -> x19 "Inline return value spill temp" +;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V08 tmp6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> +;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V12 tmp10 [V12 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V13 tmp11 [V13 ] ( 0, 0 ) int -> zero-ref "index expr"
; ; Lcl frame size = 8

+16 (+4.35%) : 5235.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.Canon]:Commit():System.Canon:this (FullOpts)

@@ -7,7 +7,7 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 10, 6.25) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
+; V00 this [V00,T00] ( 8, 6 ) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]> ;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <System.Runtime.ExceptionServices.ExceptionDispatchInfo> @@ -16,27 +16,27 @@ ;* V06 loc5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 tmp2 [V09,T12] ( 4, 0 ) long -> x0 "spilling helperCall" -;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V11 tmp4 [V11,T16] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>>
+;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp4 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V13 tmp6 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V14 tmp7 [V14,T05] ( 4, 4.50) long -> x0 "spilling helperCall" -;* V15 tmp8 [V15 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V16 tmp9 [V16,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -; V17 tmp10 [V17,T09] ( 2, 4 ) long -> x0 "argument with side effect" -; V18 tmp11 [V18,T10] ( 2, 4 ) long -> x0 "argument with side effect" -; V19 tmp12 [V19,T17] ( 2, 0 ) long -> x0 "argument with side effect" -; V20 cse0 [V20,T04] ( 12, 5.40) long -> x20 "CSE - aggressive" -; V21 rat0 [V21,T06] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V22 rat1 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" -; V23 rat2 [V23,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V24 rat3 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" -; V25 rat4 [V25,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V26 rat5 [V26,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V27 rat6 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V28 rat7 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V29 rat8 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
+; V13 tmp6 [V13,T09] ( 2, 4 ) long -> x0 "argument with side effect" +; V14 tmp7 [V14,T16] ( 2, 0 ) long -> x0 "argument with side effect" +; V15 tmp8 [V15,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V16 tmp9 [V16,T17] ( 2, 0 ) long -> x0 "argument with side effect" +; V17 tmp10 [V17,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V18 cse0 [V18,T04] ( 10, 4.40) long -> x20 "CSE - aggressive" +; V19 rat0 [V19,T05] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V20 rat1 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V21 rat2 [V21,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V22 rat3 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" +; V23 rat4 [V23,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V24 rat5 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" +; V25 rat6 [V25,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V26 rat7 [V26,T12] ( 3, 0 ) long -> x0 "runtime lookup" +; V27 rat8 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V28 rat9 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" +; V29 rat10 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -71,7 +71,7 @@ G_M31693_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG15
+ cbnz x0, G_M31693_IG13
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -93,7 +93,7 @@ G_M31693_IG08: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG19
+ cbnz x0, G_M31693_IG16
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -110,53 +110,47 @@ G_M31693_IG10: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG13 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M31693_IG12: ; bbWeight=0.25, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M31693_IG13: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 3.00 -G_M31693_IG14: ; bbWeight=1, epilog, nogc, extend
+ ldr x0, [x0, #0x08] + ;; size=28 bbWeight=1 PerfScore 9.00 +G_M31693_IG12: ; bbWeight=1, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=1 PerfScore 3.00
-G_M31693_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M31693_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x18]
- cbz x0, G_M31693_IG16 - b G_M31693_IG17
+ cbz x0, G_M31693_IG14 + b G_M31693_IG15
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG18
+G_M31693_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0]
+ ldr x0, [x0, #0x08]
movz x1, #0xD1FFAB1E // code for System.Runtime.ExceptionServices.ExceptionDispatchInfo:Throw():this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -165,22 +159,22 @@ G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by blr x1 ; gcrRegs -[x0] brk_unix #0
- ;; size=32 bbWeight=0 PerfScore 0.00 -G_M31693_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ ;; size=56 bbWeight=0 PerfScore 0.00 +G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x20]
- cbz x0, G_M31693_IG20 - b G_M31693_IG21
+ cbz x0, G_M31693_IG17 + b G_M31693_IG18
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS @@ -195,7 +189,7 @@ G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by brk_unix #0 ;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 368, prolog size 16, PerfScore 54.88, instruction count 92, allocated bytes for code 368 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
+; Total bytes of code 384, prolog size 16, PerfScore 59.00, instruction count 96, allocated bytes for code 384 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -206,7 +200,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 92 (0x0005c) Actual length = 368 (0x000170)
+ Function Length : 96 (0x00060) Actual length = 384 (0x000180)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.arm64.checked.mch 98 93 0 5 -2,256 +0
benchmarks.run_pgo.linux.arm64.checked.mch 1,962 1,954 7 1 -52,968 +140
benchmarks.run_tiered.linux.arm64.checked.mch 38 36 2 0 -892 +24
coreclr_tests.run.linux.arm64.checked.mch 207 168 16 23 -4,508 +620
libraries.crossgen2.linux.arm64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.arm64.checked.mch 564 537 6 21 -17,272 +276
libraries_tests.run.linux.arm64.Release.mch 1,685 1,463 186 36 -39,256 +5,308
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 763 720 17 26 -23,396 +520
realworld.run.linux.arm64.checked.mch 127 120 1 6 -3,412 +16
smoke_tests.nativeaot.linux.arm64.checked.mch 0 0 0 0 -0 +0
5,444 5,091 235 118 -143,960 +6,904

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.arm64.checked.mch 31,476 3,116 28,360 0 (0.00%) 3,349 (9.62%)
benchmarks.run_pgo.linux.arm64.checked.mch 134,796 58,471 76,325 0 (0.00%) 15,491 (10.31%)
benchmarks.run_tiered.linux.arm64.checked.mch 59,554 44,995 14,559 0 (0.00%) 615 (1.02%)
coreclr_tests.run.linux.arm64.checked.mch 615,441 382,473 232,968 0 (0.00%) 10,173 (1.63%)
libraries.crossgen2.linux.arm64.checked.mch 1,925 0 1,925 0 (0.00%) 0 (0.00%)
libraries.pmi.linux.arm64.checked.mch 267,213 6 267,207 0 (0.00%) 28,301 (9.58%)
libraries_tests.run.linux.arm64.Release.mch 702,782 491,999 210,783 0 (0.00%) 39,474 (5.32%)
librariestestsnotieredcompilation.run.linux.arm64.Release.mch 264,005 21,599 242,406 0 (0.00%) 40,769 (13.38%)
realworld.run.linux.arm64.checked.mch 28,853 151 28,702 0 (0.00%) 4,458 (13.38%)
smoke_tests.nativeaot.linux.arm64.checked.mch 51 0 51 0 (0.00%) 1 (1.92%)
2,106,096 1,002,810 1,103,286 0 (0.00%) 142,631 (6.34%)

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: 10908556 (overridden on cmd)
Total bytes of diff: 10906300 (overridden on cmd)
Total bytes of delta: -2256 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
        -128 : 6787.dasm (-3.64 % of base)
         -80 : 6137.dasm (-1.73 % of base)
         -80 : 5641.dasm (-10.15 % of base)
         -48 : 8393.dasm (-10.53 % of base)
         -44 : 8363.dasm (-4.62 % of base)
         -44 : 22024.dasm (-16.18 % of base)
         -40 : 18248.dasm (-4.81 % of base)
         -40 : 19467.dasm (-12.50 % of base)
         -40 : 4247.dasm (-9.26 % of base)
         -40 : 20656.dasm (-8.06 % of base)
         -36 : 774.dasm (-15.25 % of base)
         -36 : 21887.dasm (-15.00 % of base)
         -32 : 1625.dasm (-11.59 % of base)
         -28 : 18673.dasm (-4.27 % of base)
         -28 : 6658.dasm (-10.29 % of base)
         -28 : 11551.dasm (-20.59 % of base)
         -28 : 19992.dasm (-15.91 % of base)
         -28 : 3417.dasm (-46.67 % of base)
         -28 : 4041.dasm (-3.59 % of base)
         -28 : 13850.dasm (-2.13 % of base)

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

Top method improvements (bytes):
        -128 (-3.64 % of base) : 6787.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -80 (-10.15 % of base) : 5641.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (FullOpts)
         -80 (-1.73 % of base) : 6137.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -48 (-10.53 % of base) : 8393.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -44 (-16.18 % of base) : 22024.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-4.62 % of base) : 8363.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -40 (-4.81 % of base) : 18248.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -40 (-12.50 % of base) : 19467.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -40 (-8.06 % of base) : 20656.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -40 (-9.26 % of base) : 4247.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -36 (-15.25 % of base) : 774.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -36 (-15.00 % of base) : 21887.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -32 (-11.59 % of base) : 1625.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:GenerateValue[System.__Canon](System.Random):System.__Canon (FullOpts)
         -28 (-4.27 % of base) : 18673.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
         -28 (-15.91 % of base) : 19992.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -28 (-10.29 % of base) : 6658.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (FullOpts)
         -28 (-21.88 % of base) : 17518.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -28 (-2.13 % of base) : 13850.dasm - Newtonsoft.Json.Utilities.ExpressionReflectionDelegateFactory:CreateSet[System.__Canon](System.Reflection.PropertyInfo):System.Action`2[System.__Canon,System.__Canon]:this (FullOpts)
         -28 (-20.59 % of base) : 11551.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 435.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 3417.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -24 (-31.58 % of base) : 7097.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 435.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-25.93 % of base) : 2207.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -24 (-22.22 % of base) : 17808.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -28 (-21.88 % of base) : 17518.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -28 (-20.59 % of base) : 11551.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -20 (-20.00 % of base) : 12621.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -20 (-17.86 % of base) : 18458.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -20 (-17.24 % of base) : 976.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -24 (-16.67 % of base) : 30111.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (FullOpts)
         -24 (-16.22 % of base) : 6790.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,System.__Canon,System.__Canon]:Add(System.__Canon,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -24 (-16.22 % of base) : 7152.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (FullOpts)
         -44 (-16.18 % of base) : 22024.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -16 (-16.00 % of base) : 9558.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -28 (-15.91 % of base) : 19992.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -36 (-15.25 % of base) : 774.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (FullOpts)
         -36 (-15.00 % of base) : 21887.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -24 (-14.63 % of base) : 12678.dasm - System.Text.Json.Serialization.Converters.IDictionaryConverter`1[System.__Canon]:Add(System.String,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -24 (-14.29 % of base) : 6162.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (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: 62521952 (overridden on cmd)
Total bytes of diff: 62469124 (overridden on cmd)
Total bytes of delta: -52828 (-0.08 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          48 : 131610.dasm (2.55 % of base)
          48 : 134130.dasm (2.54 % of base)
          16 : 86978.dasm (6.90 % of base)
          16 : 125878.dasm (7.41 % of base)
           4 : 83626.dasm (0.18 % of base)
           4 : 84706.dasm (0.09 % of base)
           4 : 84707.dasm (0.15 % of base)

Top file improvements (bytes):
        -396 : 85118.dasm (-8.60 % of base)
         -56 : 95113.dasm (-5.32 % of base)
         -56 : 96296.dasm (-5.43 % of base)
         -48 : 96266.dasm (-14.63 % of base)
         -48 : 96322.dasm (-8.39 % of base)
         -44 : 21666.dasm (-9.91 % of base)
         -44 : 30291.dasm (-9.91 % of base)
         -32 : 21641.dasm (-6.35 % of base)
         -28 : 19253.dasm (-5.15 % of base)
         -28 : 20801.dasm (-3.30 % of base)
         -28 : 21357.dasm (-5.15 % of base)
         -28 : 22029.dasm (-5.15 % of base)
         -28 : 4785.dasm (-5.15 % of base)
         -28 : 10893.dasm (-3.30 % of base)
         -28 : 17837.dasm (-3.30 % of base)
         -28 : 21213.dasm (-3.30 % of base)
         -28 : 85104.dasm (-9.46 % of base)
         -28 : 9921.dasm (-3.30 % of base)
         -28 : 14277.dasm (-3.30 % of base)
         -28 : 18993.dasm (-3.30 % of base)

56 total files with Code Size differences (49 improved, 7 regressed), 1 unchanged.

Top method regressions (bytes):
          48 (2.55 % of base) : 131610.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (2.54 % of base) : 134130.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          16 (6.90 % of base) : 86978.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          16 (7.41 % of base) : 125878.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
           4 (0.18 % of base) : 83626.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
           4 (0.09 % of base) : 84706.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location):ubyte:this (Tier1)
           4 (0.15 % of base) : 84707.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,int,int,System.Nullable`1[int]):ubyte:this (Tier1)

Top method improvements (bytes):
        -396 (-8.60 % of base) : 85118.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -56 (-5.43 % of base) : 96296.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:Visit(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.CSharp.Binder):this (Tier1)
         -56 (-5.32 % of base) : 95113.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -48 (-14.63 % of base) : 96266.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -48 (-8.39 % of base) : 96322.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -44 (-9.91 % of base) : 21666.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -44 (-9.91 % of base) : 30291.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -32 (-6.35 % of base) : 21641.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-2.01 % of base) : 85384.dasm - Microsoft.CodeAnalysis.CSharp.SourceDocumentationCommentUtils:GetDocumentationCommentTriviaFromSyntaxNode(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.DiagnosticBag):System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.CSharp.Syntax.DocumentationCommentTriviaSyntax] (Tier1)
         -28 (-9.46 % of base) : 85104.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-8.24 % of base) : 80271.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -28 (-28.00 % of base) : 7322.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-5.15 % of base) : 19253.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 20801.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 21357.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 22029.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 4785.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 10893.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 17837.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 21213.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          16 (7.41 % of base) : 125878.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          16 (6.90 % of base) : 86978.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          48 (2.55 % of base) : 131610.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (2.54 % of base) : 134130.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
           4 (0.18 % of base) : 83626.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
           4 (0.15 % of base) : 84707.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,int,int,System.Nullable`1[int]):ubyte:this (Tier1)
           4 (0.09 % of base) : 84706.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location):ubyte:this (Tier1)

Top method improvements (percentages):
         -28 (-28.00 % of base) : 7322.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -24 (-17.14 % of base) : 80530.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -48 (-14.63 % of base) : 96266.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-13.64 % of base) : 95497.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -24 (-10.71 % of base) : 95911.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -44 (-9.91 % of base) : 21666.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -44 (-9.91 % of base) : 30291.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -28 (-9.46 % of base) : 85104.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
        -396 (-8.60 % of base) : 85118.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -48 (-8.39 % of base) : 96322.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-8.24 % of base) : 80271.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -20 (-6.41 % of base) : 19987.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -32 (-6.35 % of base) : 21641.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -56 (-5.43 % of base) : 96296.dasm - Microsoft.CodeAnalysis.CSharp.LocalBinderFactory:Visit(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.CSharp.Binder):this (Tier1)
         -16 (-5.41 % of base) : 95621.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -56 (-5.32 % of base) : 95113.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -24 (-5.22 % of base) : 70226.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -24 (-5.22 % of base) : 86840.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-5.15 % of base) : 19253.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 21357.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: 21455368 (overridden on cmd)
Total bytes of diff: 21454500 (overridden on cmd)
Total bytes of delta: -868 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          12 : 55660.dasm (7.32 % of base)
          12 : 29156.dasm (7.32 % of base)

Top file improvements (bytes):
         -52 : 3671.dasm (-12.75 % of base)
         -44 : 44373.dasm (-16.18 % of base)
         -40 : 40268.dasm (-8.06 % of base)
         -40 : 40638.dasm (-12.50 % of base)
         -40 : 43898.dasm (-5.21 % of base)
         -36 : 42396.dasm (-15.25 % of base)
         -36 : 44313.dasm (-15.00 % of base)
         -32 : 47365.dasm (-11.59 % of base)
         -28 : 39535.dasm (-15.91 % of base)
         -28 : 20117.dasm (-46.67 % of base)
         -28 : 39159.dasm (-4.27 % of base)
         -28 : 55475.dasm (-25.93 % of base)
         -28 : 20013.dasm (-21.88 % of base)
         -28 : 35767.dasm (-12.73 % of base)
         -28 : 4086.dasm (-28.00 % of base)
         -24 : 22112.dasm (-3.31 % of base)
         -24 : 30573.dasm (-4.38 % of base)
         -24 : 4010.dasm (-5.66 % of base)
         -24 : 40402.dasm (-13.95 % of base)
         -24 : 30543.dasm (-11.76 % of base)

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

Top method regressions (bytes):
          12 (7.32 % of base) : 55660.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier1-OSR)
          12 (7.32 % of base) : 29156.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)

Top method improvements (bytes):
         -52 (-12.75 % of base) : 3671.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -44 (-16.18 % of base) : 44373.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -40 (-5.21 % of base) : 43898.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier1)
         -40 (-12.50 % of base) : 40638.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -40 (-8.06 % of base) : 40268.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier1)
         -36 (-15.25 % of base) : 42396.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -36 (-15.00 % of base) : 44313.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -32 (-11.59 % of base) : 47365.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:GenerateValue[System.__Canon](System.Random):System.__Canon (Tier1)
         -28 (-4.27 % of base) : 39159.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (Tier1)
         -28 (-12.73 % of base) : 35767.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -28 (-15.91 % of base) : 39535.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -28 (-28.00 % of base) : 4086.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-21.88 % of base) : 20013.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -28 (-25.93 % of base) : 55475.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -28 (-46.67 % of base) : 20117.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -24 (-13.95 % of base) : 40402.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -24 (-17.14 % of base) : 35779.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -24 (-13.04 % of base) : 41291.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -24 (-3.31 % of base) : 22112.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier1)
         -24 (-6.45 % of base) : 44911.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)

Top method regressions (percentages):
          12 (7.32 % of base) : 55660.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier1-OSR)
          12 (7.32 % of base) : 29156.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 20117.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-28.00 % of base) : 4086.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-25.93 % of base) : 55475.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -28 (-21.88 % of base) : 20013.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -20 (-20.00 % of base) : 23995.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -20 (-17.24 % of base) : 42429.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (Tier1)
         -24 (-17.14 % of base) : 35779.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -44 (-16.18 % of base) : 44373.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-15.91 % of base) : 39535.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -36 (-15.25 % of base) : 42396.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -36 (-15.00 % of base) : 44313.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-13.95 % of base) : 40402.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -24 (-13.04 % of base) : 41291.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -52 (-12.75 % of base) : 3671.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -28 (-12.73 % of base) : 35767.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -40 (-12.50 % of base) : 40638.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-11.76 % of base) : 30543.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -32 (-11.59 % of base) : 47365.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:GenerateValue[System.__Canon](System.Random):System.__Canon (Tier1)
         -40 (-8.06 % of base) : 40268.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier1)
         -16 (-7.84 % of base) : 44768.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)

38 total methods with Code Size differences (36 improved, 2 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: 477083180 (overridden on cmd)
Total bytes of diff: 477079292 (overridden on cmd)
Total bytes of delta: -3888 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         112 : 3050.dasm (0.93 % of base)
         108 : 241245.dasm (1.80 % of base)
         104 : 3071.dasm (0.86 % of base)
          64 : 402228.dasm (2.37 % of base)
          60 : 190310.dasm (300.00 % of base)
          52 : 471916.dasm (1.64 % of base)
          36 : 472959.dasm (14.06 % of base)
          28 : 471948.dasm (1.58 % of base)
          12 : 254314.dasm (1.19 % of base)
          12 : 488962.dasm (2.56 % of base)
           8 : 612091.dasm (2.25 % of base)
           8 : 255422.dasm (1.64 % of base)
           4 : 611267.dasm (0.97 % of base)
           4 : 615516.dasm (0.19 % of base)
           4 : 618284.dasm (0.35 % of base)
           4 : 618727.dasm (0.19 % of base)

Top file improvements (bytes):
         -80 : 254.dasm (-5.81 % of base)
         -64 : 246725.dasm (-38.10 % of base)
         -64 : 240692.dasm (-26.23 % of base)
         -56 : 488765.dasm (-19.44 % of base)
         -52 : 202305.dasm (-5.06 % of base)
         -52 : 236.dasm (-4.22 % of base)
         -52 : 253.dasm (-4.30 % of base)
         -52 : 616926.dasm (-12.75 % of base)
         -48 : 181487.dasm (-21.82 % of base)
         -48 : 202331.dasm (-10.53 % of base)
         -44 : 201298.dasm (-16.18 % of base)
         -44 : 184620.dasm (-23.40 % of base)
         -44 : 184642.dasm (-23.40 % of base)
         -44 : 216422.dasm (-2.63 % of base)
         -44 : 341943.dasm (-6.92 % of base)
         -44 : 359550.dasm (-6.92 % of base)
         -44 : 402077.dasm (-6.92 % of base)
         -44 : 487769.dasm (-6.92 % of base)
         -44 : 524567.dasm (-6.92 % of base)
         -44 : 528583.dasm (-6.92 % of base)

60 total files with Code Size differences (44 improved, 16 regressed), 20 unchanged.

Top method regressions (bytes):
         112 (0.93 % of base) : 3050.dasm - Program:TestCase0003() (FullOpts)
         108 (1.80 % of base) : 241245.dasm - Test_throw2dimarray.App:Main():int (FullOpts)
         104 (0.86 % of base) : 3071.dasm - Program:TestCase0003() (FullOpts)
          64 (2.37 % of base) : 402228.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          60 (300.00 % of base) : 190310.dasm - T:TestEntryPoint():int (FullOpts)
          52 (1.64 % of base) : 471916.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          36 (14.06 % of base) : 472959.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          28 (1.58 % of base) : 471948.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          12 (1.19 % of base) : 254314.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          12 (2.56 % of base) : 488962.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
           8 (2.25 % of base) : 612091.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
           8 (1.64 % of base) : 255422.dasm - Test.DD:Main1() (FullOpts)
           4 (0.19 % of base) : 615516.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
           4 (0.19 % of base) : 618727.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
           4 (0.97 % of base) : 611267.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (Tier1)
           4 (0.35 % of base) : 618284.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]:GetOrAdd(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.Func`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]):System.__Canon:this (Tier1)

Top method improvements (bytes):
         -80 (-5.81 % of base) : 254.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (FullOpts)
         -64 (-26.23 % of base) : 240692.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -64 (-38.10 % of base) : 246725.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -56 (-19.44 % of base) : 488765.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -52 (-4.30 % of base) : 253.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -52 (-4.22 % of base) : 236.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -52 (-5.06 % of base) : 202305.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -52 (-12.75 % of base) : 616926.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -48 (-10.53 % of base) : 202331.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -48 (-21.82 % of base) : 181487.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -44 (-16.18 % of base) : 201298.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-23.40 % of base) : 184642.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-23.40 % of base) : 184620.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-13.41 % of base) : 184621.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -44 (-6.92 % of base) : 341943.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 359550.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 402077.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 487769.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 524567.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 528583.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)

Top method regressions (percentages):
          60 (300.00 % of base) : 190310.dasm - T:TestEntryPoint():int (FullOpts)
          36 (14.06 % of base) : 472959.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          12 (2.56 % of base) : 488962.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          64 (2.37 % of base) : 402228.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
           8 (2.25 % of base) : 612091.dasm - Internal.TypeSystem.MethodDesc:Equals(System.Object):ubyte:this (Tier1)
         108 (1.80 % of base) : 241245.dasm - Test_throw2dimarray.App:Main():int (FullOpts)
          52 (1.64 % of base) : 471916.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
           8 (1.64 % of base) : 255422.dasm - Test.DD:Main1() (FullOpts)
          28 (1.58 % of base) : 471948.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          12 (1.19 % of base) : 254314.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
           4 (0.97 % of base) : 611267.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (Tier1)
         112 (0.93 % of base) : 3050.dasm - Program:TestCase0003() (FullOpts)
         104 (0.86 % of base) : 3071.dasm - Program:TestCase0003() (FullOpts)
           4 (0.35 % of base) : 618284.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]:GetOrAdd(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.Func`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]):System.__Canon:this (Tier1)
           4 (0.19 % of base) : 615516.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
           4 (0.19 % of base) : 618727.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)

Top method improvements (percentages):
         -24 (-40.00 % of base) : 216213.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -64 (-38.10 % of base) : 246725.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -24 (-28.57 % of base) : 313344.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 312277.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 318060.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -64 (-26.23 % of base) : 240692.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -44 (-23.40 % of base) : 184642.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-23.40 % of base) : 184620.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -48 (-21.82 % of base) : 181487.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -28 (-21.21 % of base) : 313497.dasm - Program+TestGenericInlining+GenericInline`1[System.__Canon]:.ctor():this (FullOpts)
         -24 (-20.00 % of base) : 293983.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (FullOpts)
         -20 (-20.00 % of base) : 251909.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -28 (-20.00 % of base) : 311371.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -56 (-19.44 % of base) : 488765.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -28 (-18.92 % of base) : 218237.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -28 (-18.92 % of base) : 248645.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -20 (-17.86 % of base) : 197982.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -32 (-17.78 % of base) : 487945.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -28 (-17.50 % of base) : 292861.dasm - System.CommandLine.Binding.ArgumentConverter:GetValueOrDefault[System.__Canon](System.CommandLine.Binding.ArgumentConversionResult):System.__Canon (FullOpts)
         -28 (-17.50 % of base) : 216206.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)


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: 56402696 (overridden on cmd)
Total bytes of diff: 56385700 (overridden on cmd)
Total bytes of delta: -16996 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         116 : 132331.dasm (4.83 % of base)
          72 : 125492.dasm (2.65 % of base)
          72 : 215939.dasm (1.35 % of base)
           8 : 214563.dasm (1.67 % of base)
           4 : 143389.dasm (2.63 % of base)
           4 : 179097.dasm (0.93 % of base)

Top file improvements (bytes):
        -600 : 238302.dasm (-25.17 % of base)
        -320 : 223018.dasm (-16.74 % of base)
        -320 : 110542.dasm (-19.00 % of base)
        -264 : 242759.dasm (-36.46 % of base)
        -184 : 46347.dasm (-22.22 % of base)
        -184 : 46340.dasm (-23.00 % of base)
        -168 : 175401.dasm (-8.33 % of base)
        -168 : 176046.dasm (-42.00 % of base)
        -132 : 176048.dasm (-5.91 % of base)
        -120 : 46504.dasm (-18.99 % of base)
        -120 : 46513.dasm (-18.29 % of base)
        -116 : 9859.dasm (-11.07 % of base)
        -116 : 228027.dasm (-2.01 % of base)
        -104 : 214486.dasm (-19.40 % of base)
         -80 : 147399.dasm (-1.67 % of base)
         -72 : 215465.dasm (-6.32 % of base)
         -72 : 175967.dasm (-34.62 % of base)
         -72 : 289277.dasm (-13.74 % of base)
         -72 : 290213.dasm (-14.88 % of base)
         -68 : 289270.dasm (-14.17 % of base)

58 total files with Code Size differences (52 improved, 6 regressed), 20 unchanged.

Top method regressions (bytes):
         116 (4.83 % of base) : 132331.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          72 (2.65 % of base) : 125492.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          72 (1.35 % of base) : 215939.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
           8 (1.67 % of base) : 214563.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
           4 (0.93 % of base) : 179097.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           4 (2.63 % of base) : 143389.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

Top method improvements (bytes):
        -600 (-25.17 % of base) : 238302.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -320 (-16.74 % of base) : 223018.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -320 (-19.00 % of base) : 110542.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -264 (-36.46 % of base) : 242759.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
        -184 (-23.00 % of base) : 46340.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -184 (-22.22 % of base) : 46347.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -168 (-8.33 % of base) : 175401.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
        -168 (-42.00 % of base) : 176046.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -132 (-5.91 % of base) : 176048.dasm - System.Xml.Serialization.XmlSchemas:GetSchemaItem(System.Xml.Schema.XmlSchemaObject,System.String,System.String):System.String (FullOpts)
        -120 (-18.29 % of base) : 46513.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericOneDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
        -120 (-18.99 % of base) : 46504.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericZeroDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
        -116 (-2.01 % of base) : 228027.dasm - Newtonsoft.Json.JsonTextReader+<DoReadAsBytesAsync>d__42:MoveNext():this (FullOpts)
        -116 (-11.07 % of base) : 9859.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
        -104 (-19.40 % of base) : 214486.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -80 (-1.67 % of base) : 147399.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -72 (-6.32 % of base) : 215465.dasm - System.Data.DataRowExtensions+UnboxT`1[System.__Canon]:NullableFieldUsingReflection(System.Object):System.__Canon (FullOpts)
         -72 (-14.88 % of base) : 290213.dasm - System.Security.Cryptography.Xml.XmlDsigBase64Transform:LoadInput(System.Object):this (FullOpts)
         -72 (-13.74 % of base) : 289277.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.__Canon](System.Xml.Serialization.XmlSerializer):System.__Canon:this (FullOpts)
         -72 (-34.62 % of base) : 175967.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -68 (-14.17 % of base) : 289270.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.__Canon](System.Runtime.Serialization.XmlObjectSerializer):System.__Canon:this (FullOpts)

Top method regressions (percentages):
         116 (4.83 % of base) : 132331.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          72 (2.65 % of base) : 125492.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
           4 (2.63 % of base) : 143389.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           8 (1.67 % of base) : 214563.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
          72 (1.35 % of base) : 215939.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
           4 (0.93 % of base) : 179097.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 46063.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-46.67 % of base) : 144705.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
        -168 (-42.00 % of base) : 176046.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -264 (-36.46 % of base) : 242759.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
         -72 (-34.62 % of base) : 175967.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -40 (-33.33 % of base) : 252899.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -24 (-31.58 % of base) : 282731.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 261774.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 219331.dasm - System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
         -32 (-28.57 % of base) : 10182.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
         -32 (-28.57 % of base) : 241173.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-28.57 % of base) : 241187.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 225810.dasm - Newtonsoft.Json.Utilities.CollectionWrapper`1[ubyte]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -32 (-27.59 % of base) : 256387.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -32 (-27.59 % of base) : 146803.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.__Canon]:<SetSetter>b__0(System.Object,System.Object):this (FullOpts)
         -32 (-27.59 % of base) : 146812.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.__Canon]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (FullOpts)
         -24 (-27.27 % of base) : 204105.dasm - System.Runtime.Serialization.DataNode`1[System.__Canon]:set_Value(System.Object):this (FullOpts)
         -24 (-27.27 % of base) : 203990.dasm - System.Runtime.Serialization.KeyValue`2[System.__Canon,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Key(System.Object):this (FullOpts)
         -28 (-26.92 % of base) : 251048.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -28 (-26.92 % of base) : 173238.dasm - System.Xml.Xsl.Runtime.XmlQuerySequence`1[System.__Canon]:System.Collections.IList.IndexOf(System.Object):int:this (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: 333038924 (overridden on cmd)
Total bytes of diff: 333004976 (overridden on cmd)
Total bytes of delta: -33948 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         248 : 287474.dasm (4.94 % of base)
         112 : 587968.dasm (8.64 % of base)
          56 : 518407.dasm (1.74 % of base)
          48 : 470594.dasm (2.58 % of base)
          48 : 590147.dasm (1.26 % of base)
          48 : 80597.dasm (1.27 % of base)
          44 : 196277.dasm (1.27 % of base)
          44 : 308017.dasm (1.17 % of base)
          44 : 441116.dasm (1.11 % of base)
          44 : 208417.dasm (1.10 % of base)
          44 : 521360.dasm (1.12 % of base)
          44 : 731303.dasm (1.15 % of base)
          44 : 266445.dasm (1.17 % of base)
          44 : 733576.dasm (1.15 % of base)
          40 : 445188.dasm (1.46 % of base)
          40 : 416639.dasm (1.11 % of base)
          40 : 554188.dasm (1.16 % of base)
          40 : 731299.dasm (1.16 % of base)
          40 : 380764.dasm (1.11 % of base)
          40 : 550567.dasm (1.16 % of base)

Top file improvements (bytes):
        -152 : 708814.dasm (-7.92 % of base)
        -136 : 637838.dasm (-1.60 % of base)
        -108 : 623841.dasm (-1.04 % of base)
        -104 : 460361.dasm (-4.77 % of base)
        -104 : 660733.dasm (-2.19 % of base)
         -96 : 447963.dasm (-1.99 % of base)
         -84 : 619474.dasm (-0.96 % of base)
         -84 : 565121.dasm (-5.69 % of base)
         -80 : 691279.dasm (-2.42 % of base)
         -64 : 350320.dasm (-21.05 % of base)
         -64 : 520728.dasm (-16.16 % of base)
         -60 : 470623.dasm (-5.43 % of base)
         -60 : 474011.dasm (-2.02 % of base)
         -60 : 416685.dasm (-2.47 % of base)
         -60 : 565157.dasm (-5.03 % of base)
         -60 : 62922.dasm (-1.22 % of base)
         -60 : 181018.dasm (-1.40 % of base)
         -60 : 626106.dasm (-14.29 % of base)
         -60 : 644991.dasm (-14.29 % of base)
         -60 : 661256.dasm (-14.29 % of base)

88 total files with Code Size differences (51 improved, 37 regressed), 20 unchanged.

Top method regressions (bytes):
         248 (4.94 % of base) : 287474.dasm - System.Linq.Expressions.Compiler.LambdaCompiler:EmitUnliftedBinaryOp(int,System.Type,System.Type):this (Tier1)
         112 (8.64 % of base) : 587968.dasm - Moq.Extensions:IsOrContainsTypeMatcher(System.Type):ubyte (Tier1)
          56 (1.74 % of base) : 518407.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          48 (2.58 % of base) : 470594.dasm - System.Xml.Schema.XmlSchemaComplexType:Clone(System.Xml.Schema.XmlSchema):System.Xml.Schema.XmlSchemaObject:this (Tier1)
          48 (1.26 % of base) : 590147.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          48 (1.27 % of base) : 80597.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.17 % of base) : 308017.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.11 % of base) : 441116.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.10 % of base) : 208417.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.12 % of base) : 521360.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 731303.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.17 % of base) : 266445.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 733576.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.27 % of base) : 196277.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.46 % of base) : 445188.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          40 (1.11 % of base) : 416639.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.11 % of base) : 380764.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.16 % of base) : 554188.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.16 % of base) : 731299.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.16 % of base) : 550567.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)

Top method improvements (bytes):
        -152 (-7.92 % of base) : 708814.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (Tier1)
        -136 (-1.60 % of base) : 637838.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -108 (-1.04 % of base) : 623841.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -104 (-2.19 % of base) : 660733.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.Text.Json.Serialization.Tests.StructWrapperForIDictionary,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -104 (-4.77 % of base) : 460361.dasm - System.Xml.Xsl.IlGen.XmlILVisitor:VisitGlobalValues(System.Xml.Xsl.Qil.QilList):this (Tier1)
         -96 (-1.99 % of base) : 447963.dasm - System.Xml.Serialization.TempAssembly:LoadAssemblyByPath(System.Type,System.String):System.Reflection.Assembly (Tier1)
         -84 (-5.69 % of base) : 565121.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
         -84 (-0.96 % of base) : 619474.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
         -80 (-2.42 % of base) : 691279.dasm - Microsoft.CodeAnalysis.CodeGen.PrivateImplementationDetails:Freeze():this (Tier1)
         -64 (-21.05 % of base) : 350320.dasm - (dynamicClass):lambda_method1676(System.Runtime.CompilerServices.Closure):System.Collections.Generic.IEnumerable`1[ushort] (FullOpts)
         -64 (-16.16 % of base) : 520728.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (Tier1)
         -60 (-1.22 % of base) : 62922.dasm - Microsoft.CodeAnalysis.CSharp.Binder:BindFieldAccess(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)
         -60 (-1.40 % of base) : 181018.dasm - Microsoft.CodeAnalysis.CSharp.Binder:BindFieldAccess(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)
         -60 (-5.43 % of base) : 470623.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (Tier1)
         -60 (-14.29 % of base) : 661256.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:System.Collections.IDictionary.Add(System.Object,System.Object):this (Tier1)
         -60 (-14.29 % of base) : 626106.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (Tier1)
         -60 (-14.29 % of base) : 644991.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (Tier1)
         -60 (-5.03 % of base) : 565157.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPublicKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
         -60 (-2.02 % of base) : 474011.dasm - System.Xml.RwFactoryWriterTests.CXmlDriverEngine:ProcessIncludes(System.String[],System.String,System.Xml.Linq.XElement,OLEDB.Test.ModuleCore.MyDict`2[System.String,System.Object],System.Collections.IList):this (Tier1)
         -60 (-2.47 % of base) : 416685.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetNamedArgument[System.__Canon](System.String):System.__Canon:this (Tier1)

Top method regressions (percentages):
          16 (10.00 % of base) : 475071.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
         112 (8.64 % of base) : 587968.dasm - Moq.Extensions:IsOrContainsTypeMatcher(System.Type):ubyte (Tier1)
          16 (8.33 % of base) : 114800.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          16 (8.33 % of base) : 178635.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          16 (8.33 % of base) : 695968.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
         248 (4.94 % of base) : 287474.dasm - System.Linq.Expressions.Compiler.LambdaCompiler:EmitUnliftedBinaryOp(int,System.Type,System.Type):this (Tier1)
           8 (3.70 % of base) : 410585.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (Tier1)
          24 (3.33 % of base) : 178634.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          24 (3.33 % of base) : 695963.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          24 (3.33 % of base) : 114693.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          20 (3.23 % of base) : 452131.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          48 (2.58 % of base) : 470594.dasm - System.Xml.Schema.XmlSchemaComplexType:Clone(System.Xml.Schema.XmlSchema):System.Xml.Schema.XmlSchemaObject:this (Tier1)
           8 (2.56 % of base) : 730162.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
           8 (2.53 % of base) : 470001.dasm - System.Xml.Schema.XsdBuilder:BuildIdentityConstraint_Refer(System.Xml.Schema.XsdBuilder,System.String) (Tier1)
           8 (2.35 % of base) : 730159.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAllImpl>b__57_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task[]],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          32 (2.28 % of base) : 223107.dasm - System.Text.RegularExpressions.RegexParser:NoteCaptureName(System.String,int):this (Tier1)
           8 (2.20 % of base) : 397776.dasm - System.Threading.CancellationTokenSource:Invoke(System.Delegate,System.Object,System.Threading.CancellationTokenSource) (Tier1)
           8 (1.92 % of base) : 204245.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          12 (1.89 % of base) : 730218.dasm - System.Threading.Tasks.ConcurrentExclusiveSchedulerPair+<>c:<CompleteTaskAsync>b__30_0(System.Object):this (Tier1)
          28 (1.78 % of base) : 175068.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 621493.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-46.67 % of base) : 637448.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -24 (-35.29 % of base) : 61973.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -56 (-35.00 % of base) : 449608.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (Tier1)
         -48 (-30.77 % of base) : 588179.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -32 (-28.57 % of base) : 127490.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -32 (-28.57 % of base) : 126862.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-28.00 % of base) : 1494.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -40 (-25.00 % of base) : 93040.dasm - Microsoft.CodeAnalysis.DefaultTextDocumentServiceProvider:GetService[System.__Canon]():System.__Canon:this (Tier1)
         -40 (-25.00 % of base) : 65649.dasm - Microsoft.CodeAnalysis.DefaultTextDocumentServiceProvider:GetService[System.__Canon]():System.__Canon:this (Tier1)
         -32 (-25.00 % of base) : 113036.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.<BindingExtensions_g>F06CBF607B39F5F589B67E292D600729E0514C7A495E0099C73A76F3B9B09B78C__BindingExtensions:Get[System.__Canon](Microsoft.Extensions.Configuration.IConfiguration):System.__Canon (Tier1)
         -24 (-24.00 % of base) : 348414.dasm - (dynamicClass):lambda_method66(System.Runtime.CompilerServices.Closure):long (FullOpts)
         -24 (-24.00 % of base) : 334944.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (Tier1)
         -28 (-23.33 % of base) : 650229.dasm - System.Text.Json.Serialization.Tests.StructDictionary`2[System.__Canon,System.Text.Json.JsonElement]:Contains(System.Object):ubyte:this (Tier1)
         -40 (-23.26 % of base) : 706263.dasm - Microsoft.CodeAnalysis.DefaultTextDocumentServiceProvider:GetService[System.__Canon]():System.__Canon:this (Tier1)
         -24 (-23.08 % of base) : 67576.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -20 (-22.73 % of base) : 54896.dasm - Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter:VisitListElement[System.__Canon](System.__Canon):System.__Canon:this (Tier1)
         -28 (-22.58 % of base) : 126783.dasm - Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests:CreateInstance[System.__Canon](Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests+CreateInstanceFunc,System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -40 (-22.22 % of base) : 348514.dasm - (dynamicClass):lambda_method97(System.Runtime.CompilerServices.Closure):System.Object (FullOpts)
         -24 (-22.22 % of base) : 628389.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)


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: 130833864 (overridden on cmd)
Total bytes of diff: 130810988 (overridden on cmd)
Total bytes of delta: -22876 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         168 : 225513.dasm (7.25 % of base)
          76 : 143953.dasm (14.07 % of base)
          48 : 93551.dasm (92.31 % of base)
          44 : 180168.dasm (2.34 % of base)
          40 : 93073.dasm (43.48 % of base)
          40 : 93157.dasm (43.48 % of base)
          12 : 184524.dasm (1.84 % of base)
          12 : 37810.dasm (2.97 % of base)
          12 : 37823.dasm (2.97 % of base)
          12 : 94088.dasm (0.22 % of base)
          12 : 37766.dasm (4.17 % of base)
          12 : 37789.dasm (1.71 % of base)
          12 : 37873.dasm (2.70 % of base)
           8 : 38005.dasm (1.80 % of base)
           4 : 96303.dasm (2.63 % of base)
           4 : 37908.dasm (0.40 % of base)
           4 : 37988.dasm (0.49 % of base)

Top file improvements (bytes):
        -600 : 62215.dasm (-25.17 % of base)
        -384 : 166015.dasm (-15.79 % of base)
        -352 : 164899.dasm (-12.59 % of base)
        -304 : 166009.dasm (-12.38 % of base)
        -296 : 205568.dasm (-17.05 % of base)
        -244 : 14629.dasm (-17.04 % of base)
        -224 : 166011.dasm (-12.25 % of base)
        -176 : 166007.dasm (-6.89 % of base)
        -160 : 194896.dasm (-7.53 % of base)
        -160 : 166012.dasm (-8.97 % of base)
        -160 : 193527.dasm (-7.53 % of base)
        -160 : 197803.dasm (-8.97 % of base)
        -144 : 61731.dasm (-12.41 % of base)
        -140 : 302626.dasm (-2.60 % of base)
        -128 : 211146.dasm (-3.03 % of base)
        -120 : 166014.dasm (-8.96 % of base)
        -120 : 165580.dasm (-6.61 % of base)
        -116 : 166278.dasm (-3.48 % of base)
        -116 : 304326.dasm (-3.48 % of base)
        -112 : 18794.dasm (-12.56 % of base)

72 total files with Code Size differences (55 improved, 17 regressed), 22 unchanged.

Top method regressions (bytes):
         168 (7.25 % of base) : 225513.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
          76 (14.07 % of base) : 143953.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
          48 (92.31 % of base) : 93551.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          44 (2.34 % of base) : 180168.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          40 (43.48 % of base) : 93157.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          40 (43.48 % of base) : 93073.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          12 (2.70 % of base) : 37873.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37823.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37810.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (1.71 % of base) : 37789.dasm - FluentAssertions.Primitives.ReferenceTypeAssertions`2[System.__Canon,System.__Canon]:BeOfType(System.Type,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (4.17 % of base) : 37766.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (0.22 % of base) : 94088.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
          12 (1.84 % of base) : 184524.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
           8 (1.80 % of base) : 38005.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.40 % of base) : 37908.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEquivalentTo[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.49 % of base) : 37988.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:ContainSingle(System.String,System.Object[]):FluentAssertions.AndWhichConstraint`2[System.__Canon,System.__Canon]:this (FullOpts)
           4 (2.63 % of base) : 96303.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

Top method improvements (bytes):
        -600 (-25.17 % of base) : 62215.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -384 (-15.79 % of base) : 166015.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -352 (-12.59 % of base) : 164899.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -304 (-12.38 % of base) : 166009.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
        -296 (-17.05 % of base) : 205568.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -244 (-17.04 % of base) : 14629.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (FullOpts)
        -224 (-12.25 % of base) : 166011.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
        -176 (-6.89 % of base) : 166007.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)
        -160 (-7.53 % of base) : 194896.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -160 (-7.53 % of base) : 193527.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -160 (-8.97 % of base) : 166012.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (FullOpts)
        -160 (-8.97 % of base) : 197803.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (FullOpts)
        -144 (-12.41 % of base) : 61731.dasm - System.CodeDom.Compiler.Tests.CodeGenerationTests:GenerateCode(System.CodeDom.CodeObject,System.CodeDom.Compiler.CodeDomProvider):System.String (FullOpts)
        -140 (-2.60 % of base) : 302626.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -128 (-3.03 % of base) : 211146.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -120 (-6.61 % of base) : 165580.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (FullOpts)
        -120 (-8.96 % of base) : 166014.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (FullOpts)
        -116 (-3.48 % of base) : 166278.dasm - XmlSerializerTests:Xml_CollectionRoot_MorePrimitiveTypes() (FullOpts)
        -116 (-3.48 % of base) : 304326.dasm - XmlSerializerTests:Xml_CollectionRoot_MorePrimitiveTypes() (FullOpts)
        -112 (-12.56 % of base) : 18794.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)

Top method regressions (percentages):
          48 (92.31 % of base) : 93551.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          40 (43.48 % of base) : 93157.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          40 (43.48 % of base) : 93073.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          76 (14.07 % of base) : 143953.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
         168 (7.25 % of base) : 225513.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
          12 (4.17 % of base) : 37766.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37823.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37810.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.70 % of base) : 37873.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (2.63 % of base) : 96303.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
          44 (2.34 % of base) : 180168.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          12 (1.84 % of base) : 184524.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
           8 (1.80 % of base) : 38005.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (1.71 % of base) : 37789.dasm - FluentAssertions.Primitives.ReferenceTypeAssertions`2[System.__Canon,System.__Canon]:BeOfType(System.Type,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.49 % of base) : 37988.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:ContainSingle(System.String,System.Object[]):FluentAssertions.AndWhichConstraint`2[System.__Canon,System.__Canon]:this (FullOpts)
           4 (0.40 % of base) : 37908.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEquivalentTo[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (0.22 % of base) : 94088.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 34912.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-46.67 % of base) : 140911.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -24 (-40.00 % of base) : 30450.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
         -56 (-35.00 % of base) : 164052.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
         -72 (-34.62 % of base) : 165395.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -40 (-33.33 % of base) : 67749.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -44 (-33.33 % of base) : 166044.dasm - System.Xml.Schema.XmlSchemaSimpleType:get_DerivedFrom():System.Xml.XmlQualifiedName:this (FullOpts)
         -24 (-31.58 % of base) : 87221.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -24 (-31.58 % of base) : 132472.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 42337.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -24 (-30.00 % of base) : 47840.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -24 (-30.00 % of base) : 42332.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 47832.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 42334.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 47836.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -32 (-28.57 % of base) : 185479.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
         -32 (-28.57 % of base) : 75006.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-28.57 % of base) : 125625.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 90612.dasm - System.Data.DataRowExtensions+UnboxT`1[System.__Canon]:NonNullableField(System.Object):System.__Canon (FullOpts)
         -60 (-27.78 % of base) : 234466.dasm - System.Text.Json.Serialization.Converters.StackOrQueueConverter`1[System.__Canon]:Add(byref,byref):this (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: 11127744 (overridden on cmd)
Total bytes of diff: 11124348 (overridden on cmd)
Total bytes of delta: -3396 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          16 : 5235.dasm (4.35 % of base)

Top file improvements (bytes):
        -120 : 32457.dasm (-28.30 % of base)
         -64 : 28265.dasm (-6.81 % of base)
         -64 : 32097.dasm (-25.81 % of base)
         -60 : 33029.dasm (-20.55 % of base)
         -60 : 9193.dasm (-32.61 % of base)
         -56 : 32072.dasm (-2.52 % of base)
         -56 : 5491.dasm (-4.09 % of base)
         -56 : 6130.dasm (-22.22 % of base)
         -56 : 8115.dasm (-8.70 % of base)
         -52 : 30476.dasm (-8.28 % of base)
         -44 : 18371.dasm (-16.18 % of base)
         -44 : 21324.dasm (-3.20 % of base)
         -44 : 30201.dasm (-2.68 % of base)
         -40 : 16553.dasm (-4.81 % of base)
         -40 : 20430.dasm (-12.50 % of base)
         -40 : 28835.dasm (-8.06 % of base)
         -40 : 32067.dasm (-17.86 % of base)
         -40 : 33262.dasm (-13.89 % of base)
         -40 : 8841.dasm (-12.50 % of base)
         -36 : 17021.dasm (-15.00 % of base)

62 total files with Code Size differences (61 improved, 1 regressed), 6 unchanged.

Top method regressions (bytes):
          16 (4.35 % of base) : 5235.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)

Top method improvements (bytes):
        -120 (-28.30 % of base) : 32457.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -64 (-6.81 % of base) : 28265.dasm - Microsoft.CodeAnalysis.CSharp.AsyncMethodBuilderMemberCollection:TryGetBuilderMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.SyntheticBoundNodeFactory,System.Nullable`1[int],Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol,ubyte,byref):ubyte (FullOpts)
         -64 (-25.81 % of base) : 32097.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -60 (-32.61 % of base) : 9193.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -60 (-20.55 % of base) : 33029.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -56 (-8.70 % of base) : 8115.dasm - FSharp.Compiler.CheckDeclarations+TcDeclarations:SplitTyconDefn(FSharp.Compiler.Syntax.SynTypeDefn):System.Tuple`2[FSharp.Compiler.CheckDeclarations+MutRecDefnsPhase1DataForTycon,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] (FullOpts)
         -56 (-4.09 % of base) : 5491.dasm - FSharp.Compiler.Lexer:endline(FSharp.Compiler.ParseHelpers+LexerEndlineContinuation,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort]):FSharp.Compiler.Parser+token (FullOpts)
         -56 (-2.52 % of base) : 32072.dasm - System.Management.Automation.ScriptBlock:BindArgumentsForScriptblockInvoke(System.Management.Automation.RuntimeDefinedParameter[],System.Object[],System.Management.Automation.ExecutionContext,ubyte,System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable],System.Management.Automation.MutableTuple):System.Object[] (FullOpts)
         -56 (-22.22 % of base) : 6130.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -52 (-8.28 % of base) : 30476.dasm - System.Management.Automation.SessionStateScope:CreateFunction(System.String,System.Management.Automation.ScriptBlock,System.Management.Automation.FunctionInfo,int,System.Management.Automation.ExecutionContext,System.String):System.Management.Automation.FunctionInfo (FullOpts)
         -44 (-3.20 % of base) : 21324.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
         -44 (-16.18 % of base) : 18371.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-2.68 % of base) : 30201.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)
         -40 (-12.50 % of base) : 8841.dasm - FSharp.Compiler.CheckExpressions:TcAdjustExprForTypeDirectedConversions(FSharp.Compiler.CheckExpressions+TcFileState,FSharp.Compiler.ConstraintSolver+OverallTy,FSharp.Compiler.TypedTree+TType,FSharp.Compiler.CheckExpressions+TcEnv,FSharp.Compiler.Text.Range,FSharp.Compiler.TypedTree+Expr):FSharp.Compiler.TypedTree+Expr (FullOpts)
         -40 (-4.81 % of base) : 16553.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -40 (-12.50 % of base) : 20430.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -40 (-8.06 % of base) : 28835.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -40 (-13.89 % of base) : 33262.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -40 (-17.86 % of base) : 32067.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -36 (-15.00 % of base) : 17021.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)

Top method regressions (percentages):
          16 (4.35 % of base) : 5235.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)

Top method improvements (percentages):
         -60 (-32.61 % of base) : 9193.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -24 (-31.58 % of base) : 33118.dasm - System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
        -120 (-28.30 % of base) : 32457.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -28 (-28.00 % of base) : 435.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-25.93 % of base) : 19008.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -64 (-25.81 % of base) : 32097.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -28 (-23.33 % of base) : 10161.dasm - FSharp.Compiler.TypedTree+ValFlags:WithRecursiveValInfo(FSharp.Compiler.TypedTree+ValRecursiveScopeInfo):FSharp.Compiler.TypedTree+ValFlags:this (FullOpts)
         -56 (-22.22 % of base) : 6130.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -28 (-21.21 % of base) : 5122.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -20 (-20.83 % of base) : 17271.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -60 (-20.55 % of base) : 33029.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -32 (-19.05 % of base) : 32484.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -28 (-18.42 % of base) : 10270.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -20 (-17.86 % of base) : 16940.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -40 (-17.86 % of base) : 32067.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-17.50 % of base) : 11204.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)
         -20 (-17.24 % of base) : 976.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -24 (-17.14 % of base) : 22731.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (FullOpts)
         -44 (-16.18 % of base) : 18371.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -16 (-16.00 % of base) : 30360.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)



linux x64

Diffs are based on 2,095,488 contexts (979,602 MinOpts, 1,115,886 FullOpts).

MISSED contexts: base: 4 (0.00%), diff: 142,706 (6.38%)

Overall (-96,498 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.x64.checked.mch 8,905,292 -1,504
benchmarks.run_pgo.linux.x64.checked.mch 58,396,833 -32,338
benchmarks.run_tiered.linux.x64.checked.mch 16,118,223 -441
coreclr_tests.run.linux.x64.checked.mch 378,320,672 -2,363
libraries.pmi.linux.x64.checked.mch 44,079,179 -11,072
libraries_tests.run.linux.x64.Release.mch 284,551,599 -30,189
librariestestsnotieredcompilation.run.linux.x64.Release.mch 104,673,532 -16,319
realworld.run.linux.x64.checked.mch 9,154,587 -2,272

FullOpts (-96,498 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.linux.x64.checked.mch 8,641,359 -1,504
benchmarks.run_pgo.linux.x64.checked.mch 35,667,977 -32,338
benchmarks.run_tiered.linux.x64.checked.mch 3,187,568 -441
coreclr_tests.run.linux.x64.checked.mch 98,982,700 -2,363
libraries.pmi.linux.x64.checked.mch 43,966,322 -11,072
libraries_tests.run.linux.x64.Release.mch 101,575,111 -30,189
librariestestsnotieredcompilation.run.linux.x64.Release.mch 94,055,866 -16,319
realworld.run.linux.x64.checked.mch 8,768,855 -2,272

Example diffs

benchmarks.run.linux.x64.checked.mch

-23 (-50.00%) : 3599.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -2,54 +2,37 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rdi single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rdi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rdi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 46, prolog size 14, PerfScore 8.38, instruction count 16, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 23, prolog size 5, PerfScore 8.50, instruction count 8, allocated bytes for code 23 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -57,10 +40,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-28 (-36.36%) : 425.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -2,69 +2,49 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x10], rdi - mov rbx, rdi - ;; size=15 bbWeight=1 PerfScore 4.75 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi + ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rdi+0x38] + mov rdi, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rdi, rax ; gcrRegs +[rdi] call [<unknown method>] ; gcrRegs -[rdi]
- mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 77, prolog size 12, PerfScore 19.19, instruction count 26, allocated bytes for code 77 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -72,11 +52,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

-33 (-30.00%) : 7860.dasm - Sigil.NonGeneric.Emit:CreateDelegateSystem.__Canon:System.__Canon:this (FullOpts)

@@ -2,90 +2,70 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) ref -> r15 this class-hnd single-def <Sigil.NonGeneric.Emit> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> rbx single-def -; V02 arg1 [V02,T03] ( 3, 3 ) byref -> r14 single-def -; V03 arg2 [V03,T04] ( 3, 3 ) int -> r13 single-def
+; V00 this [V00,T01] ( 3, 3 ) ref -> rbx this class-hnd single-def <Sigil.NonGeneric.Emit> +; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> rsi single-def +; V02 arg1 [V02,T02] ( 3, 3 ) byref -> r15 single-def +; V03 arg2 [V03,T03] ( 3, 3 ) int -> r14 single-def
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T05] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V06 tmp2 [V06,T07] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V07 tmp3 [V07,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V08 tmp4 [V08,T06] ( 2, 4 ) ref -> rsi single-def "argument with side effect"
+; V05 tmp1 [V05,T04] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V06 tmp2 [V06,T05] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V07 cse0 [V07,T06] ( 3, 3 ) long -> r13 "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M39228_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push r15 push r14 push r13 push rbx
- sub rsp, 16 - lea rbp, [rsp+0x30] - mov qword ptr [rbp-0x28], rsi - mov r15, rdi - ; gcrRegs +[r15] - mov rbx, rsi - mov r14, rdx - ; byrRegs +[r14] - mov r13d, ecx - ;; size=33 bbWeight=1 PerfScore 7.75 -G_M39228_IG02: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=4000 {r14}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ push rax + mov qword ptr [rsp], rsi + mov rbx, rdi + ; gcrRegs +[rbx] + mov r15, rdx + ; byrRegs +[r15] + mov r14d, ecx + ;; size=21 bbWeight=1 PerfScore 6.75 +G_M39228_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=8000 {r15}, byref + mov r13, qword ptr [rsi+0x38] + mov rdi, qword ptr [r13]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
- mov rdi, r15
+ mov rdi, rbx
; gcrRegs +[rdi]
- mov rdx, r14
+ mov rdx, r15
; byrRegs +[rdx]
- mov ecx, r13d
+ mov ecx, r14d
call [<unknown method>]
- ; gcrRegs -[rsi rdi r15] - ; byrRegs -[rdx r14] - mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M39228_IG05 - ;; size=38 bbWeight=1 PerfScore 10.50 -G_M39228_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M39228_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M39228_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcrRegs -[rbx rsi rdi] + ; byrRegs -[rdx r15] + ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [r13]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M39228_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M39228_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16
+ ; gcr arg pop 0 + nop + ;; size=44 bbWeight=1 PerfScore 12.50 +G_M39228_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
pop rbx pop r13 pop r14 pop r15
- pop rbp
ret
- ;; size=13 bbWeight=1 PerfScore 3.75
+ ;; size=12 bbWeight=1 PerfScore 3.25
-; Total bytes of code 110, prolog size 21, PerfScore 24.44, instruction count 38, allocated bytes for code 110 (MethodHash=2fd966c3) for method Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
+; Total bytes of code 77, prolog size 12, PerfScore 22.50, instruction count 27, allocated bytes for code 77 (MethodHash=2fd966c3) for method Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -93,14 +73,13 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x0C - CountOfUnwindCodes: 6
+ SizeOfProlog : 0x08 + CountOfUnwindCodes: 5
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x0C UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x08 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x07 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r13 (13) - CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14) - CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x08 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 + CodeOffset: 0x07 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x06 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r13 (13) + CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14) + CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15)

+19 (+20.21%) : 14463.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)

@@ -8,65 +8,66 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r15 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r15 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> r13 hoist "CSE - aggressive"
; ; Lcl frame size = 0 G_M3904_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp push r15
+ push r14 + push r13
push rbx
- lea rbp, [rsp+0x10] - ;; size=9 bbWeight=1 PerfScore 3.50
+ lea rbp, [rsp+0x20] + ;; size=13 bbWeight=1 PerfScore 5.50
G_M3904_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz xor ebx, ebx mov r15d, dword ptr [(reloc)] test r15d, r15d
- jle SHORT G_M3904_IG07 - ;; size=14 bbWeight=1 PerfScore 3.50 -G_M3904_IG03: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> - mov rsi, gword ptr [rdi]
+ jle SHORT G_M3904_IG04 + mov rsi, 0xD1FFAB1E ; static handle + mov r14, gword ptr [rsi] + ; gcrRegs +[r14] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov r13, 0xD1FFAB1E ; static handle + ;; size=55 bbWeight=1 PerfScore 7.50 +G_M3904_IG03: ; bbWeight=4, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rsi, r14
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M3904_IG06 - ;; size=21 bbWeight=4 PerfScore 15.00 -G_M3904_IG04: ; bbWeight=1, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M3904_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M3904_IG05: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M3904_IG06: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, r13
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rsi] inc ebx cmp ebx, r15d jl SHORT G_M3904_IG03
- ;; size=25 bbWeight=4 PerfScore 12.00 -G_M3904_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=36 bbWeight=4 PerfScore 18.00 +G_M3904_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[r14]
pop rbx
+ pop r13 + pop r14
pop r15 pop rbp ret
- ;; size=5 bbWeight=1 PerfScore 2.50
+ ;; size=9 bbWeight=1 PerfScore 3.50
-; Total bytes of code 94, prolog size 9, PerfScore 41.25, instruction count 27, allocated bytes for code 94 (MethodHash=4cdef0bf) for method PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
+; Total bytes of code 113, prolog size 13, PerfScore 34.50, instruction count 31, allocated bytes for code 113 (MethodHash=4cdef0bf) for method PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
; ============================================================ Unwind Info: @@ -74,11 +75,13 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x04 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x08 + CountOfUnwindCodes: 5
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
+ CodeOffset: 0x08 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x07 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r13 (13) + CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14)
CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

+19 (+20.21%) : 10144.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)

@@ -8,65 +8,66 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r15 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r15 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> r13 hoist "CSE - aggressive"
; ; Lcl frame size = 0 G_M34178_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp push r15
+ push r14 + push r13
push rbx
- lea rbp, [rsp+0x10] - ;; size=9 bbWeight=1 PerfScore 3.50
+ lea rbp, [rsp+0x20] + ;; size=13 bbWeight=1 PerfScore 5.50
G_M34178_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz xor ebx, ebx mov r15d, dword ptr [(reloc)] test r15d, r15d
- jle SHORT G_M34178_IG07 - ;; size=14 bbWeight=1 PerfScore 3.50 -G_M34178_IG03: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> - mov rsi, gword ptr [rdi]
+ jle SHORT G_M34178_IG04 + mov rsi, 0xD1FFAB1E ; static handle + mov r14, gword ptr [rsi] + ; gcrRegs +[r14] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov r13, 0xD1FFAB1E ; static handle + ;; size=55 bbWeight=1 PerfScore 7.50 +G_M34178_IG03: ; bbWeight=4, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rsi, r14
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M34178_IG06 - ;; size=21 bbWeight=4 PerfScore 15.00 -G_M34178_IG04: ; bbWeight=1, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M34178_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M34178_IG05: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M34178_IG06: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, r13
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rsi] inc ebx cmp ebx, r15d jl SHORT G_M34178_IG03
- ;; size=25 bbWeight=4 PerfScore 12.00 -G_M34178_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=36 bbWeight=4 PerfScore 18.00 +G_M34178_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[r14]
pop rbx
+ pop r13 + pop r14
pop r15 pop rbp ret
- ;; size=5 bbWeight=1 PerfScore 2.50
+ ;; size=9 bbWeight=1 PerfScore 3.50
-; Total bytes of code 94, prolog size 9, PerfScore 41.25, instruction count 27, allocated bytes for code 94 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
+; Total bytes of code 113, prolog size 13, PerfScore 34.50, instruction count 31, allocated bytes for code 113 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
; ============================================================ Unwind Info: @@ -74,11 +75,13 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x04 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x08 + CountOfUnwindCodes: 5
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
+ CodeOffset: 0x08 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x07 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r13 (13) + CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14)
CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

+19 (+20.21%) : 33412.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)

@@ -8,65 +8,66 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r15 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r15 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> r13 hoist "CSE - aggressive"
; ; Lcl frame size = 0 G_M40467_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp push r15
+ push r14 + push r13
push rbx
- lea rbp, [rsp+0x10] - ;; size=9 bbWeight=1 PerfScore 3.50
+ lea rbp, [rsp+0x20] + ;; size=13 bbWeight=1 PerfScore 5.50
G_M40467_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz xor ebx, ebx mov r15d, dword ptr [(reloc)] test r15d, r15d
- jle SHORT G_M40467_IG07 - ;; size=14 bbWeight=1 PerfScore 3.50 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> - mov rsi, gword ptr [rdi]
+ jle SHORT G_M40467_IG04 + mov rsi, 0xD1FFAB1E ; static handle + mov r14, gword ptr [rsi] + ; gcrRegs +[r14] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov r13, 0xD1FFAB1E ; static handle + ;; size=55 bbWeight=1 PerfScore 7.50 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rsi, r14
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M40467_IG06 - ;; size=21 bbWeight=4 PerfScore 15.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M40467_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, r13
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rsi] inc ebx cmp ebx, r15d jl SHORT G_M40467_IG03
- ;; size=25 bbWeight=4 PerfScore 12.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=36 bbWeight=4 PerfScore 18.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[r14]
pop rbx
+ pop r13 + pop r14
pop r15 pop rbp ret
- ;; size=5 bbWeight=1 PerfScore 2.50
+ ;; size=9 bbWeight=1 PerfScore 3.50
-; Total bytes of code 94, prolog size 9, PerfScore 41.25, instruction count 27, allocated bytes for code 94 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
+; Total bytes of code 113, prolog size 13, PerfScore 34.50, instruction count 31, allocated bytes for code 113 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
; ============================================================ Unwind Info: @@ -74,11 +75,13 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x04 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x08 + CountOfUnwindCodes: 5
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
+ CodeOffset: 0x08 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x07 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r13 (13) + CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14)
CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

benchmarks.run_pgo.linux.x64.checked.mch

-28 (-36.36%) : 5391.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -2,69 +2,49 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x10], rdi - mov rbx, rdi - ;; size=15 bbWeight=1 PerfScore 4.75 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi + ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rdi+0x38] + mov rdi, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rdi, rax ; gcrRegs +[rdi] call [<unknown method>] ; gcrRegs -[rdi]
- mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 77, prolog size 12, PerfScore 19.19, instruction count 26, allocated bytes for code 77 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -72,11 +52,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

-28 (-28.57%) : 50903.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttributeSystem.__Canon:System.__Canon (Tier1)

@@ -2,83 +2,63 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r15 class-hnd single-def <System.Reflection.MemberInfo> -; V02 arg1 [V02,T03] ( 3, 3 ) ubyte -> r14 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rbx class-hnd single-def <System.Reflection.MemberInfo> +; V02 arg1 [V02,T02] ( 3, 3 ) ubyte -> r15 single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T04] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T06] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp4 [V07,T05] ( 2, 4 ) ref -> rsi single-def "argument with side effect"
+; V04 tmp1 [V04,T03] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V05 tmp2 [V05,T04] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V06 cse0 [V06,T05] ( 3, 3 ) long -> r14 "CSE - aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M29548_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push r15 push r14 push rbx
- push rax - lea rbp, [rsp+0x20] - mov qword ptr [rbp-0x20], rdi - mov rbx, rdi - mov r15, rsi - ; gcrRegs +[r15] - mov r14d, edx - ;; size=25 bbWeight=1 PerfScore 7.25 -G_M29548_IG02: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi + mov rbx, rsi + ; gcrRegs +[rbx] + mov r15d, edx + ;; size=20 bbWeight=1 PerfScore 4.75 +G_M29548_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov r14, qword ptr [rdi+0x38] + mov rdi, qword ptr [r14]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
- movzx rdx, r14b - mov rdi, r15
+ movzx rdx, r15b + mov rdi, rbx
; gcrRegs +[rdi] call [System.Attribute:GetCustomAttribute(System.Reflection.MemberInfo,System.Type,ubyte):System.Attribute]
- ; gcrRegs -[rsi rdi r15] - mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M29548_IG05 - ;; size=36 bbWeight=1 PerfScore 10.25 -G_M29548_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M29548_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M29548_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcrRegs -[rbx rsi rdi] + ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [r14]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M29548_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M29548_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=40 bbWeight=1 PerfScore 12.25 +G_M29548_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx pop r14 pop r15
- pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
+ ;; size=10 bbWeight=1 PerfScore 2.75
-; Total bytes of code 98, prolog size 16, PerfScore 23.19, instruction count 34, allocated bytes for code 98 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
+; Total bytes of code 70, prolog size 14, PerfScore 19.75, instruction count 23, allocated bytes for code 70 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -86,13 +66,12 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x07 - CountOfUnwindCodes: 5
+ SizeOfProlog : 0x09 + CountOfUnwindCodes: 4
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x07 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x06 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14) - CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14) + CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15)

-23 (-21.10%) : 91957.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.Canon]:get_Current():System.Canon:this (Tier1)

@@ -8,99 +8,80 @@ ; 1 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 4 ) byref -> rdi this single-def -; V01 TypeCtx [V01,T03] ( 4, 3.25) long -> rbx single-def
+; V00 this [V00,T00] ( 4, 4 ) byref -> rdi this single-def +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> rbx single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T09] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T07] ( 4, 2.12) ref -> rax class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> -; V08 tmp6 [V08,T02] ( 4, 6 ) byref -> r15 single-def "Inlining Arg" -; V09 tmp7 [V09,T04] ( 3, 5 ) ref -> rdi class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref single-def -;* V11 tmp9 [V11,T10] ( 0, 0 ) int -> zero-ref -; V12 tmp10 [V12,T06] ( 2, 3 ) int -> rsi "Inlining Arg" -; V13 tmp11 [V13,T08] ( 2, 2 ) ref -> rdi class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V14 tmp12 [V14,T05] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
+; V04 tmp2 [V04,T07] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> +; V05 tmp3 [V05,T03] ( 2, 4 ) byref -> rsi single-def "Inlining Arg" +; V06 tmp4 [V06,T02] ( 3, 5 ) ref -> rsi class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def +;* V08 tmp6 [V08,T09] ( 0, 0 ) int -> zero-ref +; V09 tmp7 [V09,T06] ( 2, 3 ) int -> rax "Inlining Arg" +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> rsi class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V11 tmp9 [V11,T05] ( 3, 3 ) ref -> rdi single-def "argument with side effect" +; V12 cse0 [V12,T04] ( 4, 3 ) ref -> rdi "CSE - aggressive"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M44215_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp
- push r15
push rbx
- sub rsp, 16 - lea rbp, [rsp+0x20] - mov qword ptr [rbp-0x18], rsi
+ push rax + lea rbp, [rsp+0x10] + mov qword ptr [rbp-0x10], rsi
mov rbx, rsi
- ;; size=20 bbWeight=1 PerfScore 5.00
+ ;; size=15 bbWeight=1 PerfScore 4.75
G_M44215_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0080 {rdi}, byref, isz ; byrRegs +[rdi]
- lea r15, bword ptr [rdi+0x08] - ; byrRegs +[r15] - mov esi, dword ptr [rdi] - mov rdi, gword ptr [r15]
+ lea rsi, bword ptr [rdi+0x08] + ; byrRegs +[rsi] + mov eax, dword ptr [rdi] + mov rdi, gword ptr [rsi]
; gcrRegs +[rdi] ; byrRegs -[rdi]
- test rdi, rdi
+ mov rsi, rdi + ; gcrRegs +[rsi] + ; byrRegs -[rsi] + test rsi, rsi
je SHORT G_M44215_IG04
- ;; size=14 bbWeight=1 PerfScore 5.75 -G_M44215_IG03: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=8000 {r15}, byref, isz - mov rdi, gword ptr [rdi+0x18] - cmp word ptr [rdi+0x0C], 1
+ ;; size=17 bbWeight=1 PerfScore 6.00 +G_M44215_IG03: ; bbWeight=0.50, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, byref, isz + mov rsi, gword ptr [rsi+0x18] + cmp word ptr [rsi+0x0C], 1
jne SHORT G_M44215_IG04
- mov rdi, gword ptr [r15]
+ mov esi, eax + ; gcrRegs -[rsi]
mov rax, qword ptr [rdi] mov rax, qword ptr [rax+0x50] call [rax+0x18]<unknown method> ; gcrRegs -[rdi] +[rax]
- ; byrRegs -[r15]
jmp SHORT G_M44215_IG05
- ;; size=26 bbWeight=0.50 PerfScore 8.50 -G_M44215_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=8000 {r15}, byref - ; gcrRegs -[rax] - ; byrRegs +[r15] - mov rax, gword ptr [r15]
+ ;; size=25 bbWeight=0.50 PerfScore 7.62 +G_M44215_IG04: ; bbWeight=0.50, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax] +[rdi] + mov rax, rdi
; gcrRegs +[rax]
- ;; size=3 bbWeight=0.50 PerfScore 1.00 -G_M44215_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - ; byrRegs -[r15] - mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M44215_IG08 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M44215_IG06: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz
+ ;; size=3 bbWeight=0.50 PerfScore 0.12 +G_M44215_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + ; gcrRegs -[rdi]
mov rdi, qword ptr [rbx+0x38] mov rdi, qword ptr [rdi] mov rdi, qword ptr [rdi]
- cmp qword ptr [rcx], rdi - je SHORT G_M44215_IG08 - ;; size=15 bbWeight=0.25 PerfScore 2.50 -G_M44215_IG07: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
mov rsi, rax ; gcrRegs +[rsi] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M44215_IG08: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M44215_IG09: ; bbWeight=1, epilog, nogc, extend - add rsp, 16
+ nop + ;; size=19 bbWeight=1 PerfScore 7.50 +G_M44215_IG06: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
pop rbx
- pop r15
pop rbp ret
- ;; size=9 bbWeight=1 PerfScore 2.75
+ ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 109, prolog size 17, PerfScore 27.44, instruction count 38, allocated bytes for code 109 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
+; Total bytes of code 86, prolog size 12, PerfScore 28.25, instruction count 31, allocated bytes for code 86 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -108,12 +89,11 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x08 - CountOfUnwindCodes: 4
+ SizeOfProlog : 0x03 + CountOfUnwindCodes: 3
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x08 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15)
+ CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 + CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

+45 (+2.90%) : 146139.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

@@ -11,43 +11,43 @@ ; ; V00 this [V00,T00] ( 19, 17.02) ref -> rbx this class-hnd single-def <System.Reflection.Emit.DynamicMethod> ; V01 arg1 [V01,T11] ( 4, 4 ) ref -> r13 class-hnd single-def <System.String>
-; V02 arg2 [V02,T17] ( 3, 3 ) int -> rdx single-def -; V03 arg3 [V03,T18] ( 3, 3 ) int -> rcx single-def -; V04 arg4 [V04,T09] ( 7, 4.40) ref -> r14 class-hnd single-def <System.Type> -; V05 arg5 [V05,T08] ( 5, 6.03) ref -> r15 class-hnd single-def <System.Type[]> -; V06 arg6 [V06,T16] ( 8, 5.04) ref -> r12 class-hnd single-def <System.Type> -; V07 arg7 [V07,T32] ( 5, 2.04) ref -> [rbp+0x18] class-hnd single-def <System.Reflection.Module> -; V08 arg8 [V08,T41] ( 2, 1 ) ubyte -> [rbp+0x20] single-def -; V09 arg9 [V09,T40] ( 1, 1.02) ubyte -> [rbp+0x28] single-def
+; V02 arg2 [V02,T18] ( 3, 3 ) int -> rdx single-def +; V03 arg3 [V03,T19] ( 3, 3 ) int -> rcx single-def +; V04 arg4 [V04,T10] ( 7, 4.40) ref -> r14 class-hnd single-def <System.Type> +; V05 arg5 [V05,T07] ( 5, 6.03) ref -> r15 class-hnd single-def <System.Type[]> +; V06 arg6 [V06,T17] ( 8, 5.04) ref -> r12 class-hnd single-def <System.Type> +; V07 arg7 [V07,T34] ( 5, 2.04) ref -> [rbp+0x18] class-hnd single-def <System.Reflection.Module> +; V08 arg8 [V08,T43] ( 2, 1 ) ubyte -> [rbp+0x20] single-def +; V09 arg9 [V09,T42] ( 1, 1.02) ubyte -> [rbp+0x28] single-def
; V10 loc0 [V10,T01] ( 9, 16.91) int -> [rbp-0x2C]
-; V11 loc1 [V11,T07] ( 10, 9.40) ref -> r12 class-hnd exact <System.RuntimeType>
+; V11 loc1 [V11,T06] ( 9, 8.91) ref -> r12 class-hnd exact single-def <System.RuntimeType>
;# V12 OutArgs [V12 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V13 tmp1 [V13,T45] ( 3, 0 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V13 tmp1 [V13,T47] ( 3, 0 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
;* V14 tmp2 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp3 [V15 ] ( 0, 0 ) ref -> zero-ref
-; V16 tmp4 [V16,T31] ( 4, 2.73) ref -> rsi -; V17 tmp5 [V17,T27] ( 2, 2.01) int -> rdi -; V18 tmp6 [V18,T39] ( 2, 0.02) int -> rdi -; V19 tmp7 [V19,T28] ( 2, 2.01) int -> rdi -; V20 tmp8 [V20,T34] ( 3, 1.99) ref -> r12 -;* V21 tmp9 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V22 tmp10 [V22,T46] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V23 tmp11 [V23,T43] ( 2, 0.03) int -> rax -;* V24 tmp12 [V24 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V25 tmp13 [V25,T10] ( 6, 6.21) ref -> r14 class-hnd "spilling QMark2" <System.RuntimeType> -; V26 tmp14 [V26,T47] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V27 tmp15 [V27,T04] ( 3, 11.92) ref -> [rbp-0x48] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> -;* V28 tmp16 [V28 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -; V29 tmp17 [V29,T02] ( 5, 14.90) ref -> rsi class-hnd "spilling QMark2" <System.RuntimeType> -; V30 tmp18 [V30,T48] ( 3, 0 ) ref -> r14 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V31 tmp19 [V31,T49] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <<unknown class>> -; V32 tmp20 [V32,T22] ( 3, 3.97) ref -> rsi "guarded devirt return temp" -; V33 tmp21 [V33,T03] ( 5, 11.92) ref -> rdi "guarded devirt arg temp" -;* V34 tmp22 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V35 tmp23 [V35,T38] ( 3, 1.38) ref -> r14 "guarded devirt return temp" -;* V36 tmp24 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V37 tmp25 [V37,T33] ( 3, 2.01) ref -> r12 "guarded devirt return temp" -;* V38 tmp26 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
+; V16 tmp4 [V16,T33] ( 4, 2.73) ref -> rsi +; V17 tmp5 [V17,T28] ( 2, 2.01) int -> rdi +; V18 tmp6 [V18,T41] ( 2, 0.02) int -> rdi +; V19 tmp7 [V19,T29] ( 2, 2.01) int -> rdi +; V20 tmp8 [V20,T36] ( 3, 1.99) ref -> r12 +; V21 tmp9 [V21,T48] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V22 tmp10 [V22,T45] ( 2, 0.03) int -> rax +; V23 tmp11 [V23,T32] ( 2, 2.76) ref -> rsi class-hnd exact single-def "dup spill" <System.RuntimeType> +; V24 tmp12 [V24,T49] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V25 tmp13 [V25,T04] ( 3, 11.92) ref -> [rbp-0x38] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> +; V26 tmp14 [V26,T08] ( 2, 7.95) ref -> rsi class-hnd exact "Strict ordering of exceptions for Array store" <System.RuntimeType> +; V27 tmp15 [V27,T50] ( 3, 0 ) ref -> r14 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V28 tmp16 [V28,T51] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <<unknown class>> +; V29 tmp17 [V29,T23] ( 3, 3.97) ref -> rdi "guarded devirt return temp" +; V30 tmp18 [V30,T03] ( 5, 11.92) ref -> rdi "guarded devirt arg temp" +;* V31 tmp19 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V32 tmp20 [V32,T40] ( 3, 1.38) ref -> r14 "guarded devirt return temp" +;* V33 tmp21 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V34 tmp22 [V34,T35] ( 3, 2.01) ref -> r12 "guarded devirt return temp" +;* V35 tmp23 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V36 tmp24 [V36 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V37 tmp25 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V38 tmp26 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp27 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V40 tmp28 [V40 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V41 tmp29 [V41 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" @@ -58,53 +58,52 @@ ;* V46 tmp34 [V46 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V47 tmp35 [V47 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V48 tmp36 [V48 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-;* V49 tmp37 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V50 tmp38 [V50 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V51 tmp39 [V51 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V52 tmp40 [V52,T42] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V53 tmp41 [V53,T24] ( 4, 3.96) ubyte -> rax "Inline stloc first use temp" -;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> -;* V55 tmp43 [V55 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> -;* V56 tmp44 [V56 ] ( 0, 0 ) struct ( 8) zero-ref multireg-ret single-def "guarded devirt return temp" <System.RuntimeTypeHandle> -;* V57 tmp45 [V57 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> -; V59 tmp47 [V59,T19] ( 12, 4.95) ref -> [rbp-0x50] class-hnd "Inline stloc first use temp" <System.Type> -; V60 tmp48 [V60,T20] ( 3, 4.95) int -> rcx "guarded devirt return temp" -;* V61 tmp49 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V62 tmp50 [V62,T21] ( 3, 4.95) ubyte -> rcx "Inline return value spill temp" -; V63 tmp51 [V63,T25] ( 4, 3.96) ubyte -> rax "Inline stloc first use temp" -;* V64 tmp52 [V64 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> -;* V65 tmp53 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V66 tmp54 [V66 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> -; V67 tmp55 [V67,T50] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> -;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V69 tmp57 [V69,T35] ( 3, 1.98) int -> rax -; V70 tmp58 [V70,T37] ( 2, 1.98) ubyte -> rdi "Inline stloc first use temp" -;* V71 tmp59 [V71 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V72 tmp60 [V72 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V73 tmp61 [V73 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V74 tmp62 [V74,T26] ( 2, 3.96) byref -> rdi single-def "Inlining Arg" -;* V75 tmp63 [V75 ] ( 0, 0 ) ref -> zero-ref single-def "field V55.m_type (fldOffset=0x0)" P-INDEP -; V76 tmp64 [V76,T29] ( 4, 2.97) ref -> rdi single-def "field V56.m_type (fldOffset=0x0)" P-INDEP -; V77 tmp65 [V77,T36] ( 2, 1.98) ref -> rdi single-def "field V64.m_type (fldOffset=0x0)" P-INDEP -;* V78 tmp66 [V78 ] ( 0, 0 ) long -> zero-ref "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP -; V79 tmp67 [V79,T30] ( 3, 2.97) long -> rdi "field V71.m_asTAddr (fldOffset=0x0)" P-INDEP -; V80 tmp68 [V80,T05] ( 3, 11.92) ref -> rdi "arr expr" -;* V81 tmp69 [V81,T23] ( 0, 0 ) ref -> zero-ref "arr expr" -; V82 tmp70 [V82,T51] ( 2, 0 ) ref -> rsi "argument with side effect" -; V83 tmp71 [V83,T52] ( 2, 0 ) ref -> rsi "argument with side effect" -; V84 tmp72 [V84,T44] ( 2, 0.04) ref -> rsi single-def "argument with side effect" -; V85 tmp73 [V85,T53] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V86 tmp74 [V86,T54] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V87 tmp75 [V87,T55] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V88 tmp76 [V88,T56] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V89 cse0 [V89,T12] ( 3, 5.96) ref -> rdi "CSE - moderate" -; V90 cse1 [V90,T13] ( 3, 5.96) ref -> rdi "CSE - moderate" -; V91 cse2 [V91,T14] ( 2, 3.97) ref -> rdi "CSE - moderate" -; V92 cse3 [V92,T06] ( 12, 11.67) long -> [rbp-0x38] multi-def "CSE - aggressive" -; V93 cse4 [V93,T15] ( 4, 5.05) int -> [rbp-0x3C] spill-single-def "CSE - moderate"
+;* V49 tmp37 [V49,T44] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V50 tmp38 [V50,T25] ( 4, 3.96) ubyte -> rax "Inline stloc first use temp" +;* V51 tmp39 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> +;* V52 tmp40 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> +;* V53 tmp41 [V53 ] ( 0, 0 ) struct ( 8) zero-ref multireg-ret single-def "guarded devirt return temp" <System.RuntimeTypeHandle> +;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V55 tmp43 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> +; V56 tmp44 [V56,T20] ( 12, 4.95) ref -> r14 class-hnd "Inline stloc first use temp" <System.Type> +; V57 tmp45 [V57,T21] ( 3, 4.95) int -> rcx "guarded devirt return temp" +;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V59 tmp47 [V59,T22] ( 3, 4.95) ubyte -> rcx "Inline return value spill temp" +; V60 tmp48 [V60,T26] ( 4, 3.96) ubyte -> rax "Inline stloc first use temp" +;* V61 tmp49 [V61 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> +;* V62 tmp50 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V63 tmp51 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V64 tmp52 [V64,T52] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> +;* V65 tmp53 [V65 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V66 tmp54 [V66,T37] ( 3, 1.98) int -> rax +; V67 tmp55 [V67,T39] ( 2, 1.98) ubyte -> rdi "Inline stloc first use temp" +;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V69 tmp57 [V69 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V70 tmp58 [V70 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V71 tmp59 [V71,T27] ( 2, 3.96) byref -> rdi single-def "Inlining Arg" +;* V72 tmp60 [V72 ] ( 0, 0 ) ref -> zero-ref single-def "field V52.m_type (fldOffset=0x0)" P-INDEP +; V73 tmp61 [V73,T30] ( 4, 2.97) ref -> rdi single-def "field V53.m_type (fldOffset=0x0)" P-INDEP +; V74 tmp62 [V74,T38] ( 2, 1.98) ref -> rdi single-def "field V61.m_type (fldOffset=0x0)" P-INDEP +;* V75 tmp63 [V75 ] ( 0, 0 ) long -> zero-ref "field V65.m_asTAddr (fldOffset=0x0)" P-INDEP +; V76 tmp64 [V76,T31] ( 3, 2.97) long -> rdi "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP +; V77 tmp65 [V77,T05] ( 3, 11.92) ref -> rdi "arr expr" +;* V78 tmp66 [V78,T24] ( 0, 0 ) ref -> zero-ref "arr expr" +; V79 tmp67 [V79,T53] ( 2, 0 ) ref -> rsi "argument with side effect" +; V80 tmp68 [V80,T54] ( 2, 0 ) ref -> rsi "argument with side effect" +; V81 tmp69 [V81,T46] ( 2, 0.04) ref -> rsi single-def "argument with side effect" +; V82 tmp70 [V82,T55] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V83 tmp71 [V83,T56] ( 2, 0 ) ref -> rdx single-def "argument with side effect" +; V84 tmp72 [V84,T57] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V85 tmp73 [V85,T58] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V86 cse0 [V86,T12] ( 3, 5.96) ref -> rdi "CSE - moderate" +; V87 cse1 [V87,T13] ( 3, 5.96) ref -> rdi "CSE - moderate" +; V88 cse2 [V88,T14] ( 2, 3.97) ref -> rdi "CSE - moderate" +; V89 cse3 [V89,T16] ( 4, 5.05) int -> [rbp-0x30] spill-single-def "CSE - moderate" +; V90 rat0 [V90,T02] ( 5, 14.90) ref -> rsi class-hnd "replacement local" <System.RuntimeType> +; V91 rat1 [V91,T15] ( 5, 5.18) ref -> r14 class-hnd "replacement local" <System.RuntimeType> +; V92 rat2 [V92,T09] ( 5, 7.42) ref -> r12 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp @@ -113,8 +112,8 @@ G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push r13 push r12 push rbx
- sub rsp, 40 - lea rbp, [rsp+0x50]
+ sub rsp, 24 + lea rbp, [rsp+0x40]
mov rbx, rdi ; gcrRegs +[rbx] mov r13, rsi @@ -128,17 +127,17 @@ G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=35 bbWeight=1 PerfScore 8.75 G_M32743_IG02: ; bbWeight=1, gcrefRegs=F008 {rbx r12 r13 r14 r15}, byrefRegs=0000 {}, byref test r13, r13
- je G_M32743_IG53
+ je G_M32743_IG46
cmp edx, 22
- jne G_M32743_IG54
+ jne G_M32743_IG47
cmp ecx, 1
- jne G_M32743_IG54
+ jne G_M32743_IG47
;; size=27 bbWeight=1 PerfScore 3.75 G_M32743_IG03: ; bbWeight=1.02, gcrefRegs=F008 {rbx r12 r13 r14 r15}, byrefRegs=0000 {}, byref test r15, r15
- je G_M32743_IG58
+ je G_M32743_IG51
mov ecx, dword ptr [r15+0x08]
- mov dword ptr [rbp-0x3C], ecx
+ mov dword ptr [rbp-0x30], ecx
mov esi, ecx mov rdi, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_NEWARR_1_OBJ @@ -152,7 +151,7 @@ G_M32743_IG03: ; bbWeight=1.02, gcrefRegs=F008 {rbx r12 r13 r14 r15}, byr ; gcrRegs -[rax rsi] ; byrRegs -[rdi] xor eax, eax
- cmp dword ptr [rbp-0x3C], 0
+ cmp dword ptr [rbp-0x30], 0
jle G_M32743_IG09 ;; size=57 bbWeight=1.02 PerfScore 10.98 G_M32743_IG04: ; bbWeight=1.99, gcrefRegs=F008 {rbx r12 r13 r14 r15}, byrefRegs=0000 {}, byref @@ -160,26 +159,27 @@ G_M32743_IG04: ; bbWeight=1.99, gcrefRegs=F008 {rbx r12 r13 r14 r15}, byr mov rdi, gword ptr [r15+8*rdi+0x10] ; gcrRegs +[rdi] test rdi, rdi
- je G_M32743_IG56
+ je G_M32743_IG49
mov rdx, gword ptr [rbx+0x08] ; gcrRegs +[rdx]
- mov gword ptr [rbp-0x48], rdx - ; GC ptr vars +{V27} - mov r8, 0xD1FFAB1E ; System.RuntimeType - cmp qword ptr [rdi], r8 - jne G_M32743_IG55
+ mov gword ptr [rbp-0x38], rdx + ; GC ptr vars +{V25} + mov rsi, 0xD1FFAB1E ; System.RuntimeType + cmp qword ptr [rdi], rsi + jne G_M32743_IG48 + ;; size=43 bbWeight=1.99 PerfScore 21.35 +G_M32743_IG05: ; bbWeight=1.99, gcVars=0000000000000010 {V25}, gcrefRegs=F08C {rdx rbx rdi r12 r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref, isz
mov rsi, rdi ; gcrRegs +[rsi]
- ;; size=46 bbWeight=1.99 PerfScore 21.85 -G_M32743_IG05: ; bbWeight=1.99, gcVars=0000000000000010 {V27}, gcrefRegs=F04C {rdx rbx rsi r12 r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[rdi]
test rsi, rsi je SHORT G_M32743_IG08
- ;; size=5 bbWeight=1.99 PerfScore 2.48
+ ;; size=8 bbWeight=1.99 PerfScore 2.98
G_M32743_IG06: ; bbWeight=0.99, gcrefRegs=F04C {rdx rbx rsi r12 r13 r14 r15}, byrefRegs=0000 {}, byref, isz
- cmp qword ptr [rsi], r8
...

+18 (+9.57%) : 105775.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,16 +10,14 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,300.94) int -> rbx
+; V01 loc0 [V01,T01] ( 4,300.94) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,450.94) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,250.52) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,751.57) ref -> rax class-hnd "spilling QMark2" <PerfLabTests.Foo[]> -; V06 cse0 [V06,T05] ( 2,100.32) ref -> r13 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3,100.23) ref -> r14 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.33) int -> r15 "CSE - aggressive" -; V09 rat0 [V09,T08] ( 3, 0.04) ref -> rsi "Spilling to split statement for tree" -; V10 rat1 [V10,T07] ( 5, 0.07) ref -> r13 class-hnd "replacement local" <PerfLabTests.Foo[]>
+; V03 cse0 [V03,T03] ( 2,100.32) ref -> r13 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4,100.23) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.33) int -> r15 "CSE - aggressive" +; V06 rat0 [V06,T06] ( 3, 0.04) ref -> rsi "Spilling to split statement for tree" +; V07 rat1 [V07,T05] ( 5, 0.07) ref -> r13 class-hnd "replacement local" <PerfLabTests.Foo[]> +; V08 rat2 [V08,T00] ( 5,701.47) ref -> rsi class-hnd "replacement local" <PerfLabTests.Foo[]>
; ; Lcl frame size = 0 @@ -37,7 +35,7 @@ G_M13964_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov r15d, dword ptr [(reloc)] cmp ebx, r15d
- jge SHORT G_M13964_IG11
+ jge G_M13964_IG11
mov rdi, 0xD1FFAB1E ; static handle mov r14, gword ptr [rdi] ; gcrRegs +[r14] @@ -47,7 +45,7 @@ G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs +[r13] test r13, r13 je SHORT G_M13964_IG05
- ;; size=36 bbWeight=0.01 PerfScore 0.07
+ ;; size=40 bbWeight=0.01 PerfScore 0.07
G_M13964_IG03: ; bbWeight=0.00, gcrefRegs=6040 {rsi r13 r14}, byrefRegs=0000 {}, byref, isz mov rdi, 0xD1FFAB1E ; PerfLabTests.Foo[] cmp qword ptr [r13], rdi @@ -65,41 +63,45 @@ G_M13964_IG04: ; bbWeight=0, gcrefRegs=4040 {rsi r14}, byrefRegs=0000 {}, G_M13964_IG05: ; bbWeight=100.31, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] test r13, r13
- je SHORT G_M13964_IG10
+ je SHORT G_M13964_IG08
;; size=5 bbWeight=100.31 PerfScore 125.39 G_M13964_IG06: ; bbWeight=100.21, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz mov rsi, r14 ; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M13964_IG09 - ;; size=11 bbWeight=100.21 PerfScore 175.37 -G_M13964_IG07: ; bbWeight=50.10, gcrefRegs=6041 {rax rsi r13 r14}, byrefRegs=0000 {}, byref, isz
+ test rsi, rsi + jne SHORT G_M13964_IG09 + ;; size=8 bbWeight=100.21 PerfScore 150.31 +G_M13964_IG07: ; bbWeight=100.21, gcrefRegs=6040 {rsi r13 r14}, byrefRegs=0000 {}, byref + mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> + call CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[rsi] + ;; size=15 bbWeight=100.21 PerfScore 125.26 +G_M13964_IG08: ; bbWeight=100.31, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz + inc ebx + cmp ebx, r15d + jge SHORT G_M13964_IG11 + jmp SHORT G_M13964_IG05 + ;; size=9 bbWeight=100.31 PerfScore 351.08 +G_M13964_IG09: ; bbWeight=50.10, gcrefRegs=6040 {rsi r13 r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[rsi]
mov rdi, 0xD1FFAB1E ; PerfLabTests.Foo[]
- cmp qword ptr [rax], rdi - je SHORT G_M13964_IG09
+ cmp qword ptr [rsi], rdi + je SHORT G_M13964_IG07
;; size=15 bbWeight=50.10 PerfScore 212.95
-G_M13964_IG08: ; bbWeight=25.05, gcrefRegs=6040 {rsi r13 r14}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
+G_M13964_IG10: ; bbWeight=0, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rsi] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; PerfLabTests.Foo[]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=25.05 PerfScore 25.05 -G_M13964_IG09: ; bbWeight=100.21, gcrefRegs=6001 {rax r13 r14}, byrefRegs=0000 {}, byref - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
- call CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[rax rsi] - ;; size=18 bbWeight=100.21 PerfScore 150.31 -G_M13964_IG10: ; bbWeight=100.31, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz - inc ebx - cmp ebx, r15d - jl SHORT G_M13964_IG05 - ;; size=7 bbWeight=100.31 PerfScore 150.46
+ jmp SHORT G_M13964_IG07 + ;; size=23 bbWeight=0 PerfScore 0.00
G_M13964_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[r13-r14]
+ ; gcrRegs -[rax rsi r13-r14]
add rsp, 112 pop rbx pop r13 @@ -109,7 +111,7 @@ G_M13964_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 188, prolog size 43, PerfScore 839.72, instruction count 47, allocated bytes for code 188 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 206, prolog size 43, PerfScore 965.19, instruction count 50, allocated bytes for code 206 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info:

+18 (+9.63%) : 142617.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,16 +10,14 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf2.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,299.98) int -> rbx
+; V01 loc0 [V01,T01] ( 4,299.98) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,449.33) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,249.63) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,748.88) ref -> rax class-hnd "spilling QMark2" <PerfLabTests.CastingPerf2.Foo> -; V06 cse0 [V06,T05] ( 2,100.00) ref -> r13 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3, 99.87) ref -> r14 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.01) int -> r15 "CSE - aggressive" -; V09 rat0 [V09,T08] ( 3, 0.04) ref -> rsi "Spilling to split statement for tree" -; V10 rat1 [V10,T07] ( 5, 0.07) ref -> r13 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
+; V03 cse0 [V03,T03] ( 2,100.00) ref -> r13 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4, 99.87) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.01) int -> r15 "CSE - aggressive" +; V06 rat0 [V06,T06] ( 3, 0.04) ref -> rsi "Spilling to split statement for tree" +; V07 rat1 [V07,T05] ( 5, 0.07) ref -> r13 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo> +; V08 rat2 [V08,T00] ( 5,698.95) ref -> rsi class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
; ; Lcl frame size = 0 @@ -34,11 +32,11 @@ G_M59156_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr lea rbp, [rsp+0x20] mov ebx, dword ptr [rbp+0x3C] ;; size=43 bbWeight=0.01 PerfScore 0.10
-G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov r15d, dword ptr [(reloc)] cmp ebx, r15d
- jge SHORT G_M59156_IG12 - ;; size=12 bbWeight=0.01 PerfScore 0.03
+ jge G_M59156_IG13 + ;; size=16 bbWeight=0.01 PerfScore 0.03
G_M59156_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov rdi, 0xD1FFAB1E ; static handle mov r14, gword ptr [rdi] @@ -67,41 +65,47 @@ G_M59156_IG05: ; bbWeight=0, gcrefRegs=4040 {rsi r14}, byrefRegs=0000 {}, G_M59156_IG06: ; bbWeight=99.99, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] test r13, r13
- je SHORT G_M59156_IG11
+ je SHORT G_M59156_IG09
;; size=5 bbWeight=99.99 PerfScore 124.99 G_M59156_IG07: ; bbWeight=99.85, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz mov rsi, r14 ; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M59156_IG10 - ;; size=11 bbWeight=99.85 PerfScore 174.74 -G_M59156_IG08: ; bbWeight=49.93, gcrefRegs=6041 {rax rsi r13 r14}, byrefRegs=0000 {}, byref, isz
+ test rsi, rsi + jne SHORT G_M59156_IG11 + ;; size=8 bbWeight=99.85 PerfScore 149.78 +G_M59156_IG08: ; bbWeight=99.85, gcrefRegs=6040 {rsi r13 r14}, byrefRegs=0000 {}, byref + mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> + call CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[rsi] + ;; size=15 bbWeight=99.85 PerfScore 124.81 +G_M59156_IG09: ; bbWeight=99.99, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz + inc ebx + cmp ebx, r15d + jge SHORT G_M59156_IG13 + ;; size=7 bbWeight=99.99 PerfScore 149.99 +G_M59156_IG10: ; bbWeight=99.98, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M59156_IG06 + ;; size=2 bbWeight=99.98 PerfScore 199.96 +G_M59156_IG11: ; bbWeight=49.93, gcrefRegs=6040 {rsi r13 r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[rsi]
mov rdi, 0xD1FFAB1E ; PerfLabTests.CastingPerf2.Foo
- cmp qword ptr [rax], rdi - je SHORT G_M59156_IG10
+ cmp qword ptr [rsi], rdi + je SHORT G_M59156_IG08
;; size=15 bbWeight=49.93 PerfScore 212.18
-G_M59156_IG09: ; bbWeight=24.96, gcrefRegs=6040 {rsi r13 r14}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
+G_M59156_IG12: ; bbWeight=0, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rsi] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; PerfLabTests.CastingPerf2.Foo
call CORINFO_HELP_CHKCASTCLASS_SPECIAL ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=24.96 PerfScore 24.96 -G_M59156_IG10: ; bbWeight=99.85, gcrefRegs=6001 {rax r13 r14}, byrefRegs=0000 {}, byref - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
- call CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[rax rsi] - ;; size=18 bbWeight=99.85 PerfScore 149.78 -G_M59156_IG11: ; bbWeight=99.99, gcrefRegs=6000 {r13 r14}, byrefRegs=0000 {}, byref, isz - inc ebx - cmp ebx, r15d - jl SHORT G_M59156_IG06 - ;; size=7 bbWeight=99.99 PerfScore 149.99 -G_M59156_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[r13-r14]
+ jmp SHORT G_M59156_IG08 + ;; size=23 bbWeight=0 PerfScore 0.00 +G_M59156_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[rax rsi r13-r14]
add rsp, 112 pop rbx pop r13 @@ -111,7 +115,7 @@ G_M59156_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 187, prolog size 43, PerfScore 836.82, instruction count 47, allocated bytes for code 187 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 205, prolog size 43, PerfScore 961.89, instruction count 50, allocated bytes for code 205 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info:

benchmarks.run_tiered.linux.x64.checked.mch

-28 (-36.36%) : 6922.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -2,69 +2,49 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x10], rdi - mov rbx, rdi - ;; size=15 bbWeight=1 PerfScore 4.75 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi + ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rdi+0x38] + mov rdi, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rdi, rax ; gcrRegs +[rdi] call [<unknown method>] ; gcrRegs -[rdi]
- mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 77, prolog size 12, PerfScore 19.19, instruction count 26, allocated bytes for code 77 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -72,11 +52,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

-21 (-29.58%) : 24382.dasm - System.Threading.AsyncLocal`1[System.Canon]:get_Value():System.Canon:this (Tier1)

@@ -2,69 +2,49 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 3.25) ref -> rbx this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> -; V01 loc0 [V01,T02] ( 3, 2.12) ref -> rax class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Threading.AsyncLocal`1[System.__Canon]> +; V01 loc0 [V01,T01] ( 2, 2 ) ref -> rsi class-hnd single-def <System.Object>
;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M1970_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x10], rdi
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi
mov rbx, rdi ; gcrRegs +[rbx]
- ;; size=15 bbWeight=1 PerfScore 4.75 -G_M1970_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ ;; size=13 bbWeight=1 PerfScore 2.50 +G_M1970_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
mov rdi, rbx ; gcrRegs +[rdi] call [System.Threading.ExecutionContext:GetLocalValue(System.Threading.IAsyncLocal):System.Object] ; gcrRegs -[rdi] +[rax]
- mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M1970_IG05 - ;; size=17 bbWeight=1 PerfScore 4.75 -G_M1970_IG03: ; bbWeight=0.25, gcrefRegs=000B {rax rcx rbx}, byrefRegs=0000 {}, byref, isz
+ ; gcr arg pop 0 + mov rsi, rax + ; gcrRegs +[rsi]
mov rdi, qword ptr [rbx] mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi] mov rdi, qword ptr [rdi]
- cmp qword ptr [rcx], rdi - je SHORT G_M1970_IG05 - ;; size=18 bbWeight=0.25 PerfScore 3.00 -G_M1970_IG04: ; bbWeight=0.12, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx] - mov rsi, rax - ; gcrRegs +[rsi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M1970_IG05: ; bbWeight=1, gcrefRegs=000A {rcx rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M1970_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=31 bbWeight=1 PerfScore 12.75 +G_M1970_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 71, prolog size 12, PerfScore 15.19, instruction count 25, allocated bytes for code 71 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
+; Total bytes of code 50, prolog size 10, PerfScore 17.00, instruction count 16, allocated bytes for code 50 (MethodHash=11a2f84d) for method System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -72,11 +52,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

-28 (-28.57%) : 53547.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttributeSystem.__Canon:System.__Canon (Tier1)

@@ -2,83 +2,63 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> r15 class-hnd single-def <System.Reflection.MemberInfo> -; V02 arg1 [V02,T03] ( 3, 3 ) ubyte -> r14 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rbx class-hnd single-def <System.Reflection.MemberInfo> +; V02 arg1 [V02,T02] ( 3, 3 ) ubyte -> r15 single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T04] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T06] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp4 [V07,T05] ( 2, 4 ) ref -> rsi single-def "argument with side effect"
+; V04 tmp1 [V04,T03] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V05 tmp2 [V05,T04] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V06 cse0 [V06,T05] ( 3, 3 ) long -> r14 "CSE - aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M29548_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push r15 push r14 push rbx
- push rax - lea rbp, [rsp+0x20] - mov qword ptr [rbp-0x20], rdi - mov rbx, rdi - mov r15, rsi - ; gcrRegs +[r15] - mov r14d, edx - ;; size=25 bbWeight=1 PerfScore 7.25 -G_M29548_IG02: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi + mov rbx, rsi + ; gcrRegs +[rbx] + mov r15d, edx + ;; size=20 bbWeight=1 PerfScore 4.75 +G_M29548_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov r14, qword ptr [rdi+0x38] + mov rdi, qword ptr [r14]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
- movzx rdx, r14b - mov rdi, r15
+ movzx rdx, r15b + mov rdi, rbx
; gcrRegs +[rdi] call [System.Attribute:GetCustomAttribute(System.Reflection.MemberInfo,System.Type,ubyte):System.Attribute]
- ; gcrRegs -[rsi rdi r15] - mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M29548_IG05 - ;; size=36 bbWeight=1 PerfScore 10.25 -G_M29548_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M29548_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M29548_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcrRegs -[rbx rsi rdi] + ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [r14]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M29548_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M29548_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=40 bbWeight=1 PerfScore 12.25 +G_M29548_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx pop r14 pop r15
- pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
+ ;; size=10 bbWeight=1 PerfScore 2.75
-; Total bytes of code 98, prolog size 16, PerfScore 23.19, instruction count 34, allocated bytes for code 98 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
+; Total bytes of code 70, prolog size 14, PerfScore 19.75, instruction count 23, allocated bytes for code 70 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -86,13 +66,12 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x07 - CountOfUnwindCodes: 5
+ SizeOfProlog : 0x09 + CountOfUnwindCodes: 4
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x07 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x06 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14) - CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14) + CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15)

+26 (+22.61%) : 56645.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)

@@ -9,68 +9,69 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r15 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r15 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> r13 hoist "CSE - aggressive"
; ; Lcl frame size = 0 G_M40467_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG mov rax, qword ptr [rbp] push rax
- sub rsp, 16 - mov qword ptr [rsp+0x58], r15
+ sub rsp, 32 + mov qword ptr [rsp+0x68], r15 + mov qword ptr [rsp+0x60], r14 + mov qword ptr [rsp+0x58], r13
mov qword ptr [rsp+0x50], rbx
- lea rbp, [rsp+0x10]
+ lea rbp, [rsp+0x20]
mov ebx, dword ptr [rbp+0x1C]
- ;; size=27 bbWeight=1 PerfScore 7.75
+ ;; size=37 bbWeight=1 PerfScore 9.75
G_M40467_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov r15d, dword ptr [(reloc)] cmp ebx, r15d
- jge SHORT G_M40467_IG07 - ;; size=12 bbWeight=1 PerfScore 3.25 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> - mov rsi, gword ptr [rdi]
+ jge SHORT G_M40467_IG04 + mov rsi, 0xD1FFAB1E ; static handle + mov r14, gword ptr [rsi] + ; gcrRegs +[r14] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; <unknown class> + call [CORINFO_HELP_CHKCASTARRAY] + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov r13, 0xD1FFAB1E ; static handle + ;; size=54 bbWeight=1 PerfScore 9.25 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rsi, r14
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M40467_IG06 - ;; size=21 bbWeight=4 PerfScore 15.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M40467_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call [CORINFO_HELP_CHKCASTARRAY] ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, r13
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rsi] inc ebx cmp ebx, r15d jl SHORT G_M40467_IG03
- ;; size=25 bbWeight=4 PerfScore 12.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=37 bbWeight=4 PerfScore 26.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[r14]
add rsp, 80 pop rbx
+ pop r13 + pop r14
pop r15 pop rbp ret
- ;; size=9 bbWeight=1 PerfScore 2.75
+ ;; size=13 bbWeight=1 PerfScore 3.75
-; Total bytes of code 115, prolog size 27, PerfScore 46.50, instruction count 30, allocated bytes for code 115 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
+; Total bytes of code 141, prolog size 37, PerfScore 48.75, instruction count 34, allocated bytes for code 141 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -78,16 +79,20 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x13 - CountOfUnwindCodes: 8
+ SizeOfProlog : 0x1D + CountOfUnwindCodes: 12
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x13 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: rbx (3)
+ CodeOffset: 0x1D UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: rbx (3)
Scaled Small Offset: 10 * 8 = 80 = 0x00050
- CodeOffset: 0x0E UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r15 (15)
+ CodeOffset: 0x18 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r13 (13)
Scaled Small Offset: 11 * 8 = 88 = 0x00058
- CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10
+ CodeOffset: 0x13 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r14 (14) + Scaled Small Offset: 12 * 8 = 96 = 0x00060 + CodeOffset: 0x0E UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r15 (15) + Scaled Small Offset: 13 * 8 = 104 = 0x00068 + CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20
CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 CodeOffset: 0x00 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 8 * 8 + 8 = 72 = 0x48 CodeOffset: 0x00 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

+26 (+22.61%) : 28766.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)

@@ -9,68 +9,69 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r15 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r15 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> r13 hoist "CSE - aggressive"
; ; Lcl frame size = 0 G_M3904_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG mov rax, qword ptr [rbp] push rax
- sub rsp, 16 - mov qword ptr [rsp+0x58], r15
+ sub rsp, 32 + mov qword ptr [rsp+0x68], r15 + mov qword ptr [rsp+0x60], r14 + mov qword ptr [rsp+0x58], r13
mov qword ptr [rsp+0x50], rbx
- lea rbp, [rsp+0x10]
+ lea rbp, [rsp+0x20]
mov ebx, dword ptr [rbp+0x1C]
- ;; size=27 bbWeight=1 PerfScore 7.75
+ ;; size=37 bbWeight=1 PerfScore 9.75
G_M3904_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov r15d, dword ptr [(reloc)] cmp ebx, r15d
- jge SHORT G_M3904_IG07 - ;; size=12 bbWeight=1 PerfScore 3.25 -G_M3904_IG03: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> - mov rsi, gword ptr [rdi]
+ jge SHORT G_M3904_IG04 + mov rsi, 0xD1FFAB1E ; static handle + mov r14, gword ptr [rsi] + ; gcrRegs +[r14] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; <unknown class> + call [CORINFO_HELP_CHKCASTARRAY] + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov r13, 0xD1FFAB1E ; static handle + ;; size=54 bbWeight=1 PerfScore 9.25 +G_M3904_IG03: ; bbWeight=4, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rsi, r14
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M3904_IG06 - ;; size=21 bbWeight=4 PerfScore 15.00 -G_M3904_IG04: ; bbWeight=1, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M3904_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M3904_IG05: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call [CORINFO_HELP_CHKCASTARRAY] ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M3904_IG06: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, r13
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rsi] inc ebx cmp ebx, r15d jl SHORT G_M3904_IG03
- ;; size=25 bbWeight=4 PerfScore 12.00 -G_M3904_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=37 bbWeight=4 PerfScore 26.00 +G_M3904_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[r14]
add rsp, 80 pop rbx
+ pop r13 + pop r14
pop r15 pop rbp ret
- ;; size=9 bbWeight=1 PerfScore 2.75
+ ;; size=13 bbWeight=1 PerfScore 3.75
-; Total bytes of code 115, prolog size 27, PerfScore 46.50, instruction count 30, allocated bytes for code 115 (MethodHash=4cdef0bf) for method PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
+; Total bytes of code 141, prolog size 37, PerfScore 48.75, instruction count 34, allocated bytes for code 141 (MethodHash=4cdef0bf) for method PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -78,16 +79,20 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x13 - CountOfUnwindCodes: 8
+ SizeOfProlog : 0x1D + CountOfUnwindCodes: 12
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x13 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: rbx (3)
+ CodeOffset: 0x1D UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: rbx (3)
Scaled Small Offset: 10 * 8 = 80 = 0x00050
- CodeOffset: 0x0E UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r15 (15)
+ CodeOffset: 0x18 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r13 (13)
Scaled Small Offset: 11 * 8 = 88 = 0x00058
- CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10
+ CodeOffset: 0x13 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r14 (14) + Scaled Small Offset: 12 * 8 = 96 = 0x00060 + CodeOffset: 0x0E UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r15 (15) + Scaled Small Offset: 13 * 8 = 104 = 0x00068 + CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20
CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 CodeOffset: 0x00 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 8 * 8 + 8 = 72 = 0x48 CodeOffset: 0x00 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

+26 (+22.61%) : 53064.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)

@@ -9,68 +9,69 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rsi "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> r15 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> r15 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> r14 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> r13 hoist "CSE - aggressive"
; ; Lcl frame size = 0 G_M896_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG mov rax, qword ptr [rbp] push rax
- sub rsp, 16 - mov qword ptr [rsp+0x58], r15
+ sub rsp, 32 + mov qword ptr [rsp+0x68], r15 + mov qword ptr [rsp+0x60], r14 + mov qword ptr [rsp+0x58], r13
mov qword ptr [rsp+0x50], rbx
- lea rbp, [rsp+0x10]
+ lea rbp, [rsp+0x20]
mov ebx, dword ptr [rbp+0x1C]
- ;; size=27 bbWeight=1 PerfScore 7.75
+ ;; size=37 bbWeight=1 PerfScore 9.75
G_M896_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov r15d, dword ptr [(reloc)] cmp ebx, r15d
- jge SHORT G_M896_IG07 - ;; size=12 bbWeight=1 PerfScore 3.25 -G_M896_IG03: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field> - mov rsi, gword ptr [rdi]
+ jge SHORT G_M896_IG04 + mov rsi, 0xD1FFAB1E ; static handle + mov r14, gword ptr [rsi] + ; gcrRegs +[r14] + mov rsi, r14 + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; <unknown class> + call [CORINFO_HELP_CHKCASTARRAY] + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov r13, 0xD1FFAB1E ; static handle + ;; size=54 bbWeight=1 PerfScore 9.25 +G_M896_IG03: ; bbWeight=4, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rsi, r14
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M896_IG06 - ;; size=21 bbWeight=4 PerfScore 15.00 -G_M896_IG04: ; bbWeight=1, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M896_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M896_IG05: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call [CORINFO_HELP_CHKCASTARRAY] ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M896_IG06: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, r13
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rsi] inc ebx cmp ebx, r15d jl SHORT G_M896_IG03
- ;; size=25 bbWeight=4 PerfScore 12.00 -G_M896_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=37 bbWeight=4 PerfScore 26.00 +G_M896_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[r14]
add rsp, 80 pop rbx
+ pop r13 + pop r14
pop r15 pop rbp ret
- ;; size=9 bbWeight=1 PerfScore 2.75
+ ;; size=13 bbWeight=1 PerfScore 3.75
-; Total bytes of code 115, prolog size 27, PerfScore 46.50, instruction count 30, allocated bytes for code 115 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)
+; Total bytes of code 141, prolog size 37, PerfScore 48.75, instruction count 34, allocated bytes for code 141 (MethodHash=984afc7f) for method PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -78,16 +79,20 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x13 - CountOfUnwindCodes: 8
+ SizeOfProlog : 0x1D + CountOfUnwindCodes: 12
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x13 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: rbx (3)
+ CodeOffset: 0x1D UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: rbx (3)
Scaled Small Offset: 10 * 8 = 80 = 0x00050
- CodeOffset: 0x0E UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r15 (15)
+ CodeOffset: 0x18 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r13 (13)
Scaled Small Offset: 11 * 8 = 88 = 0x00058
- CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10
+ CodeOffset: 0x13 UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r14 (14) + Scaled Small Offset: 12 * 8 = 96 = 0x00060 + CodeOffset: 0x0E UnwindOp: UWOP_SAVE_NONVOL (4) OpInfo: r15 (15) + Scaled Small Offset: 13 * 8 = 104 = 0x00068 + CodeOffset: 0x09 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20
CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 CodeOffset: 0x00 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 8 * 8 + 8 = 72 = 0x48 CodeOffset: 0x00 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

coreclr_tests.run.linux.x64.checked.mch

-23 (-46.94%) : 201150.dasm - CastExpansionTests:CastToGenericSystem.__Canon:System.Object:this (Tier1)

@@ -2,56 +2,39 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <CastExpansionTests>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> rsi single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> rdx class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> rsi single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> rdx class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M64337_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rsi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rsi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M64337_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M64337_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rsi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M64337_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M64337_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
mov rsi, rdx ; gcrRegs +[rsi] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx rsi] +[rax]
- ;; size=8 bbWeight=0.12 PerfScore 0.16 -G_M64337_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M64337_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=16 bbWeight=1 PerfScore 5.50 +G_M64337_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 49, prolog size 14, PerfScore 8.41, instruction count 17, allocated bytes for code 49 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
+; Total bytes of code 26, prolog size 5, PerfScore 8.75, instruction count 9, allocated bytes for code 26 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
; ============================================================ Unwind Info: @@ -59,10 +42,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-13 (-37.14%) : 201155.dasm - CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)

@@ -2,48 +2,33 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <CastExpansionTests>
-; V01 arg1 [V01,T01] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V01 arg1 [V01,T00] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T02] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <<unknown class>>
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M3705_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - mov rbp, rsp - ;; size=4 bbWeight=1 PerfScore 1.25 -G_M3705_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + ;; size=1 bbWeight=1 PerfScore 1.00 +G_M3705_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M3705_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M3705_IG03: ; bbWeight=0.25, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M3705_IG05 - ;; size=15 bbWeight=0.25 PerfScore 1.06 -G_M3705_IG04: ; bbWeight=0.12, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M3705_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M3705_IG06: ; bbWeight=1, epilog, nogc, extend - pop rbp
+ ;; size=16 bbWeight=1 PerfScore 1.50 +G_M3705_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=2 bbWeight=1 PerfScore 1.50
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 35, prolog size 4, PerfScore 5.69, instruction count 12, allocated bytes for code 35 (MethodHash=192ff186) for method CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
+; Total bytes of code 22, prolog size 1, PerfScore 3.75, instruction count 6, allocated bytes for code 22 (MethodHash=192ff186) for method CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
; ============================================================ Unwind Info: @@ -56,4 +41,4 @@ Unwind Info: FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08
-28 (-36.36%) : 297234.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
@@ -2,69 +2,49 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x10], rdi - mov rbx, rdi - ;; size=15 bbWeight=1 PerfScore 4.75 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi + ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rdi+0x38] + mov rdi, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rdi, rax ; gcrRegs +[rdi] call [<unknown method>] ; gcrRegs -[rdi]
- mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 77, prolog size 12, PerfScore 19.19, instruction count 26, allocated bytes for code 77 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -72,11 +52,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

+44 (+3.99%) : 588190.dasm - ILCompiler.InstructionSetSupport:GetHardwareIntrinsicId(int,Internal.TypeSystem.TypeDesc):System.String (Tier1)

@@ -13,63 +13,59 @@ ; V01 arg1 [V01,T00] ( 6, 3.25) ref -> rbx class-hnd single-def <Internal.TypeSystem.TypeDesc> ; V02 loc0 [V02,T04] ( 53, 2.20) ref -> r14 class-hnd <Internal.TypeSystem.MetadataType> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T26] ( 3, 0 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <ILCompiler.InternalCompilerErrorException> -;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V06 tmp3 [V06,T20] ( 3, 0.07) long -> rdi "fgMakeTemp is creating a new local variable" -; V07 tmp4 [V07,T19] ( 5, 0.21) ref -> r14 class-hnd "spilling QMark2" <Internal.TypeSystem.MetadataType> -;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V09 tmp6 [V09,T23] ( 3, 0.01) long -> rdi "fgMakeTemp is creating a new local variable" -; V10 tmp7 [V10,T22] ( 5, 0.04) ref -> r14 class-hnd "spilling QMark2" <Internal.TypeSystem.MetadataType> -; V11 tmp8 [V11,T10] ( 7, 0.62) ref -> rax "guarded devirt return temp" -;* V12 tmp9 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> -; V13 tmp10 [V13,T24] ( 4, 0.01) ref -> rax "guarded devirt return temp" -;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> -; V15 tmp12 [V15,T13] ( 6, 0.56) ref -> rcx "guarded devirt return temp"
+; V04 tmp1 [V04,T24] ( 3, 0 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <ILCompiler.InternalCompilerErrorException> +; V05 tmp2 [V05,T10] ( 7, 0.62) ref -> rax "guarded devirt return temp" +;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> +; V07 tmp4 [V07,T22] ( 4, 0.01) ref -> rax "guarded devirt return temp" +;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> +; V09 tmp6 [V09,T13] ( 6, 0.56) ref -> rcx "guarded devirt return temp" +;* V10 tmp7 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> +; V11 tmp8 [V11,T20] ( 4, 0.06) ref -> rax "guarded devirt return temp" +;* V12 tmp9 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> +; V13 tmp10 [V13,T09] ( 7, 0.92) ref -> rcx "guarded devirt return temp" +;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> +; V15 tmp12 [V15,T18] ( 2, 0.36) ref -> rax single-def "guarded devirt return temp"
;* V16 tmp13 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType>
-; V17 tmp14 [V17,T21] ( 4, 0.06) ref -> rax "guarded devirt return temp" -;* V18 tmp15 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> -; V19 tmp16 [V19,T09] ( 7, 0.92) ref -> rax "guarded devirt return temp" -;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> -; V21 tmp18 [V21,T18] ( 2, 0.36) ref -> rax single-def "guarded devirt return temp" -;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> -; V23 tmp20 [V23,T05] ( 3, 2 ) int -> rax "Inline return value spill temp" -; V24 tmp21 [V24,T03] ( 3, 2.98) int -> rax single-def "Inline stloc first use temp" -;* V25 tmp22 [V25 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" -;* V26 tmp23 [V26,T11] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" -;* V27 tmp24 [V27 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" -;* V28 tmp25 [V28,T12] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" -;* V29 tmp26 [V29 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" -; V30 tmp27 [V30,T08] ( 2, 0.82) int -> rdi "spilling unroll qmark"
+; V17 tmp14 [V17,T05] ( 3, 2 ) int -> rax "Inline return value spill temp" +; V18 tmp15 [V18,T03] ( 3, 2.98) int -> rax single-def "Inline stloc first use temp" +;* V19 tmp16 [V19 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" +;* V20 tmp17 [V20,T11] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" +;* V21 tmp18 [V21 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" +;* V22 tmp19 [V22,T12] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" +;* V23 tmp20 [V23 ] ( 0, 0 ) ref -> zero-ref single-def "spilling varStr" +; V24 tmp21 [V24,T08] ( 2, 0.82) int -> rdi "spilling unroll qmark" +;* V25 tmp22 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> +;* V26 tmp23 [V26 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" +;* V27 tmp24 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> +;* V28 tmp25 [V28 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" +;* V29 tmp26 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> +;* V30 tmp27 [V30 ] ( 0, 0 ) ref -> zero-ref "spilling varStr"
;* V31 tmp28 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> ;* V32 tmp29 [V32 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" ;* V33 tmp30 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> ;* V34 tmp31 [V34 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" ;* V35 tmp32 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> ;* V36 tmp33 [V36 ] ( 0, 0 ) ref -> zero-ref "spilling varStr"
-;* V37 tmp34 [V37 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> -;* V38 tmp35 [V38 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" -;* V39 tmp36 [V39 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> -;* V40 tmp37 [V40 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" -;* V41 tmp38 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> -;* V42 tmp39 [V42 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" -; V43 tmp40 [V43,T02] ( 3, 3.91) ref -> rax "Single return block return value" -; V44 tmp41 [V44,T27] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V45 tmp42 [V45,T28] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V46 tmp43 [V46,T29] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V47 tmp44 [V47,T30] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V48 tmp45 [V48,T31] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V49 tmp46 [V49,T32] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V50 tmp47 [V50,T33] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V51 tmp48 [V51,T34] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V52 tmp49 [V52,T35] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V53 tmp50 [V53,T36] ( 2, 0 ) ref -> rdi single-def "argument with side effect" -; V54 cse0 [V54,T14] ( 3, 0.55) ref -> rcx "CSE - conservative" -; V55 cse1 [V55,T15] ( 3, 0.55) ref -> rax "CSE - conservative" -; V56 cse2 [V56,T16] ( 3, 0.54) ref -> rax "CSE - conservative" -; V57 cse3 [V57,T17] ( 3, 0.54) ref -> rax "CSE - conservative" -; V58 cse4 [V58,T07] ( 8, 1.24) long -> r15 multi-def "CSE - moderate" -; V59 rat0 [V59,T06] ( 5, 1.47) ref -> r14 class-hnd "replacement local" <Internal.TypeSystem.MetadataType> -; V60 rat1 [V60,T25] ( 3, 1.23) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V37 tmp34 [V37,T02] ( 3, 3.91) ref -> rax "Single return block return value" +; V38 tmp35 [V38,T25] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V39 tmp36 [V39,T26] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V40 tmp37 [V40,T27] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V41 tmp38 [V41,T28] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V42 tmp39 [V42,T29] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V43 tmp40 [V43,T30] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V44 tmp41 [V44,T31] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V45 tmp42 [V45,T32] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V46 tmp43 [V46,T33] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V47 tmp44 [V47,T34] ( 2, 0 ) ref -> rdi single-def "argument with side effect" +; V48 cse0 [V48,T14] ( 3, 0.55) ref -> rcx "CSE - conservative" +; V49 cse1 [V49,T15] ( 3, 0.55) ref -> rax "CSE - conservative" +; V50 cse2 [V50,T16] ( 3, 0.54) ref -> rax "CSE - conservative" +; V51 cse3 [V51,T17] ( 3, 0.54) ref -> rcx "CSE - conservative" +; V52 cse4 [V52,T07] ( 8, 1.24) long -> r15 multi-def "CSE - moderate" +; V53 rat0 [V53,T06] ( 5, 1.47) ref -> r14 class-hnd "replacement local" <Internal.TypeSystem.MetadataType> +; V54 rat1 [V54,T21] ( 5, 0.03) ref -> r14 class-hnd "replacement local" <Internal.TypeSystem.MetadataType> +; V55 rat2 [V55,T19] ( 5, 0.20) ref -> r14 class-hnd "replacement local" <Internal.TypeSystem.MetadataType> +; V56 rat3 [V56,T23] ( 3, 1.23) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 8 @@ -125,7 +121,7 @@ G_M4142_IG08: ; bbWeight=0.21, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, b test r14, r14 je SHORT G_M4142_IG04 cmp r15d, 3
- jne G_M4142_IG43
+ jne G_M4142_IG42
jmp SHORT G_M4142_IG10 ;; size=17 bbWeight=0.21 PerfScore 0.92 G_M4142_IG09: ; bbWeight=0.02, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz @@ -174,40 +170,40 @@ G_M4142_IG14: ; bbWeight=0.21, gcrefRegs=4001 {rax r14}, byrefRegs=0000 { je SHORT G_M4142_IG17 ;; size=5 bbWeight=0.21 PerfScore 0.26 G_M4142_IG15: ; bbWeight=0.10, gcrefRegs=4001 {rax r14}, byrefRegs=0000 {}, byref
- jmp G_M4142_IG32
+ jmp G_M4142_IG31
;; size=5 bbWeight=0.10 PerfScore 0.21 G_M4142_IG16: ; bbWeight=0.18, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] mov rax, gword ptr [r14+0x60] ; gcrRegs +[rax] test rax, rax
- je G_M4142_IG54
+ je G_M4142_IG53
jmp SHORT G_M4142_IG14 ;; size=15 bbWeight=0.18 PerfScore 0.94 G_M4142_IG17: ; bbWeight=0.21, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref ; gcrRegs -[rax] cmp qword ptr [r14], r15
- jne G_M4142_IG35
+ jne G_M4142_IG34
;; size=9 bbWeight=0.21 PerfScore 0.82 G_M4142_IG18: ; bbWeight=0.18, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref mov rcx, gword ptr [r14+0x60] ; gcrRegs +[rcx] test rcx, rcx
- je G_M4142_IG55
+ je G_M4142_IG54
;; size=13 bbWeight=0.18 PerfScore 0.60 G_M4142_IG19: ; bbWeight=0.21, gcrefRegs=4002 {rcx r14}, byrefRegs=0000 {}, byref, isz test rcx, rcx
- je SHORT G_M4142_IG26
+ je SHORT G_M4142_IG25
;; size=5 bbWeight=0.21 PerfScore 0.26 G_M4142_IG20: ; bbWeight=0.10, gcrefRegs=4002 {rcx r14}, byrefRegs=0000 {}, byref, isz cmp dword ptr [rcx+0x08], 2
- jne SHORT G_M4142_IG26
+ jne SHORT G_M4142_IG25
;; size=6 bbWeight=0.10 PerfScore 0.41 G_M4142_IG21: ; bbWeight=0.05, gcrefRegs=4002 {rcx r14}, byrefRegs=0000 {}, byref, isz cmp dword ptr [rcx+0x0C], 0xD1FFAB1E
- jne SHORT G_M4142_IG26
+ jne SHORT G_M4142_IG25
cmp qword ptr [r14], r15
- jne G_M4142_IG41
+ jne G_M4142_IG39
;; size=18 bbWeight=0.05 PerfScore 0.41 G_M4142_IG22: ; bbWeight=0.03, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref ; gcrRegs -[rcx] @@ -221,46 +217,36 @@ G_M4142_IG23: ; bbWeight=0.03, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, b mov r14, rax ; gcrRegs +[r14] test r14, r14
- je SHORT G_M4142_IG26
+ je SHORT G_M4142_IG25
;; size=8 bbWeight=0.03 PerfScore 0.04
-G_M4142_IG24: ; bbWeight=0.01, gcrefRegs=4001 {rax r14}, byrefRegs=0000 {}, byref, isz - mov rdi, 0xD1FFAB1E ; Internal.TypeSystem.MetadataType
+G_M4142_IG24: ; bbWeight=0.01, gcrefRegs=4001 {rax r14}, byrefRegs=0000 {}, byref + mov rdi, 0xD1FFAB1E ; Internal.TypeSystem.Ecma.EcmaType
cmp qword ptr [r14], rdi
- je SHORT G_M4142_IG26 - ;; size=15 bbWeight=0.01 PerfScore 0.06 -G_M4142_IG25: ; bbWeight=0.01, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r14] - mov rsi, rax - ; gcrRegs +[rsi] - call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[rsi] - ; gcr arg pop 0 - mov r14, rax - ; gcrRegs +[r14] - ;; size=11 bbWeight=0.01 PerfScore 0.01 -G_M4142_IG26: ; bbWeight=0.21, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref
+ jne G_M4142_IG40 + ;; size=19 bbWeight=0.01 PerfScore 0.06 +G_M4142_IG25: ; bbWeight=0.21, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref
; gcrRegs -[rax] cmp qword ptr [r14], r15
- jne G_M4142_IG34
+ jne G_M4142_IG33
;; size=9 bbWeight=0.21 PerfScore 0.82
-G_M4142_IG27: ; bbWeight=0.18, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref - mov rax, gword ptr [r14+0x68] - ; gcrRegs +[rax] - test rax, rax - je G_M4142_IG42
+G_M4142_IG26: ; bbWeight=0.18, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref + mov rcx, gword ptr [r14+0x68] + ; gcrRegs +[rcx] + test rcx, rcx + je G_M4142_IG41
;; size=13 bbWeight=0.18 PerfScore 0.58
-G_M4142_IG28: ; bbWeight=0.21, gcrefRegs=4001 {rax r14}, byrefRegs=0000 {}, byref - test rax, rax
+G_M4142_IG27: ; bbWeight=0.21, gcrefRegs=4002 {rcx r14}, byrefRegs=0000 {}, byref + test rcx, rcx
je G_M4142_IG04 ;; size=9 bbWeight=0.21 PerfScore 0.26
-G_M4142_IG29: ; bbWeight=0.10, gcrefRegs=4001 {rax r14}, byrefRegs=0000 {}, byref - cmp dword ptr [rax+0x08], 29
+G_M4142_IG28: ; bbWeight=0.10, gcrefRegs=4002 {rcx r14}, byrefRegs=0000 {}, byref + cmp dword ptr [rcx+0x08], 29
jne G_M4142_IG04 ;; size=10 bbWeight=0.10 PerfScore 0.41
-G_M4142_IG30: ; bbWeight=0.21, gcrefRegs=4001 {rax r14}, byrefRegs=0000 {}, byref - vmovups ymm0, ymmword ptr [rax+0x0C]
+G_M4142_IG29: ; bbWeight=0.21, gcrefRegs=4002 {rcx r14}, byrefRegs=0000 {}, byref + vmovups ymm0, ymmword ptr [rcx+0x0C]
vpxor ymm0, ymm0, ymmword ptr [reloc @RWD00]
- vmovups ymm1, ymmword ptr [rax+0x26]
+ vmovups ymm1, ymmword ptr [rcx+0x26]
vpternlogq ymm0, ymm1, ymmword ptr [reloc @RWD32], -10 vptest ymm0, ymm0 sete dil @@ -268,22 +254,22 @@ G_M4142_IG30: ; bbWeight=0.21, gcrefRegs=4001 {rax r14}, byrefRegs=0000 { test edi, edi je G_M4142_IG04 ;; size=50 bbWeight=0.21 PerfScore 4.41
-G_M4142_IG31: ; bbWeight=0.18, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
+G_M4142_IG30: ; bbWeight=0.18, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref + ; gcrRegs -[rcx]
mov r15, 0xD1FFAB1E ; Internal.TypeSystem.Ecma.EcmaType cmp qword ptr [r14], r15
- jne G_M4142_IG52
+ jne G_M4142_IG51
mov rax, gword ptr [r14+0x60] ; gcrRegs +[rax] test rax, rax
- je G_M4142_IG50
...

+19 (+4.80%) : 463130.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b_100(System.Object):this (Tier1)

@@ -8,25 +8,25 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.ThreadPoolTaskScheduler+<>c>
-; V01 arg1 [V01,T02] ( 6, 4.12) ref -> rbx class-hnd single-def <System.Object>
+; V01 arg1 [V01,T03] ( 6, 4 ) ref -> rbx class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T12] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 13, 17.75) ref -> r15 class-hnd "spilling QMark2" <System.Threading.Tasks.Task> -;* V05 tmp3 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V07 tmp5 [V07,T06] ( 4, 2.50) ubyte -> r14 "Inline return value spill temp" -; V08 tmp6 [V08,T03] ( 4, 3 ) ref -> rdi class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V09 tmp7 [V09,T13] ( 3, 1 ) ubyte -> r14 "Inline return value spill temp" -; V10 tmp8 [V10,T08] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" -;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> -; V12 tmp10 [V12,T14] ( 2, 1 ) int -> rax "Inline stloc first use temp" -; V13 tmp11 [V13,T09] ( 2, 2 ) byref -> rsi single-def "argument with side effect" -; V14 cse0 [V14,T10] ( 3, 1.50) ref -> rsi "CSE - moderate" -; V15 cse1 [V15,T11] ( 3, 1.50) ref -> rdi "CSE - moderate" -; V16 rat0 [V16,T07] ( 3, 2 ) byref -> rsi "TLS field access" -; V17 rat1 [V17,T04] ( 3, 3 ) long -> rax "TLS access" -; V18 rat2 [V18,T05] ( 3, 3 ) long -> rsi "ThreadStaticBlockBase access" -; V19 rat3 [V19,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <System.Threading.Tasks.Task>
+;* V03 tmp1 [V03 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V04 tmp2 [V04,T00] ( 10, 15 ) ref -> r15 class-hnd single-def "Inlining Arg" <System.Threading.Tasks.Task> +;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V06 tmp4 [V06,T07] ( 4, 2.50) ubyte -> r14 "Inline return value spill temp" +; V07 tmp5 [V07,T04] ( 4, 3 ) ref -> rdi class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V08 tmp6 [V08,T13] ( 3, 1 ) ubyte -> r14 "Inline return value spill temp" +; V09 tmp7 [V09,T09] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> +; V11 tmp9 [V11,T14] ( 2, 1 ) int -> rax "Inline stloc first use temp" +; V12 tmp10 [V12,T10] ( 2, 2 ) byref -> rsi single-def "argument with side effect" +; V13 cse0 [V13,T11] ( 3, 1.50) ref -> rsi "CSE - moderate" +; V14 cse1 [V14,T12] ( 3, 1.50) ref -> rdi "CSE - moderate" +; V15 rat0 [V15,T08] ( 3, 2 ) byref -> rsi "TLS field access" +; V16 rat1 [V16,T05] ( 3, 3 ) long -> rax "TLS access" +; V17 rat2 [V17,T06] ( 3, 3 ) long -> rsi "ThreadStaticBlockBase access" +; V18 rat3 [V18,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <System.Threading.Tasks.Task> +; V19 rat4 [V19,T02] ( 5, 7 ) ref -> r15 class-hnd "replacement local" <System.Threading.Tasks.Task>
; ; Lcl frame size = 8 @@ -49,7 +49,7 @@ G_M60851_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr G_M60851_IG03: ; bbWeight=0.50, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task cmp qword ptr [rax], rdi
- jne G_M60851_IG21
+ jne G_M60851_IG20
;; size=19 bbWeight=0.50 PerfScore 2.12 G_M60851_IG04: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref, isz test rax, rax @@ -69,34 +69,24 @@ G_M60851_IG06: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr mov r15, rbx ; gcrRegs +[r15] test r15, r15
- je SHORT G_M60851_IG09
+ je SHORT G_M60851_IG08
;; size=8 bbWeight=1 PerfScore 1.50
-G_M60851_IG07: ; bbWeight=0.25, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG07: ; bbWeight=0.50, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref
mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task cmp qword ptr [r15], rdi
- je SHORT G_M60851_IG09 - ;; size=15 bbWeight=0.25 PerfScore 1.06 -G_M60851_IG08: ; bbWeight=0.12, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[r15] - mov rsi, rbx - ; gcrRegs +[rsi] - call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[rbx rsi] +[rax] - ; gcr arg pop 0 - mov r15, rax - ; gcrRegs +[r15] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M60851_IG09: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax]
+ jne G_M60851_IG21 + ;; size=19 bbWeight=0.50 PerfScore 2.12 +G_M60851_IG08: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rbx]
or dword ptr [r15+0x34], 0x20000 mov rdi, gword ptr [r15+0x28] ; gcrRegs +[rdi] test rdi, rdi
- je SHORT G_M60851_IG13 - ;; size=17 bbWeight=1 PerfScore 6.25 -G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=8080 {rdi r15}, byrefRegs=0000 {}, byref, isz - cmp dword ptr [rdi+0x38], 1
je SHORT G_M60851_IG12
+ ;; size=17 bbWeight=1 PerfScore 6.25 +G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=8080 {rdi r15}, byrefRegs=0000 {}, byref, isz + cmp dword ptr [rdi+0x38], 1 + je SHORT G_M60851_IG11
add rdi, 64 ; gcrRegs -[rdi] ; byrRegs +[rdi] @@ -109,18 +99,18 @@ G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=8080 {rdi r15}, byrefRegs=0000 cmp dword ptr [rdi+0x20], 0 setne r14b ;; size=33 bbWeight=0.50 PerfScore 5.88
-G_M60851_IG11: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rdi]
- jmp SHORT G_M60851_IG14
+ jmp SHORT G_M60851_IG13
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG11: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
mov r14d, 1
- jmp SHORT G_M60851_IG14
+ jmp SHORT G_M60851_IG13
;; size=8 bbWeight=0.50 PerfScore 1.12
-G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref
+G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref
xor r14d, r14d ;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M60851_IG14: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG13: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
xor edi, edi test r14d, r14d sete dil @@ -130,9 +120,9 @@ G_M60851_IG14: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byr setne al movzx rax, al test edi, eax
- je SHORT G_M60851_IG18
+ je SHORT G_M60851_IG17
;; size=33 bbWeight=1 PerfScore 6.50
-G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref
+G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref
mov rdi, 0xD1FFAB1E mov rax, 0xD1FFAB1E ; function address call rax @@ -147,14 +137,14 @@ G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, ; byrRegs +[rsi] add rsi, 16 ;; size=56 bbWeight=0.50 PerfScore 7.50
-G_M60851_IG16: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0040 {rsi}, byref
+G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0040 {rsi}, byref
add rsi, 80 mov rdi, r15 ; gcrRegs +[rdi] xor rdx, rdx ; gcrRegs +[rdx] ;; size=9 bbWeight=0.50 PerfScore 0.38
-G_M60851_IG17: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG16: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 8 pop rbx pop r14 @@ -163,25 +153,25 @@ G_M60851_IG17: ; bbWeight=0.50, epilog, nogc, extend tail.jmp [<unknown method>] ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.12
-G_M60851_IG18: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M60851_IG17: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rdx rdi] ; byrRegs -[rsi] mov edi, dword ptr [r15+0x34] and edi, 0xD1FFAB1E cmp edi, 0xD1FFAB1E
- je SHORT G_M60851_IG20
+ je SHORT G_M60851_IG19
lea rdi, bword ptr [r15+0x34] ; byrRegs +[rdi] mov eax, dword ptr [r15+0x34] or eax, 0xD1FFAB1E xchg dword ptr [rdi], eax test eax, 0xD1FFAB1E
- jne SHORT G_M60851_IG20
+ jne SHORT G_M60851_IG19
mov rdi, r15 ; gcrRegs +[rdi] ; byrRegs -[rdi] ;; size=43 bbWeight=0.50 PerfScore 13.88
-G_M60851_IG19: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG18: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 8 pop rbx pop r14 @@ -190,7 +180,7 @@ G_M60851_IG19: ; bbWeight=0.50, epilog, nogc, extend tail.jmp [<unknown method>] ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.12
-G_M60851_IG20: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M60851_IG19: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rdi r15] add rsp, 8 pop rbx @@ -199,7 +189,7 @@ G_M60851_IG20: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr pop rbp ret ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M60851_IG21: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref
+G_M60851_IG20: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[rbx] mov rsi, rbx ; gcrRegs +[rsi] @@ -209,10 +199,22 @@ G_M60851_IG21: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 { ; gcr arg pop 0 jmp G_M60851_IG04 ;; size=23 bbWeight=0 PerfScore 0.00
+G_M60851_IG21: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax] + mov rsi, rbx + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task + call CORINFO_HELP_CHKCASTCLASS_SPECIAL + ; gcrRegs -[rbx rsi] +[rax] + ; gcr arg pop 0 + mov r15, rax + ; gcrRegs +[r15] + jmp G_M60851_IG08 + ;; size=26 bbWeight=0 PerfScore 0.00
G_M60851_IG22: ; bbWeight=0, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref
- ; gcrRegs -[rax rbx] +[r15]
+ ; gcrRegs -[rax]
xor r14d, r14d
- jmp G_M60851_IG11
+ jmp G_M60851_IG10
;; size=8 bbWeight=0 PerfScore 0.00 G_M60851_IG23: ; bbWeight=0, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref mov edi, 4 @@ -221,10 +223,10 @@ G_M60851_IG23: ; bbWeight=0, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byr ; gcr arg pop 0 mov rsi, rax ; byrRegs +[rsi]
- jmp G_M60851_IG16
+ jmp G_M60851_IG15
;; size=18 bbWeight=0 PerfScore 0.00
-; Total bytes of code 396, prolog size 15, PerfScore 63.62, instruction count 107, allocated bytes for code 396 (MethodHash=8aa4124c) for method System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
+; Total bytes of code 415, prolog size 15, PerfScore 64.50, instruction count 109, allocated bytes for code 415 (MethodHash=8aa4124c) for method System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
; ============================================================ Unwind Info:

+44 (+400.00%) : 175567.dasm - T:TestEntryPoint():int (FullOpts)

@@ -2,7 +2,7 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rsp based frame
+; rbp based frame
; partially interruptible ; No matching PGO data ; 0 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data @@ -11,24 +11,52 @@ ;* V00 loc0 [V00 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <<unknown class>>
-;* V03 tmp2 [V03,T00] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V04 tmp3 [V04,T02] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05,T01] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <<unknown class>>
+;* V03 tmp2 [V03,T01] ( 0, 0 ) ref -> zero-ref single-def "arr expr" +; V04 rat0 [V04,T00] ( 5, 7.50) ref -> rax class-hnd "replacement local" <<unknown class>>
;
-; Lcl frame size = 8
+; Lcl frame size = 0
-G_M32114_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG - push rax - ;; size=1 bbWeight=1 PerfScore 1.00 -G_M32114_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - mov eax, 100 - ;; size=5 bbWeight=1 PerfScore 0.25 -G_M32114_IG03: ; bbWeight=1, epilog, nogc, extend - add rsp, 8 - ret
+G_M32114_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG + push rbp + mov rbp, rsp + ;; size=4 bbWeight=1 PerfScore 1.25 +G_M32114_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + mov rax, 0xD1FFAB1E + ; gcrRegs +[rax] + test rax, rax + je SHORT G_M32114_IG05 + ;; size=15 bbWeight=1 PerfScore 1.50 +G_M32114_IG03: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz + mov rcx, 0xD1FFAB1E ; <unknown class> + cmp qword ptr [rax], rcx + je SHORT G_M32114_IG05 + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M32114_IG04: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax] + xor rax, rax + ; gcrRegs +[rax] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M32114_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz + test rax, rax + je SHORT G_M32114_IG08
;; size=5 bbWeight=1 PerfScore 1.25
+G_M32114_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax] + mov eax, 100 + ;; size=5 bbWeight=0.50 PerfScore 0.12 +G_M32114_IG07: ; bbWeight=0.50, epilog, nogc, extend + pop rbp + ret + ;; size=2 bbWeight=0.50 PerfScore 0.75 +G_M32114_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + mov eax, -1 + ;; size=5 bbWeight=0.50 PerfScore 0.12 +G_M32114_IG09: ; bbWeight=0.50, epilog, nogc, extend + pop rbp + ret + ;; size=2 bbWeight=0.50 PerfScore 0.75
-; Total bytes of code 11, prolog size 1, PerfScore 2.50, instruction count 4, allocated bytes for code 11 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
+; Total bytes of code 55, prolog size 4, PerfScore 7.94, instruction count 17, allocated bytes for code 55 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
; ============================================================ Unwind Info: @@ -41,4 +69,4 @@ Unwind Info: FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08
+ CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
libraries.pmi.linux.x64.checked.mch
-23 (-50.00%) : 213709.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
@@ -2,54 +2,37 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rdi single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rdi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rdi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 46, prolog size 14, PerfScore 8.38, instruction count 16, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 23, prolog size 5, PerfScore 8.50, instruction count 8, allocated bytes for code 23 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -57,10 +40,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-23 (-50.00%) : 31494.dasm - Microsoft.FSharp.Core.Operators+Unchecked:UnboxSystem.__Canon:System.__Canon (FullOpts)

@@ -2,53 +2,36 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rdi single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M7606_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rdi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M7606_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rdi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M7606_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M7606_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M7606_IG03: ; bbWeight=0.25, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M7606_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M7606_IG04: ; bbWeight=0.12, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M7606_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M7606_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M7606_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 46, prolog size 14, PerfScore 8.38, instruction count 16, allocated bytes for code 46 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 23, prolog size 5, PerfScore 8.50, instruction count 8, allocated bytes for code 23 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -56,10 +39,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-25 (-42.37%) : 38534.dasm - System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)

@@ -2,46 +2,29 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) ref -> rbx this class-hnd single-def <System.Data.Common.SqlUdtStorage> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> rbx this class-hnd single-def <System.Data.Common.SqlUdtStorage> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;* V02 arg2 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Collections.BitArray> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <<unknown class>>
;
-; Lcl frame size = 8
+; Lcl frame size = 0
G_M5622_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10]
mov rbx, rdi ; gcrRegs +[rbx]
- ;; size=11 bbWeight=1 PerfScore 3.75 -G_M5622_IG02: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz
+ ;; size=4 bbWeight=1 PerfScore 1.25 +G_M5622_IG02: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M5622_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M5622_IG03: ; bbWeight=0.25, gcrefRegs=0049 {rax rbx rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rdi - je SHORT G_M5622_IG05 - ;; size=15 bbWeight=0.25 PerfScore 1.06 -G_M5622_IG04: ; bbWeight=0.12, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M5622_IG05: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
lea rdi, bword ptr [rbx+0x40] ; byrRegs +[rdi] mov rsi, rax @@ -50,15 +33,13 @@ G_M5622_IG05: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, ; gcrRegs -[rax rbx rsi] ; byrRegs -[rdi] nop
- ;; size=13 bbWeight=1 PerfScore 2.00 -G_M5622_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ;; size=28 bbWeight=1 PerfScore 3.25 +G_M5622_IG03: ; bbWeight=1, epilog, nogc, extend
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 59, prolog size 8, PerfScore 10.69, instruction count 20, allocated bytes for code 59 (MethodHash=f8c9ea09) for method System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
+; Total bytes of code 34, prolog size 1, PerfScore 6.00, instruction count 10, allocated bytes for code 34 (MethodHash=f8c9ea09) for method System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
; ============================================================ Unwind Info: @@ -66,11 +47,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

+4 (+3.42%) : 194520.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)

@@ -7,16 +7,16 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 5, 4.25) ref -> rbx this class-hnd single-def <Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]> -; V01 arg1 [V01,T04] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]> +; V01 arg1 [V01,T03] ( 3, 3 ) ref -> r15 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T06] ( 2, 4 ) ref -> r15 class-hnd single-def "bubbling QMark2" <<unknown class>> -; V04 tmp2 [V04,T07] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> r14 class-hnd "spilling QMark2" <System.__Canon> -;* V06 tmp4 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V07 tmp5 [V07,T02] ( 4, 6 ) long -> r11 "VirtualCall with runtime lookup" -; V08 rat0 [V08,T05] ( 3, 4.40) long -> rdi "Spilling to split statement for tree" -; V09 rat1 [V09,T03] ( 3, 5.60) long -> r11 "fgMakeTemp is creating a new local variable"
+;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V04 tmp2 [V04,T01] ( 4, 6 ) long -> r13 "VirtualCall with runtime lookup" +; V05 tmp3 [V05,T05] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V06 tmp4 [V06,T06] ( 2, 4 ) ref -> r12 single-def "argument with side effect" +; V07 cse0 [V07,T07] ( 3, 3 ) long -> r14 "CSE - aggressive" +; V08 rat0 [V08,T04] ( 3, 4.40) long -> rdi "Spilling to split statement for tree" +; V09 rat1 [V09,T02] ( 3, 5.60) long -> r13 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 8 @@ -24,73 +24,67 @@ G_M9298_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbp push r15 push r14
+ push r13 + push r12
push rbx push rax
- lea rbp, [rsp+0x20] - mov qword ptr [rbp-0x20], rdi
+ lea rbp, [rsp+0x30] + mov qword ptr [rbp-0x30], rdi
mov rbx, rdi ; gcrRegs +[rbx]
- ;; size=19 bbWeight=1 PerfScore 6.75 -G_M9298_IG02: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[rsi] - mov r15, gword ptr [rbx+0x08]
+ mov r15, rsi
; gcrRegs +[r15]
- mov r14, rsi - ; gcrRegs +[r14] - test r14, r14 - je SHORT G_M9298_IG05 - ;; size=12 bbWeight=1 PerfScore 3.50 -G_M9298_IG03: ; bbWeight=0.25, gcrefRegs=C048 {rbx rsi r14 r15}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx] - mov rdi, qword ptr [rdi+0x38] - mov rdi, qword ptr [rdi] - mov rdi, qword ptr [rdi] - cmp qword ptr [r14], rdi - je SHORT G_M9298_IG05 - ;; size=18 bbWeight=0.25 PerfScore 3.00 -G_M9298_IG04: ; bbWeight=0.12, gcrefRegs=8048 {rbx rsi r15}, byrefRegs=0000 {}, byref - ; gcrRegs -[r14] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[rsi] +[rax] - ; gcr arg pop 0 - mov r14, rax - ; gcrRegs +[r14] - ;; size=8 bbWeight=0.12 PerfScore 0.16 -G_M9298_IG05: ; bbWeight=1, gcrefRegs=C008 {rbx r14 r15}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax] - mov rdi, qword ptr [rbx]
+ ;; size=26 bbWeight=1 PerfScore 9.00 +G_M9298_IG02: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz + mov r14, qword ptr [rbx] + mov rdi, r14
mov rsi, qword ptr [rdi+0x38] mov rsi, qword ptr [rsi]
- mov r11, qword ptr [rsi+0x10] - test r11, r11 - je SHORT G_M9298_IG07 - ;; size=19 bbWeight=1 PerfScore 9.25 -G_M9298_IG06: ; bbWeight=0.80, gcrefRegs=C008 {rbx r14 r15}, byrefRegs=0000 {}, byref, isz - jmp SHORT G_M9298_IG08
+ mov r13, qword ptr [rsi+0x10] + test r13, r13 + je SHORT G_M9298_IG04 + ;; size=22 bbWeight=1 PerfScore 9.50 +G_M9298_IG03: ; bbWeight=0.80, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M9298_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
-G_M9298_IG07: ; bbWeight=0.20, gcrefRegs=C008 {rbx r14 r15}, byrefRegs=0000 {}, byref
+G_M9298_IG04: ; bbWeight=0.20, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref
mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0
- mov r11, rax
+ mov r13, rax
;; size=18 bbWeight=0.20 PerfScore 0.30
-G_M9298_IG08: ; bbWeight=1, gcrefRegs=C008 {rbx r14 r15}, byrefRegs=0000 {}, byref - mov rdi, r15 - ; gcrRegs +[rdi] - mov rsi, r14
+G_M9298_IG05: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref + mov r12, gword ptr [rbx+0x08] + ; gcrRegs +[r12] + mov rdi, qword ptr [r14+0x38] + mov rdi, qword ptr [rdi] + mov rdi, qword ptr [rdi] + mov rsi, r15
; gcrRegs +[rsi]
+ call CORINFO_HELP_CHKCASTANY + ; gcrRegs -[rsi r15] +[rax] + ; gcr arg pop 0 + mov rsi, rax + ; gcrRegs +[rsi] + mov rdi, r12 + ; gcrRegs +[rdi] + mov r11, r13
cmp dword ptr [rdi], edi
- ;; size=8 bbWeight=1 PerfScore 3.50 -G_M9298_IG09: ; bbWeight=1, epilog, nogc, extend
+ mov rax, r13 + ; gcrRegs -[rax] + ;; size=36 bbWeight=1 PerfScore 13.25 +G_M9298_IG06: ; bbWeight=1, epilog, nogc, extend
add rsp, 8 pop rbx
+ pop r12 + pop r13
pop r14 pop r15 pop rbp
- tail.jmp [r11] - ;; size=13 bbWeight=1 PerfScore 4.25
+ tail.jmp [rax] + ;; size=17 bbWeight=1 PerfScore 5.25
-; Total bytes of code 117, prolog size 19, PerfScore 32.31, instruction count 39, allocated bytes for code 117 (MethodHash=f49fdbad) for method Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
+; Total bytes of code 121, prolog size 26, PerfScore 38.90, instruction count 41, allocated bytes for code 121 (MethodHash=f49fdbad) for method Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
; ============================================================ Unwind Info: @@ -98,13 +92,15 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x07 - CountOfUnwindCodes: 5
+ SizeOfProlog : 0x0B + CountOfUnwindCodes: 7
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x07 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x06 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
+ CodeOffset: 0x0B UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 + CodeOffset: 0x0A UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x09 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r12 (12) + CodeOffset: 0x07 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r13 (13)
CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14) CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

+4 (+3.64%) : 199749.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary2[System.__Canon,System.Nullable1[int]]:Contains(System.Object):ubyte:this (FullOpts)

@@ -7,84 +7,78 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 5, 4.25) ref -> rbx this class-hnd single-def <Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]> -; V01 arg1 [V01,T04] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]> +; V01 arg1 [V01,T03] ( 3, 3 ) ref -> r15 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T06] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> r15 class-hnd "spilling QMark2" <System.__Canon> -;* V05 tmp3 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V06 tmp4 [V06,T02] ( 4, 6 ) long -> r11 "VirtualCall with runtime lookup" -; V07 rat0 [V07,T05] ( 3, 4.40) long -> rdi "Spilling to split statement for tree" -; V08 rat1 [V08,T03] ( 3, 5.60) long -> r11 "fgMakeTemp is creating a new local variable"
+;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V04 tmp2 [V04,T01] ( 4, 6 ) long -> r13 "VirtualCall with runtime lookup" +; V05 tmp3 [V05,T05] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V06 cse0 [V06,T06] ( 3, 3 ) long -> r14 "CSE - aggressive" +; V07 rat0 [V07,T04] ( 3, 4.40) long -> rdi "Spilling to split statement for tree" +; V08 rat1 [V08,T02] ( 3, 5.60) long -> r13 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 G_M43207_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp push r15
+ push r14 + push r13
push rbx sub rsp, 16
- lea rbp, [rsp+0x20] - mov qword ptr [rbp-0x18], rdi
+ lea rbp, [rsp+0x30] + mov qword ptr [rbp-0x28], rdi
mov rbx, rdi ; gcrRegs +[rbx]
- ;; size=20 bbWeight=1 PerfScore 5.00 -G_M43207_IG02: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[rsi]
mov r15, rsi ; gcrRegs +[r15]
- test r15, r15 - je SHORT G_M43207_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M43207_IG03: ; bbWeight=0.25, gcrefRegs=8048 {rbx rsi r15}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx] - mov rdi, qword ptr [rdi+0x38] - mov rdi, qword ptr [rdi] - mov rdi, qword ptr [rdi] - cmp qword ptr [r15], rdi - je SHORT G_M43207_IG05 - ;; size=18 bbWeight=0.25 PerfScore 3.00 -G_M43207_IG04: ; bbWeight=0.12, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[r15] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[rsi] +[rax] - ; gcr arg pop 0 - mov r15, rax - ; gcrRegs +[r15] - ;; size=8 bbWeight=0.12 PerfScore 0.16 -G_M43207_IG05: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax] - mov rdi, qword ptr [rbx]
+ ;; size=27 bbWeight=1 PerfScore 7.25 +G_M43207_IG02: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz + mov r14, qword ptr [rbx] + mov rdi, r14
mov rsi, qword ptr [rdi+0x38] mov rsi, qword ptr [rsi]
- mov r11, qword ptr [rsi+0x60] - test r11, r11 - je SHORT G_M43207_IG07 - ;; size=19 bbWeight=1 PerfScore 9.25 -G_M43207_IG06: ; bbWeight=0.80, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz - jmp SHORT G_M43207_IG08
+ mov r13, qword ptr [rsi+0x60] + test r13, r13 + je SHORT G_M43207_IG04 + ;; size=22 bbWeight=1 PerfScore 9.50 +G_M43207_IG03: ; bbWeight=0.80, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M43207_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
-G_M43207_IG07: ; bbWeight=0.20, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref
+G_M43207_IG04: ; bbWeight=0.20, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref
mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0
- mov r11, rax
+ mov r13, rax
;; size=18 bbWeight=0.20 PerfScore 0.30
-G_M43207_IG08: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref - mov rdi, rbx - ; gcrRegs +[rdi]
+G_M43207_IG05: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref + mov rdi, qword ptr [r14+0x38] + mov rdi, qword ptr [rdi] + mov rdi, qword ptr [rdi]
mov rsi, r15 ; gcrRegs +[rsi]
- ;; size=6 bbWeight=1 PerfScore 0.50 -G_M43207_IG09: ; bbWeight=1, epilog, nogc, extend
+ call CORINFO_HELP_CHKCASTANY + ; gcrRegs -[rsi r15] +[rax] + ; gcr arg pop 0 + mov rsi, rax + ; gcrRegs +[rsi] + mov r11, r13 + mov rdi, rbx + ; gcrRegs +[rdi] + mov rax, r13 + ; gcrRegs -[rax] + ;; size=30 bbWeight=1 PerfScore 8.25 +G_M43207_IG06: ; bbWeight=1, epilog, nogc, extend
add rsp, 16 pop rbx
+ pop r13 + pop r14
pop r15 pop rbp
- tail.jmp [r11] - ;; size=11 bbWeight=1 PerfScore 3.75
+ tail.jmp [rax] + ;; size=15 bbWeight=1 PerfScore 4.75
-; Total bytes of code 110, prolog size 20, PerfScore 25.06, instruction count 35, allocated bytes for code 110 (MethodHash=32ef5738) for method Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 114, prolog size 27, PerfScore 31.65, instruction count 37, allocated bytes for code 114 (MethodHash=32ef5738) for method Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -92,12 +86,14 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x08 - CountOfUnwindCodes: 4
+ SizeOfProlog : 0x0C + CountOfUnwindCodes: 6
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x08 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
+ CodeOffset: 0x0C UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x08 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) + CodeOffset: 0x07 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r13 (13) + CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r14 (14)
CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: r15 (15) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

+5 (+5.43%) : 153320.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,18 +10,17 @@ ; ; V00 this [V00,T02] ( 3, 2.50) ref -> rdi this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> rsi class-hnd single-def <System.Object>
-; V02 loc0 [V02,T06] ( 2, 1 ) ref -> rsi class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T04] ( 3, 1.50) ref -> rsi class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 6, 4.77) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T03] ( 5, 4.23) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T05] ( 4, 1 ) ubyte -> rax "Inline return value spill temp" -; V08 tmp5 [V08,T04] ( 2, 1.07) byref -> rdi single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 6, 4.77) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T03] ( 5, 4.23) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T06] ( 4, 1 ) ubyte -> rax "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 1.07) byref -> rdi single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; ; Lcl frame size = 0 @@ -49,12 +48,14 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=2 bbWeight=0.50 PerfScore 0.75 G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=00C0 {rsi rdi}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[rsi rdi]
+ test rsi, rsi + je SHORT G_M57556_IG04
mov rdx, gword ptr [rdi+0x08] ; gcrRegs +[rdx] mov rsi, gword ptr [rsi+0x08] cmp rdx, rsi je SHORT G_M57556_IG14
- ;; size=13 bbWeight=0.50 PerfScore 2.62
+ ;; size=18 bbWeight=0.50 PerfScore 3.25
G_M57556_IG07: ; bbWeight=0.43, gcrefRegs=0044 {rdx rsi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rdi] test rdx, rdx @@ -99,7 +100,7 @@ G_M57556_IG14: ; bbWeight=0.07, gcVars=0000000000000000 {}, gcrefRegs=000 jmp SHORT G_M57556_IG12 ;; size=7 bbWeight=0.07 PerfScore 0.17
-; Total bytes of code 92, prolog size 4, PerfScore 14.74, instruction count 33, allocated bytes for code 92 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 97, prolog size 4, PerfScore 15.37, instruction count 35, allocated bytes for code 97 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info:

libraries_tests.run.linux.x64.Release.mch

-23 (-50.00%) : 648402.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -3,54 +3,37 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; rbp based frame
+; rsp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 24080 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) long -> rdi single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> rsi class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rdi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rdi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.50 PerfScore 4.00 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.25 PerfScore 0.25 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 46, prolog size 14, PerfScore 10.50, instruction count 16, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 23, prolog size 5, PerfScore 8.50, instruction count 8, allocated bytes for code 23 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -58,10 +41,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-23 (-50.00%) : 623684.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -3,54 +3,37 @@ ; Tier1 code ; optimized code ; optimized using Dynamic PGO
-; rbp based frame
+; rsp based frame
; partially interruptible ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 449 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) long -> rdi single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> rsi class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rdi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rdi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.50 PerfScore 4.00 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.25 PerfScore 0.25 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 46, prolog size 14, PerfScore 10.50, instruction count 16, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 23, prolog size 5, PerfScore 8.50, instruction count 8, allocated bytes for code 23 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -58,10 +41,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-28 (-45.90%) : 56051.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.Canon,System.Canon]:Single():System.__Canon:this (Tier1)

@@ -2,64 +2,41 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; Tier1 code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> rdi this single-def -; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> rsi single-def
+; V00 this [V00,T01] ( 3, 3 ) byref -> rax this single-def +; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> rsi single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M64707_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rsi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0080 {rdi}, byref, isz - ; byrRegs +[rdi] - mov rax, gword ptr [rdi] - ; gcrRegs +[rax] - mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M64707_IG05 - ;; size=11 bbWeight=1 PerfScore 3.50 -G_M64707_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - ; byrRegs -[rdi]
+ push rax + mov qword ptr [rsp], rsi + mov rax, rdi + ; byrRegs +[rax] + ;; size=8 bbWeight=1 PerfScore 2.25 +G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {rax}, byref
mov rdi, qword ptr [rsi+0x38] mov rdi, qword ptr [rdi] mov rdi, qword ptr [rdi+0x08]
- cmp qword ptr [rcx], rdi - je SHORT G_M64707_IG05 - ;; size=16 bbWeight=0.25 PerfScore 2.50 -G_M64707_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx] - mov rsi, rax
+ mov rsi, gword ptr [rax]
; gcrRegs +[rsi] call CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[rsi] - mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M64707_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M64707_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ; gcrRegs -[rsi] +[rax] + ; byrRegs -[rax] + ; gcr arg pop 0 + nop + ;; size=20 bbWeight=1 PerfScore 9.25 +G_M64707_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 61, prolog size 14, PerfScore 10.94, instruction count 20, allocated bytes for code 61 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
+; Total bytes of code 33, prolog size 5, PerfScore 12.75, instruction count 11, allocated bytes for code 33 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -67,10 +44,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

+22 (+8.73%) : 738807.dasm - System.Threading.Tasks.TaskFactory1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)

@@ -10,21 +10,21 @@ ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]> ; V01 RetBuf [V01,T03] ( 4, 4 ) byref -> r15 single-def ; V02 arg1 [V02,T04] ( 5, 3.50) ref -> r14 class-hnd single-def <System.Threading.Tasks.Task`1[System.Threading.Tasks.Task]>
-; V03 arg2 [V03,T02] ( 6, 4.12) ref -> rbx class-hnd single-def <System.Object>
+; V03 arg2 [V03,T02] ( 6, 4 ) ref -> rbx class-hnd single-def <System.Object>
;* V04 loc0 [V04 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Threading.Tasks.VoidTaskResult> ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T08] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V07 tmp2 [V07,T00] ( 8, 7.75) ref -> r13 class-hnd "spilling QMark2" <System.Action`1[System.Threading.Tasks.Task]> -;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Threading.Tasks.Task> -; V09 tmp4 [V09,T07] ( 3, 1.50) ref -> rbx class-hnd single-def "guarded devirt this exact temp" <System.Threading.Tasks.Tests.TaskContinueWithTests+<>c__DisplayClass14_0> -; V10 tmp5 [V10,T09] ( 3, 0.50) ref -> rsi class-hnd "Inline return value spill temp" <System.Threading.Tasks.Task> -; V11 tmp6 [V11,T05] ( 3, 3 ) ref -> rdi class-hnd single-def "Inlining Arg" <System.Threading.ManualResetEventSlim> -; V12 tmp7 [V12,T06] ( 3, 3 ) ref -> rdi class-hnd single-def "Inlining Arg" <System.Threading.ManualResetEventSlim> -;* V13 tmp8 [V13 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Threading.CancellationToken> -;* V14 tmp9 [V14 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken> -;* V15 tmp10 [V15 ] ( 0, 0 ) ref -> zero-ref "field V13._source (fldOffset=0x0)" P-INDEP -;* V16 tmp11 [V16,T10] ( 0, 0 ) ref -> zero-ref single-def "field V14._source (fldOffset=0x0)" P-INDEP -; V17 rat0 [V17,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <System.Action`1[System.Threading.Tasks.Task]>
+; V06 tmp1 [V06,T05] ( 5, 5 ) ref -> r13 class-hnd single-def "impAppendStmt" <System.Action`1[System.Threading.Tasks.Task]> +;* V07 tmp2 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Threading.Tasks.Task> +; V08 tmp3 [V08,T08] ( 3, 1.50) ref -> rbx class-hnd single-def "guarded devirt this exact temp" <System.Threading.Tasks.Tests.TaskContinueWithTests+<>c__DisplayClass14_0> +; V09 tmp4 [V09,T09] ( 3, 0.50) ref -> rsi class-hnd "Inline return value spill temp" <System.Threading.Tasks.Task> +; V10 tmp5 [V10,T06] ( 3, 3 ) ref -> rdi class-hnd single-def "Inlining Arg" <System.Threading.ManualResetEventSlim> +; V11 tmp6 [V11,T07] ( 3, 3 ) ref -> rdi class-hnd single-def "Inlining Arg" <System.Threading.ManualResetEventSlim> +;* V12 tmp7 [V12 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Threading.CancellationToken> +;* V13 tmp8 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken> +;* V14 tmp9 [V14 ] ( 0, 0 ) ref -> zero-ref "field V12._source (fldOffset=0x0)" P-INDEP +;* V15 tmp10 [V15,T10] ( 0, 0 ) ref -> zero-ref single-def "field V13._source (fldOffset=0x0)" P-INDEP +; V16 rat0 [V16,T00] ( 5, 7 ) ref -> rax class-hnd "replacement local" <System.Action`1[System.Threading.Tasks.Task]> +; V17 rat1 [V17,T01] ( 5, 7 ) ref -> r13 class-hnd "replacement local" <System.Action`1[System.Threading.Tasks.Task]>
; ; Lcl frame size = 0 @@ -51,7 +51,7 @@ G_M42920_IG02: ; bbWeight=1, gcrefRegs=4008 {rbx r14}, byrefRegs=8000 {r1 G_M42920_IG03: ; bbWeight=0.50, gcrefRegs=4009 {rax rbx r14}, byrefRegs=8000 {r15}, byref mov rdi, 0xD1FFAB1E ; System.Action`1[System.Threading.Tasks.Task] cmp qword ptr [rax], rdi
- jne G_M42920_IG13
+ jne G_M42920_IG12
;; size=19 bbWeight=0.50 PerfScore 2.12 G_M42920_IG04: ; bbWeight=1, gcrefRegs=4009 {rax rbx r14}, byrefRegs=8000 {r15}, byref, isz xor edi, edi @@ -62,43 +62,31 @@ G_M42920_IG04: ; bbWeight=1, gcrefRegs=4009 {rax rbx r14}, byrefRegs=8000 mov r13, rbx ; gcrRegs +[r13] test r13, r13
- jne SHORT G_M42920_IG07
+ je SHORT G_M42920_IG06
;; size=23 bbWeight=1 PerfScore 6.00
-G_M42920_IG05: ; bbWeight=1, gcrefRegs=6000 {r13 r14}, byrefRegs=8000 {r15}, byref
+G_M42920_IG05: ; bbWeight=0.50, gcrefRegs=6008 {rbx r13 r14}, byrefRegs=8000 {r15}, byref + mov rdi, 0xD1FFAB1E ; System.Action`1[System.Threading.Tasks.Task] + cmp qword ptr [r13], rdi + jne G_M42920_IG13 + ;; size=20 bbWeight=0.50 PerfScore 2.12 +G_M42920_IG06: ; bbWeight=1, gcrefRegs=6000 {r13 r14}, byrefRegs=8000 {r15}, byref
; gcrRegs -[rbx] mov edi, dword ptr [r14+0x34] and edi, 0xD1FFAB1E cmp edi, 0xD1FFAB1E jne G_M42920_IG14 ;; size=22 bbWeight=1 PerfScore 3.50
-G_M42920_IG06: ; bbWeight=0.50, gcrefRegs=6000 {r13 r14}, byrefRegs=8000 {r15}, byref, isz
+G_M42920_IG07: ; bbWeight=0.50, gcrefRegs=6000 {r13 r14}, byrefRegs=8000 {r15}, byref
mov rsi, gword ptr [r14+0x38] ; gcrRegs +[rsi]
- jmp SHORT G_M42920_IG09 - ;; size=6 bbWeight=0.50 PerfScore 2.00 -G_M42920_IG07: ; bbWeight=0.25, gcrefRegs=6008 {rbx r13 r14}, byrefRegs=8000 {r15}, byref, isz - ; gcrRegs -[rsi] +[rbx] - mov rdi, 0xD1FFAB1E ; System.Action`1[System.Threading.Tasks.Task] - cmp qword ptr [r13], rdi - je SHORT G_M42920_IG05 - ;; size=16 bbWeight=0.25 PerfScore 1.06 -G_M42920_IG08: ; bbWeight=0.12, gcrefRegs=4008 {rbx r14}, byrefRegs=8000 {r15}, byref, isz - ; gcrRegs -[r13] - mov rsi, rbx - ; gcrRegs +[rsi] - call CORINFO_HELP_CHKCASTANY - ; gcrRegs -[rbx rsi] +[rax] - mov r13, rax - ; gcrRegs +[r13] - jmp SHORT G_M42920_IG05 - ;; size=13 bbWeight=0.12 PerfScore 0.44 -G_M42920_IG09: ; bbWeight=1, gcrefRegs=2040 {rsi r13}, byrefRegs=8000 {r15}, byref, isz - ; gcrRegs -[rax r14] +[rsi]
+ ;; size=4 bbWeight=0.50 PerfScore 1.00 +G_M42920_IG08: ; bbWeight=1, gcrefRegs=2040 {rsi r13}, byrefRegs=8000 {r15}, byref + ; gcrRegs -[r14]
mov rdi, 0xD1FFAB1E ; code for System.Threading.Tasks.Tests.TaskContinueWithTests+<>c__DisplayClass14_0:<RunLazyCancellationTests>b__2(System.Threading.Tasks.Task):this cmp qword ptr [r13+0x18], rdi
- jne SHORT G_M42920_IG15 - ;; size=16 bbWeight=1 PerfScore 4.25 -G_M42920_IG10: ; bbWeight=0.50, gcrefRegs=2000 {r13}, byrefRegs=8000 {r15}, byref
+ jne G_M42920_IG15 + ;; size=20 bbWeight=1 PerfScore 4.25 +G_M42920_IG09: ; bbWeight=0.50, gcrefRegs=2000 {r13}, byrefRegs=8000 {r15}, byref
; gcrRegs -[rsi] mov rbx, gword ptr [r13+0x08] ; gcrRegs +[rbx] @@ -117,12 +105,12 @@ G_M42920_IG10: ; bbWeight=0.50, gcrefRegs=2000 {r13}, byrefRegs=8000 {r15 call [<unknown method>] ; gcrRegs -[rdx rbx rdi] ;; size=39 bbWeight=0.50 PerfScore 9.38
-G_M42920_IG11: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=8000 {r15}, byref
+G_M42920_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=8000 {r15}, byref
mov byte ptr [r15], 0 mov rax, r15 ; byrRegs +[rax] ;; size=7 bbWeight=1 PerfScore 1.25
-G_M42920_IG12: ; bbWeight=1, epilog, nogc, extend
+G_M42920_IG11: ; bbWeight=1, epilog, nogc, extend
pop rbx pop r13 pop r14 @@ -130,7 +118,7 @@ G_M42920_IG12: ; bbWeight=1, epilog, nogc, extend pop rbp ret ;; size=9 bbWeight=1 PerfScore 3.50
-G_M42920_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=4008 {rbx r14}, byrefRegs=8000 {r15}, gcvars, byref
+G_M42920_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=4008 {rbx r14}, byrefRegs=8000 {r15}, gcvars, byref
; gcrRegs +[rbx r14] ; byrRegs -[rax] mov rsi, rbx @@ -140,8 +128,19 @@ G_M42920_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=4008 { ; gcrRegs -[rsi] +[rax] jmp G_M42920_IG04 ;; size=23 bbWeight=0 PerfScore 0.00
-G_M42920_IG14: ; bbWeight=0, gcrefRegs=6000 {r13 r14}, byrefRegs=8000 {r15}, byref, isz - ; gcrRegs -[rax rbx] +[r13]
+G_M42920_IG13: ; bbWeight=0, gcrefRegs=4008 {rbx r14}, byrefRegs=8000 {r15}, byref + ; gcrRegs -[rax] + mov rsi, rbx + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; System.Action`1[System.Threading.Tasks.Task] + call CORINFO_HELP_CHKCASTANY + ; gcrRegs -[rbx rsi] +[rax] + mov r13, rax + ; gcrRegs +[r13] + jmp G_M42920_IG06 + ;; size=26 bbWeight=0 PerfScore 0.00 +G_M42920_IG14: ; bbWeight=0, gcrefRegs=6000 {r13 r14}, byrefRegs=8000 {r15}, byref + ; gcrRegs -[rax]
mov rdi, r14 ; gcrRegs +[rdi] mov esi, 1 @@ -149,18 +148,18 @@ G_M42920_IG14: ; bbWeight=0, gcrefRegs=6000 {r13 r14}, byrefRegs=8000 {r1 ; gcrRegs -[rdi r14] +[rax] mov rsi, rax ; gcrRegs +[rsi]
- jmp SHORT G_M42920_IG09 - ;; size=19 bbWeight=0 PerfScore 0.00
+ jmp G_M42920_IG08 + ;; size=22 bbWeight=0 PerfScore 0.00
G_M42920_IG15: ; bbWeight=0, gcrefRegs=2040 {rsi r13}, byrefRegs=8000 {r15}, byref, isz ; gcrRegs -[rax] mov rdi, gword ptr [r13+0x08] ; gcrRegs +[rdi] call [r13+0x18]System.Action`1[System.__Canon]:Invoke(System.__Canon):this ; gcrRegs -[rsi rdi r13]
- jmp SHORT G_M42920_IG11
+ jmp SHORT G_M42920_IG10
;; size=10 bbWeight=0 PerfScore 0.00
-; Total bytes of code 252, prolog size 13, PerfScore 41.25, instruction count 68, allocated bytes for code 252 (MethodHash=0cba5857) for method System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
+; Total bytes of code 274, prolog size 13, PerfScore 40.88, instruction count 68, allocated bytes for code 274 (MethodHash=0cba5857) for method System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
; ============================================================ Unwind Info:

+13 (+10.40%) : 480748.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)

@@ -11,13 +11,11 @@ ; ; V00 this [V00,T02] ( 4, 3 ) ref -> rdi this class-hnd <OLEDB.Test.ModuleCore.CTestCase> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T03] ( 3, 4.50) ref -> rsi single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T06] ( 3, 2.50) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 7.50) ref -> rax class-hnd "spilling QMark2" <OLEDB.Test.ModuleCore.CTestModule> -; V05 tmp4 [V05,T07] ( 2, 0 ) ref -> rdi single-def "arg temp" -; V06 cse0 [V06,T05] ( 4, 3 ) ref -> rbx "CSE - aggressive" -; V07 rat0 [V07,T04] ( 3, 4 ) ref -> rsi "Spilling to split statement for tree" -; V08 rat1 [V08,T01] ( 6, 7 ) ref -> rax class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
+; V02 tmp1 [V02,T05] ( 2, 0 ) ref -> rdi single-def "arg temp" +; V03 cse0 [V03,T04] ( 5, 3 ) ref -> rbx "CSE - aggressive" +; V04 rat0 [V04,T03] ( 3, 4 ) ref -> rsi "Spilling to split statement for tree" +; V05 rat1 [V05,T00] ( 5, 7 ) ref -> rcx class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule> +; V06 rat2 [V06,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
; ; Lcl frame size = 8 @@ -33,63 +31,38 @@ G_M5100_IG02: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byre ; gcrRegs +[rbx] mov rsi, rbx ; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - jne SHORT G_M5100_IG09
+ mov rcx, rsi + ; gcrRegs +[rcx] + test rcx, rcx + jne SHORT G_M5100_IG08
;; size=15 bbWeight=1 PerfScore 3.75
-G_M5100_IG03: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref, isz
+G_M5100_IG03: ; bbWeight=1, gcrefRegs=000A {rcx rbx}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rsi rdi]
- test rax, rax - je SHORT G_M5100_IG11 - ;; size=5 bbWeight=1 PerfScore 1.25 -G_M5100_IG04: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax] - mov rsi, rbx - ; gcrRegs +[rsi] - mov rax, rsi
+ test rcx, rcx + je SHORT G_M5100_IG07 + mov rax, rbx
; gcrRegs +[rax] test rax, rax
- je SHORT G_M5100_IG07 - ;; size=11 bbWeight=1 PerfScore 1.75 -G_M5100_IG05: ; bbWeight=0.50, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rbx] - mov rdi, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule - cmp qword ptr [rax], rdi - je SHORT G_M5100_IG07 - ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M5100_IG06: ; bbWeight=0.25, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[rsi] +[rax] - ; gcr arg pop 0 - ;; size=5 bbWeight=0.25 PerfScore 0.25 -G_M5100_IG07: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - nop - ;; size=1 bbWeight=1 PerfScore 0.25 -G_M5100_IG08: ; bbWeight=1, epilog, nogc, extend
+ jne SHORT G_M5100_IG05 + ;; size=13 bbWeight=1 PerfScore 2.75 +G_M5100_IG04: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[rcx rbx]
add rsp, 8 pop rbx pop rbp ret ;; size=7 bbWeight=1 PerfScore 2.25
-G_M5100_IG09: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0049 {rax rbx rsi}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[rbx rsi] - mov rdi, 0xD1FFAB1E ; System.Xml.WrappedReaderTests.WrappedReaderTest - cmp qword ptr [rax], rdi - je SHORT G_M5100_IG03
+G_M5100_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[rbx] + mov rsi, 0xD1FFAB1E ; System.Xml.WrappedReaderTests.WrappedReaderTest + cmp qword ptr [rax], rsi + je SHORT G_M5100_IG04
;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M5100_IG10: ; bbWeight=0, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax] - mov rdi, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule - call CORINFO_HELP_ISINSTANCEOFCLASS - ; gcrRegs -[rsi] +[rax] - ; gcr arg pop 0 - test rax, rax - jne SHORT G_M5100_IG04 - ;; size=20 bbWeight=0 PerfScore 0.00 -G_M5100_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M5100_IG06: ; bbWeight=0.12, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rax]
+ jmp SHORT G_M5100_IG10 + ;; size=2 bbWeight=0.12 PerfScore 0.25 +G_M5100_IG07: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
mov rsi, rbx ; gcrRegs +[rsi] mov rdi, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestCase @@ -100,8 +73,34 @@ G_M5100_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byre ; gcrRegs +[rdi] jmp SHORT G_M5100_IG02 ;; size=23 bbWeight=0 PerfScore 0.00
+G_M5100_IG08: ; bbWeight=0.50, gcrefRegs=004A {rcx rbx rsi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax rdi] +[rcx rbx rsi] + mov rax, 0xD1FFAB1E ; System.Xml.WrappedReaderTests.WrappedReaderTest + cmp qword ptr [rcx], rax + je SHORT G_M5100_IG03 + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M5100_IG09: ; bbWeight=0, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rcx] + mov rdi, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule + call CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov rcx, rax + ; gcrRegs +[rcx] + jmp SHORT G_M5100_IG03 + ;; size=20 bbWeight=0 PerfScore 0.00 +G_M5100_IG10: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax rcx] + mov rsi, rbx + ; gcrRegs +[rsi] + mov rdi, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule + call CORINFO_HELP_CHKCASTCLASS + ; gcrRegs -[rbx rsi] +[rax] + ; gcr arg pop 0 + jmp SHORT G_M5100_IG04 + ;; size=20 bbWeight=0 PerfScore 0.00
-; Total bytes of code 125, prolog size 8, PerfScore 17.25, instruction count 36, allocated bytes for code 125 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
+; Total bytes of code 138, prolog size 8, PerfScore 16.75, instruction count 38, allocated bytes for code 138 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
; ============================================================ Unwind Info:

+32 (+15.24%) : 258683.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -9,25 +9,23 @@ ; 3 inlinees with PGO data; 9 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 12, 5.94) ref -> rbx class-hnd single-def <System.Type>
+; V00 arg0 [V00,T01] ( 11, 4.94) ref -> rbx class-hnd single-def <System.Type>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T10] ( 3, 0.63) ref -> rax "guarded devirt return temp"
+; V02 tmp1 [V02,T09] ( 3, 0.63) ref -> rax "guarded devirt return temp"
;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V04 tmp3 [V04,T05] ( 3, 2 ) ubyte -> rcx "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T08] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T06] ( 3, 2 ) int -> r14 -; V09 tmp8 [V09,T07] ( 2, 2 ) ubyte -> rcx "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V12 tmp11 [V12,T01] ( 2, 4 ) byref -> r14 single-def "Inlining Arg" -;* V13 tmp12 [V13,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V14 tmp13 [V14,T09] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V15 tmp14 [V15 ] ( 0, 0 ) long -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V16 tmp15 [V16,T02] ( 3, 3 ) long -> r14 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 cse0 [V17,T03] ( 3, 3 ) int -> rdi "CSE - aggressive" -; V18 cse1 [V18,T04] ( 3, 2.31) long -> r15 "CSE - aggressive"
+; V04 tmp3 [V04,T06] ( 3, 2 ) ubyte -> rcx "Inline return value spill temp" +; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> r15 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T07] ( 3, 2 ) int -> r14 +; V08 tmp7 [V08,T08] ( 2, 2 ) ubyte -> rcx "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +; V11 tmp10 [V11,T03] ( 2, 4 ) byref -> r14 single-def "Inlining Arg" +;* V12 tmp11 [V12,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V13 tmp12 [V13 ] ( 0, 0 ) long -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V14 tmp13 [V14,T04] ( 3, 3 ) long -> r14 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 cse0 [V15,T05] ( 3, 3 ) int -> rdi "CSE - aggressive" +; V16 rat0 [V16,T00] ( 5, 7.50) ref -> r15 class-hnd "replacement local" <System.RuntimeType>
; ; Lcl frame size = 8 @@ -42,13 +40,29 @@ G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs +[rbx] ;; size=15 bbWeight=1 PerfScore 5.75 G_M8853_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
- mov r15, 0xD1FFAB1E ; System.RuntimeType - cmp qword ptr [rbx], r15 - jne G_M8853_IG14 - mov r14, qword ptr [rbx+0x18]
+ cmp byte ptr [rbx], bl + mov r15, rbx + ; gcrRegs +[r15] + test r15, r15 + je SHORT G_M8853_IG05 + ;; size=10 bbWeight=1 PerfScore 4.50 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz + mov rdi, 0xD1FFAB1E ; System.RuntimeType + cmp qword ptr [r15], rdi + je SHORT G_M8853_IG05 + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + ; gcrRegs -[r15] + xor r15, r15 + ; gcrRegs +[r15] + ;; size=3 bbWeight=0.25 PerfScore 0.06 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref + test r15, r15 + je G_M8853_IG17 + mov r14, qword ptr [r15+0x18]
mov edi, r14d and edi, 2
- jne SHORT G_M8853_IG13
+ jne G_M8853_IG16
test edi, edi sete dil movzx rdi, dil @@ -58,20 +72,21 @@ G_M8853_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byre xor r14d, r14d cmp eax, 0xD1FFAB1E sete r14b
- ;; size=67 bbWeight=1 PerfScore 16.00 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ ;; size=61 bbWeight=1 PerfScore 13.00 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref
movzx rcx, r14b ;; size=4 bbWeight=1 PerfScore 0.25
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG07: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r15]
test ecx, ecx
- je SHORT G_M8853_IG07
+ je SHORT G_M8853_IG10
;; size=4 bbWeight=1 PerfScore 1.25
-G_M8853_IG05: ; bbWeight=0.69, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG08: ; bbWeight=0.69, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[rbx] mov rax, 0xD1FFAB1E ; gcrRegs +[rax] ;; size=10 bbWeight=0.69 PerfScore 0.17
-G_M8853_IG06: ; bbWeight=0.69, epilog, nogc, extend
+G_M8853_IG09: ; bbWeight=0.69, epilog, nogc, extend
add rsp, 8 pop rbx pop r14 @@ -79,19 +94,19 @@ G_M8853_IG06: ; bbWeight=0.69, epilog, nogc, extend pop rbp ret ;; size=11 bbWeight=0.69 PerfScore 2.23
-G_M8853_IG07: ; bbWeight=0.31, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG10: ; bbWeight=0.31, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rax] +[rbx] mov rax, 0xD1FFAB1E ; gcrRegs +[rax] cmp rbx, rax
- jne SHORT G_M8853_IG10
+ jne SHORT G_M8853_IG13
;; size=15 bbWeight=0.31 PerfScore 0.47
-G_M8853_IG08: ; bbWeight=0.21, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG11: ; bbWeight=0.21, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[rax rbx] xor rax, rax ; gcrRegs +[rax] ;; size=2 bbWeight=0.21 PerfScore 0.05
-G_M8853_IG09: ; bbWeight=0.21, epilog, nogc, extend
+G_M8853_IG12: ; bbWeight=0.21, epilog, nogc, extend
add rsp, 8 pop rbx pop r14 @@ -99,19 +114,20 @@ G_M8853_IG09: ; bbWeight=0.21, epilog, nogc, extend pop rbp ret ;; size=11 bbWeight=0.21 PerfScore 0.70
-G_M8853_IG10: ; bbWeight=0.31, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M8853_IG13: ; bbWeight=0.31, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rax] +[rbx]
- cmp qword ptr [rbx], r15 - jne SHORT G_M8853_IG15
+ mov rdi, 0xD1FFAB1E ; System.RuntimeType + cmp qword ptr [rbx], rdi + jne SHORT G_M8853_IG18
mov rdi, rbx ; gcrRegs +[rdi] call [<unknown method>] ; gcrRegs -[rbx rdi] +[rax]
- ;; size=14 bbWeight=0.31 PerfScore 2.27 -G_M8853_IG11: ; bbWeight=0.31, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ;; size=24 bbWeight=0.31 PerfScore 2.35 +G_M8853_IG14: ; bbWeight=0.31, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop ;; size=1 bbWeight=0.31 PerfScore 0.08
-G_M8853_IG12: ; bbWeight=0.31, epilog, nogc, extend
+G_M8853_IG15: ; bbWeight=0.31, epilog, nogc, extend
add rsp, 8 pop rbx pop r14 @@ -119,12 +135,13 @@ G_M8853_IG12: ; bbWeight=0.31, epilog, nogc, extend pop rbp ret ;; size=11 bbWeight=0.31 PerfScore 1.02
-G_M8853_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[rax] +[rbx]
+G_M8853_IG16: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[rax] +[rbx r15]
xor r14d, r14d
- jmp SHORT G_M8853_IG03
+ jmp SHORT G_M8853_IG06
;; size=5 bbWeight=0 PerfScore 0.00
-G_M8853_IG14: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG17: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r15]
mov rdi, rbx ; gcrRegs +[rdi] mov rax, qword ptr [rbx] @@ -134,19 +151,19 @@ G_M8853_IG14: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byre xor ecx, ecx test al, 32 setne cl
- jmp SHORT G_M8853_IG04
+ jmp SHORT G_M8853_IG07
;; size=22 bbWeight=0 PerfScore 0.00
-G_M8853_IG15: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG18: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
mov rdi, rbx ; gcrRegs +[rdi] mov rax, qword ptr [rbx] mov rax, qword ptr [rax+0xA0] call [rax+0x20]<unknown method> ; gcrRegs -[rbx rdi] +[rax]
- jmp SHORT G_M8853_IG11
+ jmp SHORT G_M8853_IG14
;; size=18 bbWeight=0 PerfScore 0.00
-; Total bytes of code 210, prolog size 12, PerfScore 30.24, instruction count 69, allocated bytes for code 210 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 242, prolog size 12, PerfScore 34.00, instruction count 77, allocated bytes for code 242 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info:

librariestestsnotieredcompilation.run.linux.x64.Release.mch

-23 (-50.00%) : 142173.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -2,54 +2,37 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rdi single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rdi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rdi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M8451_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 46, prolog size 14, PerfScore 8.38, instruction count 16, allocated bytes for code 46 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 23, prolog size 5, PerfScore 8.50, instruction count 8, allocated bytes for code 23 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -57,10 +40,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-23 (-50.00%) : 36334.dasm - LamarCodeGeneration.Util.TypeExtensions:AsSystem.__Canon:System.__Canon (FullOpts)

@@ -2,53 +2,36 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rdi single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M24927_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rdi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M24927_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rdi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M24927_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M24927_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M24927_IG03: ; bbWeight=0.25, gcrefRegs=0041 {rax rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M24927_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M24927_IG04: ; bbWeight=0.12, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M24927_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M24927_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M24927_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 46, prolog size 14, PerfScore 8.38, instruction count 16, allocated bytes for code 46 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 23, prolog size 5, PerfScore 8.50, instruction count 8, allocated bytes for code 23 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -56,10 +39,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

-23 (-46.94%) : 30479.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:b7_2System.__Canon:System.Canon:this (FullOpts)

@@ -2,56 +2,39 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> rsi single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> rdx class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> rsi single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> rdx class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M29555_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp - sub rsp, 16 - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x08], rsi - ;; size=14 bbWeight=1 PerfScore 2.75 -G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+ push rax + mov qword ptr [rsp], rsi + ;; size=5 bbWeight=1 PerfScore 2.00 +G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M29555_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M29555_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rsi+0x38] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M29555_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M29555_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
mov rsi, rdx ; gcrRegs +[rsi] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx rsi] +[rax]
- ;; size=8 bbWeight=0.12 PerfScore 0.16 -G_M29555_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M29555_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 16 - pop rbp
+ ;; size=16 bbWeight=1 PerfScore 5.50 +G_M29555_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8
ret
- ;; size=6 bbWeight=1 PerfScore 1.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 49, prolog size 14, PerfScore 8.41, instruction count 17, allocated bytes for code 49 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
+; Total bytes of code 26, prolog size 5, PerfScore 8.75, instruction count 9, allocated bytes for code 26 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -59,10 +42,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x01 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x01 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08

+30 (+55.56%) : 96711.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:b_160():this (FullOpts)

@@ -8,27 +8,26 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> rdi "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> rdi "CSE - aggressive"
; ; Lcl frame size = 8
-G_M51850_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51850_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbp push rbx push rax lea rbp, [rsp+0x10] mov rbx, rdi ; gcrRegs +[rbx]
- ;; size=11 bbWeight=0 PerfScore 0.00 -G_M51850_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ ;; size=11 bbWeight=1 PerfScore 3.75 +G_M51850_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
mov rdi, gword ptr [rbx+0x08] ; gcrRegs +[rdi] mov rsi, gword ptr [rbx+0x10] @@ -37,16 +36,25 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr xor edx, edx call [<unknown method>] ; gcrRegs -[rsi rdi]
- mov rdi, gword ptr [rbx+0x08] - ; gcrRegs +[rdi] - cmp byte ptr [rdi], dil
+ mov rbx, gword ptr [rbx+0x08] + cmp byte ptr [rbx], bl
mov rdi, 0xD1FFAB1E
+ ; gcrRegs +[rdi]
call [System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)]
- ; gcrRegs -[rbx rdi] - int3 - ;; size=43 bbWeight=0 PerfScore 0.00
+ ; gcrRegs -[rdi] + mov rsi, 0xD1FFAB1E + mov rdi, rbx + ; gcrRegs +[rdi] + mov rax, 0xD1FFAB1E ; code for System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + ;; size=64 bbWeight=1 PerfScore 19.25 +G_M51850_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8 + pop rbx + pop rbp + tail.jmp [rax]System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 54, prolog size 8, PerfScore 0.00, instruction count 15, allocated bytes for code 54 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
+; Total bytes of code 84, prolog size 8, PerfScore 26.25, instruction count 21, allocated bytes for code 84 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
; ============================================================ Unwind Info:

+30 (+55.56%) : 97527.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:b_220():this (FullOpts)

@@ -8,27 +8,26 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataColumnMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> rdi "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> rdi "CSE - aggressive"
; ; Lcl frame size = 8
-G_M18245_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M18245_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbp push rbx push rax lea rbp, [rsp+0x10] mov rbx, rdi ; gcrRegs +[rbx]
- ;; size=11 bbWeight=0 PerfScore 0.00 -G_M18245_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ ;; size=11 bbWeight=1 PerfScore 3.75 +G_M18245_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
mov rdi, gword ptr [rbx+0x08] ; gcrRegs +[rdi] mov rsi, gword ptr [rbx+0x10] @@ -37,16 +36,25 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr xor edx, edx call [<unknown method>] ; gcrRegs -[rsi rdi]
- mov rdi, gword ptr [rbx+0x08] - ; gcrRegs +[rdi] - cmp byte ptr [rdi], dil
+ mov rbx, gword ptr [rbx+0x08] + cmp byte ptr [rbx], bl
mov rdi, 0xD1FFAB1E
+ ; gcrRegs +[rdi]
call [System.Data.Common.DataColumnMappingCollection:ValidateType(System.Object)]
- ; gcrRegs -[rbx rdi] - int3 - ;; size=43 bbWeight=0 PerfScore 0.00
+ ; gcrRegs -[rdi] + mov rsi, 0xD1FFAB1E + mov rdi, rbx + ; gcrRegs +[rdi] + mov rax, 0xD1FFAB1E ; code for System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + ;; size=64 bbWeight=1 PerfScore 19.25 +G_M18245_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8 + pop rbx + pop rbp + tail.jmp [rax]System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 54, prolog size 8, PerfScore 0.00, instruction count 15, allocated bytes for code 54 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
+; Total bytes of code 84, prolog size 8, PerfScore 26.25, instruction count 21, allocated bytes for code 84 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
; ============================================================ Unwind Info:

+36 (+128.57%) : 94667.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>cDisplayClass7_0:b2():this (FullOpts)

@@ -8,31 +8,42 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 3, 2 ) ref -> rdi this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
+; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T01] ( 2, 0 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V04 tmp3 [V04,T03] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V06 cse0 [V06,T02] ( 2, 0 ) ref -> rdi "CSE - aggressive"
+; V02 tmp1 [V02,T00] ( 3, 6 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V03 tmp2 [V03,T03] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V04 cse0 [V04,T02] ( 2, 2 ) ref -> rdi "CSE - aggressive"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
-G_M51219_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbp
- mov rbp, rsp - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M51219_IG02: ; bbWeight=0, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref
+ push rbx + push rax + lea rbp, [rsp+0x10] + ;; size=8 bbWeight=1 PerfScore 3.50 +G_M51219_IG02: ; bbWeight=1, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref
; gcrRegs +[rdi]
- mov rdi, gword ptr [rdi+0x08] - cmp byte ptr [rdi], dil
+ mov rbx, gword ptr [rdi+0x08] + ; gcrRegs +[rbx] + cmp byte ptr [rbx], bl
mov rdi, 0xD1FFAB1E call [System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)] ; gcrRegs -[rdi]
- int3 - ;; size=24 bbWeight=0 PerfScore 0.00
+ mov rdx, 0xD1FFAB1E + mov rdi, rbx + ; gcrRegs +[rdi] + xor esi, esi + mov rax, 0xD1FFAB1E ; code for System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + ;; size=47 bbWeight=1 PerfScore 9.25 +G_M51219_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 8 + pop rbx + pop rbp + tail.jmp [rax]System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 28, prolog size 4, PerfScore 0.00, instruction count 7, allocated bytes for code 28 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
+; Total bytes of code 64, prolog size 8, PerfScore 16.00, instruction count 16, allocated bytes for code 64 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
; ============================================================ Unwind Info: @@ -40,9 +51,11 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x01 - CountOfUnwindCodes: 1
+ SizeOfProlog : 0x03 + CountOfUnwindCodes: 3
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
+ CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 + CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)

realworld.run.linux.x64.checked.mch

-28 (-36.36%) : 411.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -2,69 +2,49 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rdi single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rsi single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x10], rdi - mov rbx, rdi - ;; size=15 bbWeight=1 PerfScore 4.75 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi]
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi + ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rdi+0x38] + mov rdi, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax]
+ ; gcr arg pop 0
mov rdi, rax ; gcrRegs +[rdi] call [<unknown method>] ; gcrRegs -[rdi]
- mov rcx, rax - ; gcrRegs +[rcx] - test rcx, rcx - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {rax rcx}, byrefRegs=0000 {}, byref, isz - mov rdi, qword ptr [rbx+0x38] - mov rdi, qword ptr [rdi] - cmp qword ptr [rcx], rdi - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[rcx]
+ ; gcr arg pop 0
mov rsi, rax ; gcrRegs +[rsi]
+ mov rdi, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi]
- mov rcx, rax - ; gcrRegs +[rcx] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rcx - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ; gcr arg pop 0 + nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 77, prolog size 12, PerfScore 19.19, instruction count 26, allocated bytes for code 77 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -72,11 +52,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

-16 (-29.63%) : 32925.dasm - System.Management.Automation.PSTypeExtensions+<>c7`1[System.Canon]:b7_1(System.Object):System.Canon:this (FullOpts)

@@ -2,59 +2,42 @@ ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code
-; rbp based frame
+; rsp based frame
; partially interruptible ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> rbx this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> rsi class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> rbx this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> rdi "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M56342_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbp
push rbx
- push rax - lea rbp, [rsp+0x10] - mov qword ptr [rbp-0x10], rdi
+ sub rsp, 16 + mov qword ptr [rsp+0x08], rdi
mov rbx, rdi ; gcrRegs +[rbx]
- ;; size=15 bbWeight=1 PerfScore 4.75 -G_M56342_IG02: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz
+ ;; size=13 bbWeight=1 PerfScore 2.50 +G_M56342_IG02: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref
; gcrRegs +[rsi]
- mov rax, rsi - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M56342_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M56342_IG03: ; bbWeight=0.25, gcrefRegs=0049 {rax rbx rsi}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [rbx] mov rdi, qword ptr [rdi+0x38] mov rdi, qword ptr [rdi] mov rdi, qword ptr [rdi]
- cmp qword ptr [rax], rdi - je SHORT G_M56342_IG05 - ;; size=18 bbWeight=0.25 PerfScore 3.00 -G_M56342_IG04: ; bbWeight=0.12, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] +[rax]
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M56342_IG05: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref
+ ; gcr arg pop 0
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M56342_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 8
+ ;; size=19 bbWeight=1 PerfScore 9.25 +G_M56342_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 16
pop rbx
- pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
+ ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 54, prolog size 12, PerfScore 11.88, instruction count 21, allocated bytes for code 54 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 38, prolog size 10, PerfScore 13.50, instruction count 13, allocated bytes for code 38 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -62,11 +45,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x03 - CountOfUnwindCodes: 3
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x03 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 0 * 8 + 8 = 8 = 0x08 - CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 1 * 8 + 8 = 16 = 0x10 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

-41 (-29.08%) : 8569.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1int

@@ -8,17 +8,13 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 9, 23.50) ref -> rbx class-hnd <FSharp.Compiler.TypedTree+DecisionTree>
+; V00 arg0 [V00,T00] ( 7, 22.50) ref -> rbx class-hnd <FSharp.Compiler.TypedTree+DecisionTree>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd <FSharp.Compiler.TypedTree+DecisionTree> ;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T05] ( 2, 2 ) long -> rax "fgMakeTemp is creating a new local variable" -; V06 tmp2 [V06,T03] ( 5, 5 ) ref -> rdi class-hnd "spilling QMark2" <<unknown class>> -; V07 tmp3 [V07,T02] ( 2, 16 ) long -> rdi "fgMakeTemp is creating a new local variable" -; V08 tmp4 [V08,T01] ( 4, 25 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V09 tmp5 [V09,T06] ( 2, 2 ) int -> rbx "Inlining Arg" -; V10 tmp6 [V10,T04] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[int]>
+; V05 tmp1 [V05,T02] ( 2, 2 ) int -> rbx "Inlining Arg" +; V06 tmp2 [V06,T01] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[int]>
; ; Lcl frame size = 8 @@ -38,7 +34,7 @@ G_M51841_IG02: ; bbWeight=8, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0 test rax, rax
- jne SHORT G_M51841_IG08
+ jne SHORT G_M51841_IG06
;; size=23 bbWeight=8 PerfScore 22.00 G_M51841_IG03: ; bbWeight=4, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] @@ -49,58 +45,39 @@ G_M51841_IG03: ; bbWeight=4, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcrRegs -[rsi] +[rax] ; gcr arg pop 0 test rax, rax
- je SHORT G_M51841_IG06 - mov rax, rbx - mov rdi, 0xD1FFAB1E ; <unknown class> - cmp qword ptr [rax], rdi - je SHORT G_M51841_IG05 - ;; size=41 bbWeight=4 PerfScore 29.00 -G_M51841_IG04: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rbx - ; gcrRegs +[rax] - ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M51841_IG05: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rbx] - mov rbx, gword ptr [rax+0x10] - ; gcrRegs +[rbx]
+ je SHORT G_M51841_IG04 + mov rbx, gword ptr [rbx+0x10]
jmp SHORT G_M51841_IG02
- ;; size=6 bbWeight=4 PerfScore 16.00 -G_M51841_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ;; size=29 bbWeight=4 PerfScore 27.00 +G_M51841_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[rax rbx] xor rax, rax ; gcrRegs +[rax] ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M51841_IG05: ; bbWeight=0.50, epilog, nogc, extend + add rsp, 8 + pop rbx + pop rbp + ret + ;; size=7 bbWeight=0.50 PerfScore 1.12 +G_M51841_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs -[rax] +[rbx] + mov ebx, dword ptr [rbx+0x10] + ; gcrRegs -[rbx] + mov rdi, 0xD1FFAB1E ; Microsoft.FSharp.Core.FSharpOption`1[int] + call CORINFO_HELP_NEWSFAST + ; gcrRegs +[rax] + ; gcr arg pop 0 + mov dword ptr [rax+0x08], ebx + ;; size=21 bbWeight=0.50 PerfScore 2.12
G_M51841_IG07: ; bbWeight=0.50, epilog, nogc, extend add rsp, 8 pop rbx pop rbp ret ;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M51841_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[rax] +[rbx] - mov rdi, rbx - ; gcrRegs +[rdi] - mov rax, 0xD1FFAB1E ; <unknown class> - cmp qword ptr [rdi], rax - cmovne rdi, rbx - mov ebx, dword ptr [rdi+0x10] - ; gcrRegs -[rbx] - mov rdi, 0xD1FFAB1E ; Microsoft.FSharp.Core.FSharpOption`1[int] - ; gcrRegs -[rdi] - call CORINFO_HELP_NEWSFAST - ; gcrRegs +[rax] - ; gcr arg pop 0 - mov dword ptr [rax+0x08], ebx - ;; size=41 bbWeight=0.50 PerfScore 4.00 -G_M51841_IG09: ; bbWeight=0.50, epilog, nogc, extend - add rsp, 8 - pop rbx - pop rbp - ret - ;; size=7 bbWeight=0.50 PerfScore 1.12
-; Total bytes of code 141, prolog size 11, PerfScore 103.50, instruction count 39, allocated bytes for code 141 (MethodHash=562a357e) for method FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
+; Total bytes of code 100, prolog size 11, PerfScore 83.50, instruction count 30, allocated bytes for code 100 (MethodHash=562a357e) for method FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
; ============================================================ Unwind Info:

+3 (+0.76%) : 29797.dasm - System.Management.Automation.Runspaces.InitialSessionStateEntryCollection1[System.__Canon]:Clone():System.Management.Automation.Runspaces.InitialSessionStateEntryCollection1[System.__Canon]:this (FullOpts)

@@ -8,48 +8,50 @@ ; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T05] ( 7, 8 ) ref -> [rbp-0x20] this class-hnd EH-live single-def <System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]> -; V01 loc0 [V01,T10] ( 3, 4 ) ref -> rbx class-hnd exact single-def <System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]> -; V02 loc1 [V02,T11] ( 4, 1.50) ref -> [rbp-0x28] class-hnd EH-live spill-single-def <System.Object> -; V03 loc2 [V03 ] ( 5, 4 ) ubyte -> [rbp-0x18] do-not-enreg[X] must-init addr-exposed ld-addr-op -; V04 loc3 [V04,T04] ( 6, 11 ) ref -> [rbp-0x30] class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]> -;* V05 loc4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.__Canon>
+; V00 this [V00,T03] ( 6, 7 ) ref -> [rbp-0x30] this class-hnd EH-live single-def <System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]> +; V01 loc0 [V01,T10] ( 3, 4 ) ref -> r15 class-hnd exact single-def <System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]> +; V02 loc1 [V02,T12] ( 4, 1.50) ref -> [rbp-0x38] class-hnd EH-live spill-single-def <System.Object> +; V03 loc2 [V03 ] ( 5, 4 ) ubyte -> [rbp-0x28] do-not-enreg[X] must-init addr-exposed ld-addr-op +; V04 loc3 [V04,T02] ( 6, 11 ) ref -> [rbp-0x40] class-hnd EH-live spill-single-def <System.Collections.Generic.IEnumerator`1[System.__Canon]> +; V05 loc4 [V05,T08] ( 3, 6 ) ref -> rax class-hnd <System.__Canon>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V07 tmp1 [V07,T08] ( 3, 6 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]>
+; V07 tmp1 [V07,T09] ( 3, 6 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]>
;* V08 tmp2 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 tmp3 [V09,T01] ( 4, 12 ) long -> r11 "VirtualCall with runtime lookup" -; V10 tmp4 [V10,T06] ( 3, 9 ) ref -> rax "CASTCLASS eval op1" -; V11 tmp5 [V11,T09] ( 3, 5 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V12 tmp6 [V12,T00] ( 5, 15 ) ref -> rsi class-hnd "spilling QMark2" <System.__Canon> -; V13 tmp7 [V13,T02] ( 3, 12 ) ref -> rax "argument with side effect" -; V14 PSPSym [V14,T12] ( 1, 1 ) long -> [rbp-0x40] do-not-enreg[V] "PSPSym" -; V15 rat0 [V15,T07] ( 3, 8.80) long -> rsi "Spilling to split statement for tree" -; V16 rat1 [V16,T03] ( 3, 11.20) long -> r11 "fgMakeTemp is creating a new local variable"
+; V09 tmp3 [V09,T00] ( 4, 12 ) long -> r11 "VirtualCall with runtime lookup" +; V10 tmp4 [V10,T05] ( 2, 8 ) ref -> rsi "argument with side effect" +; V11 tmp5 [V11,T07] ( 2, 8 ) long -> r14 "argument with side effect" +; V12 tmp6 [V12,T06] ( 2, 8 ) ref -> rsi "argument with side effect" +; V13 PSPSym [V13,T13] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym" +; V14 cse0 [V14,T11] ( 3, 4 ) long -> rbx "CSE - moderate" +; V15 rat0 [V15,T04] ( 3, 8.80) long -> rsi "Spilling to split statement for tree" +; V16 rat1 [V16,T01] ( 3, 11.20) long -> r11 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 56 G_M6444_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp
+ push r15 + push r14
push rbx sub rsp, 56
- lea rbp, [rsp+0x40]
+ lea rbp, [rsp+0x50]
xor eax, eax
- mov qword ptr [rbp-0x18], rax - mov qword ptr [rbp-0x40], rsp - mov qword ptr [rbp-0x10], rdi - mov gword ptr [rbp-0x20], rdi
+ mov qword ptr [rbp-0x28], rax + mov qword ptr [rbp-0x50], rsp + mov qword ptr [rbp-0x20], rdi + mov gword ptr [rbp-0x30], rdi
; GC ptr vars +{V00}
- ;; size=29 bbWeight=1 PerfScore 7.00 -G_M6444_IG02: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=33 bbWeight=1 PerfScore 9.00 +G_M6444_IG02: ; bbWeight=1, gcVars=0000000000000008 {V00}, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[rdi] mov rsi, gword ptr [rdi+0x10] ; gcrRegs +[rsi]
- mov gword ptr [rbp-0x28], rsi
+ mov gword ptr [rbp-0x38], rsi
; GC ptr vars +{V02} ;; size=8 bbWeight=1 PerfScore 3.00
-G_M6444_IG03: ; bbWeight=1, gcVars=0000000000000820 {V00 V02}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M6444_IG03: ; bbWeight=1, gcVars=0000000000001008 {V00 V02}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rsi rdi]
- cmp byte ptr [rbp-0x18], 0
+ cmp byte ptr [rbp-0x28], 0
je SHORT G_M6444_IG05 ;; size=6 bbWeight=1 PerfScore 3.00 G_M6444_IG04: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref @@ -58,30 +60,31 @@ G_M6444_IG04: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref int3 ;; size=7 bbWeight=0 PerfScore 0.00 G_M6444_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- lea rsi, [rbp-0x18] - mov rdi, gword ptr [rbp-0x28]
+ lea rsi, [rbp-0x28] + mov rdi, gword ptr [rbp-0x38]
; gcrRegs +[rdi] call <unknown method> ; gcrRegs -[rdi] ; gcr arg pop 0
- movzx rdi, byte ptr [rbp-0x18]
+ movzx rdi, byte ptr [rbp-0x28]
call [<unknown method>] ; gcr arg pop 0
- mov rdi, gword ptr [rbp-0x20]
+ mov rdi, gword ptr [rbp-0x30]
; gcrRegs +[rdi]
- mov rdi, qword ptr [rdi]
+ mov rbx, qword ptr [rdi] + mov rdi, rbx
; gcrRegs -[rdi] call CORINFO_HELP_NEWSFAST ; gcrRegs +[rax] ; gcr arg pop 0
- mov rbx, rax - ; gcrRegs +[rbx] - mov rdi, rbx
+ mov r15, rax + ; gcrRegs +[r15] + mov rdi, r15
; gcrRegs +[rdi] call [System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]:.ctor():this] ; gcrRegs -[rax rdi] ; gcr arg pop 0
- mov rdi, gword ptr [rbp-0x20]
+ mov rdi, gword ptr [rbp-0x30]
; gcrRegs +[rdi] mov rdi, gword ptr [rdi+0x08] cmp dword ptr [rdi], edi @@ -90,16 +93,16 @@ G_M6444_IG05: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 mov rdi, rax ; gcrRegs +[rdi]
- mov gword ptr [rbp-0x30], rdi
+ mov gword ptr [rbp-0x40], rdi
; GC ptr vars +{V04}
- ;; size=71 bbWeight=1 PerfScore 24.25 -G_M6444_IG06: ; bbWeight=1, gcVars=0000000000000830 {V00 V02 V04}, gcrefRegs=0088 {rbx rdi}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=74 bbWeight=1 PerfScore 24.50 +G_M6444_IG06: ; bbWeight=1, gcVars=000000000000100C {V00 V02 V04}, gcrefRegs=8080 {rdi r15}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rax]
- jmp SHORT G_M6444_IG14
+ jmp SHORT G_M6444_IG11
;; size=2 bbWeight=1 PerfScore 2.00
-G_M6444_IG07: ; bbWeight=2, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M6444_IG07: ; bbWeight=2, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rdi]
- mov rdi, gword ptr [rbp-0x20]
+ mov rdi, gword ptr [rbp-0x30]
; gcrRegs +[rdi] mov rsi, qword ptr [rdi] mov rax, qword ptr [rsi+0x38] @@ -108,23 +111,26 @@ G_M6444_IG07: ; bbWeight=2, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byre test r11, r11 je SHORT G_M6444_IG09 ;; size=23 bbWeight=2 PerfScore 20.50
-G_M6444_IG08: ; bbWeight=1.60, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M6444_IG08: ; bbWeight=1.60, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rdi] jmp SHORT G_M6444_IG10 ;; size=2 bbWeight=1.60 PerfScore 3.20
-G_M6444_IG09: ; bbWeight=0.40, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+G_M6444_IG09: ; bbWeight=0.40, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref
mov rdi, rsi mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0 mov r11, rax ;; size=21 bbWeight=0.40 PerfScore 0.70
-G_M6444_IG10: ; bbWeight=2, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - mov rdi, gword ptr [rbp-0x30]
+G_M6444_IG10: ; bbWeight=2, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref + mov rdi, gword ptr [rbp-0x40]
; gcrRegs +[rdi] call [r11] ; gcrRegs -[rdi] +[rax] ; gcr arg pop 0
+ mov rdi, qword ptr [rbx+0x38] + mov rdi, qword ptr [rdi] + mov r14, qword ptr [rdi]
mov rdi, rax ; gcrRegs +[rdi] mov rax, qword ptr [rax] @@ -135,139 +141,127 @@ G_M6444_IG10: ; bbWeight=2, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byre ; gcr arg pop 0 mov rsi, rax ; gcrRegs +[rsi]
- test rsi, rsi - je SHORT G_M6444_IG13 - ;; size=28 bbWeight=2 PerfScore 25.50 -G_M6444_IG11: ; bbWeight=1, gcrefRegs=0049 {rax rbx rsi}, byrefRegs=0000 {}, byref, isz - mov rdi, gword ptr [rbp-0x20] - ; gcrRegs +[rdi] - mov rcx, qword ptr [rdi] - mov rcx, qword ptr [rcx+0x38] - mov rcx, qword ptr [rcx] - mov rcx, qword ptr [rcx] - cmp qword ptr [rsi], rcx - je SHORT G_M6444_IG13 - ;; size=22 bbWeight=1 PerfScore 13.00 -G_M6444_IG12: ; bbWeight=0.50, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rsi rdi] - mov rdi, rcx - mov rsi, rax - ; gcrRegs +[rsi]
+ mov rdi, r14
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rsi] ; gcr arg pop 0 mov rsi, rax ; gcrRegs +[rsi]
- ;; size=14 bbWeight=0.50 PerfScore 0.88 -G_M6444_IG13: ; bbWeight=2, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rdi, rbx
+ mov rdi, r15
; gcrRegs +[rdi] call [<unknown method>]
- ; gcrRegs -[rsi rdi]
+ ; gcrRegs -[rax rsi rdi]
; gcr arg pop 0
- mov rdi, gword ptr [rbp-0x30]
+ mov rdi, gword ptr [rbp-0x40]
; gcrRegs +[rdi]
- ;; size=13 bbWeight=2 PerfScore 8.50 -G_M6444_IG14: ; bbWeight=8, gcrefRegs=0088 {rbx rdi}, byrefRegs=0000 {}, byref
+ ;; size=57 bbWeight=2 PerfScore 46.50 +G_M6444_IG11: ; bbWeight=8, gcrefRegs=8080 {rdi r15}, byrefRegs=0000 {}, byref, isz
mov r11, 0xD1FFAB1E ; code for <unknown method> call [r11]<unknown method> ; gcrRegs -[rdi] ; gcr arg pop 0 test eax, eax
- jne G_M6444_IG07 - ;; size=21 bbWeight=8 PerfScore 36.00 -G_M6444_IG15: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - mov rdi, gword ptr [rbp-0x30]
+ jne SHORT G_M6444_IG07 + ;; size=17 bbWeight=8 PerfScore 36.00 +G_M6444_IG12: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref + mov rdi, gword ptr [rbp-0x40]
; gcrRegs +[rdi] mov r11, 0xD1FFAB1E ; code for <unknown method>
- ; GC ptr vars -{V04}
+ ; GC ptr vars -{V02 V04}
call [r11]<unknown method> ; gcrRegs -[rdi] ; gcr arg pop 0 nop ;; size=18 bbWeight=1 PerfScore 4.50
-G_M6444_IG16: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - cmp byte ptr [rbp-0x18], 0 - je SHORT G_M6444_IG18
+G_M6444_IG13: ; bbWeight=1, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref, isz + cmp byte ptr [rbp-0x28], 0 + je SHORT G_M6444_IG15
;; size=6 bbWeight=1 PerfScore 3.00
-G_M6444_IG17: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - mov rdi, gword ptr [rbp-0x28]
+G_M6444_IG14: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref + mov rdi, gword ptr [rbp-0x38]
; gcrRegs +[rdi] ...

+2 (+1.05%) : 8691.dasm - FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo:MangledNameForType(System.String):System.String:this (FullOpts)

@@ -8,36 +8,33 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 4 ) ref -> rbx this class-hnd single-def <FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo> -; V01 arg1 [V01,T01] ( 5, 3.50) ref -> r15 class-hnd single-def <System.String>
+; V00 this [V00,T01] ( 4, 3.50) ref -> r15 this class-hnd single-def <FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo> +; V01 arg1 [V01,T00] ( 5, 3.50) ref -> rbx class-hnd single-def <System.String>
; V02 loc0 [V02 ] ( 2, 1 ) struct ( 8) [rbp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <Microsoft.FSharp.Core.FSharpValueOption`1[int]> ;* V03 loc1 [V03 ] ( 0, 0 ) struct ( 8) zero-ref <Microsoft.FSharp.Core.FSharpValueOption`1[int]> ;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref single-def ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T09] ( 2, 1 ) int -> rdi -; V07 tmp2 [V07,T04] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <Microsoft.FSharp.Core.FSharpValueOption`1[int]>
+; V06 tmp1 [V06,T06] ( 2, 1 ) int -> rdi +; V07 tmp2 [V07,T02] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <Microsoft.FSharp.Core.FSharpValueOption`1[int]>
;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref single-def ;* V09 tmp4 [V09 ] ( 0, 0 ) ref -> zero-ref single-def ;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref ;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref
-; V12 tmp7 [V12,T10] ( 2, 1 ) int -> rax
+; V12 tmp7 [V12,T07] ( 2, 1 ) int -> rax
; V13 tmp8 [V13 ] ( 2, 2 ) struct ( 8) [rbp-0x20] do-not-enreg[XS] addr-exposed ld-addr-op class-hnd exact "Single-def Box Helper" <System.Int32> ;* V14 tmp9 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp10 [V15 ] ( 0, 0 ) ref -> zero-ref single-def
-;* V16 tmp11 [V16,T07] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V17 tmp12 [V17,T02] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V18 tmp13 [V18,T08] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V19 tmp14 [V19,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V20 tmp15 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpValueOption`1[int]> -; V21 tmp16 [V21 ] ( 2, 1 ) int -> [rbp-0x18] do-not-enreg[X] addr-exposed "field V02.item (fldOffset=0x0)" P-DEP -; V22 tmp17 [V22 ] ( 2, 1 ) int -> [rbp-0x14] do-not-enreg[X] addr-exposed "field V02._tag (fldOffset=0x4)" P-DEP -;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref single-def "field V03.item (fldOffset=0x0)" P-INDEP -;* V24 tmp19 [V24 ] ( 0, 0 ) int -> zero-ref single-def "field V03._tag (fldOffset=0x4)" P-INDEP -; V25 tmp20 [V25 ] ( 2, 1.50) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V13.m_value (fldOffset=0x0)" P-DEP -;* V26 tmp21 [V26,T11] ( 0, 0 ) int -> zero-ref single-def "field V20.item (fldOffset=0x0)" P-INDEP -;* V27 tmp22 [V27,T12] ( 0, 0 ) int -> zero-ref single-def "field V20._tag (fldOffset=0x4)" P-INDEP -; V28 tmp23 [V28,T05] ( 2, 2 ) ref -> rdx single-def "argument with side effect" -; V29 tmp24 [V29,T06] ( 2, 2 ) ref -> rdx single-def "argument with side effect"
+;* V16 tmp11 [V16 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpValueOption`1[int]> +; V17 tmp12 [V17 ] ( 2, 1 ) int -> [rbp-0x18] do-not-enreg[X] addr-exposed "field V02.item (fldOffset=0x0)" P-DEP +; V18 tmp13 [V18 ] ( 2, 1 ) int -> [rbp-0x14] do-not-enreg[X] addr-exposed "field V02._tag (fldOffset=0x4)" P-DEP +;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref single-def "field V03.item (fldOffset=0x0)" P-INDEP +;* V20 tmp15 [V20 ] ( 0, 0 ) int -> zero-ref single-def "field V03._tag (fldOffset=0x4)" P-INDEP +; V21 tmp16 [V21 ] ( 2, 1.50) int -> [rbp-0x20] do-not-enreg[X] addr-exposed "field V13.m_value (fldOffset=0x0)" P-DEP +;* V22 tmp17 [V22,T08] ( 0, 0 ) int -> zero-ref single-def "field V16.item (fldOffset=0x0)" P-INDEP +;* V23 tmp18 [V23,T09] ( 0, 0 ) int -> zero-ref single-def "field V16._tag (fldOffset=0x4)" P-INDEP +; V24 tmp19 [V24,T03] ( 2, 2 ) ref -> rdx single-def "argument with side effect" +; V25 tmp20 [V25,T04] ( 2, 2 ) ref -> rdx single-def "argument with side effect" +; V26 cse0 [V26,T05] ( 3, 1.50) ref -> r15 "CSE - moderate"
; ; Lcl frame size = 16 @@ -49,13 +46,13 @@ G_M40596_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 { lea rbp, [rsp+0x20] xor eax, eax mov qword ptr [rbp-0x18], rax
- mov rbx, rdi - ; gcrRegs +[rbx] - mov r15, rsi
+ mov r15, rdi
; gcrRegs +[r15]
+ mov rbx, rsi + ; gcrRegs +[rbx]
;; size=25 bbWeight=1 PerfScore 5.50 G_M40596_IG02: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz
- mov rsi, rbx
+ mov rsi, r15
; gcrRegs +[rsi] mov rdi, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_ISINSTANCEOFCLASS @@ -65,10 +62,10 @@ G_M40596_IG02: ; bbWeight=1, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, ;; size=23 bbWeight=1 PerfScore 2.75 G_M40596_IG03: ; bbWeight=0.50, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax]
- mov edi, dword ptr [rbx+0x08]
+ mov edi, dword ptr [r15+0x08]
test edi, edi je SHORT G_M40596_IG04
- mov rdi, r15
+ mov rdi, rbx
; gcrRegs +[rdi] call [FSharp.Compiler.Syntax.PrettyNaming:TryDemangleGenericNameAndPos(System.String):Microsoft.FSharp.Core.FSharpValueOption`1[int]] ; gcrRegs -[rdi] @@ -88,10 +85,10 @@ G_M40596_IG03: ; bbWeight=0.50, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 ; gcrRegs -[rax rdx rsi] test eax, eax jne SHORT G_M40596_IG06
- ;; size=71 bbWeight=0.50 PerfScore 8.62 -G_M40596_IG04: ; bbWeight=0.50, gcrefRegs=8000 {r15}, byrefRegs=0000 {}, byref - ; gcrRegs -[rbx] - mov rax, r15
+ ;; size=72 bbWeight=0.50 PerfScore 8.62 +G_M40596_IG04: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + ; gcrRegs -[r15] + mov rax, rbx
; gcrRegs +[rax] ;; size=3 bbWeight=0.50 PerfScore 0.12 G_M40596_IG05: ; bbWeight=0.50, epilog, nogc, extend @@ -102,11 +99,11 @@ G_M40596_IG05: ; bbWeight=0.50, epilog, nogc, extend ret ;; size=9 bbWeight=0.50 PerfScore 1.38 G_M40596_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=8008 {rbx r15}, byrefRegs=0000 {}, gcvars, byref
- ; gcrRegs -[rax] +[rbx] - mov eax, dword ptr [rbx+0x08]
+ ; gcrRegs -[rax] +[r15] + mov eax, dword ptr [r15+0x08]
mov dword ptr [rbp-0x20], eax call [<unknown method>]
- ; gcrRegs -[rbx] +[rax]
+ ; gcrRegs -[r15] +[rax]
mov rdx, rax ; gcrRegs +[rdx] lea rdi, [rbp-0x20] @@ -116,14 +113,14 @@ G_M40596_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=800 ; gcrRegs -[rdx rsi] mov rdx, rax ; gcrRegs +[rdx]
- mov rdi, r15
+ mov rdi, rbx
; gcrRegs +[rdi] mov rsi, 0xD1FFAB1E ; gcrRegs +[rsi] call [<unknown method>]
- ; gcrRegs -[rdx rsi rdi r15]
+ ; gcrRegs -[rdx rbx rsi rdi]
nop
- ;; size=50 bbWeight=0.50 PerfScore 7.00
+ ;; size=51 bbWeight=0.50 PerfScore 7.00
G_M40596_IG07: ; bbWeight=0.50, epilog, nogc, extend add rsp, 16 pop rbx @@ -132,7 +129,7 @@ G_M40596_IG07: ; bbWeight=0.50, epilog, nogc, extend ret ;; size=9 bbWeight=0.50 PerfScore 1.38
-; Total bytes of code 190, prolog size 19, PerfScore 26.75, instruction count 54, allocated bytes for code 190 (MethodHash=19a2616b) for method FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo:MangledNameForType(System.String):System.String:this (FullOpts)
+; Total bytes of code 192, prolog size 19, PerfScore 26.75, instruction count 54, allocated bytes for code 192 (MethodHash=19a2616b) for method FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo:MangledNameForType(System.String):System.String:this (FullOpts)
; ============================================================ Unwind Info:

+14 (+3.35%) : 32359.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.Canon]:<.cctor>b4_0(System.Object):this (FullOpts)

@@ -7,64 +7,65 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T07] ( 3, 3 ) ref -> [rbp-0x38] this class-hnd EH-live single-def <System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]> -; V01 arg1 [V01,T00] ( 6, 5.50) ref -> rbx class-hnd single-def <System.Object> -; V02 loc0 [V02,T01] ( 9, 6 ) ref -> [rbp-0x40] do-not-enreg[M] class-hnd exact EH-live <<unknown class>> -; V03 loc1 [V03,T11] ( 4, 4 ) ref -> r14 class-hnd single-def <<unknown class>> -; V04 loc2 [V04,T17] ( 2, 1 ) int -> [rbp-0x24] do-not-enreg[Z] EH-live
+; V00 this [V00,T07] ( 3, 3 ) ref -> [rbp-0x40] this class-hnd EH-live single-def <System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]> +; V01 arg1 [V01,T01] ( 4, 4 ) ref -> rbx class-hnd single-def <System.Object> +; V02 loc0 [V02,T00] ( 10, 6 ) ref -> [rbp-0x48] class-hnd exact EH-live spill-single-def <<unknown class>> +; V03 loc1 [V03,T11] ( 4, 4 ) ref -> r13 class-hnd single-def <<unknown class>> +; V04 loc2 [V04,T17] ( 2, 1 ) int -> [rbp-0x2C] do-not-enreg[Z] EH-live
;* V05 loc3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <<unknown class>> ; V06 loc4 [V06,T19] ( 4, 0 ) ref -> rbx class-hnd single-def <<unknown class>> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V08 tmp1 [V08,T16] ( 2, 3 ) long -> rsi "spilling helperCall" -;* V09 tmp2 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>>
+;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V11 tmp4 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V12 tmp5 [V12,T02] ( 4, 6 ) long -> r11 "VirtualCall with runtime lookup" -;* V13 tmp6 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V14 tmp7 [V14,T03] ( 4, 6 ) long -> r11 "VirtualCall with runtime lookup" -; V15 tmp8 [V15,T20] ( 3, 0 ) ref -> rsi class-hnd single-def "impSpillSpecialSideEff" <<unknown class>> -; V16 tmp9 [V16 ] ( 2, 0 ) struct ( 8) [rbp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Threading.CancellationToken> -;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 8) zero-ref multireg-ret single-def "spilled call-like call argument" <System.Threading.CancellationToken> -; V18 tmp11 [V18 ] ( 2, 0 ) ref -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V16._source (fldOffset=0x0)" P-DEP -; V19 tmp12 [V19,T21] ( 2, 0 ) ref -> rsi "field V17._source (fldOffset=0x0)" P-INDEP
+; V11 tmp4 [V11,T02] ( 4, 6 ) long -> r11 "VirtualCall with runtime lookup" +;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V13 tmp6 [V13,T03] ( 4, 6 ) long -> r11 "VirtualCall with runtime lookup" +; V14 tmp7 [V14,T20] ( 3, 0 ) ref -> rsi class-hnd single-def "impSpillSpecialSideEff" <<unknown class>> +; V15 tmp8 [V15 ] ( 2, 0 ) struct ( 8) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Threading.CancellationToken> +;* V16 tmp9 [V16 ] ( 0, 0 ) struct ( 8) zero-ref multireg-ret single-def "spilled call-like call argument" <System.Threading.CancellationToken> +; V17 tmp10 [V17 ] ( 2, 0 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V15._source (fldOffset=0x0)" P-DEP +; V18 tmp11 [V18,T21] ( 2, 0 ) ref -> rsi "field V16._source (fldOffset=0x0)" P-INDEP +; V19 tmp12 [V19,T14] ( 2, 4 ) long -> rsi "argument with side effect"
; V20 tmp13 [V20,T13] ( 2, 4 ) ref -> rsi single-def "argument with side effect"
-; V21 tmp14 [V21,T14] ( 2, 4 ) long -> rax "argument with side effect"
+; V21 tmp14 [V21,T15] ( 2, 4 ) long -> rdi "argument with side effect"
; V22 PSPSym [V22,T18] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym"
-; V23 cse0 [V23,T15] ( 3, 3 ) long -> rax "CSE - moderate" -; V24 cse1 [V24,T08] ( 6, 4.56) long -> r15 "CSE - aggressive"
+; V23 cse0 [V23,T16] ( 3, 3 ) long -> r14 "CSE - moderate" +; V24 cse1 [V24,T08] ( 6, 4.56) long -> r15 "CSE - moderate"
; V25 rat0 [V25,T10] ( 3, 4.40) long -> rsi "Spilling to split statement for tree"
-; V26 rat1 [V26,T12] ( 3, 4 ) long -> rax "runtime lookup" -; V27 rat2 [V27,T04] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
+; V26 rat1 [V26,T12] ( 3, 4 ) long -> r14 "runtime lookup" +; V27 rat2 [V27,T04] ( 3, 5.60) long -> r14 "fgMakeTemp is creating a new local variable"
; V28 rat3 [V28,T05] ( 3, 5.60) long -> r11 "fgMakeTemp is creating a new local variable" ; V29 rat4 [V29,T06] ( 3, 5.60) long -> rdi "spilling expr" ; V30 rat5 [V30,T09] ( 3, 4.48) long -> r11 "fgMakeTemp is creating a new local variable" ;
-; Lcl frame size = 56
+; Lcl frame size = 48
G_M57110_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbp push r15 push r14
+ push r13
push rbx
- sub rsp, 56
+ sub rsp, 48
lea rbp, [rsp+0x50] xor eax, eax
- mov qword ptr [rbp-0x30], rax
+ mov qword ptr [rbp-0x38], rax
mov qword ptr [rbp-0x50], rsp
- mov qword ptr [rbp-0x20], rdi - mov gword ptr [rbp-0x38], rdi
+ mov qword ptr [rbp-0x28], rdi + mov gword ptr [rbp-0x40], rdi
; GC ptr vars +{V00} mov rbx, rsi ; gcrRegs +[rbx]
- ;; size=36 bbWeight=1 PerfScore 9.25
+ ;; size=38 bbWeight=1 PerfScore 10.25
G_M57110_IG02: ; bbWeight=1, gcVars=0000000000000080 {V00}, gcrefRegs=0088 {rbx rdi}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[rdi] mov r15, qword ptr [rdi] mov rsi, r15 mov rax, qword ptr [rsi+0x38] mov rax, qword ptr [rax]
- mov rax, qword ptr [rax+0x10] - test rax, rax
+ mov r14, qword ptr [rax+0x10] + test r14, r14
je SHORT G_M57110_IG04 ;; size=22 bbWeight=1 PerfScore 9.50 G_M57110_IG03: ; bbWeight=0.80, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz @@ -76,30 +77,29 @@ G_M57110_IG04: ; bbWeight=0.20, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0
- ;; size=18 bbWeight=0.20 PerfScore 0.30
+ mov r14, rax + ;; size=21 bbWeight=0.20 PerfScore 0.35
G_M57110_IG05: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
- mov rsi, rax - mov gword ptr [rbp-0x40], rbx - ; GC ptr vars +{V02} - test rbx, rbx - je SHORT G_M57110_IG08 - ;; size=12 bbWeight=1 PerfScore 2.50 -G_M57110_IG06: ; bbWeight=0.50, gcVars=0000000000000082 {V00 V02}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz - cmp qword ptr [rbx], rsi - jne SHORT G_M57110_IG08 - ;; size=5 bbWeight=0.50 PerfScore 2.00 -G_M57110_IG07: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - mov rsi, gword ptr [rbp-0x40]
+ mov rsi, r14 + mov rdi, rsi + mov rsi, rbx
; gcrRegs +[rsi]
- mov r14, gword ptr [rsi+0x40] - ; gcrRegs +[r14] - test r14, r14 - jne SHORT G_M57110_IG10 - ;; size=13 bbWeight=1 PerfScore 4.25 -G_M57110_IG08: ; bbWeight=1, gcVars=0000000000000080 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[rsi r14] - ; GC ptr vars -{V02} - mov rdi, rax
+ call CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[rsi] +[rax] + ; gcr arg pop 0 + mov gword ptr [rbp-0x48], rax + ; GC ptr vars +{V02} + test rax, rax + je SHORT G_M57110_IG06 + mov r13, gword ptr [rax+0x40] + ; gcrRegs +[r13] + test r13, r13 + jne SHORT G_M57110_IG08 + ;; size=32 bbWeight=1 PerfScore 7.25 +G_M57110_IG06: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax r13] + ; GC ptr vars -{V00 V02} + mov rdi, r14
mov rsi, rbx ; gcrRegs +[rsi] call [<unknown method>] @@ -107,116 +107,115 @@ G_M57110_IG08: ; bbWeight=1, gcVars=0000000000000080 {V00}, gcrefRegs=000 ; gcr arg pop 0 nop ;; size=13 bbWeight=1 PerfScore 3.75
-G_M57110_IG09: ; bbWeight=1, epilog, nogc, extend - add rsp, 56
+G_M57110_IG07: ; bbWeight=1, epilog, nogc, extend + add rsp, 48
pop rbx
+ pop r13
pop r14 pop r15 pop rbp ret
- ;; size=11 bbWeight=1 PerfScore 3.25 -G_M57110_IG10: ; bbWeight=1, gcVars=0000000000000082 {V00 V02}, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[r14] - ; GC ptr vars +{V01 V02} - mov rsi, gword ptr [rbp-0x40] - ; gcrRegs +[rsi] - xor rax, rax - ; gcrRegs +[rax] - mov gword ptr [rsi+0x40], rax - mov rsi, qword ptr [r15+0x38] - ; gcrRegs -[rsi] - mov rsi, qword ptr [rsi] - mov r11, qword ptr [rsi+0x18]
+ ;; size=13 bbWeight=1 PerfScore 3.75 +G_M57110_IG08: ; bbWeight=1, gcVars=0000000000000081 {V00 V02}, gcrefRegs=2001 {rax r13}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[rax r13] + ; GC ptr vars +{V00 V02} + xor rdi, rdi + ; gcrRegs +[rdi] + mov gword ptr [rax+0x40], rdi + mov rdi, qword ptr [r15+0x38] + ; gcrRegs -[rdi] + mov rdi, qword ptr [rdi] + mov r11, qword ptr [rdi+0x18]
test r11, r11
- je SHORT G_M57110_IG12 - ;; size=26 bbWeight=1 PerfScore 9.50 -G_M57110_IG11: ; bbWeight=0.80, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz
+ je SHORT G_M57110_IG10 + ;; size=22 bbWeight=1 PerfScore 8.50 +G_M57110_IG09: ; bbWeight=0.80, gcrefRegs=2000 {r13}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rax]
- jmp SHORT G_M57110_IG13
+ jmp SHORT G_M57110_IG11
;; size=2 bbWeight=0.80 PerfScore 1.60
-G_M57110_IG12: ; bbWeight=0.20, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref
+G_M57110_IG10: ; bbWeight=0.20, gcrefRegs=2000 {r13}, byrefRegs=0000 {}, byref
mov rdi, r15 mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0 mov r11, rax ;; size=21 bbWeight=0.20 PerfScore 0.35
-G_M57110_IG13: ; bbWeight=1, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref - mov rsi, gword ptr [rbp-0x40] - ; gcrRegs +[rsi] - movsx rsi, word ptr [rsi+0x48] - ; gcrRegs -[rsi] - mov rdi, r14
+G_M57110_IG11: ; bbWeight=1, gcrefRegs=2000 {r13}, byrefRegs=0000 {}, byref + mov rax, gword ptr [rbp-0x48] + ; gcrRegs +[rax] + movsx rsi, word ptr [rax+0x48] + mov rdi, r13
; gcrRegs +[rdi] call [r11]
- ; gcrRegs -[rdi]
+ ; gcrRegs -[rax rdi]
; gcr arg pop 0
- mov dword ptr [rbp-0x24], eax
+ mov dword ptr [rbp-0x2C], eax
;; size=18 bbWeight=1 PerfScore 9.25
-G_M57110_IG14: ; bbWeight=1, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz
+G_M57110_IG12: ; bbWeight=1, gcrefRegs=2000 {r13}, byrefRegs=0000 {}, byref, isz
mov rdi, qword ptr [r15+0x38] mov rdi, qword ptr [rdi] cmp qword ptr [rdi+0x08], 32
- jle SHORT G_M57110_IG17
+ jle SHORT G_M57110_IG15
;; size=14 bbWeight=1 PerfScore 8.00
-G_M57110_IG15: ; bbWeight=0.80, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz
+G_M57110_IG13: ; bbWeight=0.80, gcrefRegs=2000 {r13}, byrefRegs=0000 {}, byref, isz
mov r11, qword ptr [rdi+0x20] test r11, r11
- je SHORT G_M57110_IG17
+ je SHORT G_M57110_IG15
;; size=9 bbWeight=0.80 PerfScore 2.60
-G_M57110_IG16: ; bbWeight=0.64, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref, isz - jmp SHORT G_M57110_IG18
+G_M57110_IG14: ; bbWeight=0.64, gcrefRegs=2000 {r13}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M57110_IG16
;; size=2 bbWeight=0.64 PerfScore 1.28
-G_M57110_IG17: ; bbWeight=0.36, gcrefRegs=4000 {r14}, byrefRegs=0000 {}, byref
+G_M57110_IG15: ; bbWeight=0.36, gcrefRegs=2000 {r13}, byrefRegs=0000 {}, byref
mov rdi, r15 mov rsi, 0xD1FFAB1E ; global ptr call CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0 mov r11, rax ...

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.linux.x64.checked.mch 97 82 10 5 -1,655 +151
benchmarks.run_pgo.linux.x64.checked.mch 1,918 1,876 42 0 -32,506 +168
benchmarks.run_tiered.linux.x64.checked.mch 37 31 6 0 -594 +153
coreclr_tests.run.linux.x64.checked.mch 221 178 17 26 -2,935 +572
libraries.crossgen2.linux.x64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.linux.x64.checked.mch 564 519 27 18 -11,312 +240
libraries_tests.run.linux.x64.Release.mch 1,617 1,529 69 19 -31,502 +1,313
librariestestsnotieredcompilation.run.linux.x64.Release.mch 771 714 32 25 -16,843 +524
realworld.run.linux.x64.checked.mch 127 118 4 5 -2,297 +25
smoke_tests.nativeaot.linux.x64.checked.mch 0 0 0 0 -0 +0
5,352 5,047 207 98 -99,644 +3,146

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.linux.x64.checked.mch 31,624 3,135 28,489 0 (0.00%) 3,352 (9.58%)
benchmarks.run_pgo.linux.x64.checked.mch 144,023 61,749 82,274 0 (0.00%) 15,225 (9.56%)
benchmarks.run_tiered.linux.x64.checked.mch 57,091 43,269 13,822 0 (0.00%) 610 (1.06%)
coreclr_tests.run.linux.x64.checked.mch 587,747 355,076 232,671 4 (0.00%) 10,058 (1.68%)
libraries.crossgen2.linux.x64.checked.mch 1,919 0 1,919 0 (0.00%) 0 (0.00%)
libraries.pmi.linux.x64.checked.mch 268,400 6 268,394 0 (0.00%) 28,303 (9.54%)
libraries_tests.run.linux.x64.Release.mch 711,350 494,448 216,902 0 (0.00%) 40,021 (5.33%)
librariestestsnotieredcompilation.run.linux.x64.Release.mch 264,592 21,912 242,680 0 (0.00%) 40,747 (13.34%)
realworld.run.linux.x64.checked.mch 28,693 7 28,686 0 (0.00%) 4,390 (13.27%)
smoke_tests.nativeaot.linux.x64.checked.mch 49 0 49 0 (0.00%) 0 (0.00%)
2,095,488 979,602 1,115,886 4 (0.00%) 142,706 (6.38%)

jit-analyze output

benchmarks.run.linux.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 8905292 (overridden on cmd)
Total bytes of diff: 8903788 (overridden on cmd)
Total bytes of delta: -1504 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          19 : 14463.dasm (20.21 % of base)
          19 : 10144.dasm (20.21 % of base)
          19 : 13451.dasm (20.21 % of base)
          19 : 17413.dasm (20.21 % of base)
          19 : 28990.dasm (20.21 % of base)
          19 : 33412.dasm (20.21 % of base)
          14 : 6180.dasm (3.35 % of base)
          14 : 9877.dasm (1.94 % of base)
           6 : 5051.dasm (0.53 % of base)
           3 : 2274.dasm (0.45 % of base)

Top file improvements (bytes):
        -107 : 4655.dasm (-3.41 % of base)
         -78 : 6592.dasm (-12.75 % of base)
         -58 : 7135.dasm (-1.45 % of base)
         -45 : 11168.dasm (-4.55 % of base)
         -37 : 9323.dasm (-4.76 % of base)
         -36 : 20118.dasm (-5.87 % of base)
         -34 : 11276.dasm (-11.68 % of base)
         -33 : 7860.dasm (-30.00 % of base)
         -30 : 8689.dasm (-23.62 % of base)
         -29 : 12806.dasm (-14.65 % of base)
         -29 : 21335.dasm (-11.07 % of base)
         -28 : 425.dasm (-36.36 % of base)
         -28 : 9352.dasm (-8.19 % of base)
         -28 : 19534.dasm (-28.87 % of base)
         -26 : 11119.dasm (-4.19 % of base)
         -26 : 22531.dasm (-6.47 % of base)
         -26 : 23800.dasm (-14.53 % of base)
         -25 : 19881.dasm (-28.74 % of base)
         -25 : 1899.dasm (-26.60 % of base)
         -24 : 17499.dasm (-2.63 % of base)

53 total files with Code Size differences (43 improved, 10 regressed), 5 unchanged.

Top method regressions (bytes):
          19 (20.21 % of base) : 10144.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
          19 (20.21 % of base) : 33412.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
          19 (20.21 % of base) : 13451.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          19 (20.21 % of base) : 14463.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
          19 (20.21 % of base) : 17413.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
          19 (20.21 % of base) : 28990.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          14 (1.94 % of base) : 9877.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          14 (3.35 % of base) : 6180.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           6 (0.53 % of base) : 5051.dasm - ProtoBuf.Internal.TypeHelper`1[System.__Canon]:.cctor() (FullOpts)
           3 (0.45 % of base) : 2274.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)

Top method improvements (bytes):
        -107 (-3.41 % of base) : 4655.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -78 (-12.75 % of base) : 6592.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (FullOpts)
         -58 (-1.45 % of base) : 7135.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -45 (-4.55 % of base) : 11168.dasm - System.Xml.Serialization.FieldModel:.ctor(System.Reflection.MemberInfo,System.Type,System.Xml.Serialization.TypeDesc):this (FullOpts)
         -37 (-4.76 % of base) : 9323.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -36 (-5.87 % of base) : 20118.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -34 (-11.68 % of base) : 11276.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -33 (-30.00 % of base) : 7860.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -30 (-23.62 % of base) : 8689.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -29 (-14.65 % of base) : 12806.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:GenerateValue[System.__Canon](System.Random):System.__Canon (FullOpts)
         -29 (-11.07 % of base) : 21335.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -28 (-28.87 % of base) : 19534.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -28 (-36.36 % of base) : 425.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-8.19 % of base) : 9352.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -26 (-14.53 % of base) : 23800.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-6.47 % of base) : 22531.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -26 (-4.19 % of base) : 11119.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
         -25 (-26.60 % of base) : 1899.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -25 (-28.74 % of base) : 19881.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -24 (-2.63 % of base) : 17499.dasm - System.Xml.XmlNode:AppendChild(System.Xml.XmlNode):System.Xml.XmlNode:this (FullOpts)

Top method regressions (percentages):
          19 (20.21 % of base) : 10144.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
          19 (20.21 % of base) : 33412.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
          19 (20.21 % of base) : 13451.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
          19 (20.21 % of base) : 14463.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
          19 (20.21 % of base) : 17413.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
          19 (20.21 % of base) : 28990.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          14 (3.35 % of base) : 6180.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
          14 (1.94 % of base) : 9877.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           6 (0.53 % of base) : 5051.dasm - ProtoBuf.Internal.TypeHelper`1[System.__Canon]:.cctor() (FullOpts)
           3 (0.45 % of base) : 2274.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)

Top method improvements (percentages):
         -23 (-50.00 % of base) : 3599.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-36.36 % of base) : 425.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -33 (-30.00 % of base) : 7860.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -21 (-29.58 % of base) : 10082.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -16 (-29.09 % of base) : 7179.dasm - System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -28 (-28.87 % of base) : 19534.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -25 (-28.74 % of base) : 19881.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -25 (-26.60 % of base) : 1899.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -18 (-25.35 % of base) : 8186.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -30 (-23.62 % of base) : 8689.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -16 (-21.05 % of base) : 12493.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -17 (-16.19 % of base) : 12222.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,int,System.__Canon]:Add(int,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -17 (-16.19 % of base) : 4657.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,System.__Canon,System.__Canon]:Add(System.__Canon,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -29 (-14.65 % of base) : 12806.dasm - BenchmarkDotNet.Extensions.ValuesGenerator:GenerateValue[System.__Canon](System.Random):System.__Canon (FullOpts)
         -26 (-14.53 % of base) : 23800.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -14 (-14.43 % of base) : 20328.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -21 (-13.13 % of base) : 1205.dasm - System.Threading.Tasks.TaskFactory`1+<>c__56`1[System.__Canon,System.__Canon]:<ContinueWhenAllImpl>b__56_0(System.Threading.Tasks.Task`1[System.__Canon],System.Object):System.__Canon:this (FullOpts)
         -22 (-12.87 % of base) : 23918.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (FullOpts)
         -78 (-12.75 % of base) : 6592.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (FullOpts)
         -15 (-12.30 % of base) : 19549.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (FullOpts)


benchmarks.run_pgo.linux.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 58396833 (overridden on cmd)
Total bytes of diff: 58364495 (overridden on cmd)
Total bytes of delta: -32338 (-0.06 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          45 : 146139.dasm (2.90 % of base)
          37 : 147909.dasm (2.35 % of base)
          18 : 142617.dasm (9.63 % of base)
          18 : 105775.dasm (9.57 % of base)
           7 : 96090.dasm (0.15 % of base)
           7 : 95032.dasm (0.32 % of base)
           1 : 104371.dasm (0.14 % of base)
           1 : 129732.dasm (0.14 % of base)
           1 : 157776.dasm (0.14 % of base)
           1 : 49904.dasm (0.14 % of base)
           1 : 79483.dasm (0.14 % of base)
           1 : 132819.dasm (0.14 % of base)
           1 : 65296.dasm (0.14 % of base)
           1 : 71523.dasm (0.14 % of base)
           1 : 112139.dasm (0.14 % of base)
           1 : 143071.dasm (0.14 % of base)
           1 : 52867.dasm (0.14 % of base)
           1 : 125051.dasm (0.14 % of base)
           1 : 147360.dasm (0.14 % of base)
           1 : 72192.dasm (0.14 % of base)

Top file improvements (bytes):
        -124 : 96494.dasm (-3.19 % of base)
         -33 : 102619.dasm (-6.99 % of base)
         -30 : 95031.dasm (-1.17 % of base)
         -28 : 50903.dasm (-28.57 % of base)
         -28 : 5391.dasm (-36.36 % of base)
         -27 : 83274.dasm (-7.14 % of base)
         -26 : 19757.dasm (-3.54 % of base)
         -26 : 25497.dasm (-3.54 % of base)
         -26 : 27053.dasm (-3.54 % of base)
         -26 : 33981.dasm (-3.54 % of base)
         -26 : 23145.dasm (-3.54 % of base)
         -26 : 29889.dasm (-3.54 % of base)
         -26 : 32417.dasm (-3.54 % of base)
         -26 : 33257.dasm (-3.54 % of base)
         -26 : 17309.dasm (-3.54 % of base)
         -26 : 20461.dasm (-3.54 % of base)
         -26 : 29601.dasm (-3.54 % of base)
         -26 : 31485.dasm (-3.54 % of base)
         -26 : 31629.dasm (-3.54 % of base)
         -26 : 7553.dasm (-3.54 % of base)

59 total files with Code Size differences (39 improved, 20 regressed), 0 unchanged.

Top method regressions (bytes):
          45 (2.90 % of base) : 146139.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          37 (2.35 % of base) : 147909.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          18 (9.57 % of base) : 105775.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          18 (9.63 % of base) : 142617.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
           7 (0.32 % of base) : 95032.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
           7 (0.15 % of base) : 96090.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location):ubyte:this (Tier1)
           1 (0.14 % of base) : 104371.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 129732.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 157776.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 49904.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 79483.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 132819.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 65296.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 71523.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 112139.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 143071.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 52867.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 125051.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 147360.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 72192.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method improvements (bytes):
        -124 (-3.19 % of base) : 96494.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -33 (-6.99 % of base) : 102619.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -30 (-1.17 % of base) : 95031.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxNode,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
         -28 (-36.36 % of base) : 5391.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-28.57 % of base) : 50903.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -27 (-7.14 % of base) : 83274.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -26 (-3.54 % of base) : 19757.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 25497.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 27053.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 33981.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 23145.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 29889.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 32417.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 33257.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 17309.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 20461.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 29601.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 31485.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 31629.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -26 (-3.54 % of base) : 7553.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          18 (9.63 % of base) : 142617.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          18 (9.57 % of base) : 105775.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          45 (2.90 % of base) : 146139.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          37 (2.35 % of base) : 147909.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
           7 (0.32 % of base) : 95032.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
           7 (0.15 % of base) : 96090.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location):ubyte:this (Tier1)
           1 (0.14 % of base) : 104371.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 129732.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 157776.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 49904.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 79483.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 132819.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 65296.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 71523.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 112139.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 143071.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 52867.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 125051.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 147360.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
           1 (0.14 % of base) : 72192.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method improvements (percentages):
         -28 (-36.36 % of base) : 5391.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-28.57 % of base) : 50903.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -23 (-21.10 % of base) : 91957.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -13 (-10.32 % of base) : 101758.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -22 (-9.02 % of base) : 26144.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -17 (-7.14 % of base) : 91685.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -27 (-7.14 % of base) : 83274.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -33 (-6.99 % of base) : 102619.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -19 (-6.88 % of base) : 101901.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -14 (-6.42 % of base) : 102559.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -12 (-5.66 % of base) : 96491.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
          -9 (-5.59 % of base) : 102206.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -19 (-5.34 % of base) : 33804.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -19 (-5.34 % of base) : 79339.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -17 (-4.58 % of base) : 101407.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -16 (-4.22 % of base) : 105688.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -20 (-4.08 % of base) : 122257.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-4.08 % of base) : 36733.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-4.08 % of base) : 107437.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-4.08 % of base) : 55537.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)


benchmarks.run_tiered.linux.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 16118223 (overridden on cmd)
Total bytes of diff: 16117782 (overridden on cmd)
Total bytes of delta: -441 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          26 : 53064.dasm (22.61 % of base)
          26 : 56645.dasm (22.61 % of base)
          26 : 28766.dasm (22.61 % of base)
          25 : 23810.dasm (21.93 % of base)
          25 : 33810.dasm (21.93 % of base)
          25 : 26754.dasm (21.93 % of base)

Top file improvements (bytes):
         -45 : 25893.dasm (-4.55 % of base)
         -36 : 38633.dasm (-6.37 % of base)
         -29 : 45542.dasm (-11.07 % of base)
         -28 : 6922.dasm (-36.36 % of base)
         -28 : 53547.dasm (-28.57 % of base)
         -26 : 25743.dasm (-3.98 % of base)
         -26 : 45386.dasm (-14.53 % of base)
         -26 : 44439.dasm (-6.47 % of base)
         -25 : 53238.dasm (-26.60 % of base)
         -24 : 4760.dasm (-8.19 % of base)
         -22 : 45901.dasm (-12.87 % of base)
         -22 : 12243.dasm (-9.02 % of base)
         -21 : 24382.dasm (-29.58 % of base)
         -18 : 40133.dasm (-17.31 % of base)
         -18 : 43392.dasm (-3.51 % of base)
         -16 : 27661.dasm (-9.52 % of base)
         -16 : 46046.dasm (-5.03 % of base)
         -16 : 6848.dasm (-4.55 % of base)
         -16 : 27704.dasm (-21.05 % of base)
         -14 : 4764.dasm (-5.62 % of base)

37 total files with Code Size differences (31 improved, 6 regressed), 0 unchanged.

Top method regressions (bytes):
          26 (22.61 % of base) : 56645.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
          26 (22.61 % of base) : 28766.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
          26 (22.61 % of base) : 53064.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)
          25 (21.93 % of base) : 23810.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier1-OSR)
          25 (21.93 % of base) : 26754.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
          25 (21.93 % of base) : 33810.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)

Top method improvements (bytes):
         -45 (-4.55 % of base) : 25893.dasm - System.Xml.Serialization.FieldModel:.ctor(System.Reflection.MemberInfo,System.Type,System.Xml.Serialization.TypeDesc):this (Tier1)
         -36 (-6.37 % of base) : 38633.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier1)
         -29 (-11.07 % of base) : 45542.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-36.36 % of base) : 6922.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-28.57 % of base) : 53547.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -26 (-14.53 % of base) : 45386.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -26 (-6.47 % of base) : 44439.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier1)
         -26 (-3.98 % of base) : 25743.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -25 (-26.60 % of base) : 53238.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -24 (-8.19 % of base) : 4760.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -22 (-12.87 % of base) : 45901.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -22 (-9.02 % of base) : 12243.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -21 (-29.58 % of base) : 24382.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -18 (-3.51 % of base) : 43392.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (Tier1)
         -18 (-17.31 % of base) : 40133.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -16 (-9.52 % of base) : 27661.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -16 (-21.05 % of base) : 27704.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (Tier1)
         -16 (-5.03 % of base) : 46046.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -16 (-4.55 % of base) : 6848.dasm - System.Linq.EnumerableSorter`2[System.__Canon,int]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -14 (-14.14 % of base) : 27903.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Apply(BenchmarkDotNet.Characteristics.CharacteristicObject):System.__Canon:this (Tier1)

Top method regressions (percentages):
          26 (22.61 % of base) : 56645.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
          26 (22.61 % of base) : 28766.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
          26 (22.61 % of base) : 53064.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)
          25 (21.93 % of base) : 23810.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier1-OSR)
          25 (21.93 % of base) : 26754.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
          25 (21.93 % of base) : 33810.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)

Top method improvements (percentages):
         -28 (-36.36 % of base) : 6922.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -21 (-29.58 % of base) : 24382.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -28 (-28.57 % of base) : 53547.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -25 (-26.60 % of base) : 53238.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -16 (-21.05 % of base) : 27704.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (Tier1)
         -18 (-17.31 % of base) : 40133.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -26 (-14.53 % of base) : 45386.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -14 (-14.14 % of base) : 27903.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Apply(BenchmarkDotNet.Characteristics.CharacteristicObject):System.__Canon:this (Tier1)
         -22 (-12.87 % of base) : 45901.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -29 (-11.07 % of base) : 45542.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -13 (-10.48 % of base) : 45781.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -16 (-9.52 % of base) : 27661.dasm - BenchmarkDotNet.Characteristics.Characteristic`1[System.__Canon]:ResolveValueCore(BenchmarkDotNet.Characteristics.CharacteristicObject,System.Object):System.Object:this (Tier1)
         -13 (-9.35 % of base) : 43763.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -22 (-9.02 % of base) : 12243.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -13 (-8.28 % of base) : 44606.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -24 (-8.19 % of base) : 4760.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -13 (-7.88 % of base) : 40084.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -14 (-7.25 % of base) : 45446.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -26 (-6.47 % of base) : 44439.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (Tier1)
         -36 (-6.37 % of base) : 38633.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (Tier1)

37 total methods with Code Size differences (31 improved, 6 regressed).


coreclr_tests.run.linux.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 378320672 (overridden on cmd)
Total bytes of diff: 378318309 (overridden on cmd)
Total bytes of delta: -2363 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          89 : 3054.dasm (1.55 % of base)
          89 : 3075.dasm (1.55 % of base)
          68 : 226231.dasm (1.79 % of base)
          50 : 593896.dasm (4.56 % of base)
          44 : 175567.dasm (400.00 % of base)
          44 : 588190.dasm (3.99 % of base)
          28 : 239368.dasm (3.26 % of base)
          27 : 591427.dasm (1.76 % of base)
          27 : 594703.dasm (1.76 % of base)
          23 : 443661.dasm (0.74 % of base)
          19 : 463130.dasm (4.80 % of base)
          14 : 278043.dasm (1.94 % of base)
          13 : 165458.dasm (1.71 % of base)
          13 : 165238.dasm (1.71 % of base)
          13 : 165705.dasm (1.71 % of base)
           8 : 443692.dasm (0.55 % of base)
           3 : 299213.dasm (0.75 % of base)

Top file improvements (bytes):
         -77 : 594497.dasm (-3.16 % of base)
         -62 : 327323.dasm (-2.41 % of base)
         -61 : 590745.dasm (-2.51 % of base)
         -44 : 225678.dasm (-21.26 % of base)
         -43 : 774.dasm (-4.23 % of base)
         -37 : 183396.dasm (-4.48 % of base)
         -36 : 185436.dasm (-5.87 % of base)
         -30 : 169702.dasm (-10.83 % of base)
         -30 : 169725.dasm (-10.83 % of base)
         -30 : 79.dasm (-3.15 % of base)
         -29 : 186778.dasm (-11.07 % of base)
         -29 : 773.dasm (-3.05 % of base)
         -28 : 183425.dasm (-8.19 % of base)
         -28 : 297234.dasm (-36.36 % of base)
         -28 : 302644.dasm (-36.36 % of base)
         -28 : 231703.dasm (-23.93 % of base)
         -26 : 187988.dasm (-6.47 % of base)
         -26 : 296443.dasm (-20.63 % of base)
         -26 : 188674.dasm (-14.53 % of base)
         -25 : 145311.dasm (-24.27 % of base)

59 total files with Code Size differences (42 improved, 17 regressed), 21 unchanged.

Top method regressions (bytes):
          89 (1.55 % of base) : 3054.dasm - Program:TestCase0003() (FullOpts)
          89 (1.55 % of base) : 3075.dasm - Program:TestCase0003() (FullOpts)
          68 (1.79 % of base) : 226231.dasm - Test_throw2dimarray.App:Main():int (FullOpts)
          50 (4.56 % of base) : 593896.dasm - ILCompiler.InstructionSetSupport:GetHardwareIntrinsicId(int,Internal.TypeSystem.TypeDesc):System.String (Tier1)
          44 (3.99 % of base) : 588190.dasm - ILCompiler.InstructionSetSupport:GetHardwareIntrinsicId(int,Internal.TypeSystem.TypeDesc):System.String (Tier1)
          44 (400.00 % of base) : 175567.dasm - T:TestEntryPoint():int (FullOpts)
          28 (3.26 % of base) : 239368.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          27 (1.76 % of base) : 591427.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          27 (1.76 % of base) : 594703.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          23 (0.74 % of base) : 443661.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          19 (4.80 % of base) : 463130.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          14 (1.94 % of base) : 278043.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          13 (1.71 % of base) : 165458.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.71 % of base) : 165238.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.71 % of base) : 165705.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
           8 (0.55 % of base) : 443692.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
           3 (0.75 % of base) : 299213.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)

Top method improvements (bytes):
         -77 (-3.16 % of base) : 594497.dasm - ILCompiler.ReadyToRunCompilationModuleGroupBase:ComputeTypeReferenceVersionsWithCode(Internal.TypeSystem.TypeDesc):ubyte:this (Tier1)
         -62 (-2.41 % of base) : 327323.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
         -61 (-2.51 % of base) : 590745.dasm - ILCompiler.ReadyToRunCompilationModuleGroupBase:ComputeTypeReferenceVersionsWithCode(Internal.TypeSystem.TypeDesc):ubyte:this (Tier1)
         -44 (-21.26 % of base) : 225678.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -43 (-4.23 % of base) : 774.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (FullOpts)
         -37 (-4.48 % of base) : 183396.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -36 (-5.87 % of base) : 185436.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -30 (-3.15 % of base) : 79.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -30 (-10.83 % of base) : 169725.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -30 (-10.83 % of base) : 169702.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -29 (-3.05 % of base) : 773.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -29 (-11.07 % of base) : 186778.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -28 (-23.93 % of base) : 231703.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -28 (-36.36 % of base) : 297234.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-36.36 % of base) : 302644.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-8.19 % of base) : 183425.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -26 (-14.53 % of base) : 188674.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-20.63 % of base) : 296443.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -26 (-6.47 % of base) : 187988.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -25 (-35.21 % of base) : 298242.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)

Top method regressions (percentages):
          44 (400.00 % of base) : 175567.dasm - T:TestEntryPoint():int (FullOpts)
          19 (4.80 % of base) : 463130.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          50 (4.56 % of base) : 593896.dasm - ILCompiler.InstructionSetSupport:GetHardwareIntrinsicId(int,Internal.TypeSystem.TypeDesc):System.String (Tier1)
          44 (3.99 % of base) : 588190.dasm - ILCompiler.InstructionSetSupport:GetHardwareIntrinsicId(int,Internal.TypeSystem.TypeDesc):System.String (Tier1)
          28 (3.26 % of base) : 239368.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          14 (1.94 % of base) : 278043.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          68 (1.79 % of base) : 226231.dasm - Test_throw2dimarray.App:Main():int (FullOpts)
          27 (1.76 % of base) : 591427.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          27 (1.76 % of base) : 594703.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          13 (1.71 % of base) : 165458.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.71 % of base) : 165238.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.71 % of base) : 165705.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          89 (1.55 % of base) : 3054.dasm - Program:TestCase0003() (FullOpts)
          89 (1.55 % of base) : 3075.dasm - Program:TestCase0003() (FullOpts)
           3 (0.75 % of base) : 299213.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
          23 (0.74 % of base) : 443661.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
           8 (0.55 % of base) : 443692.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

Top method improvements (percentages):
         -23 (-46.94 % of base) : 201150.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -13 (-37.14 % of base) : 201155.dasm - CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
         -28 (-36.36 % of base) : 297234.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-36.36 % of base) : 302644.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -25 (-35.21 % of base) : 298242.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -13 (-34.21 % of base) : 201010.dasm - Program:CastToArray(System.Object):int[] (Tier1)
         -19 (-27.94 % of base) : 301279.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
         -18 (-25.35 % of base) : 202027.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -25 (-24.27 % of base) : 145311.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -25 (-24.27 % of base) : 236383.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -28 (-23.93 % of base) : 231703.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -25 (-22.12 % of base) : 166160.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)
         -25 (-22.12 % of base) : 201143.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -44 (-21.26 % of base) : 225678.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -26 (-20.63 % of base) : 296443.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -17 (-19.10 % of base) : 279133.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (FullOpts)
         -13 (-17.11 % of base) : 237757.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -19 (-16.67 % of base) : 594306.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (Tier1)
         -20 (-15.04 % of base) : 462146.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -26 (-14.53 % of base) : 188674.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)


libraries.pmi.linux.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 44079179 (overridden on cmd)
Total bytes of diff: 44068107 (overridden on cmd)
Total bytes of delta: -11072 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          70 : 124933.dasm (3.20 % of base)
          34 : 118094.dasm (1.94 % of base)
          18 : 276141.dasm (1.72 % of base)
          14 : 276456.dasm (1.91 % of base)
           8 : 241815.dasm (3.12 % of base)
           8 : 33617.dasm (2.29 % of base)
           8 : 183084.dasm (0.25 % of base)
           8 : 165703.dasm (0.90 % of base)
           8 : 165693.dasm (0.24 % of base)
           7 : 34689.dasm (0.33 % of base)
           6 : 198767.dasm (0.83 % of base)
           5 : 241818.dasm (2.58 % of base)
           5 : 153320.dasm (5.43 % of base)
           4 : 250956.dasm (2.40 % of base)
           4 : 265439.dasm (3.42 % of base)
           4 : 154341.dasm (3.42 % of base)
           4 : 194520.dasm (3.42 % of base)
           4 : 199749.dasm (3.64 % of base)
           3 : 241812.dasm (0.98 % of base)
           3 : 245396.dasm (3.00 % of base)

Top file improvements (bytes):
        -425 : 277848.dasm (-22.57 % of base)
        -148 : 272572.dasm (-25.65 % of base)
        -143 : 102996.dasm (-12.45 % of base)
        -142 : 238935.dasm (-10.09 % of base)
        -126 : 237846.dasm (-38.07 % of base)
        -115 : 237202.dasm (-8.20 % of base)
        -112 : 237848.dasm (-6.37 % of base)
         -84 : 31778.dasm (-12.79 % of base)
         -84 : 31771.dasm (-13.19 % of base)
         -76 : 33539.dasm (-16.67 % of base)
         -59 : 230181.dasm (-14.75 % of base)
         -58 : 216338.dasm (-1.45 % of base)
         -57 : 13645.dasm (-7.56 % of base)
         -55 : 193312.dasm (-0.85 % of base)
         -54 : 31935.dasm (-10.78 % of base)
         -54 : 31944.dasm (-10.65 % of base)
         -51 : 250544.dasm (-13.42 % of base)
         -45 : 236981.dasm (-4.63 % of base)
         -45 : 237792.dasm (-14.75 % of base)
         -44 : 33319.dasm (-7.53 % of base)

72 total files with Code Size differences (49 improved, 23 regressed), 18 unchanged.

Top method regressions (bytes):
          70 (3.20 % of base) : 124933.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          34 (1.94 % of base) : 118094.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          18 (1.72 % of base) : 276141.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
          14 (1.91 % of base) : 276456.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           8 (0.90 % of base) : 165703.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:GetDeletedSynthesizedMethods(Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Emit.EncLambdaInfo]):System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[Microsoft.CodeAnalysis.CodeGen.DebugId,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal]]:this (FullOpts)
           8 (0.24 % of base) : 165693.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
           8 (0.25 % of base) : 183084.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Emit.EmitBaseline,Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
           8 (3.12 % of base) : 241815.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
           8 (2.29 % of base) : 33617.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
           7 (0.33 % of base) : 34689.dasm - System.Data.DataSet:ReadXmlSchema(System.Xml.XmlReader,ubyte):this (FullOpts)
           6 (0.83 % of base) : 198767.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)
           5 (2.58 % of base) : 241818.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
           5 (5.43 % of base) : 153320.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (3.64 % of base) : 199749.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
           4 (2.40 % of base) : 250956.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           4 (3.42 % of base) : 194520.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
           4 (3.42 % of base) : 265439.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
           4 (3.42 % of base) : 154341.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
           3 (0.98 % of base) : 241812.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.get_Item(System.Object):System.Object:this (FullOpts)
           3 (3.00 % of base) : 245396.dasm - System.ComponentModel.BindingList`1[System.__Canon]:System.ComponentModel.IBindingList.AddNew():System.Object:this (FullOpts)

Top method improvements (bytes):
        -425 (-22.57 % of base) : 277848.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -148 (-25.65 % of base) : 272572.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
        -143 (-12.45 % of base) : 102996.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -142 (-10.09 % of base) : 238935.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -126 (-38.07 % of base) : 237846.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -115 (-8.20 % of base) : 237202.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
        -112 (-6.37 % of base) : 237848.dasm - System.Xml.Serialization.XmlSchemas:GetSchemaItem(System.Xml.Schema.XmlSchemaObject,System.String,System.String):System.String (FullOpts)
         -84 (-13.19 % of base) : 31771.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -84 (-12.79 % of base) : 31778.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -76 (-16.67 % of base) : 33539.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -59 (-14.75 % of base) : 230181.dasm - System.Xml.Schema.Compiler:CanonicalizeParticle(System.Xml.Schema.XmlSchemaParticle,ubyte):System.Xml.Schema.XmlSchemaParticle:this (FullOpts)
         -58 (-1.45 % of base) : 216338.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -57 (-7.56 % of base) : 13645.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
         -55 (-0.85 % of base) : 193312.dasm - System.ComponentModel.Composition.MetadataViewGenerator:GenerateInterfaceViewProxyType(System.Type):System.Type (FullOpts)
         -54 (-10.65 % of base) : 31944.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericOneDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -54 (-10.78 % of base) : 31935.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericZeroDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -51 (-13.42 % of base) : 250544.dasm - System.Security.Cryptography.Xml.XmlDsigBase64Transform:LoadInput(System.Object):this (FullOpts)
         -45 (-4.63 % of base) : 236981.dasm - System.Xml.Serialization.FieldModel:.ctor(System.Reflection.MemberInfo,System.Type,System.Xml.Serialization.TypeDesc):this (FullOpts)
         -45 (-14.75 % of base) : 237792.dasm - System.Xml.Serialization.XmlSchemaImporter:ImportAttributeGroupMembers(System.Xml.Schema.XmlSchemaAttributeGroup,System.String,System.Xml.Serialization.CodeIdentifiers,System.Xml.Serialization.CodeIdentifiers,System.String):this (FullOpts)
         -44 (-7.53 % of base) : 33319.dasm - System.Data.XDRSchema:HandleTypeNode(System.Xml.XmlElement,System.Data.DataTable,System.Collections.ArrayList):this (FullOpts)

Top method regressions (percentages):
           5 (5.43 % of base) : 153320.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (3.64 % of base) : 199749.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Contains(System.Object):ubyte:this (FullOpts)
           4 (3.42 % of base) : 194520.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
           4 (3.42 % of base) : 265439.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
           4 (3.42 % of base) : 154341.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
          70 (3.20 % of base) : 124933.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
           8 (3.12 % of base) : 241815.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
           3 (3.00 % of base) : 245396.dasm - System.ComponentModel.BindingList`1[System.__Canon]:System.ComponentModel.IBindingList.AddNew():System.Object:this (FullOpts)
           5 (2.58 % of base) : 241818.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
           4 (2.40 % of base) : 250956.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           8 (2.29 % of base) : 33617.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
          34 (1.94 % of base) : 118094.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          14 (1.91 % of base) : 276456.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           2 (1.79 % of base) : 199751.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:Remove(System.Object):this (FullOpts)
          18 (1.72 % of base) : 276141.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           2 (1.54 % of base) : 281576.dasm - Microsoft.Extensions.Configuration.ConfigurationBinder:Get[System.__Canon](Microsoft.Extensions.Configuration.IConfiguration,System.Action`1[Microsoft.Extensions.Configuration.BinderOptions]):System.__Canon (FullOpts)
           2 (1.48 % of base) : 199738.dasm - Microsoft.Build.Collections.ReadOnlyEmptyDictionary`2[System.__Canon,System.Nullable`1[int]]:get_Item(System.Object):System.Object:this (FullOpts)
           3 (0.98 % of base) : 241812.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.get_Item(System.Object):System.Object:this (FullOpts)
           8 (0.90 % of base) : 165703.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:GetDeletedSynthesizedMethods(Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Emit.EncLambdaInfo]):System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[Microsoft.CodeAnalysis.CodeGen.DebugId,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal]]:this (FullOpts)
           6 (0.83 % of base) : 198767.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)

Top method improvements (percentages):
         -23 (-50.00 % of base) : 31494.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -23 (-50.00 % of base) : 213709.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -25 (-42.37 % of base) : 38534.dasm - System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
         -35 (-38.89 % of base) : 261896.dasm - CommandLine.Infrastructure.ReflectionHelper:CreateDefaultImmutableInstance[System.__Canon](System.Type[]):System.__Canon (FullOpts)
         -35 (-38.89 % of base) : 243326.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
        -126 (-38.07 % of base) : 237846.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -35 (-36.84 % of base) : 239895.dasm - Microsoft.VisualBasic.Conversion:CTypeDynamic[System.__Canon](System.Object):System.__Canon (FullOpts)
         -30 (-35.29 % of base) : 265316.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -30 (-35.29 % of base) : 265330.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -20 (-32.79 % of base) : 173257.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -20 (-32.79 % of base) : 155305.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -16 (-29.63 % of base) : 251805.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -18 (-29.51 % of base) : 290264.dasm - System.Net.Dns:GetHostAddressesCore(System.Net.IPAddress,int,System.Nullable`1[long]):System.Net.IPAddress[] (FullOpts)
         -18 (-29.51 % of base) : 290261.dasm - System.Net.Dns:GetHostAddressesCore(System.String,int,System.Nullable`1[long]):System.Net.IPAddress[] (FullOpts)
         -23 (-29.49 % of base) : 252354.dasm - FastSerialization.Deserializer:GetEntryObject[System.__Canon](byref):this (FullOpts)
         -28 (-28.87 % of base) : 271062.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (FullOpts)
         -28 (-28.87 % of base) : 240692.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -28 (-28.87 % of base) : 243334.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon](Newtonsoft.Json.JsonSerializer):System.__Canon:this (FullOpts)
         -25 (-28.74 % of base) : 225461.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -25 (-28.74 % of base) : 225485.dasm - System.Xml.BinHexDecoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)


libraries_tests.run.linux.x64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 284551599 (overridden on cmd)
Total bytes of diff: 284521410 (overridden on cmd)
Total bytes of delta: -30189 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         138 : 454098.dasm (2.51 % of base)
          69 : 688389.dasm (1.20 % of base)
          66 : 190826.dasm (2.13 % of base)
          65 : 293003.dasm (1.91 % of base)
          51 : 692992.dasm (3.17 % of base)
          46 : 169044.dasm (1.56 % of base)
          44 : 397260.dasm (1.40 % of base)
          38 : 113999.dasm (6.82 % of base)
          36 : 176099.dasm (6.56 % of base)
          32 : 258683.dasm (15.24 % of base)
          30 : 693109.dasm (2.23 % of base)
          29 : 458002.dasm (6.08 % of base)
          28 : 52134.dasm (1.11 % of base)
          28 : 687670.dasm (1.23 % of base)
          28 : 92571.dasm (1.12 % of base)
          24 : 57925.dasm (0.56 % of base)
          24 : 702864.dasm (0.55 % of base)
          24 : 93732.dasm (0.56 % of base)
          22 : 738807.dasm (8.73 % of base)
          21 : 180847.dasm (0.87 % of base)

Top file improvements (bytes):
        -144 : 253474.dasm (-3.73 % of base)
        -144 : 500516.dasm (-3.95 % of base)
        -137 : 339389.dasm (-4.02 % of base)
        -137 : 191604.dasm (-4.02 % of base)
        -131 : 650766.dasm (-0.92 % of base)
        -129 : 578111.dasm (-4.20 % of base)
        -127 : 178488.dasm (-3.30 % of base)
        -120 : 408332.dasm (-2.82 % of base)
         -99 : 626803.dasm (-1.05 % of base)
         -95 : 524344.dasm (-2.46 % of base)
         -94 : 641973.dasm (-0.99 % of base)
         -92 : 707068.dasm (-3.20 % of base)
         -89 : 325288.dasm (-2.18 % of base)
         -87 : 416195.dasm (-1.97 % of base)
         -87 : 448802.dasm (-2.24 % of base)
         -87 : 528652.dasm (-2.16 % of base)
         -87 : 125434.dasm (-2.21 % of base)
         -87 : 212776.dasm (-2.11 % of base)
         -87 : 451473.dasm (-3.18 % of base)
         -86 : 674342.dasm (-1.74 % of base)

85 total files with Code Size differences (54 improved, 31 regressed), 19 unchanged.

Top method regressions (bytes):
         138 (2.51 % of base) : 454098.dasm - System.Xml.XmlDocument:.ctor(System.Xml.XmlImplementation):this (Tier1)
          69 (1.20 % of base) : 688389.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location):ubyte:this (Tier1)
          66 (2.13 % of base) : 190826.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetNamedArgument[System.__Canon](System.String):System.__Canon:this (Tier1)
          65 (1.91 % of base) : 293003.dasm - System.Linq.Expressions.Compiler.LambdaCompiler:EmitUnliftedBinaryOp(int,System.Type,System.Type):this (Tier1)
          51 (3.17 % of base) : 692992.dasm - Microsoft.CodeAnalysis.CSharp.MethodTypeInferrer:DoSecondPhase(Microsoft.CodeAnalysis.CSharp.Binder,byref):int:this (Tier1)
          46 (1.56 % of base) : 169044.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetNamedArgument[System.__Canon](System.String):System.__Canon:this (Tier1)
          44 (1.40 % of base) : 397260.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetNamedArgument[System.__Canon](System.String):System.__Canon:this (Tier1)
          38 (6.82 % of base) : 113999.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          36 (6.56 % of base) : 176099.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          32 (15.24 % of base) : 258683.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          30 (2.23 % of base) : 693109.dasm - Microsoft.CodeAnalysis.CSharp.MethodTypeInferrer:MakeOutputTypeInferences(Microsoft.CodeAnalysis.CSharp.Binder,byref):this (Tier1)
          29 (6.08 % of base) : 458002.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          28 (1.11 % of base) : 52134.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
          28 (1.23 % of base) : 687670.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
          28 (1.12 % of base) : 92571.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
          24 (0.56 % of base) : 57925.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol:ReportDiagnosticsForSynthesizedAttributes(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag) (Tier1)
          24 (0.55 % of base) : 702864.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol:ReportDiagnosticsForSynthesizedAttributes(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag) (Tier1)
          24 (0.56 % of base) : 93732.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol:ReportDiagnosticsForSynthesizedAttributes(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag) (Tier1)
          22 (8.73 % of base) : 738807.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          21 (0.87 % of base) : 180847.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxNode,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)

Top method improvements (bytes):
        -144 (-3.73 % of base) : 253474.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
        -144 (-3.95 % of base) : 500516.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
        -137 (-4.02 % of base) : 339389.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
        -137 (-4.02 % of base) : 191604.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
        -131 (-0.92 % of base) : 650766.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -129 (-4.20 % of base) : 578111.dasm - System.Security.Cryptography.PKCS1MaskGenerationMethod:GenerateMask(ubyte[],int):ubyte[]:this (Tier1)
        -127 (-3.30 % of base) : 178488.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
        -120 (-2.82 % of base) : 408332.dasm - System.Net.Http.HttpConnection:ParseHeadersCore(System.Span`1[ubyte],System.Net.Http.HttpResponseMessage,ubyte):System.ValueTuple`2[ubyte,int]:this (Tier1)
         -99 (-1.05 % of base) : 626803.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
         -95 (-2.46 % of base) : 524344.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -94 (-0.99 % of base) : 641973.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.Text.Json.Serialization.Tests.Point_3D_Struct]:ReadConstructorArgumentsWithContinuation(byref,byref,System.Text.Json.JsonSerializerOptions):ubyte:this (Tier1)
         -92 (-3.20 % of base) : 707068.dasm - Microsoft.CodeAnalysis.CodeGen.PrivateImplementationDetails:Freeze():this (Tier1)
         -89 (-2.18 % of base) : 325288.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -87 (-3.18 % of base) : 451473.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
         -87 (-1.97 % of base) : 416195.dasm - System.Net.Http.HttpConnection:ParseHeadersCore(System.Span`1[ubyte],System.Net.Http.HttpResponseMessage,ubyte):System.ValueTuple`2[ubyte,int]:this (Tier1)
         -87 (-2.24 % of base) : 448802.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -87 (-2.16 % of base) : 528652.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -87 (-2.21 % of base) : 125434.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -87 (-2.11 % of base) : 212776.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -86 (-1.74 % of base) : 674342.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.Text.Json.Serialization.Tests.StructWrapperForIDictionary,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)

Top method regressions (percentages):
          32 (15.24 % of base) : 258683.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          13 (10.40 % of base) : 480748.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
          22 (8.73 % of base) : 738807.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          38 (6.82 % of base) : 113999.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          36 (6.56 % of base) : 176099.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          29 (6.08 % of base) : 458002.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          10 (5.43 % of base) : 471578.dasm - System.Xml.Schema.Compiler:GetSimpleType(System.Xml.XmlQualifiedName):System.Xml.Schema.XmlSchemaSimpleType:this (Tier1)
           8 (4.30 % of base) : 738280.dasm - System.Threading.Tasks.TaskFactory`1+<>c[int]:<ContinueWhenAllImpl>b__57_0(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task[]],System.Object):int:this (Tier1)
           7 (3.95 % of base) : 414854.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (Tier1)
          51 (3.17 % of base) : 692992.dasm - Microsoft.CodeAnalysis.CSharp.MethodTypeInferrer:DoSecondPhase(Microsoft.CodeAnalysis.CSharp.Binder,byref):int:this (Tier1)
          16 (3.02 % of base) : 647921.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1[System.__Canon]:SetGetter(System.Delegate):this (Tier1)
         138 (2.51 % of base) : 454098.dasm - System.Xml.XmlDocument:.ctor(System.Xml.XmlImplementation):this (Tier1)
           4 (2.40 % of base) : 136046.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (Tier1)
          30 (2.23 % of base) : 693109.dasm - Microsoft.CodeAnalysis.CSharp.MethodTypeInferrer:MakeOutputTypeInferences(Microsoft.CodeAnalysis.CSharp.Binder,byref):this (Tier1)
          19 (2.22 % of base) : 222429.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.SmallFrozenSet`1+GSW[System.__Canon]]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (Tier1)
          16 (2.21 % of base) : 724826.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
          10 (2.20 % of base) : 350590.dasm - System.Threading.ManualResetEventSlim:CancellationTokenCallback(System.Object) (Tier1)
          66 (2.13 % of base) : 190826.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetNamedArgument[System.__Canon](System.String):System.__Canon:this (Tier1)
          15 (2.08 % of base) : 60930.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.Metadata.PE.DynamicTypeDecoder:TransformPointerType(Microsoft.CodeAnalysis.CSharp.Symbols.PointerTypeSymbol):Microsoft.CodeAnalysis.CSharp.Symbols.PointerTypeSymbol:this (Tier1)
           6 (1.93 % of base) : 209668.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)

Top method improvements (percentages):
         -23 (-50.00 % of base) : 623684.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -23 (-50.00 % of base) : 648402.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-45.90 % of base) : 56051.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -28 (-36.36 % of base) : 1346.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -30 (-35.29 % of base) : 136104.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -30 (-35.29 % of base) : 126831.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-34.15 % of base) : 67327.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -34 (-34.00 % of base) : 598180.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -34 (-31.19 % of base) : 126646.dasm - Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests:CreateInstance[System.__Canon](Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests+CreateInstanceFunc,System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -25 (-30.12 % of base) : 637526.dasm - System.Text.Json.Serialization.Converters.ConcurrentStackOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -25 (-30.12 % of base) : 638211.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -25 (-30.12 % of base) : 638244.dasm - System.Text.Json.Serialization.Converters.StackOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -21 (-29.58 % of base) : 135655.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -38 (-29.23 % of base) : 455507.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (Tier1)
         -28 (-28.87 % of base) : 127886.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -28 (-28.57 % of base) : 36486.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -28 (-28.57 % of base) : 105640.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.ParameterInfo,ubyte):System.__Canon (Tier1)
         -19 (-27.94 % of base) : 340751.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (Tier1)
         -56 (-26.92 % of base) : 183764.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -21 (-26.25 % of base) : 60348.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)


librariestestsnotieredcompilation.run.linux.x64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 104673532 (overridden on cmd)
Total bytes of diff: 104657213 (overridden on cmd)
Total bytes of delta: -16319 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         181 : 222705.dasm (11.13 % of base)
          50 : 180761.dasm (2.97 % of base)
          49 : 143740.dasm (12.28 % of base)
          36 : 94667.dasm (128.57 % of base)
          30 : 96711.dasm (55.56 % of base)
          30 : 97527.dasm (55.56 % of base)
          23 : 93726.dasm (1.10 % of base)
          18 : 77761.dasm (1.77 % of base)
          14 : 4068.dasm (1.94 % of base)
          10 : 70939.dasm (1.38 % of base)
           9 : 180713.dasm (4.17 % of base)
           8 : 77284.dasm (0.88 % of base)
           6 : 44917.dasm (0.55 % of base)
           6 : 50774.dasm (0.55 % of base)
           6 : 8071.dasm (0.55 % of base)
           5 : 37714.dasm (2.08 % of base)
           5 : 90942.dasm (29.41 % of base)
           5 : 97970.dasm (5.43 % of base)
           4 : 14011.dasm (1.47 % of base)
           4 : 38303.dasm (2.40 % of base)

Top file improvements (bytes):
        -425 : 63484.dasm (-22.57 % of base)
        -384 : 206411.dasm (-7.72 % of base)
        -267 : 201391.dasm (-16.26 % of base)
        -238 : 166504.dasm (-13.51 % of base)
        -229 : 166498.dasm (-13.25 % of base)
        -224 : 303253.dasm (-4.22 % of base)
        -223 : 14257.dasm (-16.72 % of base)
        -215 : 165622.dasm (-10.68 % of base)
        -189 : 201486.dasm (-12.92 % of base)
        -146 : 166500.dasm (-11.31 % of base)
        -116 : 195385.dasm (-7.63 % of base)
        -116 : 194017.dasm (-7.63 % of base)
        -114 : 166496.dasm (-6.59 % of base)
        -107 : 232735.dasm (-3.47 % of base)
        -105 : 65248.dasm (-11.62 % of base)
         -98 : 166501.dasm (-7.85 % of base)
         -98 : 198372.dasm (-7.85 % of base)
         -95 : 23271.dasm (-3.85 % of base)
         -90 : 166115.dasm (-6.71 % of base)
         -85 : 166503.dasm (-9.19 % of base)

75 total files with Code Size differences (51 improved, 24 regressed), 20 unchanged.

Top method regressions (bytes):
         181 (11.13 % of base) : 222705.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
          50 (2.97 % of base) : 180761.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          49 (12.28 % of base) : 143740.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
          36 (128.57 % of base) : 94667.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          30 (55.56 % of base) : 97527.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          30 (55.56 % of base) : 96711.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          23 (1.10 % of base) : 93726.dasm - System.Data.DataSet:ReadXmlSchema(System.Xml.XmlReader,ubyte):this (FullOpts)
          18 (1.77 % of base) : 77761.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
          14 (1.94 % of base) : 4068.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          10 (1.38 % of base) : 70939.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.SmallFrozenSet`1+GSW[System.__Canon]]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
           9 (4.17 % of base) : 180713.dasm - System.Reflection.Tests.GetCustomAttributes_Assembly+<>c__DisplayClass4_0:<GetCustomAttributeOfT>b__0():this (FullOpts)
           8 (0.88 % of base) : 77284.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           6 (0.55 % of base) : 44917.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
           6 (0.55 % of base) : 50774.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
           6 (0.55 % of base) : 8071.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
           5 (2.08 % of base) : 37714.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           5 (29.41 % of base) : 90942.dasm - MonoTests.System.Configuration.KeyValueConfigurationCollectionTest+<>c__DisplayClass9_0:<GetElementKey_null>b__0():System.Object:this (FullOpts)
           5 (5.43 % of base) : 97970.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (1.47 % of base) : 14011.dasm - Microsoft.CodeAnalysis.AddImport.AbstractAddImportsService`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetImportContainer(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.AddImport.AddImportPlacementOptions):Microsoft.CodeAnalysis.SyntaxNode:this (FullOpts)
           4 (2.40 % of base) : 38303.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)

Top method improvements (bytes):
        -425 (-22.57 % of base) : 63484.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -384 (-7.72 % of base) : 206411.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -267 (-16.26 % of base) : 201391.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -238 (-13.51 % of base) : 166504.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -229 (-13.25 % of base) : 166498.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
        -224 (-4.22 % of base) : 303253.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -223 (-16.72 % of base) : 14257.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (FullOpts)
        -215 (-10.68 % of base) : 165622.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -189 (-12.92 % of base) : 201486.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -146 (-11.31 % of base) : 166500.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
        -116 (-7.63 % of base) : 195385.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -116 (-7.63 % of base) : 194017.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -114 (-6.59 % of base) : 166496.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)
        -107 (-3.47 % of base) : 232735.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
        -105 (-11.62 % of base) : 65248.dasm - System.CodeDom.Compiler.Tests.CodeGenerationTests:GenerateCode(System.CodeDom.CodeObject,System.CodeDom.Compiler.CodeDomProvider):System.String (FullOpts)
         -98 (-7.85 % of base) : 166501.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (FullOpts)
         -98 (-7.85 % of base) : 198372.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (FullOpts)
         -95 (-3.85 % of base) : 23271.dasm - Microsoft.CodeAnalysis.LanguageService.AbstractDeclaredSymbolInfoFactoryService`10[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:AddDeclaredSymbolInfos(Microsoft.CodeAnalysis.SyntaxNode,System.__Canon,Roslyn.Utilities.StringTable,System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.FindSymbols.DeclaredSymbolInfo],System.Collections.Generic.Dictionary`2[System.String,System.String],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[int]],System.String,System.String,System.Threading.CancellationToken):this (FullOpts)
         -90 (-6.71 % of base) : 166115.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (FullOpts)
         -85 (-9.19 % of base) : 166503.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (FullOpts)

Top method regressions (percentages):
          36 (128.57 % of base) : 94667.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          30 (55.56 % of base) : 97527.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          30 (55.56 % of base) : 96711.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
           5 (29.41 % of base) : 90942.dasm - MonoTests.System.Configuration.KeyValueConfigurationCollectionTest+<>c__DisplayClass9_0:<GetElementKey_null>b__0():System.Object:this (FullOpts)
          49 (12.28 % of base) : 143740.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
         181 (11.13 % of base) : 222705.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
           3 (5.88 % of base) : 35441.dasm - Stashbox.Registration.Fluent.BaseFluentConfigurator`1[System.__Canon]:WithLifetime(Stashbox.Lifetime.LifetimeDescriptor):System.__Canon:this (FullOpts)
           5 (5.43 % of base) : 97970.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           9 (4.17 % of base) : 180713.dasm - System.Reflection.Tests.GetCustomAttributes_Assembly+<>c__DisplayClass4_0:<GetCustomAttributeOfT>b__0():this (FullOpts)
           4 (3.42 % of base) : 83212.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
           3 (3.00 % of base) : 86696.dasm - System.ComponentModel.BindingList`1[System.__Canon]:System.ComponentModel.IBindingList.AddNew():System.Object:this (FullOpts)
          50 (2.97 % of base) : 180761.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
           4 (2.40 % of base) : 38303.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           5 (2.08 % of base) : 37714.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          14 (1.94 % of base) : 4068.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          18 (1.77 % of base) : 77761.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           2 (1.54 % of base) : 29916.dasm - Microsoft.Extensions.Configuration.ConfigurationBinder:Get[System.__Canon](Microsoft.Extensions.Configuration.IConfiguration,System.Action`1[Microsoft.Extensions.Configuration.BinderOptions]):System.__Canon (FullOpts)
           4 (1.47 % of base) : 14011.dasm - Microsoft.CodeAnalysis.AddImport.AbstractAddImportsService`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetImportContainer(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.AddImport.AddImportPlacementOptions):Microsoft.CodeAnalysis.SyntaxNode:this (FullOpts)
          10 (1.38 % of base) : 70939.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.SmallFrozenSet`1+GSW[System.__Canon]]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
          23 (1.10 % of base) : 93726.dasm - System.Data.DataSet:ReadXmlSchema(System.Xml.XmlReader,ubyte):this (FullOpts)

Top method improvements (percentages):
         -23 (-50.00 % of base) : 36334.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -23 (-50.00 % of base) : 142173.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -23 (-46.94 % of base) : 30479.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
         -35 (-38.89 % of base) : 20363.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
         -30 (-35.29 % of base) : 77639.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -30 (-35.29 % of base) : 126830.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -26 (-30.95 % of base) : 146371.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -17 (-30.36 % of base) : 301025.dasm - System.Threading.Tasks.Tests.TaskRunSyncTest:DisposeScheduler(System.Threading.Tasks.TaskScheduler) (FullOpts)
         -25 (-30.12 % of base) : 240924.dasm - System.Text.Json.Serialization.Converters.ConcurrentStackOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (FullOpts)
         -25 (-30.12 % of base) : 241742.dasm - System.Text.Json.Serialization.Converters.StackOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (FullOpts)
         -16 (-29.63 % of base) : 89510.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -38 (-29.23 % of base) : 61451.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
         -16 (-29.09 % of base) : 133723.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
         -25 (-28.74 % of base) : 61900.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -25 (-28.74 % of base) : 61892.dasm - System.Xml.BinHexDecoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -25 (-28.74 % of base) : 173885.dasm - System.Xml.IncrementalReadCharsDecoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -28 (-28.00 % of base) : 35104.dasm - Grace.DependencyInjection.Impl.BaseExportLocatorScope:Locate[System.__Canon]():System.__Canon:this (FullOpts)
         -19 (-27.94 % of base) : 99612.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (FullOpts)
         -16 (-27.59 % of base) : 48017.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -16 (-27.59 % of base) : 42385.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)


realworld.run.linux.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 9154587 (overridden on cmd)
Total bytes of diff: 9152315 (overridden on cmd)
Total bytes of delta: -2272 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          14 : 32359.dasm (3.35 % of base)
           6 : 20668.dasm (0.55 % of base)
           3 : 29797.dasm (0.76 % of base)
           2 : 8691.dasm (1.05 % of base)

Top file improvements (bytes):
         -55 : 32284.dasm (-15.80 % of base)
         -52 : 31926.dasm (-25.00 % of base)
         -52 : 31931.dasm (-19.62 % of base)
         -43 : 30256.dasm (-8.94 % of base)
         -42 : 27872.dasm (-6.29 % of base)
         -41 : 8569.dasm (-29.08 % of base)
         -40 : 6950.dasm (-3.02 % of base)
         -40 : 7465.dasm (-7.09 % of base)
         -39 : 31901.dasm (-2.26 % of base)
         -36 : 15150.dasm (-8.26 % of base)
         -36 : 16342.dasm (-5.87 % of base)
         -31 : 31896.dasm (-18.67 % of base)
         -31 : 8206.dasm (-11.36 % of base)
         -29 : 20161.dasm (-11.07 % of base)
         -28 : 25442.dasm (-2.94 % of base)
         -28 : 411.dasm (-36.36 % of base)
         -26 : 16797.dasm (-14.53 % of base)
         -26 : 28443.dasm (-6.47 % of base)
         -25 : 18795.dasm (-26.60 % of base)
         -25 : 32836.dasm (-11.52 % of base)

60 total files with Code Size differences (56 improved, 4 regressed), 5 unchanged.

Top method regressions (bytes):
          14 (3.35 % of base) : 32359.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           6 (0.55 % of base) : 20668.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
           3 (0.76 % of base) : 29797.dasm - System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]:Clone():System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]:this (FullOpts)
           2 (1.05 % of base) : 8691.dasm - FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo:MangledNameForType(System.String):System.String:this (FullOpts)

Top method improvements (bytes):
         -55 (-15.80 % of base) : 32284.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -52 (-25.00 % of base) : 31926.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -52 (-19.62 % of base) : 31931.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -43 (-8.94 % of base) : 30256.dasm - System.Management.Automation.SessionStateScope:CreateFunction(System.String,System.Management.Automation.ScriptBlock,System.Management.Automation.FunctionInfo,int,System.Management.Automation.ExecutionContext,System.String):System.Management.Automation.FunctionInfo (FullOpts)
         -42 (-6.29 % of base) : 27872.dasm - Microsoft.CodeAnalysis.CSharp.AsyncMethodBuilderMemberCollection:TryGetBuilderMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.SyntheticBoundNodeFactory,System.Nullable`1[int],Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol,ubyte,byref):ubyte (FullOpts)
         -41 (-29.08 % of base) : 8569.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -40 (-7.09 % of base) : 7465.dasm - FSharp.Compiler.CheckDeclarations+TcDeclarations:SplitTyconDefn(FSharp.Compiler.Syntax.SynTypeDefn):System.Tuple`2[FSharp.Compiler.CheckDeclarations+MutRecDefnsPhase1DataForTycon,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] (FullOpts)
         -40 (-3.02 % of base) : 6950.dasm - FSharp.Compiler.Lexer:endline(FSharp.Compiler.ParseHelpers+LexerEndlineContinuation,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort]):FSharp.Compiler.Parser+token (FullOpts)
         -39 (-2.26 % of base) : 31901.dasm - System.Management.Automation.ScriptBlock:BindArgumentsForScriptblockInvoke(System.Management.Automation.RuntimeDefinedParameter[],System.Object[],System.Management.Automation.ExecutionContext,ubyte,System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable],System.Management.Automation.MutableTuple):System.Object[] (FullOpts)
         -36 (-5.87 % of base) : 16342.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -36 (-8.26 % of base) : 15150.dasm - System.Net.Http.Headers.ObjectCollection`1[System.__Canon]:Add(System.__Canon):this (FullOpts)
         -31 (-11.36 % of base) : 8206.dasm - FSharp.Compiler.CheckExpressions:TcAdjustExprForTypeDirectedConversions(FSharp.Compiler.CheckExpressions+TcFileState,FSharp.Compiler.ConstraintSolver+OverallTy,FSharp.Compiler.TypedTree+TType,FSharp.Compiler.CheckExpressions+TcEnv,FSharp.Compiler.Text.Range,FSharp.Compiler.TypedTree+Expr):FSharp.Compiler.TypedTree+Expr (FullOpts)
         -31 (-18.67 % of base) : 31896.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -29 (-11.07 % of base) : 20161.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -28 (-2.94 % of base) : 25442.dasm - Microsoft.CodeAnalysis.CSharp.NullableWalker:VisitAwaitableInfo(Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo):Microsoft.CodeAnalysis.CSharp.BoundNode:this (FullOpts)
         -28 (-36.36 % of base) : 411.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -26 (-14.53 % of base) : 16797.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-6.47 % of base) : 28443.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -25 (-4.75 % of base) : 7335.dasm - FSharp.Compiler.ParseAndCheckInputs:GetScopedPragmasForHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] (FullOpts)
         -25 (-11.52 % of base) : 32836.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)

Top method regressions (percentages):
          14 (3.35 % of base) : 32359.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           2 (1.05 % of base) : 8691.dasm - FSharp.Compiler.NameResolution+TypeNameResolutionStaticArgsInfo:MangledNameForType(System.String):System.String:this (FullOpts)
           3 (0.76 % of base) : 29797.dasm - System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]:Clone():System.Management.Automation.Runspaces.InitialSessionStateEntryCollection`1[System.__Canon]:this (FullOpts)
           6 (0.55 % of base) : 20668.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)

Top method improvements (percentages):
         -28 (-36.36 % of base) : 411.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -16 (-29.63 % of base) : 32925.dasm - System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
         -41 (-29.08 % of base) : 8569.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -25 (-26.60 % of base) : 18795.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -18 (-25.35 % of base) : 30135.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -52 (-25.00 % of base) : 31926.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -18 (-24.32 % of base) : 17048.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -23 (-23.47 % of base) : 9555.dasm - FSharp.Compiler.TypedTree+ValFlags:WithRecursiveValInfo(FSharp.Compiler.TypedTree+ValRecursiveScopeInfo):FSharp.Compiler.TypedTree+ValFlags:this (FullOpts)
         -16 (-21.05 % of base) : 10201.dasm - BenchmarkDotNet.Characteristics.CharacteristicObject`1[System.__Canon]:Freeze():System.__Canon:this (FullOpts)
         -52 (-19.62 % of base) : 31931.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -31 (-18.67 % of base) : 31896.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -20 (-18.35 % of base) : 4628.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -20 (-17.39 % of base) : 9665.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -18 (-17.31 % of base) : 22473.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (FullOpts)
         -20 (-16.53 % of base) : 11016.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)
         -55 (-15.80 % of base) : 32284.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -20 (-15.15 % of base) : 5396.dasm - FSharp.Compiler.AbstractIL.IL+ILResource:GetBytes():FSharp.Compiler.IO.ReadOnlyByteMemory:this (FullOpts)
         -26 (-14.53 % of base) : 16797.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -14 (-14.43 % of base) : 16724.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -16 (-14.29 % of base) : 32299.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)



osx arm64

Diffs are based on 1,916,330 contexts (927,669 MinOpts, 988,661 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 114,479 (5.64%)

Overall (-82,208 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 9,421,520 -1,964
benchmarks.run_pgo.osx.arm64.checked.mch 31,834,168 -7,036
benchmarks.run_tiered.osx.arm64.checked.mch 15,071,948 -440
coreclr_tests.run.osx.arm64.checked.mch 455,335,208 -3,672
libraries.pmi.osx.arm64.checked.mch 60,017,572 -18,776
libraries_tests.run.osx.arm64.Release.mch 276,121,528 -23,996
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 129,212,496 -23,136
realworld.run.osx.arm64.checked.mch 10,534,324 -3,188

FullOpts (-82,208 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.osx.arm64.checked.mch 9,420,984 -1,964
benchmarks.run_pgo.osx.arm64.checked.mch 15,480,440 -7,036
benchmarks.run_tiered.osx.arm64.checked.mch 3,569,144 -440
coreclr_tests.run.osx.arm64.checked.mch 123,089,832 -3,672
libraries.pmi.osx.arm64.checked.mch 59,896,444 -18,776
libraries_tests.run.osx.arm64.Release.mch 74,383,940 -23,996
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 116,058,804 -23,136
realworld.run.osx.arm64.checked.mch 9,970,368 -3,188

Example diffs

benchmarks.run.osx.arm64.checked.mch

-28 (-46.67%) : 3084.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-31.58%) : 3310.dasm - System.Collections.TryGetValueFalse`2+<>c[System.Canon,System.Canon]:b10_1(System.Canon):System.__Canon:this (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> x19 this class-hnd single-def <System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> x19 this class-hnd single-def <System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.__Canon>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 8 @@ -23,34 +21,22 @@ G_M53474_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M53474_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M53474_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M53474_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M53474_IG03: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3, #0x08] - cmp x2, x3 - beq G_M53474_IG05 - ;; size=28 bbWeight=0.25 PerfScore 4.12 -G_M53474_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x08]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M53474_IG05: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=20 bbWeight=1 PerfScore 13.00 +G_M53474_IG03: ; 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 76, prolog size 16, PerfScore 13.81, instruction count 19, allocated bytes for code 76 (MethodHash=cb9b2f1d) for method System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.00, instruction count 13, allocated bytes for code 52 (MethodHash=cb9b2f1d) for method System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +47,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
+ Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 420.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 14651.dasm - System.Collections.Generic.SortedSet1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable1[System.Canon],System.Collections.Generic.IComparer`1[System.Canon]):this (FullOpts)

@@ -25,40 +25,41 @@ ; V14 tmp6 [V14,T02] ( 4, 16 ) int -> x22 "impSpillLclRefs" ; V15 tmp7 [V15,T10] ( 2, 8 ) ref -> x15 class-hnd "Strict ordering of exceptions for Array store" <System.__Canon> ; V16 tmp8 [V16,T33] ( 3, 2 ) long -> x1 "spilling helperCall"
-; V17 tmp9 [V17,T34] ( 3, 2 ) long -> x2 "spilling helperCall" -;* V18 tmp10 [V18,T42] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V19 tmp11 [V19 ] ( 0, 0 ) ref -> zero-ref single-def -; V20 tmp12 [V20,T19] ( 4, 3.50) ref -> x15 -;* V21 tmp13 [V21 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V22 tmp14 [V22,T18] ( 2, 4 ) long -> x0 "argument with side effect" -; V23 tmp15 [V23,T39] ( 2, 2 ) long -> x0 "argument with side effect" -; V24 tmp16 [V24,T40] ( 2, 2 ) long -> x0 "argument with side effect"
+;* V17 tmp9 [V17 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V18 tmp10 [V18 ] ( 0, 0 ) ref -> zero-ref single-def +; V19 tmp11 [V19,T19] ( 4, 3.50) ref -> x15 +;* V20 tmp12 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V21 tmp13 [V21,T18] ( 2, 4 ) long -> x0 "argument with side effect" +; V22 tmp14 [V22,T39] ( 2, 2 ) long -> x0 "argument with side effect" +; V23 tmp15 [V23,T40] ( 2, 2 ) long -> x0 "argument with side effect" +; V24 tmp16 [V24,T41] ( 2, 2 ) long -> x0 "argument with side effect"
; V25 tmp17 [V25,T03] ( 2, 16 ) ref -> x1 "argument with side effect" ; V26 cse0 [V26,T15] ( 2, 4.50) long -> x24 hoist "CSE - aggressive" ; V27 cse1 [V27,T09] ( 3, 10 ) long -> x27 "CSE - aggressive"
-; V28 cse2 [V28,T41] ( 3, 1.50) int -> x0 "CSE - conservative"
+; V28 cse2 [V28,T42] ( 3, 1.50) int -> x0 "CSE - conservative"
; V29 cse3 [V29,T07] ( 4, 10.50) int -> x25 hoist "CSE - aggressive" ; V30 cse4 [V30,T05] ( 5, 12.50) byref -> x26 hoist "CSE - aggressive" ; V31 cse5 [V31,T06] ( 3, 12 ) int -> x2 "CSE - aggressive" ; V32 rat0 [V32,T27] ( 3, 2.20) long -> x0 "Spilling to split statement for tree"
-; V33 rat1 [V33,T35] ( 3, 2 ) long -> x1 "runtime lookup"
+; V33 rat1 [V33,T34] ( 3, 2 ) long -> x1 "runtime lookup"
; V34 rat2 [V34,T20] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable" ; V35 rat3 [V35,T16] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" ; V36 rat4 [V36,T17] ( 3, 4 ) long -> x0 "runtime lookup" ; V37 rat5 [V37,T12] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" ; V38 rat6 [V38,T28] ( 3, 2.20) long -> x0 "Spilling to split statement for tree"
-; V39 rat7 [V39,T21] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V40 rat8 [V40,T29] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V41 rat9 [V41,T36] ( 3, 2 ) long -> x0 "runtime lookup" -; V42 rat10 [V42,T22] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V43 rat11 [V43,T30] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V44 rat12 [V44,T37] ( 3, 2 ) long -> x0 "runtime lookup" -; V45 rat13 [V45,T23] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V46 rat14 [V46,T31] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V47 rat15 [V47,T38] ( 3, 2 ) long -> x24 "runtime lookup" -; V48 rat16 [V48,T24] ( 3, 2.80) long -> x24 "fgMakeTemp is creating a new local variable" -; V49 rat17 [V49,T32] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V50 rat18 [V50,T25] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
+; V39 rat7 [V39,T35] ( 3, 2 ) long -> x0 "runtime lookup" +; V40 rat8 [V40,T21] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V41 rat9 [V41,T29] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V42 rat10 [V42,T36] ( 3, 2 ) long -> x0 "runtime lookup" +; V43 rat11 [V43,T22] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V44 rat12 [V44,T30] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V45 rat13 [V45,T37] ( 3, 2 ) long -> x0 "runtime lookup" +; V46 rat14 [V46,T23] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V47 rat15 [V47,T31] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V48 rat16 [V48,T38] ( 3, 2 ) long -> x24 "runtime lookup" +; V49 rat17 [V49,T24] ( 3, 2.80) long -> x24 "fgMakeTemp is creating a new local variable" +; V50 rat18 [V50,T32] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V51 rat19 [V51,T25] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -154,21 +155,22 @@ G_M4921_IG11: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs= cbz x2, G_M4921_IG13 ;; size=20 bbWeight=0.50 PerfScore 6.50 G_M4921_IG12: ; bbWeight=0.40, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M4921_IG14
- ;; size=4 bbWeight=0.40 PerfScore 0.40
+ ;; size=8 bbWeight=0.40 PerfScore 0.60
G_M4921_IG13: ; bbWeight=0.10, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov x2, x0 - ;; size=20 bbWeight=0.10 PerfScore 0.30
+ ;; size=16 bbWeight=0.10 PerfScore 0.25
G_M4921_IG14: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x20] - cmp x0, x2 - beq G_M4921_IG16
+ mov x1, x20 + ; gcrRegs +[x1] + bl CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[x1] +[x0] + cbnz x0, G_M4921_IG16
mov x0, x19
- ; gcrRegs +[x0]
mov x1, x20 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for System.Collections.Generic.SortedSet`1[System.__Canon]:HasEqualComparer(System.Collections.Generic.SortedSet`1[System.__Canon]):ubyte:this @@ -207,7 +209,7 @@ G_M4921_IG14: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs= bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15] ; byrRegs -[x14]
- ;; size=128 bbWeight=0.50 PerfScore 22.50
+ ;; size=128 bbWeight=0.50 PerfScore 21.50
G_M4921_IG15: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, epilog, nogc ldp x27, x28, [sp, #0x60] ldp x25, x26, [sp, #0x50] @@ -414,7 +416,7 @@ G_M4921_IG34: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr brk_unix #0 ;; size=44 bbWeight=0 PerfScore 0.00
-; Total bytes of code 908, prolog size 32, PerfScore 228.95, instruction count 227, allocated bytes for code 908 (MethodHash=e434ecc6) for method System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 908, prolog size 32, PerfScore 228.10, instruction count 227, allocated bytes for code 908 (MethodHash=e434ecc6) for method System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
; ============================================================ Unwind Info:

+0 (0.00%) : 20759.dasm - CscBench:DataflowBench():ubyte (FullOpts)

@@ -38,100 +38,99 @@ ; V27 tmp12 [V27,T01] ( 5, 20 ) ref -> x0 "spilling varStr" ; V28 tmp13 [V28,T13] ( 3, 11 ) int -> x0 "spilling unroll qmark" ; V29 tmp14 [V29,T02] ( 5, 20 ) ref -> x2 class-hnd exact "NewObj constructor temp" <<unknown class>>
-; V30 tmp15 [V30,T24] ( 2, 4 ) ref -> x0 class-hnd single-def "bubbling QMark2" <Microsoft.CodeAnalysis.Text.SourceText> -;* V31 tmp16 [V31 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V32 tmp17 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <<unknown class>> -;* V33 tmp18 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[ubyte]> -;* V34 tmp19 [V34 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> -;* V35 tmp20 [V35 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -; V36 tmp21 [V36,T31] ( 2, 2 ) ref -> x15 class-hnd single-def "Inline return value spill temp" <Microsoft.CodeAnalysis.PortableExecutableReference> -; V37 tmp22 [V37,T25] ( 2, 4 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.IO.Stream> -; V38 tmp23 [V38,T32] ( 2, 2 ) ref -> x24 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.ModuleMetadata> -;* V39 tmp24 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -; V40 tmp25 [V40,T05] ( 7, 14 ) ref -> x25 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> -;* V41 tmp26 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> -;* V42 tmp27 [V42 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V43 tmp28 [V43 ] ( 0, 0 ) ref -> zero-ref -;* V44 tmp29 [V44 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties>
+;* V30 tmp15 [V30 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[ubyte]> +; V31 tmp16 [V31,T24] ( 2, 4 ) ref -> x0 class-hnd single-def "impAppendStmt" <Microsoft.CodeAnalysis.Text.SourceText> +;* V32 tmp17 [V32,T35] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>> +;* V33 tmp18 [V33 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> +;* V34 tmp19 [V34 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +; V35 tmp20 [V35,T31] ( 2, 2 ) ref -> x15 class-hnd single-def "Inline return value spill temp" <Microsoft.CodeAnalysis.PortableExecutableReference> +; V36 tmp21 [V36,T25] ( 2, 4 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.IO.Stream> +; V37 tmp22 [V37,T32] ( 2, 2 ) ref -> x24 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.ModuleMetadata> +;* V38 tmp23 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +; V39 tmp24 [V39,T05] ( 7, 14 ) ref -> x25 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> +;* V40 tmp25 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> +;* V41 tmp26 [V41 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V42 tmp27 [V42 ] ( 0, 0 ) ref -> zero-ref +;* V43 tmp28 [V43 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V44 tmp29 [V44 ] ( 0, 0 ) ref -> zero-ref
;* V45 tmp30 [V45 ] ( 0, 0 ) ref -> zero-ref ;* V46 tmp31 [V46 ] ( 0, 0 ) ref -> zero-ref
-;* V47 tmp32 [V47 ] ( 0, 0 ) ref -> zero-ref -;* V48 tmp33 [V48 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties>
+;* V47 tmp32 [V47 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V48 tmp33 [V48 ] ( 0, 0 ) ref -> zero-ref
;* V49 tmp34 [V49 ] ( 0, 0 ) ref -> zero-ref
-;* V50 tmp35 [V50 ] ( 0, 0 ) ref -> zero-ref -;* V51 tmp36 [V51 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V52 tmp37 [V52 ] ( 0, 0 ) ref -> zero-ref single-def -;* V53 tmp38 [V53 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V54 tmp39 [V54 ] ( 0, 0 ) ref -> zero-ref single-def -;* V55 tmp40 [V55 ] ( 0, 0 ) ref -> zero-ref -;* V56 tmp41 [V56 ] ( 0, 0 ) ref -> zero-ref single-def -;* V57 tmp42 [V57 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V58 tmp43 [V58 ] ( 0, 0 ) ref -> zero-ref single-def -; V59 tmp44 [V59,T33] ( 2, 2 ) ref -> x3 single-def -; V60 tmp45 [V60,T26] ( 2, 4 ) ref -> x24 class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.AssemblyMetadata> -;* V61 tmp46 [V61 ] ( 0, 0 ) ref -> zero-ref single-def -; V62 tmp47 [V62,T34] ( 2, 2 ) ref -> x1 -; V63 tmp48 [V63,T08] ( 4, 12 ) ref -> x0 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.DataFlowAnalysis> -; V64 tmp49 [V64,T00] ( 4, 24 ) ref -> x0 class-hnd "dup spill" <<unknown class>> -;* V65 tmp50 [V65 ] ( 0, 0 ) ref -> zero-ref -; V66 tmp51 [V66,T11] ( 2, 12 ) ref -> x1 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> -; V67 tmp52 [V67,T12] ( 2, 12 ) ref -> x2 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> -; V68 tmp53 [V68,T18] ( 2, 8 ) ref -> x15 class-hnd exact "Inlining Arg" <<unknown class>> -;* V69 tmp54 [V69 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.ISymbol]> -;* V70 tmp55 [V70 ] ( 0, 0 ) ref -> zero-ref single-def "field V05._source (fldOffset=0x0)" P-INDEP -;* V71 tmp56 [V71 ] ( 0, 0 ) ref -> zero-ref single-def "field V07.array (fldOffset=0x0)" P-INDEP -;* V72 tmp57 [V72,T37] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.hasValue (fldOffset=0x0)" P-INDEP -;* V73 tmp58 [V73,T38] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.value (fldOffset=0x1)" P-INDEP -;* V74 tmp59 [V74,T35] ( 0, 0 ) ref -> zero-ref single-def "field V16.array (fldOffset=0x0)" P-INDEP -; V75 tmp60 [V75,T10] ( 3, 12 ) ref -> x23 "field V23.array (fldOffset=0x0)" P-INDEP -;* V76 tmp61 [V76 ] ( 0, 0 ) ref -> zero-ref "field V25.array (fldOffset=0x0)" P-INDEP -;* V77 tmp62 [V77,T39] ( 0, 0 ) ubyte -> zero-ref single-def "field V33.hasValue (fldOffset=0x0)" P-INDEP -;* V78 tmp63 [V78,T40] ( 0, 0 ) ubyte -> zero-ref single-def "field V33.value (fldOffset=0x1)" P-INDEP -;* V79 tmp64 [V79,T36] ( 0, 0 ) ref -> zero-ref single-def "field V34._source (fldOffset=0x0)" P-INDEP -;* V80 tmp65 [V80 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V39._kind (fldOffset=0x0)" P-INDEP -;* V81 tmp66 [V81 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V39._embedInteropTypes (fldOffset=0x1)" P-INDEP -;* V82 tmp67 [V82 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V39.<HasRecursiveAliases>k__BackingField (fldOffset=0x2)" P-INDEP -;* V83 tmp68 [V83 ] ( 0, 0 ) ref -> zero-ref single-def "field V39._aliases (fldOffset=0x8)" P-INDEP -;* V84 tmp69 [V84 ] ( 0, 0 ) ref -> zero-ref "field V69.array (fldOffset=0x0)" P-INDEP -;* V85 tmp70 [V85 ] ( 0, 0 ) ubyte -> zero-ref single-def "V35.[000..001)" -;* V86 tmp71 [V86 ] ( 0, 0 ) ubyte -> zero-ref single-def "V35.[001..002)" -;* V87 tmp72 [V87 ] ( 0, 0 ) ubyte -> zero-ref single-def "V35.[002..003)" -;* V88 tmp73 [V88 ] ( 0, 0 ) ref -> zero-ref single-def "V35.[008..016)" -;* V89 tmp74 [V89 ] ( 0, 0 ) ubyte -> zero-ref "V42.[000..001)" -;* V90 tmp75 [V90 ] ( 0, 0 ) ubyte -> zero-ref "V42.[001..002)" -;* V91 tmp76 [V91 ] ( 0, 0 ) ubyte -> zero-ref "V42.[002..003)" -;* V92 tmp77 [V92 ] ( 0, 0 ) ref -> zero-ref "V42.[008..016)" -;* V93 tmp78 [V93 ] ( 0, 0 ) ubyte -> zero-ref single-def "V51.[000..001)" -;* V94 tmp79 [V94 ] ( 0, 0 ) ubyte -> zero-ref single-def "V51.[001..002)" -;* V95 tmp80 [V95 ] ( 0, 0 ) ubyte -> zero-ref single-def "V51.[002..003)" -;* V96 tmp81 [V96 ] ( 0, 0 ) ref -> zero-ref single-def "V51.[008..016)" -;* V97 tmp82 [V97 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[000..001)" -;* V98 tmp83 [V98 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[001..002)" -;* V99 tmp84 [V99 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[002..003)" -;* V100 tmp85 [V100 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)" -;* V101 tmp86 [V101 ] ( 0, 0 ) ubyte -> zero-ref "V44.[000..001)" -;* V102 tmp87 [V102 ] ( 0, 0 ) ubyte -> zero-ref "V44.[001..002)" -;* V103 tmp88 [V103 ] ( 0, 0 ) ubyte -> zero-ref "V44.[002..003)" -;* V104 tmp89 [V104 ] ( 0, 0 ) ref -> zero-ref "V44.[008..016)" -;* V105 tmp90 [V105 ] ( 0, 0 ) ubyte -> zero-ref single-def "V53.[000..001)" -;* V106 tmp91 [V106 ] ( 0, 0 ) ubyte -> zero-ref single-def "V53.[001..002)" -;* V107 tmp92 [V107 ] ( 0, 0 ) ubyte -> zero-ref single-def "V53.[002..003)" -;* V108 tmp93 [V108 ] ( 0, 0 ) ref -> zero-ref single-def "V53.[008..016)" -;* V109 tmp94 [V109 ] ( 0, 0 ) ubyte -> zero-ref "V48.[000..001)" -;* V110 tmp95 [V110 ] ( 0, 0 ) ubyte -> zero-ref "V48.[001..002)" -;* V111 tmp96 [V111 ] ( 0, 0 ) ubyte -> zero-ref "V48.[002..003)" -;* V112 tmp97 [V112 ] ( 0, 0 ) ref -> zero-ref "V48.[008..016)" -;* V113 tmp98 [V113 ] ( 0, 0 ) ubyte -> zero-ref single-def "V57.[000..001)" -;* V114 tmp99 [V114 ] ( 0, 0 ) ubyte -> zero-ref single-def "V57.[001..002)" -;* V115 tmp100 [V115 ] ( 0, 0 ) ubyte -> zero-ref single-def "V57.[002..003)" -;* V116 tmp101 [V116 ] ( 0, 0 ) ref -> zero-ref single-def "V57.[008..016)" -;* V117 tmp102 [V117 ] ( 0, 0 ) byref -> zero-ref "Spilling address for field-by-field copy" -; V118 tmp103 [V118,T16] ( 4, 8 ) byref -> x14 single-def "Spilling address for field-by-field copy" -; V119 tmp104 [V119,T17] ( 4, 8 ) struct ( 8) [fp+0x18] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[ubyte]> -; V120 tmp105 [V120,T27] ( 2, 4 ) ref -> x0 single-def "argument with side effect" -; V121 tmp106 [V121,T04] ( 2, 16 ) ref -> x1 "argument with side effect" -; V122 cse0 [V122,T23] ( 2, 5 ) ref -> x22 hoist "CSE - moderate" -; V123 cse1 [V123,T09] ( 4, 12 ) long -> x24 "CSE - aggressive"
+;* V50 tmp35 [V50 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V51 tmp36 [V51 ] ( 0, 0 ) ref -> zero-ref single-def +;* V52 tmp37 [V52 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V53 tmp38 [V53 ] ( 0, 0 ) ref -> zero-ref single-def +;* V54 tmp39 [V54 ] ( 0, 0 ) ref -> zero-ref +;* V55 tmp40 [V55 ] ( 0, 0 ) ref -> zero-ref single-def +;* V56 tmp41 [V56 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V57 tmp42 [V57 ] ( 0, 0 ) ref -> zero-ref single-def +; V58 tmp43 [V58,T33] ( 2, 2 ) ref -> x3 single-def +; V59 tmp44 [V59,T26] ( 2, 4 ) ref -> x24 class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.AssemblyMetadata> +;* V60 tmp45 [V60 ] ( 0, 0 ) ref -> zero-ref single-def +; V61 tmp46 [V61,T34] ( 2, 2 ) ref -> x1 +; V62 tmp47 [V62,T08] ( 4, 12 ) ref -> x0 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.DataFlowAnalysis> +; V63 tmp48 [V63,T00] ( 4, 24 ) ref -> x0 class-hnd "dup spill" <<unknown class>> +;* V64 tmp49 [V64 ] ( 0, 0 ) ref -> zero-ref +; V65 tmp50 [V65,T11] ( 2, 12 ) ref -> x1 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> +; V66 tmp51 [V66,T12] ( 2, 12 ) ref -> x2 class-hnd "Inlining Arg" <Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax> +; V67 tmp52 [V67,T18] ( 2, 8 ) ref -> x15 class-hnd exact "Inlining Arg" <<unknown class>> +;* V68 tmp53 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.ISymbol]> +;* V69 tmp54 [V69 ] ( 0, 0 ) ref -> zero-ref single-def "field V05._source (fldOffset=0x0)" P-INDEP +;* V70 tmp55 [V70 ] ( 0, 0 ) ref -> zero-ref single-def "field V07.array (fldOffset=0x0)" P-INDEP +;* V71 tmp56 [V71,T38] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.hasValue (fldOffset=0x0)" P-INDEP +;* V72 tmp57 [V72,T39] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.value (fldOffset=0x1)" P-INDEP +;* V73 tmp58 [V73,T36] ( 0, 0 ) ref -> zero-ref single-def "field V16.array (fldOffset=0x0)" P-INDEP +; V74 tmp59 [V74,T10] ( 3, 12 ) ref -> x23 "field V23.array (fldOffset=0x0)" P-INDEP +;* V75 tmp60 [V75 ] ( 0, 0 ) ref -> zero-ref "field V25.array (fldOffset=0x0)" P-INDEP +;* V76 tmp61 [V76,T40] ( 0, 0 ) ubyte -> zero-ref single-def "field V30.hasValue (fldOffset=0x0)" P-INDEP +;* V77 tmp62 [V77,T41] ( 0, 0 ) ubyte -> zero-ref single-def "field V30.value (fldOffset=0x1)" P-INDEP +;* V78 tmp63 [V78,T37] ( 0, 0 ) ref -> zero-ref single-def "field V33._source (fldOffset=0x0)" P-INDEP +;* V79 tmp64 [V79 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V38._kind (fldOffset=0x0)" P-INDEP +;* V80 tmp65 [V80 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V38._embedInteropTypes (fldOffset=0x1)" P-INDEP +;* V81 tmp66 [V81 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V38.<HasRecursiveAliases>k__BackingField (fldOffset=0x2)" P-INDEP +;* V82 tmp67 [V82 ] ( 0, 0 ) ref -> zero-ref single-def "field V38._aliases (fldOffset=0x8)" P-INDEP +;* V83 tmp68 [V83 ] ( 0, 0 ) ref -> zero-ref "field V68.array (fldOffset=0x0)" P-INDEP +;* V84 tmp69 [V84 ] ( 0, 0 ) ubyte -> zero-ref single-def "V34.[000..001)" +;* V85 tmp70 [V85 ] ( 0, 0 ) ubyte -> zero-ref single-def "V34.[001..002)" +;* V86 tmp71 [V86 ] ( 0, 0 ) ubyte -> zero-ref single-def "V34.[002..003)" +;* V87 tmp72 [V87 ] ( 0, 0 ) ref -> zero-ref single-def "V34.[008..016)" +;* V88 tmp73 [V88 ] ( 0, 0 ) ubyte -> zero-ref "V41.[000..001)" +;* V89 tmp74 [V89 ] ( 0, 0 ) ubyte -> zero-ref "V41.[001..002)" +;* V90 tmp75 [V90 ] ( 0, 0 ) ubyte -> zero-ref "V41.[002..003)" +;* V91 tmp76 [V91 ] ( 0, 0 ) ref -> zero-ref "V41.[008..016)" +;* V92 tmp77 [V92 ] ( 0, 0 ) ubyte -> zero-ref single-def "V50.[000..001)" +;* V93 tmp78 [V93 ] ( 0, 0 ) ubyte -> zero-ref single-def "V50.[001..002)" +;* V94 tmp79 [V94 ] ( 0, 0 ) ubyte -> zero-ref single-def "V50.[002..003)" +;* V95 tmp80 [V95 ] ( 0, 0 ) ref -> zero-ref single-def "V50.[008..016)" +;* V96 tmp81 [V96 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[000..001)" +;* V97 tmp82 [V97 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[001..002)" +;* V98 tmp83 [V98 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[002..003)" +;* V99 tmp84 [V99 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)" +;* V100 tmp85 [V100 ] ( 0, 0 ) ubyte -> zero-ref "V43.[000..001)" +;* V101 tmp86 [V101 ] ( 0, 0 ) ubyte -> zero-ref "V43.[001..002)" +;* V102 tmp87 [V102 ] ( 0, 0 ) ubyte -> zero-ref "V43.[002..003)" +;* V103 tmp88 [V103 ] ( 0, 0 ) ref -> zero-ref "V43.[008..016)" +;* V104 tmp89 [V104 ] ( 0, 0 ) ubyte -> zero-ref single-def "V52.[000..001)" +;* V105 tmp90 [V105 ] ( 0, 0 ) ubyte -> zero-ref single-def "V52.[001..002)" +;* V106 tmp91 [V106 ] ( 0, 0 ) ubyte -> zero-ref single-def "V52.[002..003)" +;* V107 tmp92 [V107 ] ( 0, 0 ) ref -> zero-ref single-def "V52.[008..016)" +;* V108 tmp93 [V108 ] ( 0, 0 ) ubyte -> zero-ref "V47.[000..001)" +;* V109 tmp94 [V109 ] ( 0, 0 ) ubyte -> zero-ref "V47.[001..002)" +;* V110 tmp95 [V110 ] ( 0, 0 ) ubyte -> zero-ref "V47.[002..003)" +;* V111 tmp96 [V111 ] ( 0, 0 ) ref -> zero-ref "V47.[008..016)" +;* V112 tmp97 [V112 ] ( 0, 0 ) ubyte -> zero-ref single-def "V56.[000..001)" +;* V113 tmp98 [V113 ] ( 0, 0 ) ubyte -> zero-ref single-def "V56.[001..002)" +;* V114 tmp99 [V114 ] ( 0, 0 ) ubyte -> zero-ref single-def "V56.[002..003)" +;* V115 tmp100 [V115 ] ( 0, 0 ) ref -> zero-ref single-def "V56.[008..016)" +;* V116 tmp101 [V116 ] ( 0, 0 ) byref -> zero-ref "Spilling address for field-by-field copy" +; V117 tmp102 [V117,T16] ( 4, 8 ) byref -> x14 single-def "Spilling address for field-by-field copy" +; V118 tmp103 [V118,T17] ( 4, 8 ) struct ( 8) [fp+0x18] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[ubyte]> +; V119 tmp104 [V119,T27] ( 2, 4 ) ref -> x0 single-def "argument with side effect" +; V120 tmp105 [V120,T04] ( 2, 16 ) ref -> x1 "argument with side effect" +; V121 cse0 [V121,T23] ( 2, 5 ) ref -> x22 hoist "CSE - moderate" +; V122 cse1 [V122,T09] ( 4, 12 ) long -> x24 "CSE - aggressive"
; ; Lcl frame size = 152 @@ -157,11 +156,11 @@ G_M35861_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ldr x3, [x3] blr x3 ; gcrRegs +[x0]
- strb wzr, [fp, #0x18] // [V119 tmp104] - strb wzr, [fp, #0x19] // [V119 tmp104+0x01] - ldrh w4, [fp, #0x18] // [V119 tmp104] - mov x5, xzr
+ strb wzr, [fp, #0x18] // [V118 tmp103] + strb wzr, [fp, #0x19] // [V118 tmp103+0x01] + ldrh w4, [fp, #0x18] // [V118 tmp103]
mov x1, xzr
+ mov x5, xzr
movz x2, #8 movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 @@ -234,7 +233,7 @@ G_M35861_IG15: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { ;; size=4 bbWeight=1 PerfScore 1.00 G_M35861_IG16: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz str w0, [sp, #0x74] // [V15 OutArgs+0x74]
- ldrh w0, [fp, #0x18] // [V119 tmp104]
+ ldrh w0, [fp, #0x18] // [V118 tmp103]
str w0, [sp, #0x20] // [V15 OutArgs+0x20] mov x0, x20 ; gcrRegs +[x0]

+0 (0.00%) : 17100.dasm - CscBench:CompileBench():ubyte (FullOpts)

@@ -29,95 +29,94 @@ ; V18 tmp5 [V18,T05] ( 4, 8 ) ref -> x22 class-hnd exact single-def "impAppendStmt" <System.String> ;* V19 tmp6 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd "Strict ordering of exceptions for Array store" <Microsoft.CodeAnalysis.PortableExecutableReference> ; V20 tmp7 [V20,T00] ( 10, 80 ) ref -> x24 class-hnd exact "NewObj constructor temp" <System.IO.MemoryStream>
-; V21 tmp8 [V21,T14] ( 2, 4 ) ref -> x0 class-hnd single-def "bubbling QMark2" <Microsoft.CodeAnalysis.Text.SourceText> -;* V22 tmp9 [V22 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V23 tmp10 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <<unknown class>> -;* V24 tmp11 [V24 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[ubyte]> -;* V25 tmp12 [V25 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> -;* V26 tmp13 [V26 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -; V27 tmp14 [V27,T22] ( 2, 2 ) ref -> x15 class-hnd single-def "Inline return value spill temp" <Microsoft.CodeAnalysis.PortableExecutableReference> -; V28 tmp15 [V28,T15] ( 2, 4 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.IO.Stream> -; V29 tmp16 [V29,T23] ( 2, 2 ) ref -> x23 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.ModuleMetadata> -;* V30 tmp17 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -; V31 tmp18 [V31,T01] ( 7, 14 ) ref -> x24 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> -;* V32 tmp19 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> -;* V33 tmp20 [V33 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V34 tmp21 [V34 ] ( 0, 0 ) ref -> zero-ref -;* V35 tmp22 [V35 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties>
+;* V21 tmp8 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Nullable`1[ubyte]> +; V22 tmp9 [V22,T14] ( 2, 4 ) ref -> x0 class-hnd single-def "impAppendStmt" <Microsoft.CodeAnalysis.Text.SourceText> +;* V23 tmp10 [V23,T26] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <<unknown class>> +;* V24 tmp11 [V24 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> +;* V25 tmp12 [V25 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +; V26 tmp13 [V26,T22] ( 2, 2 ) ref -> x15 class-hnd single-def "Inline return value spill temp" <Microsoft.CodeAnalysis.PortableExecutableReference> +; V27 tmp14 [V27,T15] ( 2, 4 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.IO.Stream> +; V28 tmp15 [V28,T23] ( 2, 2 ) ref -> x23 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CodeAnalysis.ModuleMetadata> +;* V29 tmp16 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +; V30 tmp17 [V30,T01] ( 7, 14 ) ref -> x24 class-hnd exact single-def "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> +;* V31 tmp18 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <Microsoft.CodeAnalysis.MetadataImageReference> +;* V32 tmp19 [V32 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V33 tmp20 [V33 ] ( 0, 0 ) ref -> zero-ref +;* V34 tmp21 [V34 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V35 tmp22 [V35 ] ( 0, 0 ) ref -> zero-ref
;* V36 tmp23 [V36 ] ( 0, 0 ) ref -> zero-ref ;* V37 tmp24 [V37 ] ( 0, 0 ) ref -> zero-ref
-;* V38 tmp25 [V38 ] ( 0, 0 ) ref -> zero-ref -;* V39 tmp26 [V39 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties>
+;* V38 tmp25 [V38 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V39 tmp26 [V39 ] ( 0, 0 ) ref -> zero-ref
;* V40 tmp27 [V40 ] ( 0, 0 ) ref -> zero-ref
-;* V41 tmp28 [V41 ] ( 0, 0 ) ref -> zero-ref -;* V42 tmp29 [V42 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V43 tmp30 [V43 ] ( 0, 0 ) ref -> zero-ref single-def -;* V44 tmp31 [V44 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V45 tmp32 [V45 ] ( 0, 0 ) ref -> zero-ref single-def -;* V46 tmp33 [V46 ] ( 0, 0 ) ref -> zero-ref -;* V47 tmp34 [V47 ] ( 0, 0 ) ref -> zero-ref single-def -;* V48 tmp35 [V48 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> -;* V49 tmp36 [V49 ] ( 0, 0 ) ref -> zero-ref single-def -; V50 tmp37 [V50,T24] ( 2, 2 ) ref -> x3 single-def -; V51 tmp38 [V51,T16] ( 2, 4 ) ref -> x23 class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.AssemblyMetadata> -;* V52 tmp39 [V52 ] ( 0, 0 ) ref -> zero-ref single-def -; V53 tmp40 [V53,T25] ( 2, 2 ) ref -> x1
+;* V41 tmp28 [V41 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inlining Arg" <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V42 tmp29 [V42 ] ( 0, 0 ) ref -> zero-ref single-def +;* V43 tmp30 [V43 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V44 tmp31 [V44 ] ( 0, 0 ) ref -> zero-ref single-def +;* V45 tmp32 [V45 ] ( 0, 0 ) ref -> zero-ref +;* V46 tmp33 [V46 ] ( 0, 0 ) ref -> zero-ref single-def +;* V47 tmp34 [V47 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] <Microsoft.CodeAnalysis.MetadataReferenceProperties> +;* V48 tmp35 [V48 ] ( 0, 0 ) ref -> zero-ref single-def +; V49 tmp36 [V49,T24] ( 2, 2 ) ref -> x3 single-def +; V50 tmp37 [V50,T16] ( 2, 4 ) ref -> x23 class-hnd exact single-def "Inlining Arg" <Microsoft.CodeAnalysis.AssemblyMetadata> +;* V51 tmp38 [V51 ] ( 0, 0 ) ref -> zero-ref single-def +; V52 tmp39 [V52,T25] ( 2, 2 ) ref -> x1 +;* V53 tmp40 [V53 ] ( 0, 0 ) ref -> zero-ref
;* V54 tmp41 [V54 ] ( 0, 0 ) ref -> zero-ref ;* V55 tmp42 [V55 ] ( 0, 0 ) ref -> zero-ref
-;* V56 tmp43 [V56 ] ( 0, 0 ) ref -> zero-ref -;* V57 tmp44 [V57 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> -;* V58 tmp45 [V58 ] ( 0, 0 ) ref -> zero-ref "field V05._source (fldOffset=0x0)" P-INDEP -;* V59 tmp46 [V59 ] ( 0, 0 ) ref -> zero-ref single-def "field V07.array (fldOffset=0x0)" P-INDEP -;* V60 tmp47 [V60,T28] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.hasValue (fldOffset=0x0)" P-INDEP -;* V61 tmp48 [V61,T29] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.value (fldOffset=0x1)" P-INDEP -;* V62 tmp49 [V62,T26] ( 0, 0 ) ref -> zero-ref single-def "field V14.array (fldOffset=0x0)" P-INDEP -;* V63 tmp50 [V63,T30] ( 0, 0 ) ubyte -> zero-ref single-def "field V24.hasValue (fldOffset=0x0)" P-INDEP -;* V64 tmp51 [V64,T31] ( 0, 0 ) ubyte -> zero-ref single-def "field V24.value (fldOffset=0x1)" P-INDEP -;* V65 tmp52 [V65,T27] ( 0, 0 ) ref -> zero-ref single-def "field V25._source (fldOffset=0x0)" P-INDEP -;* V66 tmp53 [V66 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V30._kind (fldOffset=0x0)" P-INDEP -;* V67 tmp54 [V67 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V30._embedInteropTypes (fldOffset=0x1)" P-INDEP -;* V68 tmp55 [V68 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V30.<HasRecursiveAliases>k__BackingField (fldOffset=0x2)" P-INDEP -;* V69 tmp56 [V69 ] ( 0, 0 ) ref -> zero-ref single-def "field V30._aliases (fldOffset=0x8)" P-INDEP -;* V70 tmp57 [V70,T18] ( 0, 0 ) ref -> zero-ref "field V57._source (fldOffset=0x0)" P-INDEP -;* V71 tmp58 [V71 ] ( 0, 0 ) ubyte -> zero-ref single-def "V26.[000..001)" -;* V72 tmp59 [V72 ] ( 0, 0 ) ubyte -> zero-ref single-def "V26.[001..002)" -;* V73 tmp60 [V73 ] ( 0, 0 ) ubyte -> zero-ref single-def "V26.[002..003)" -;* V74 tmp61 [V74 ] ( 0, 0 ) ref -> zero-ref single-def "V26.[008..016)" -;* V75 tmp62 [V75 ] ( 0, 0 ) ubyte -> zero-ref "V33.[000..001)" -;* V76 tmp63 [V76 ] ( 0, 0 ) ubyte -> zero-ref "V33.[001..002)" -;* V77 tmp64 [V77 ] ( 0, 0 ) ubyte -> zero-ref "V33.[002..003)" -;* V78 tmp65 [V78 ] ( 0, 0 ) ref -> zero-ref "V33.[008..016)" -;* V79 tmp66 [V79 ] ( 0, 0 ) ubyte -> zero-ref single-def "V42.[000..001)" -;* V80 tmp67 [V80 ] ( 0, 0 ) ubyte -> zero-ref single-def "V42.[001..002)" -;* V81 tmp68 [V81 ] ( 0, 0 ) ubyte -> zero-ref single-def "V42.[002..003)" -;* V82 tmp69 [V82 ] ( 0, 0 ) ref -> zero-ref single-def "V42.[008..016)" -;* V83 tmp70 [V83 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[000..001)" -;* V84 tmp71 [V84 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[001..002)" -;* V85 tmp72 [V85 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[002..003)" -;* V86 tmp73 [V86 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)" -;* V87 tmp74 [V87 ] ( 0, 0 ) ubyte -> zero-ref "V35.[000..001)" -;* V88 tmp75 [V88 ] ( 0, 0 ) ubyte -> zero-ref "V35.[001..002)" -;* V89 tmp76 [V89 ] ( 0, 0 ) ubyte -> zero-ref "V35.[002..003)" -;* V90 tmp77 [V90 ] ( 0, 0 ) ref -> zero-ref "V35.[008..016)" -;* V91 tmp78 [V91 ] ( 0, 0 ) ubyte -> zero-ref single-def "V44.[000..001)" -;* V92 tmp79 [V92 ] ( 0, 0 ) ubyte -> zero-ref single-def "V44.[001..002)" -;* V93 tmp80 [V93 ] ( 0, 0 ) ubyte -> zero-ref single-def "V44.[002..003)" -;* V94 tmp81 [V94 ] ( 0, 0 ) ref -> zero-ref single-def "V44.[008..016)" -;* V95 tmp82 [V95 ] ( 0, 0 ) ubyte -> zero-ref "V39.[000..001)" -;* V96 tmp83 [V96 ] ( 0, 0 ) ubyte -> zero-ref "V39.[001..002)" -;* V97 tmp84 [V97 ] ( 0, 0 ) ubyte -> zero-ref "V39.[002..003)" -;* V98 tmp85 [V98 ] ( 0, 0 ) ref -> zero-ref "V39.[008..016)" -;* V99 tmp86 [V99 ] ( 0, 0 ) ubyte -> zero-ref single-def "V48.[000..001)" -;* V100 tmp87 [V100 ] ( 0, 0 ) ubyte -> zero-ref single-def "V48.[001..002)" -;* V101 tmp88 [V101 ] ( 0, 0 ) ubyte -> zero-ref single-def "V48.[002..003)" -;* V102 tmp89 [V102 ] ( 0, 0 ) ref -> zero-ref single-def "V48.[008..016)" -;* V103 tmp90 [V103 ] ( 0, 0 ) byref -> zero-ref "Spilling address for field-by-field copy" -; V104 tmp91 [V104,T06] ( 4, 8 ) byref -> x14 single-def "Spilling address for field-by-field copy" -; V105 tmp92 [V105,T07] ( 4, 8 ) struct ( 8) [fp+0x18] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[ubyte]> -; V106 tmp93 [V106,T17] ( 2, 4 ) ref -> x0 single-def "argument with side effect" -; V107 PSPSym [V107,T32] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" -; V108 cse0 [V108,T12] ( 2, 5 ) long -> x22 hoist "CSE - aggressive" -; V109 cse1 [V109,T11] ( 2, 5 ) ref -> x23 hoist "CSE - aggressive"
+;* V56 tmp43 [V56 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken> +;* V57 tmp44 [V57 ] ( 0, 0 ) ref -> zero-ref "field V05._source (fldOffset=0x0)" P-INDEP +;* V58 tmp45 [V58 ] ( 0, 0 ) ref -> zero-ref single-def "field V07.array (fldOffset=0x0)" P-INDEP +;* V59 tmp46 [V59,T29] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.hasValue (fldOffset=0x0)" P-INDEP +;* V60 tmp47 [V60,T30] ( 0, 0 ) ubyte -> zero-ref single-def "field V08.value (fldOffset=0x1)" P-INDEP +;* V61 tmp48 [V61,T27] ( 0, 0 ) ref -> zero-ref single-def "field V14.array (fldOffset=0x0)" P-INDEP +;* V62 tmp49 [V62,T31] ( 0, 0 ) ubyte -> zero-ref single-def "field V21.hasValue (fldOffset=0x0)" P-INDEP +;* V63 tmp50 [V63,T32] ( 0, 0 ) ubyte -> zero-ref single-def "field V21.value (fldOffset=0x1)" P-INDEP +;* V64 tmp51 [V64,T28] ( 0, 0 ) ref -> zero-ref single-def "field V24._source (fldOffset=0x0)" P-INDEP +;* V65 tmp52 [V65 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V29._kind (fldOffset=0x0)" P-INDEP +;* V66 tmp53 [V66 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V29._embedInteropTypes (fldOffset=0x1)" P-INDEP +;* V67 tmp54 [V67 ] ( 0, 0 ) ubyte -> zero-ref single-def "field V29.<HasRecursiveAliases>k__BackingField (fldOffset=0x2)" P-INDEP +;* V68 tmp55 [V68 ] ( 0, 0 ) ref -> zero-ref single-def "field V29._aliases (fldOffset=0x8)" P-INDEP +;* V69 tmp56 [V69,T18] ( 0, 0 ) ref -> zero-ref "field V56._source (fldOffset=0x0)" P-INDEP +;* V70 tmp57 [V70 ] ( 0, 0 ) ubyte -> zero-ref single-def "V25.[000..001)" +;* V71 tmp58 [V71 ] ( 0, 0 ) ubyte -> zero-ref single-def "V25.[001..002)" +;* V72 tmp59 [V72 ] ( 0, 0 ) ubyte -> zero-ref single-def "V25.[002..003)" +;* V73 tmp60 [V73 ] ( 0, 0 ) ref -> zero-ref single-def "V25.[008..016)" +;* V74 tmp61 [V74 ] ( 0, 0 ) ubyte -> zero-ref "V32.[000..001)" +;* V75 tmp62 [V75 ] ( 0, 0 ) ubyte -> zero-ref "V32.[001..002)" +;* V76 tmp63 [V76 ] ( 0, 0 ) ubyte -> zero-ref "V32.[002..003)" +;* V77 tmp64 [V77 ] ( 0, 0 ) ref -> zero-ref "V32.[008..016)" +;* V78 tmp65 [V78 ] ( 0, 0 ) ubyte -> zero-ref single-def "V41.[000..001)" +;* V79 tmp66 [V79 ] ( 0, 0 ) ubyte -> zero-ref single-def "V41.[001..002)" +;* V80 tmp67 [V80 ] ( 0, 0 ) ubyte -> zero-ref single-def "V41.[002..003)" +;* V81 tmp68 [V81 ] ( 0, 0 ) ref -> zero-ref single-def "V41.[008..016)" +;* V82 tmp69 [V82 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[000..001)" +;* V83 tmp70 [V83 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[001..002)" +;* V84 tmp71 [V84 ] ( 0, 0 ) ubyte -> zero-ref single-def "V09.[002..003)" +;* V85 tmp72 [V85 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[008..016)" +;* V86 tmp73 [V86 ] ( 0, 0 ) ubyte -> zero-ref "V34.[000..001)" +;* V87 tmp74 [V87 ] ( 0, 0 ) ubyte -> zero-ref "V34.[001..002)" +;* V88 tmp75 [V88 ] ( 0, 0 ) ubyte -> zero-ref "V34.[002..003)" +;* V89 tmp76 [V89 ] ( 0, 0 ) ref -> zero-ref "V34.[008..016)" +;* V90 tmp77 [V90 ] ( 0, 0 ) ubyte -> zero-ref single-def "V43.[000..001)" +;* V91 tmp78 [V91 ] ( 0, 0 ) ubyte -> zero-ref single-def "V43.[001..002)" +;* V92 tmp79 [V92 ] ( 0, 0 ) ubyte -> zero-ref single-def "V43.[002..003)" +;* V93 tmp80 [V93 ] ( 0, 0 ) ref -> zero-ref single-def "V43.[008..016)" +;* V94 tmp81 [V94 ] ( 0, 0 ) ubyte -> zero-ref "V38.[000..001)" +;* V95 tmp82 [V95 ] ( 0, 0 ) ubyte -> zero-ref "V38.[001..002)" +;* V96 tmp83 [V96 ] ( 0, 0 ) ubyte -> zero-ref "V38.[002..003)" +;* V97 tmp84 [V97 ] ( 0, 0 ) ref -> zero-ref "V38.[008..016)" +;* V98 tmp85 [V98 ] ( 0, 0 ) ubyte -> zero-ref single-def "V47.[000..001)" +;* V99 tmp86 [V99 ] ( 0, 0 ) ubyte -> zero-ref single-def "V47.[001..002)" +;* V100 tmp87 [V100 ] ( 0, 0 ) ubyte -> zero-ref single-def "V47.[002..003)" +;* V101 tmp88 [V101 ] ( 0, 0 ) ref -> zero-ref single-def "V47.[008..016)" +;* V102 tmp89 [V102 ] ( 0, 0 ) byref -> zero-ref "Spilling address for field-by-field copy" +; V103 tmp90 [V103,T06] ( 4, 8 ) byref -> x14 single-def "Spilling address for field-by-field copy" +; V104 tmp91 [V104,T07] ( 4, 8 ) struct ( 8) [fp+0x18] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[ubyte]> +; V105 tmp92 [V105,T17] ( 2, 4 ) ref -> x0 single-def "argument with side effect" +; V106 PSPSym [V106,T33] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" +; V107 cse0 [V107,T12] ( 2, 5 ) long -> x22 hoist "CSE - aggressive" +; V108 cse1 [V108,T11] ( 2, 5 ) ref -> x23 hoist "CSE - aggressive"
; ; Lcl frame size = 144 @@ -129,7 +128,7 @@ G_M15366_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 { stp x23, x24, [sp, #0xC0] add fp, sp, #120 add x0, sp, #208
- str x0, [fp, #0x20] // [V107 PSPSym]
+ str x0, [fp, #0x20] // [V106 PSPSym]
;; size=32 bbWeight=1 PerfScore 6.50 G_M15366_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movz x0, #0xD1FFAB1E @@ -156,11 +155,11 @@ G_M15366_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ldr x3, [x3] blr x3 ; gcr arg pop 0
- strb wzr, [fp, #0x18] // [V105 tmp92] - strb wzr, [fp, #0x19] // [V105 tmp92+0x01] - ldrh w4, [fp, #0x18] // [V105 tmp92] - mov x5, xzr
+ strb wzr, [fp, #0x18] // [V104 tmp91] + strb wzr, [fp, #0x19] // [V104 tmp91+0x01] + ldrh w4, [fp, #0x18] // [V104 tmp91]
mov x1, xzr
+ mov x5, xzr
movz x2, #0xD1FFAB1E movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 @@ -244,7 +243,7 @@ G_M15366_IG15: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { ;; size=4 bbWeight=1 PerfScore 1.00 G_M15366_IG16: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz str w0, [sp, #0x74] // [V13 OutArgs+0x74]
- ldrh w0, [fp, #0x18] // [V105 tmp92]
+ ldrh w0, [fp, #0x18] // [V104 tmp91]
str w0, [sp, #0x20] // [V13 OutArgs+0x20] mov x0, x20 ; gcrRegs +[x0]

benchmarks.run_pgo.osx.arm64.checked.mch

-28 (-28.00%) : 28286.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-17.14%) : 57825.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.Canon]:get_Current():System.Canon:this (Tier1)

@@ -8,22 +8,19 @@ ; 1 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 4 ) byref -> x0 this single-def -; V01 TypeCtx [V01,T02] ( 4, 3.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) byref -> x0 this single-def +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x19 single-def
;# 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 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T10] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T08] ( 4, 2.12) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> -; V08 tmp6 [V08,T04] ( 2, 4 ) byref -> x1 single-def "Inlining Arg" -; V09 tmp7 [V09,T03] ( 3, 5 ) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref single-def -;* V11 tmp9 [V11,T11] ( 0, 0 ) int -> zero-ref -; V12 tmp10 [V12,T07] ( 2, 3 ) int -> x2 "Inlining Arg" -; V13 tmp11 [V13,T09] ( 2, 2 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V14 tmp12 [V14,T06] ( 3, 3 ) ref -> x0 single-def "argument with side effect" -; V15 cse0 [V15,T05] ( 4, 3 ) ref -> x0 "CSE - aggressive"
+; V04 tmp2 [V04,T07] ( 3, 2 ) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> +; V05 tmp3 [V05,T03] ( 2, 4 ) byref -> x1 single-def "Inlining Arg" +; V06 tmp4 [V06,T02] ( 3, 5 ) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def +;* V08 tmp6 [V08,T09] ( 0, 0 ) int -> zero-ref +; V09 tmp7 [V09,T06] ( 2, 3 ) int -> x2 "Inlining Arg" +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V11 tmp9 [V11,T05] ( 3, 3 ) ref -> x0 single-def "argument with side effect" +; V12 cse0 [V12,T04] ( 4, 3 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -67,33 +64,21 @@ G_M44215_IG04: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b mov x1, x0 ; gcrRegs +[x1] ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M44215_IG08 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M44215_IG06: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M44215_IG08 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M44215_IG07: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M44215_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 10.00 +G_M44215_IG06: ; 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 140, prolog size 16, PerfScore 31.06, instruction count 35, allocated bytes for code 140 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
+; Total bytes of code 116, prolog size 16, PerfScore 36.00, instruction count 29, allocated bytes for code 116 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -104,7 +89,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ 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)

-48 (-14.63%) : 64692.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.Canon]:get_Item(int):System.Canon:this (Tier1)

@@ -10,22 +10,17 @@ ; Final local variable assignments ; ; V00 this [V00,T02] ( 4, 3.29) byref -> x0 this single-def
-; V01 TypeCtx [V01,T00] ( 5, 3.86) long -> x19 single-def
+; V01 TypeCtx [V01,T00] ( 5, 4 ) long -> x19 single-def
; V02 arg1 [V02,T01] ( 5, 3.29) int -> x2 single-def
-; V03 loc0 [V03,T03] ( 10, 5 ) ref -> x20 class-hnd single-def <Microsoft.CodeAnalysis.SyntaxNode>
+; V03 loc0 [V03,T03] ( 8, 4.29) ref -> x20 class-hnd single-def <Microsoft.CodeAnalysis.SyntaxNode>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T11] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V06 tmp2 [V06 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V07 tmp3 [V07,T09] ( 3, 0.71) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp4 [V08,T07] ( 5, 2.14) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V09 tmp5 [V09,T05] ( 3, 3.57) long -> x1 "fgMakeTemp is creating a new local variable" -; V10 tmp6 [V10,T06] ( 3, 2.86) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -;* V11 tmp7 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -; V12 tmp8 [V12,T04] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V13 tmp9 [V13,T08] ( 3, 1.14) int -> x1 "Inlining Arg" -; V14 tmp10 [V14,T10] ( 4, 0.64) ref -> x1 "guarded devirt return temp" -;* V15 tmp11 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren> -; V16 tmp12 [V16,T12] ( 2, 0 ) ref -> x1 single-def "argument with side effect"
+; V05 tmp1 [V05,T07] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V06 tmp2 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +; V07 tmp3 [V07,T04] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V08 tmp4 [V08,T05] ( 3, 1.14) int -> x1 "Inlining Arg" +; V09 tmp5 [V09,T06] ( 3, 0.57) ref -> x1 "guarded devirt return temp" +;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren> +; V11 tmp7 [V11,T08] ( 2, 0 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 16 @@ -40,57 +35,44 @@ G_M13118_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre ; byrRegs +[x0] ldr x20, [x0, #0x08] ; gcrRegs +[x20]
- cbz x20, G_M13118_IG12
+ cbz x20, G_M13118_IG08
ldr x1, [x20, #0x18] ; gcrRegs +[x1] ldrh w1, [x1, #0x0C] ; gcrRegs -[x1] cmp w1, #1
- beq G_M13118_IG07
+ beq G_M13118_IG05
;; size=24 bbWeight=1 PerfScore 11.50 G_M13118_IG03: ; bbWeight=0.71, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz ; byrRegs -[x0]
- cbnz w2, G_M13118_IG12 - ldr x0, [x20] - ldr x1, [x19, #0x38] - ldr x1, [x1] - ldr x1, [x1] - cmp x0, x1 - beq G_M13118_IG05 - ;; size=28 bbWeight=0.71 PerfScore 10.36 -G_M13118_IG04: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - mov x0, x1
+ cbnz w2, G_M13118_IG08 + ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
mov x1, x20 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1 x20] +[x0]
- b G_M13118_IG06 - ;; size=16 bbWeight=0.36 PerfScore 1.07 -G_M13118_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] +[x20] - mov x0, x20 - ; gcrRegs +[x0] - ;; size=4 bbWeight=0.36 PerfScore 0.18 -G_M13118_IG06: ; bbWeight=0.71, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x20]
+ ;; size=24 bbWeight=0.71 PerfScore 8.21 +G_M13118_IG04: ; bbWeight=0.71, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0.71 PerfScore 2.14
-G_M13118_IG07: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, gcvars, byref, isz
+G_M13118_IG05: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, gcvars, byref, isz
; gcrRegs -[x0] +[x20] ; byrRegs +[x0] ldr w0, [x0] ; byrRegs -[x0] cmp w2, w0
- bhs G_M13118_IG12
+ bhs G_M13118_IG08
lsl w1, w2, #1 ldr x0, [x20] movz x2, #0xD1FFAB1E movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 cmp x0, x2
- bne G_M13118_IG13
+ bne G_M13118_IG09
mov x0, x20 ; gcrRegs +[x0] movz x2, #0xD1FFAB1E // code for Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this @@ -102,32 +84,20 @@ G_M13118_IG07: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100 mov x1, x0 ; gcrRegs +[x1] ;; size=68 bbWeight=0.29 PerfScore 5.14
-G_M13118_IG08: ; bbWeight=0.29, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M13118_IG06: ; bbWeight=0.29, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M13118_IG11 - ;; size=8 bbWeight=0.29 PerfScore 0.43 -G_M13118_IG09: ; bbWeight=0.14, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M13118_IG11 - ;; size=24 bbWeight=0.14 PerfScore 1.93 -G_M13118_IG10: ; bbWeight=0.07, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.07 PerfScore 0.11 -G_M13118_IG11: ; bbWeight=0.29, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=0.29 PerfScore 2.86 +G_M13118_IG07: ; bbWeight=0.29, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0.29 PerfScore 0.86
-G_M13118_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13118_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -157,7 +127,7 @@ G_M13118_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { bl CORINFO_HELP_THROW ; gcrRegs -[x0 x19] ;; size=76 bbWeight=0 PerfScore 0.00
-G_M13118_IG13: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M13118_IG09: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs +[x20] mov x0, x20 ; gcrRegs +[x0] @@ -168,10 +138,10 @@ G_M13118_IG13: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ; gcrRegs -[x20] mov x1, x0 ; gcrRegs +[x1]
- b G_M13118_IG08
+ b G_M13118_IG06
;; size=28 bbWeight=0 PerfScore 0.00
-; Total bytes of code 328, prolog size 16, PerfScore 37.71, instruction count 82, allocated bytes for code 328 (MethodHash=6436ccc1) for method Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
+; Total bytes of code 280, prolog size 16, PerfScore 34.71, instruction count 70, allocated bytes for code 280 (MethodHash=6436ccc1) for method Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -182,7 +152,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 82 (0x00052) Actual length = 328 (0x000148)
+ Function Length : 70 (0x00046) Actual length = 280 (0x000118)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+48 (+2.54%) : 76811.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

@@ -11,43 +11,43 @@ ; ; V00 this [V00,T00] ( 19, 17.05) ref -> x19 this class-hnd single-def <System.Reflection.Emit.DynamicMethod> ; V01 arg1 [V01,T17] ( 4, 4 ) ref -> x24 class-hnd single-def <System.String>
-; V02 arg2 [V02,T24] ( 3, 3 ) int -> x2 single-def -; V03 arg3 [V03,T25] ( 3, 3 ) int -> x3 single-def -; V04 arg4 [V04,T11] ( 7, 4.36) ref -> x22 class-hnd single-def <System.Type> -; V05 arg5 [V05,T09] ( 5, 6.02) ref -> x21 class-hnd single-def <System.Type[]> -; V06 arg6 [V06,T08] ( 10, 7.03) ref -> x20 class-hnd single-def <System.Type>
+; V02 arg2 [V02,T25] ( 3, 3 ) int -> x2 single-def +; V03 arg3 [V03,T26] ( 3, 3 ) int -> x3 single-def +; V04 arg4 [V04,T12] ( 7, 4.36) ref -> x22 class-hnd single-def <System.Type> +; V05 arg5 [V05,T08] ( 5, 6.02) ref -> x21 class-hnd single-def <System.Type[]> +; V06 arg6 [V06,T07] ( 10, 7.03) ref -> x20 class-hnd single-def <System.Type>
; V07 arg7 [V07,T13] ( 7, 4.02) ref -> x23 class-hnd single-def <System.Reflection.Module>
-; V08 arg8 [V08,T43] ( 2, 1.01) ubyte -> x26 single-def -; V09 arg9 [V09,T41] ( 1, 1.01) ubyte -> x25 single-def
+; V08 arg8 [V08,T45] ( 2, 1.01) ubyte -> x26 single-def +; V09 arg9 [V09,T43] ( 1, 1.01) ubyte -> x25 single-def
; V10 loc0 [V10,T02] ( 7, 13.02) int -> x28
-; V11 loc1 [V11,T07] ( 10, 9.56) ref -> x20 class-hnd exact <System.RuntimeType>
+; V11 loc1 [V11,T06] ( 9, 9.06) ref -> x20 class-hnd exact single-def <System.RuntimeType>
;# V12 OutArgs [V12 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V13 tmp1 [V13,T46] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V13 tmp1 [V13,T48] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
;* V14 tmp2 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp3 [V15 ] ( 0, 0 ) ref -> zero-ref
-; V16 tmp4 [V16,T33] ( 4, 2.69) ref -> x15 -; V17 tmp5 [V17,T29] ( 2, 2.01) int -> x0 -; V18 tmp6 [V18,T40] ( 2, 0.01) int -> x0 -; V19 tmp7 [V19,T30] ( 2, 2.01) int -> x0 -; V20 tmp8 [V20,T34] ( 3, 2.01) ref -> x20 -;* V21 tmp9 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V22 tmp10 [V22,T47] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V23 tmp11 [V23,T45] ( 2, 0.00) int -> x0 -;* V24 tmp12 [V24 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V25 tmp13 [V25,T12] ( 6, 6.07) ref -> x15 class-hnd "spilling QMark2" <System.RuntimeType> -; V26 tmp14 [V26,T48] ( 3, 0 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V27 tmp15 [V27,T04] ( 3, 12.01) ref -> [fp+0x18] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> -;* V28 tmp16 [V28 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -; V29 tmp17 [V29,T01] ( 5, 15.02) ref -> x15 class-hnd "spilling QMark2" <System.RuntimeType> -; V30 tmp18 [V30,T49] ( 3, 0 ) ref -> x22 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V31 tmp19 [V31,T50] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V32 tmp20 [V32,T27] ( 3, 4.00) ref -> x15 "guarded devirt return temp" -; V33 tmp21 [V33,T03] ( 5, 12.01) ref -> x14 "guarded devirt arg temp" -;* V34 tmp22 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V35 tmp23 [V35,T39] ( 3, 1.35) ref -> x22 "guarded devirt return temp" -;* V36 tmp24 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V37 tmp25 [V37,T38] ( 3, 2.01) ref -> x20 "guarded devirt return temp" -;* V38 tmp26 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
+; V16 tmp4 [V16,T35] ( 4, 2.69) ref -> x15 +; V17 tmp5 [V17,T30] ( 2, 2.01) int -> x0 +; V18 tmp6 [V18,T42] ( 2, 0.01) int -> x0 +; V19 tmp7 [V19,T31] ( 2, 2.01) int -> x0 +; V20 tmp8 [V20,T36] ( 3, 2.01) ref -> x20 +; V21 tmp9 [V21,T49] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V22 tmp10 [V22,T47] ( 2, 0.00) int -> x0 +; V23 tmp11 [V23,T34] ( 2, 2.70) ref -> x15 class-hnd exact single-def "dup spill" <System.RuntimeType> +; V24 tmp12 [V24,T50] ( 3, 0 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V25 tmp13 [V25,T04] ( 3, 12.01) ref -> [fp+0x10] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> +; V26 tmp14 [V26,T10] ( 2, 8.01) ref -> x15 class-hnd exact "Strict ordering of exceptions for Array store" <System.RuntimeType> +; V27 tmp15 [V27,T51] ( 3, 0 ) ref -> x22 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V28 tmp16 [V28,T52] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V29 tmp17 [V29,T28] ( 3, 4.00) ref -> x14 "guarded devirt return temp" +; V30 tmp18 [V30,T03] ( 5, 12.01) ref -> x14 "guarded devirt arg temp" +;* V31 tmp19 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V32 tmp20 [V32,T41] ( 3, 1.35) ref -> x22 "guarded devirt return temp" +;* V33 tmp21 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V34 tmp22 [V34,T40] ( 3, 2.01) ref -> x20 "guarded devirt return temp" +;* V35 tmp23 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V36 tmp24 [V36 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V37 tmp25 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V38 tmp26 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp27 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V40 tmp28 [V40 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V41 tmp29 [V41 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" @@ -58,62 +58,61 @@ ;* V46 tmp34 [V46 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V47 tmp35 [V47 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V48 tmp36 [V48 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-;* V49 tmp37 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V50 tmp38 [V50 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V51 tmp39 [V51 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V52 tmp40 [V52,T42] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V53 tmp41 [V53,T19] ( 5, 5.03) ubyte -> x0 "Inline stloc first use temp" -;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> -;* V55 tmp43 [V55 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> -;* V56 tmp44 [V56 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> -;* V57 tmp45 [V57 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> -; V59 tmp47 [V59,T18] ( 12, 5.03) ref -> x22 class-hnd "Inline stloc first use temp" <System.Type> -; V60 tmp48 [V60,T21] ( 3, 5.03) int -> x1 "guarded devirt return temp" -;* V61 tmp49 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V62 tmp50 [V62,T22] ( 3, 5.03) ubyte -> x1 "Inline return value spill temp" -; V63 tmp51 [V63,T20] ( 5, 5.03) ubyte -> x0 "Inline stloc first use temp" -;* V64 tmp52 [V64 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> -;* V65 tmp53 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V66 tmp54 [V66 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> -; V67 tmp55 [V67,T51] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> -;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V69 tmp57 [V69,T35] ( 3, 2.01) int -> x1 -; V70 tmp58 [V70,T37] ( 2, 2.01) ubyte -> x14 "Inline stloc first use temp" -;* V71 tmp59 [V71 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V72 tmp60 [V72 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V73 tmp61 [V73 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V74 tmp62 [V74,T26] ( 2, 4.03) byref -> x14 single-def "Inlining Arg" -;* V75 tmp63 [V75 ] ( 0, 0 ) ref -> zero-ref single-def "field V55.m_type (fldOffset=0x0)" P-INDEP -; V76 tmp64 [V76,T31] ( 5, 3.02) ref -> x0 single-def "field V56.m_type (fldOffset=0x0)" P-INDEP -; V77 tmp65 [V77,T36] ( 2, 2.01) ref -> x0 single-def "field V64.m_type (fldOffset=0x0)" P-INDEP -;* V78 tmp66 [V78 ] ( 0, 0 ) long -> zero-ref "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP -; V79 tmp67 [V79,T32] ( 3, 3.02) long -> x14 "field V71.m_asTAddr (fldOffset=0x0)" P-INDEP -; V80 tmp68 [V80,T05] ( 3, 12.01) ref -> x2 "arr expr" -;* V81 tmp69 [V81,T28] ( 0, 0 ) ref -> zero-ref "arr expr" -; V82 tmp70 [V82,T52] ( 2, 0 ) ref -> x1 "argument with side effect" -; V83 tmp71 [V83,T53] ( 2, 0 ) ref -> x1 "argument with side effect" -; V84 tmp72 [V84,T44] ( 2, 0.01) ref -> x1 single-def "argument with side effect" -; V85 tmp73 [V85,T54] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V86 tmp74 [V86,T55] ( 2, 0 ) ref -> x2 single-def "argument with side effect" -; V87 tmp75 [V87,T56] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V88 tmp76 [V88,T57] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V89 cse0 [V89,T14] ( 3, 6.01) ref -> x14 "CSE - aggressive" -; V90 cse1 [V90,T15] ( 3, 6.01) ref -> x14 "CSE - aggressive" -; V91 cse2 [V91,T10] ( 4, 8.01) long -> [fp+0x28] spill-single-def "CSE - aggressive" -; V92 cse3 [V92,T16] ( 2, 4.00) ref -> x2 "CSE - aggressive" -; V93 cse4 [V93,T06] ( 12, 11.72) long -> [fp+0x20] multi-def "CSE - aggressive" -; V94 cse5 [V94,T23] ( 4, 5.03) int -> x27 "CSE - moderate"
+;* V49 tmp37 [V49,T44] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V50 tmp38 [V50,T20] ( 5, 5.03) ubyte -> x0 "Inline stloc first use temp" +;* V51 tmp39 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> +;* V52 tmp40 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> +;* V53 tmp41 [V53 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> +;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V55 tmp43 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> +; V56 tmp44 [V56,T19] ( 12, 5.03) ref -> x22 class-hnd "Inline stloc first use temp" <System.Type> +; V57 tmp45 [V57,T22] ( 3, 5.03) int -> x1 "guarded devirt return temp" +;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V59 tmp47 [V59,T23] ( 3, 5.03) ubyte -> x1 "Inline return value spill temp" +; V60 tmp48 [V60,T21] ( 5, 5.03) ubyte -> x0 "Inline stloc first use temp" +;* V61 tmp49 [V61 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> +;* V62 tmp50 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V63 tmp51 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V64 tmp52 [V64,T53] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> +;* V65 tmp53 [V65 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V66 tmp54 [V66,T37] ( 3, 2.01) int -> x1 +; V67 tmp55 [V67,T39] ( 2, 2.01) ubyte -> x14 "Inline stloc first use temp" +;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V69 tmp57 [V69 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V70 tmp58 [V70 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V71 tmp59 [V71,T27] ( 2, 4.03) byref -> x14 single-def "Inlining Arg" +;* V72 tmp60 [V72 ] ( 0, 0 ) ref -> zero-ref single-def "field V52.m_type (fldOffset=0x0)" P-INDEP +; V73 tmp61 [V73,T32] ( 5, 3.02) ref -> x0 single-def "field V53.m_type (fldOffset=0x0)" P-INDEP +; V74 tmp62 [V74,T38] ( 2, 2.01) ref -> x0 single-def "field V61.m_type (fldOffset=0x0)" P-INDEP +;* V75 tmp63 [V75 ] ( 0, 0 ) long -> zero-ref "field V65.m_asTAddr (fldOffset=0x0)" P-INDEP +; V76 tmp64 [V76,T33] ( 3, 3.02) long -> x14 "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP +; V77 tmp65 [V77,T05] ( 3, 12.01) ref -> x14 "arr expr" +;* V78 tmp66 [V78,T29] ( 0, 0 ) ref -> zero-ref "arr expr" +; V79 tmp67 [V79,T54] ( 2, 0 ) ref -> x1 "argument with side effect" +; V80 tmp68 [V80,T55] ( 2, 0 ) ref -> x1 "argument with side effect" +; V81 tmp69 [V81,T46] ( 2, 0.01) ref -> x1 single-def "argument with side effect" +; V82 tmp70 [V82,T56] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V83 tmp71 [V83,T57] ( 2, 0 ) ref -> x2 single-def "argument with side effect" +; V84 tmp72 [V84,T58] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V85 tmp73 [V85,T59] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V86 cse0 [V86,T14] ( 3, 6.01) ref -> x14 "CSE - aggressive" +; V87 cse1 [V87,T15] ( 3, 6.01) ref -> x14 "CSE - aggressive" +; V88 cse2 [V88,T09] ( 4, 8.01) long -> [fp+0x18] spill-single-def "CSE - aggressive" +; V89 cse3 [V89,T16] ( 2, 4.00) ref -> x14 "CSE - aggressive" +; V90 cse4 [V90,T24] ( 4, 5.03) int -> x27 "CSE - moderate" +; V91 rat0 [V91,T01] ( 5, 15.02) ref -> x15 class-hnd "replacement local" <System.RuntimeType> +; V92 rat1 [V92,T18] ( 5, 5.06) ref -> x22 class-hnd "replacement local" <System.RuntimeType> +; V93 rat2 [V93,T11] ( 5, 7.55) ref -> x20 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 32
+; Lcl frame size = 16
G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x80]! - stp x19, x20, [sp, #0x30] - stp x21, x22, [sp, #0x40] - stp x23, x24, [sp, #0x50] - stp x25, x26, [sp, #0x60] - stp x27, x28, [sp, #0x70]
+ stp fp, lr, [sp, #-0x70]! + stp x19, x20, [sp, #0x20] + stp x21, x22, [sp, #0x30] + stp x23, x24, [sp, #0x40] + stp x25, x26, [sp, #0x50] + stp x27, x28, [sp, #0x60]
mov fp, sp mov x19, x0 ; gcrRegs +[x19] @@ -127,17 +126,17 @@ G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ; gcrRegs +[x20] mov x23, x7 ; gcrRegs +[x23]
- ldrb w26, [fp, #0x80] // [V08 arg8] - ldrb w25, [fp, #0x81] // [V09 arg9]
+ ldrb w26, [fp, #0x70] // [V08 arg8] + ldrb w25, [fp, #0x71] // [V09 arg9]
;; size=60 bbWeight=1 PerfScore 13.50 G_M32743_IG02: ; bbWeight=1, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
- cbz x24, G_M32743_IG41
+ cbz x24, G_M32743_IG43
cmp w2, #22 ccmp w3, #1, 0, eq
- bne G_M32743_IG42
+ bne G_M32743_IG44
;; size=16 bbWeight=1 PerfScore 3.00 G_M32743_IG03: ; bbWeight=1.01, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
- cbz x21, G_M32743_IG46
+ cbz x21, G_M32743_IG48
ldr w27, [x21, #0x08] mov w1, w27 movz x0, #0xD1FFAB1E @@ -161,33 +160,36 @@ G_M32743_IG04: ; bbWeight=2.00, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x2 add x14, x21, #16 ; byrRegs +[x14] ubfiz x0, x28, #3, #32
- str x0, [fp, #0x28] // [V91 cse2]
+ str x0, [fp, #0x18] // [V88 cse2]
ldr x14, [x14, x0] ; gcrRegs +[x14] ; byrRegs -[x14]
- cbz x14, G_M32743_IG44
+ cbz x14, G_M32743_IG46
ldr x1, [x19, #0x08] ; gcrRegs +[x1]
- str x1, [fp, #0x18] // [V27 tmp15] - ; GC ptr vars +{V27}
+ str x1, [fp, #0x10] // [V25 tmp13] + ; GC ptr vars +{V25}
ldr x15, [x14]
- movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x15, x2 - bne G_M32743_IG43
+ movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #1 LSL #32 + cmp x15, x12 + bne G_M32743_IG45 + ;; size=52 bbWeight=2.00 PerfScore 33.04 +G_M32743_IG05: ; bbWeight=2.00, gcVars=0000000000000010 {V25}, gcrefRegs=1F84002 {x1 x14 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, gcvars, byref, isz
mov x15, x14 ; gcrRegs +[x15]
- ;; size=56 bbWeight=2.00 PerfScore 34.04 -G_M32743_IG05: ; bbWeight=2.00, gcVars=0000000000000010 {V27}, gcrefRegs=1F88002 {x1 x15 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x14]
cbz x15, G_M32743_IG08 ...

+16 (+6.45%) : 46558.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,17 +10,15 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,299.98) int -> x19
+; V01 loc0 [V01,T01] ( 4,299.98) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,446.29) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,247.94) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,743.82) ref -> x15 class-hnd "spilling QMark2" <PerfLabTests.Foo[]> -; V06 cse0 [V06,T05] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3, 99.20) ref -> x22 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.01) int -> x20 "CSE - aggressive" -; V09 cse3 [V09,T07] ( 3, 99.20) long -> x21 "CSE - aggressive" -; V10 rat0 [V10,T09] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" -; V11 rat1 [V11,T08] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.Foo[]>
+; V03 cse0 [V03,T03] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4, 99.20) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.01) int -> x20 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3, 99.20) long -> x21 "CSE - aggressive" +; V07 rat0 [V07,T07] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" +; V08 rat1 [V08,T06] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.Foo[]> +; V09 rat2 [V09,T00] ( 5,694.23) ref -> x15 class-hnd "replacement local" <PerfLabTests.Foo[]>
; ; Lcl frame size = 8 @@ -33,12 +31,12 @@ G_M13964_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldr w19, [fp, #0x84] ;; size=24 bbWeight=0.01 PerfScore 0.06 G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #1 LSL #32 - ldr w20, [x0]
+ movz x14, #0xD1FFAB1E + movk x14, #0xD1FFAB1E LSL #16 + movk x14, #1 LSL #32 + ldr w20, [x14]
cmp w19, w20
- bge G_M13964_IG12
+ bge G_M13964_IG13
;; size=24 bbWeight=0.01 PerfScore 0.06 G_M13964_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movz x21, #0xD1FFAB1E @@ -53,11 +51,11 @@ G_M13964_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr cbz x23, G_M13964_IG06 ;; size=28 bbWeight=0.01 PerfScore 0.06 G_M13964_IG04: ; bbWeight=0.00, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x23] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2
+ ldr x14, [x23] + movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #1 LSL #32 + cmp x14, x15
beq G_M13964_IG06 ;; size=24 bbWeight=0.00 PerfScore 0.03 G_M13964_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref @@ -77,26 +75,42 @@ G_M13964_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {} ;; size=36 bbWeight=0 PerfScore 0.00 G_M13964_IG06: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- cbz x23, G_M13964_IG11
+ cbz x23, G_M13964_IG09
;; size=4 bbWeight=99.99 PerfScore 99.99 G_M13964_IG07: ; bbWeight=99.18, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz
+ mov x15, x22 + ; gcrRegs +[x15] + cbnz x15, G_M13964_IG11 + ;; size=8 bbWeight=99.18 PerfScore 148.76 +G_M13964_IG08: ; bbWeight=99.18, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref + add x14, x21, #16 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + ;; size=8 bbWeight=99.18 PerfScore 148.76 +G_M13964_IG09: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz + add w19, w19, #1 + cmp w19, w20 + bge G_M13964_IG13 + ;; size=12 bbWeight=99.99 PerfScore 199.98 +G_M13964_IG10: ; bbWeight=99.98, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + b G_M13964_IG06 + ;; size=4 bbWeight=99.98 PerfScore 99.98 +G_M13964_IG11: ; bbWeight=49.59, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[x15] + ldr x14, [x15] + movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #1 LSL #32 + cmp x14, x12 + beq G_M13964_IG08 + ;; size=24 bbWeight=49.59 PerfScore 297.53 +G_M13964_IG12: ; bbWeight=0, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + ; gcrRegs -[x15]
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M13964_IG10 - ;; size=12 bbWeight=99.18 PerfScore 198.35 -G_M13964_IG08: ; bbWeight=49.59, gcrefRegs=C08002 {x1 x15 x22 x23}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2 - beq G_M13964_IG10 - ;; size=24 bbWeight=49.59 PerfScore 297.53 -G_M13964_IG09: ; bbWeight=24.79, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32
movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 @@ -106,20 +120,10 @@ G_M13964_IG09: ; bbWeight=24.79, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs ; gcr arg pop 0 mov x15, x0 ; gcrRegs +[x15]
- ;; size=28 bbWeight=24.79 PerfScore 161.16 -G_M13964_IG10: ; bbWeight=99.18, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - add x14, x21, #16 - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15] - ;; size=8 bbWeight=99.18 PerfScore 148.76 -G_M13964_IG11: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz - add w19, w19, #1 - cmp w19, w20 - blt G_M13964_IG06 - ;; size=12 bbWeight=99.99 PerfScore 199.98 -G_M13964_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x22-x23]
+ b G_M13964_IG08 + ;; size=44 bbWeight=0 PerfScore 0.00 +G_M13964_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x0 x15 x22-x23]
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -128,7 +132,7 @@ G_M13964_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 248, prolog size 24, PerfScore 1105.99, instruction count 62, allocated bytes for code 248 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 264, prolog size 24, PerfScore 995.22, instruction count 66, allocated bytes for code 264 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -139,7 +143,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 62 (0x0003e) Actual length = 248 (0x0000f8)
+ Function Length : 66 (0x00042) Actual length = 264 (0x000108)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+16 (+6.45%) : 77232.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,17 +10,15 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf2.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,299.98) int -> x19
+; V01 loc0 [V01,T01] ( 4,299.98) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,447.45) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,248.58) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,745.74) ref -> x15 class-hnd "spilling QMark2" <PerfLabTests.CastingPerf2.Foo> -; V06 cse0 [V06,T05] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3, 99.45) ref -> x22 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.01) int -> x20 "CSE - aggressive" -; V09 cse3 [V09,T07] ( 3, 99.45) long -> x21 "CSE - aggressive" -; V10 rat0 [V10,T09] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" -; V11 rat1 [V11,T08] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
+; V03 cse0 [V03,T03] ( 2,100.00) ref -> x23 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4, 99.45) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.01) int -> x20 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3, 99.45) long -> x21 "CSE - aggressive" +; V07 rat0 [V07,T07] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" +; V08 rat1 [V08,T06] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo> +; V09 rat2 [V09,T00] ( 5,696.03) ref -> x15 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
; ; Lcl frame size = 8 @@ -33,12 +31,12 @@ G_M59156_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldr w19, [fp, #0x84] ;; size=24 bbWeight=0.01 PerfScore 0.06 G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #1 LSL #32 - ldr w20, [x0]
+ movz x14, #0xD1FFAB1E + movk x14, #0xD1FFAB1E LSL #16 + movk x14, #1 LSL #32 + ldr w20, [x14]
cmp w19, w20
- bge G_M59156_IG12
+ bge G_M59156_IG13
;; size=24 bbWeight=0.01 PerfScore 0.06 G_M59156_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz movz x21, #0xD1FFAB1E @@ -53,11 +51,11 @@ G_M59156_IG03: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr cbz x23, G_M59156_IG06 ;; size=28 bbWeight=0.01 PerfScore 0.06 G_M59156_IG04: ; bbWeight=0.00, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x23] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2
+ ldr x14, [x23] + movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #1 LSL #32 + cmp x14, x15
beq G_M59156_IG06 ;; size=24 bbWeight=0.00 PerfScore 0.03 G_M59156_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref @@ -77,26 +75,42 @@ G_M59156_IG05: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {} ;; size=36 bbWeight=0 PerfScore 0.00 G_M59156_IG06: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- cbz x23, G_M59156_IG11
+ cbz x23, G_M59156_IG09
;; size=4 bbWeight=99.99 PerfScore 99.99 G_M59156_IG07: ; bbWeight=99.43, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz
+ mov x15, x22 + ; gcrRegs +[x15] + cbnz x15, G_M59156_IG11 + ;; size=8 bbWeight=99.43 PerfScore 149.15 +G_M59156_IG08: ; bbWeight=99.43, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref + add x14, x21, #80 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + ;; size=8 bbWeight=99.43 PerfScore 149.15 +G_M59156_IG09: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz + add w19, w19, #1 + cmp w19, w20 + bge G_M59156_IG13 + ;; size=12 bbWeight=99.99 PerfScore 199.98 +G_M59156_IG10: ; bbWeight=99.98, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + b G_M59156_IG06 + ;; size=4 bbWeight=99.98 PerfScore 99.98 +G_M59156_IG11: ; bbWeight=49.72, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[x15] + ldr x14, [x15] + movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #1 LSL #32 + cmp x14, x12 + beq G_M59156_IG08 + ;; size=24 bbWeight=49.72 PerfScore 298.30 +G_M59156_IG12: ; bbWeight=0, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + ; gcrRegs -[x15]
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M59156_IG10 - ;; size=12 bbWeight=99.43 PerfScore 198.87 -G_M59156_IG08: ; bbWeight=49.72, gcrefRegs=C08002 {x1 x15 x22 x23}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2 - beq G_M59156_IG10 - ;; size=24 bbWeight=49.72 PerfScore 298.30 -G_M59156_IG09: ; bbWeight=24.86, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32
movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS_SPECIAL movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 @@ -106,20 +120,10 @@ G_M59156_IG09: ; bbWeight=24.86, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs ; gcr arg pop 0 mov x15, x0 ; gcrRegs +[x15]
- ;; size=28 bbWeight=24.86 PerfScore 161.58 -G_M59156_IG10: ; bbWeight=99.43, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - add x14, x21, #80 - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15] - ;; size=8 bbWeight=99.43 PerfScore 149.15 -G_M59156_IG11: ; bbWeight=99.99, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz - add w19, w19, #1 - cmp w19, w20 - blt G_M59156_IG06 - ;; size=12 bbWeight=99.99 PerfScore 199.98 -G_M59156_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x22-x23]
+ b G_M59156_IG08 + ;; size=44 bbWeight=0 PerfScore 0.00 +G_M59156_IG13: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x0 x15 x22-x23]
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -128,7 +132,7 @@ G_M59156_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 248, prolog size 24, PerfScore 1108.08, instruction count 62, allocated bytes for code 248 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 264, prolog size 24, PerfScore 996.76, instruction count 66, allocated bytes for code 264 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -139,7 +143,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 62 (0x0003e) Actual length = 248 (0x0000f8)
+ Function Length : 66 (0x00042) Actual length = 264 (0x000108)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

benchmarks.run_tiered.osx.arm64.checked.mch

-28 (-28.00%) : 6631.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-25.93%) : 13208.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (Tier1)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> x20 this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 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" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> x20 "CSE - aggressive"
; ; Lcl frame size = 16 @@ -22,47 +21,36 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x19, x20, [sp, #0x20] mov fp, sp str x1, [fp, #0x18]
- mov x20, x0 - ; gcrRegs +[x20] - mov x19, x1 - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ mov x19, x0 + ; gcrRegs +[x19] + ;; size=20 bbWeight=1 PerfScore 4.00 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x20, [x1, #0x38] + ldr x0, [x20]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x10] blr x2
- ; gcrRegs -[x1 x20]
+ ; gcrRegs -[x1 x19]
mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M60617_IG05 - ;; size=44 bbWeight=1 PerfScore 19.50 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M60617_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x20]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=48 bbWeight=1 PerfScore 22.50 +G_M60617_IG03: ; 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 108, prolog size 16, PerfScore 29.81, instruction count 27, allocated bytes for code 108 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
+; Total bytes of code 80, prolog size 16, PerfScore 29.50, instruction count 20, allocated bytes for code 80 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -73,7 +61,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-17.14%) : 39542.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.Canon]:get_Current():System.Canon:this (Tier1)

@@ -8,22 +8,19 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 4 ) byref -> x0 this single-def -; V01 TypeCtx [V01,T02] ( 4, 3.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) byref -> x0 this single-def +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x19 single-def
;# 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 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T10] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T08] ( 4, 2.12) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> -; V08 tmp6 [V08,T04] ( 2, 4 ) byref -> x1 single-def "Inlining Arg" -; V09 tmp7 [V09,T03] ( 3, 5 ) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref single-def -;* V11 tmp9 [V11,T11] ( 0, 0 ) int -> zero-ref -; V12 tmp10 [V12,T07] ( 2, 3 ) int -> x2 "Inlining Arg" -; V13 tmp11 [V13,T09] ( 2, 2 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V14 tmp12 [V14,T06] ( 3, 3 ) ref -> x0 single-def "argument with side effect" -; V15 cse0 [V15,T05] ( 4, 3 ) ref -> x0 "CSE - aggressive"
+; V04 tmp2 [V04,T07] ( 3, 2 ) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> +; V05 tmp3 [V05,T03] ( 2, 4 ) byref -> x1 single-def "Inlining Arg" +; V06 tmp4 [V06,T02] ( 3, 5 ) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def +;* V08 tmp6 [V08,T09] ( 0, 0 ) int -> zero-ref +; V09 tmp7 [V09,T06] ( 2, 3 ) int -> x2 "Inlining Arg" +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V11 tmp9 [V11,T05] ( 3, 3 ) ref -> x0 single-def "argument with side effect" +; V12 cse0 [V12,T04] ( 4, 3 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -67,33 +64,21 @@ G_M44215_IG04: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b mov x1, x0 ; gcrRegs +[x1] ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M44215_IG08 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M44215_IG06: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M44215_IG08 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M44215_IG07: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M44215_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 10.00 +G_M44215_IG06: ; 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 140, prolog size 16, PerfScore 31.06, instruction count 35, allocated bytes for code 140 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
+; Total bytes of code 116, prolog size 16, PerfScore 36.00, instruction count 29, allocated bytes for code 116 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -104,7 +89,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ 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)

+12 (+7.32%) : 30059.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> x19
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> x15 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> x20 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> x22 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) long -> x21 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> x20 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 0 @@ -28,36 +25,22 @@ G_M36328_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w19, [fp, #0x54] ;; size=20 bbWeight=1 PerfScore 5.50 G_M36328_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #1 LSL #32 - ldr w20, [x0]
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + ldr w20, [x1]
cmp w19, w20
- bge G_M36328_IG07
+ bge G_M36328_IG04
movz x21, #0xD1FFAB1E movk x21, #0xD1FFAB1E LSL #16 movk x21, #1 LSL #32 ldr x22, [x21] ; gcrRegs +[x22]
- ;; size=40 bbWeight=1 PerfScore 10.50 -G_M36328_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M36328_IG06 - ;; size=12 bbWeight=4 PerfScore 8.00 -G_M36328_IG04: ; bbWeight=1, gcrefRegs=408002 {x1 x15 x22}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2 - beq G_M36328_IG06 - ;; size=24 bbWeight=1 PerfScore 6.00 -G_M36328_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32
movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 @@ -65,19 +48,31 @@ G_M36328_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 blr x2 ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
+ ;; size=76 bbWeight=1 PerfScore 18.00 +G_M36328_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0] + mov x1, x22 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + blr x2 + ; gcrRegs -[x1] +[x0] + ; gcr arg pop 0 + sub x14, x21, #56
mov x15, x0 ; gcrRegs +[x15]
- ;; size=28 bbWeight=0.50 PerfScore 3.25 -G_M36328_IG06: ; bbWeight=4, gcrefRegs=408000 {x15 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - sub x14, x21, #56
bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
add w19, w19, #1 cmp w19, w20 blt G_M36328_IG03
- ;; size=20 bbWeight=4 PerfScore 14.00 -G_M36328_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=4 PerfScore 46.00 +G_M36328_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x22] ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] @@ -86,7 +81,7 @@ G_M36328_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 4.50
-; Total bytes of code 164, prolog size 20, PerfScore 51.75, instruction count 41, allocated bytes for code 164 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
+; Total bytes of code 176, prolog size 20, PerfScore 74.00, instruction count 44, allocated bytes for code 176 (MethodHash=58d37217) for method PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -97,7 +92,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 164 (0x0000a4)
+ 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)

+12 (+7.32%) : 47395.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> x19
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> x15 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> x20 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> x22 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) long -> x21 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> x20 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 0 @@ -28,36 +25,22 @@ G_M40467_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w19, [fp, #0x54] ;; size=20 bbWeight=1 PerfScore 5.50 G_M40467_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #1 LSL #32 - ldr w20, [x0]
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + ldr w20, [x1]
cmp w19, w20
- bge G_M40467_IG07
+ bge G_M40467_IG04
movz x21, #0xD1FFAB1E movk x21, #0xD1FFAB1E LSL #16 movk x21, #2 LSL #32 ldr x22, [x21] ; gcrRegs +[x22]
- ;; size=40 bbWeight=1 PerfScore 10.50 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M40467_IG06 - ;; size=12 bbWeight=4 PerfScore 8.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=408002 {x1 x15 x22}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2 - beq G_M40467_IG06 - ;; size=24 bbWeight=1 PerfScore 6.00 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32
movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 @@ -65,19 +48,31 @@ G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 blr x2 ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
+ ;; size=76 bbWeight=1 PerfScore 18.00 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0] + mov x1, x22 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + blr x2 + ; gcrRegs -[x1] +[x0] + ; gcr arg pop 0 + add x14, x21, #8
mov x15, x0 ; gcrRegs +[x15]
- ;; size=28 bbWeight=0.50 PerfScore 3.25 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=408000 {x15 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - add x14, x21, #8
bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
add w19, w19, #1 cmp w19, w20 blt G_M40467_IG03
- ;; size=20 bbWeight=4 PerfScore 14.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=4 PerfScore 46.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x22] ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] @@ -86,7 +81,7 @@ G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 4.50
-; Total bytes of code 164, prolog size 20, PerfScore 51.75, instruction count 41, allocated bytes for code 164 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
+; Total bytes of code 176, prolog size 20, PerfScore 74.00, instruction count 44, allocated bytes for code 176 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -97,7 +92,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 164 (0x0000a4)
+ 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)

+12 (+7.32%) : 25380.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> x19
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 5 ) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> x15 class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> x20 "CSE - aggressive" -; V07 cse1 [V07,T06] ( 2, 5 ) ref -> x22 hoist "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3, 6 ) long -> x21 "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> x20 "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T03] ( 3, 6 ) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 0 @@ -28,36 +25,22 @@ G_M56449_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w19, [fp, #0x54] ;; size=20 bbWeight=1 PerfScore 5.50 G_M56449_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #1 LSL #32 - ldr w20, [x0]
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + ldr w20, [x1]
cmp w19, w20
- bge G_M56449_IG07
+ bge G_M56449_IG04
movz x21, #0xD1FFAB1E movk x21, #0xD1FFAB1E LSL #16 movk x21, #2 LSL #32 ldr x22, [x21] ; gcrRegs +[x22]
- ;; size=40 bbWeight=1 PerfScore 10.50 -G_M56449_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M56449_IG06 - ;; size=12 bbWeight=4 PerfScore 8.00 -G_M56449_IG04: ; bbWeight=1, gcrefRegs=408002 {x1 x15 x22}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #1 LSL #32 - cmp x0, x2 - beq G_M56449_IG06 - ;; size=24 bbWeight=1 PerfScore 6.00 -G_M56449_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32
movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY movk x2, #0xD1FFAB1E LSL #16 movk x2, #1 LSL #32 @@ -65,19 +48,31 @@ G_M56449_IG05: ; bbWeight=0.50, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 blr x2 ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
+ ;; size=76 bbWeight=1 PerfScore 18.00 +G_M56449_IG03: ; bbWeight=4, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x0] + mov x1, x22 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTARRAY + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + blr x2 + ; gcrRegs -[x1] +[x0] + ; gcr arg pop 0 + add x14, x21, #24
mov x15, x0 ; gcrRegs +[x15]
- ;; size=28 bbWeight=0.50 PerfScore 3.25 -G_M56449_IG06: ; bbWeight=4, gcrefRegs=408000 {x15 x22}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0] - add x14, x21, #24
bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
add w19, w19, #1 cmp w19, w20 blt G_M56449_IG03
- ;; size=20 bbWeight=4 PerfScore 14.00 -G_M56449_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=4 PerfScore 46.00 +G_M56449_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x22] ldp x21, x22, [sp, #0x20] ldp x19, x20, [sp, #0x10] @@ -86,7 +81,7 @@ G_M56449_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=20 bbWeight=1 PerfScore 4.50
-; Total bytes of code 164, prolog size 20, PerfScore 51.75, instruction count 41, allocated bytes for code 164 (MethodHash=290d237e) for method PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
+; Total bytes of code 176, prolog size 20, PerfScore 74.00, instruction count 44, allocated bytes for code 176 (MethodHash=290d237e) for method PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -97,7 +92,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 41 (0x00029) Actual length = 164 (0x0000a4)
+ 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)

coreclr_tests.run.osx.arm64.checked.mch

-24 (-42.86%) : 249633.dasm - CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)

@@ -7,10 +7,8 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <CastExpansionTests>
-; V01 arg1 [V01,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V01 arg1 [V01,T00] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T02] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <<unknown class>>
; ; Lcl frame size = 0 @@ -18,32 +16,20 @@ G_M3705_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x10]! mov fp, sp ;; size=8 bbWeight=1 PerfScore 1.50
-G_M3705_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M3705_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M3705_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M3705_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_M3705_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M3705_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32
bl CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M3705_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 2.50 +G_M3705_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 56, prolog size 8, PerfScore 6.69, instruction count 14, allocated bytes for code 56 (MethodHash=192ff186) for method CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
+; Total bytes of code 32, prolog size 8, PerfScore 6.00, instruction count 8, allocated bytes for code 32 (MethodHash=192ff186) for method CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
; ============================================================ Unwind Info: @@ -54,7 +40,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 14 (0x0000e) Actual length = 56 (0x000038)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-40.00%) : 249478.dasm - Program:CastToArray(System.Object):int

@@ -6,44 +6,32 @@ ; partially interruptible ; Final local variable assignments ;
-; V00 arg0 [V00,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 arg0 [V00,T00] ( 3, 3 ) ref -> x0 class-hnd single-def <System.Object>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V03 tmp2 [V03,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <int[]>
; ; Lcl frame size = 0 G_M17219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x10]! mov fp, sp
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M17219_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref + ; gcrRegs +[x0]
mov x1, x0 ; gcrRegs +[x1]
- ;; size=12 bbWeight=1 PerfScore 2.00 -G_M17219_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz - mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M17219_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M17219_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_M17219_IG05 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M17219_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ movz x0, #0xD1FFAB1E
; gcrRegs -[x0]
- mov x0, x3
+ movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32
bl CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M17219_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=20 bbWeight=1 PerfScore 3.00 +G_M17219_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 8, PerfScore 7.19, instruction count 15, allocated bytes for code 60 (MethodHash=8beabcbc) for method Program:CastToArray(System.Object):int[] (Tier1)
+; Total bytes of code 36, prolog size 8, PerfScore 6.50, instruction count 9, allocated bytes for code 36 (MethodHash=8beabcbc) for method Program:CastToArray(System.Object):int[] (Tier1)
; ============================================================ Unwind Info: @@ -54,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-40.00%) : 249628.dasm - CastExpansionTests:CastToGenericSystem.__Canon:System.Object:this (Tier1)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <CastExpansionTests>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> x2 class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,33 +19,21 @@ G_M64337_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x1, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- mov x0, x2 - ; gcrRegs +[x0] - cbz x0, G_M64337_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M64337_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - cmp x3, x1 - beq G_M64337_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M64337_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ ldr x0, [x1, #0x38] + ldr x0, [x0]
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1-x2] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M64337_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 7.50 +G_M64337_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 8.88, instruction count 15, allocated bytes for code 60 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
+; Total bytes of code 36, prolog size 12, PerfScore 12.00, instruction count 9, allocated bytes for code 36 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
; ============================================================ Unwind Info: @@ -58,7 +44,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 572484.dasm - Internal.TypeSystem.TypeDesc:Equals(System.Object):ubyte:this (FullOpts)

@@ -11,13 +11,12 @@ ; V00 this [V00,T01] ( 5, 4 ) ref -> x20 this class-hnd single-def <Internal.TypeSystem.TypeDesc> ; V01 arg1 [V01,T00] ( 6, 5 ) ref -> x19 class-hnd single-def <System.Object> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T05] ( 2, 1 ) int -> x0 -;* V04 tmp2 [V04,T03] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp3 [V05,T02] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Internal.TypeSystem.TypeDesc> -;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "non-inline candidate call" <<unknown class>> -;* V07 tmp5 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V08 tmp6 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V09 cse0 [V09,T04] ( 3, 1.50) ref -> x1 "CSE - moderate"
+; V03 tmp1 [V03,T03] ( 2, 1 ) int -> x0 +;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "non-inline candidate call" <<unknown class>> +;* V05 tmp3 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V06 tmp4 [V06 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V07 tmp5 [V07,T04] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V08 cse0 [V08,T02] ( 3, 1.50) ref -> x1 "CSE - moderate"
; ; Lcl frame size = 8

+4 (+0.79%) : 256960.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b_100(System.Object):this (Tier1)

@@ -8,26 +8,26 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.ThreadPoolTaskScheduler+<>c>
-; V01 arg1 [V01,T02] ( 6, 4.12) ref -> x19 class-hnd single-def <System.Object>
+; V01 arg1 [V01,T03] ( 6, 4 ) ref -> x19 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T13] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 8, 10.75) ref -> x20 class-hnd "spilling QMark2" <System.Threading.Tasks.Task> -;* V05 tmp3 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V07 tmp5 [V07,T10] ( 4, 1.50) ubyte -> x22 "Inline return value spill temp" -; V08 tmp6 [V08,T04] ( 4, 3 ) ref -> x0 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V09 tmp7 [V09,T14] ( 3, 1 ) ubyte -> x22 "Inline return value spill temp" -; V10 tmp8 [V10,T08] ( 2, 2 ) byref -> x0 single-def "Inlining Arg" -;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> -; V12 tmp10 [V12,T15] ( 2, 1 ) int -> x0 "Inline stloc first use temp" -; V13 tmp11 [V13,T09] ( 2, 2 ) byref -> x1 single-def "argument with side effect" -; V14 cse0 [V14,T03] ( 7, 5.50) byref -> x21 "CSE - aggressive" -; V15 cse1 [V15,T11] ( 3, 1.50) ref -> x1 "CSE - moderate" -; V16 cse2 [V16,T12] ( 3, 1.50) ref -> x0 "CSE - moderate" -; V17 rat0 [V17,T07] ( 3, 2 ) byref -> x23 "TLS field access" -; V18 rat1 [V18,T05] ( 3, 3 ) long -> x0 "TLS access" -; V19 rat2 [V19,T06] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access" -; V20 rat3 [V20,T01] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <System.Threading.Tasks.Task>
+;* V03 tmp1 [V03 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V04 tmp2 [V04,T00] ( 5, 8 ) ref -> x20 class-hnd single-def "Inlining Arg" <System.Threading.Tasks.Task> +;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V06 tmp4 [V06,T11] ( 4, 1.50) ubyte -> x22 "Inline return value spill temp" +; V07 tmp5 [V07,T05] ( 4, 3 ) ref -> x0 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V08 tmp6 [V08,T14] ( 3, 1 ) ubyte -> x22 "Inline return value spill temp" +; V09 tmp7 [V09,T09] ( 2, 2 ) byref -> x0 single-def "Inlining Arg" +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> +; V11 tmp9 [V11,T15] ( 2, 1 ) int -> x0 "Inline stloc first use temp" +; V12 tmp10 [V12,T10] ( 2, 2 ) byref -> x1 single-def "argument with side effect" +; V13 cse0 [V13,T04] ( 7, 5.50) byref -> x21 "CSE - aggressive" +; V14 cse1 [V14,T12] ( 3, 1.50) ref -> x1 "CSE - moderate" +; V15 cse2 [V15,T13] ( 3, 1.50) ref -> x0 "CSE - moderate" +; V16 rat0 [V16,T08] ( 3, 2 ) byref -> x23 "TLS field access" +; V17 rat1 [V17,T06] ( 3, 3 ) long -> x0 "TLS access" +; V18 rat2 [V18,T07] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access" +; V19 rat3 [V19,T01] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <System.Threading.Tasks.Task> +; V20 rat4 [V20,T02] ( 5, 7 ) ref -> x20 class-hnd "replacement local" <System.Threading.Tasks.Task>
; ; Lcl frame size = 8 @@ -51,7 +51,7 @@ G_M60851_IG03: ; bbWeight=0.50, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 cmp x0, x1
- bne G_M60851_IG19
+ bne G_M60851_IG17
;; size=24 bbWeight=0.50 PerfScore 3.00 G_M60851_IG04: ; bbWeight=1, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz cbnz x2, G_M60851_IG06 @@ -74,9 +74,17 @@ G_M60851_IG05: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, G_M60851_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz mov x20, x19 ; gcrRegs +[x20]
- cbnz x20, G_M60851_IG10
+ cbz x20, G_M60851_IG08
;; size=8 bbWeight=1 PerfScore 1.50
-G_M60851_IG07: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG07: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x20] + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + cmp x0, x1 + bne G_M60851_IG18 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M60851_IG08: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x19] add x21, x20, #52 ; byrRegs +[x21] @@ -85,60 +93,33 @@ G_M60851_IG07: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b stlr w0, [x21] ldapur x0, [x20, #0x28] ; gcrRegs +[x0]
- cbz x0, G_M60851_IG22
+ cbz x0, G_M60851_IG21
;; size=24 bbWeight=1 PerfScore 9.00
-G_M60851_IG08: ; bbWeight=0.50, gcrefRegs=100001 {x0 x20}, byrefRegs=200000 {x21}, byref, isz
+G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=100001 {x0 x20}, byrefRegs=200000 {x21}, byref, isz
ldapur w1, [x0, #0x38] cmp w1, #1
- beq G_M60851_IG21
+ beq G_M60851_IG20
add x0, x0, #64 ; gcrRegs -[x0] ; byrRegs +[x0] ldr x0, [x0] ; gcrRegs +[x0] ; byrRegs -[x0]
- cbz x0, G_M60851_IG20
+ cbz x0, G_M60851_IG19
ldapur w0, [x0, #0x20] ; gcrRegs -[x0] cmp w0, #0 cset x22, ne ;; size=36 bbWeight=0.50 PerfScore 6.50
-G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref - b G_M60851_IG12 - ;; size=4 bbWeight=0.50 PerfScore 0.50 -G_M60851_IG10: ; bbWeight=0.25, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ; gcrRegs +[x19] - ; byrRegs -[x21] - ldr x0, [x20] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #1 LSL #32 - cmp x0, x1 - beq G_M60851_IG07 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M60851_IG11: ; bbWeight=0.12, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x20] - mov x0, x1 - mov x1, x19 - ; gcrRegs +[x1] - bl CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[x1 x19] +[x0] - ; gcr arg pop 0 - mov x20, x0 - ; gcrRegs +[x20] - b G_M60851_IG07 - ;; size=20 bbWeight=0.12 PerfScore 0.44 -G_M60851_IG12: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz - ; gcrRegs -[x0] - ; byrRegs +[x21]
+G_M60851_IG10: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
ldapr w0, [x21] and w0, w0, #0xD1FFAB1E mov w1, #0xD1FFAB1E cmp w22, #0 ccmp w0, w1, z, eq
- beq G_M60851_IG16
+ beq G_M60851_IG14
;; size=24 bbWeight=1 PerfScore 6.00
-G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG11: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
; byrRegs -[x21] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -151,16 +132,16 @@ G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} ; gcr arg pop 0 ldr w1, [x0, #0x10] cmp w1, #4
- blt G_M60851_IG23
+ blt G_M60851_IG22
ldr x1, [x0, #0x18] ldr x1, [x1, #0x20]
- cbz x1, G_M60851_IG23
+ cbz x1, G_M60851_IG22
ldr x1, [x1] ; byrRegs +[x1] add x23, x1, #16 ; byrRegs +[x23] ;; size=64 bbWeight=0.50 PerfScore 11.00
-G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=800000 {x23}, byref
+G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=800000 {x23}, byref
; byrRegs -[x1] add x1, x23, #80 ; byrRegs +[x1] @@ -172,7 +153,7 @@ G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=800000 movk x3, #1 LSL #32 ldr x3, [x3] ;; size=28 bbWeight=0.50 PerfScore 3.00
-G_M60851_IG15: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG13: ; bbWeight=0.50, epilog, nogc, extend
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -180,17 +161,17 @@ G_M60851_IG15: ; bbWeight=0.50, epilog, nogc, extend br x3 ; gcr arg pop 0 ;; size=20 bbWeight=0.50 PerfScore 3.00
-G_M60851_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
+G_M60851_IG14: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
; gcrRegs -[x0] ; byrRegs -[x1 x23] +[x21] ldapr w0, [x21] and w0, w0, #0xD1FFAB1E cmp w0, #0xD1FFAB1E, LSL #12
- beq G_M60851_IG18
+ beq G_M60851_IG16
ldapr w0, [x21] orr w0, w0, #0xD1FFAB1E swpal w0, w0, [x21]
- tbnz w0, #22, G_M60851_IG18
+ tbnz w0, #22, G_M60851_IG16
mov x0, x20 ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -198,7 +179,7 @@ G_M60851_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100 movk x1, #1 LSL #32 ldr x1, [x1] ;; size=52 bbWeight=0.50 PerfScore 8.75
-G_M60851_IG17: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -206,7 +187,7 @@ G_M60851_IG17: ; bbWeight=0.50, epilog, nogc, extend br x1 ; gcr arg pop 0 ;; size=20 bbWeight=0.50 PerfScore 3.00
-G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M60851_IG16: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x0 x20] ; byrRegs -[x21] ldr x23, [sp, #0x38] @@ -215,7 +196,7 @@ G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldp fp, lr, [sp], #0x40 ret lr ;; size=20 bbWeight=0.50 PerfScore 3.00
-G_M60851_IG19: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
+G_M60851_IG17: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x19] mov x1, x19 ; gcrRegs +[x1] @@ -229,21 +210,35 @@ G_M60851_IG19: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 ; gcrRegs +[x2] b G_M60851_IG04 ;; size=28 bbWeight=0 PerfScore 0.00
-G_M60851_IG20: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref - ; gcrRegs -[x0 x2 x19] +[x20]
+G_M60851_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x2] + mov x1, x19 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTCLASS_SPECIAL + ; gcrRegs -[x1 x19] +[x0] + ; gcr arg pop 0 + mov x20, x0 + ; gcrRegs +[x20] + b G_M60851_IG08 + ;; size=28 bbWeight=0 PerfScore 0.00 +G_M60851_IG19: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref + ; gcrRegs -[x0]
; byrRegs +[x21] mov w22, wzr
- b G_M60851_IG09
+ b G_M60851_IG10 + ;; size=8 bbWeight=0 PerfScore 0.00 +G_M60851_IG20: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref + mov w22, #1 + b G_M60851_IG10
...

+12 (+1.19%) : 531036.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort

@@ -8,84 +8,84 @@ ; 0 inlinees with PGO data; 11 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T07] ( 7, 58 ) long -> [fp+0x48] do-not-enreg[Z] EH-live -; V01 arg1 [V01,T19] ( 3, 10 ) short -> [fp+0x44] EH-live single-def -; V02 arg2 [V02,T09] ( 7, 42 ) byref -> [fp+0x18] EH-live single-def -; V03 arg3 [V03,T16] ( 5, 26 ) byref -> [fp+0x10] EH-live single-def
+; V00 arg0 [V00,T07] ( 7, 58 ) long -> [fp+0x58] do-not-enreg[Z] EH-live +; V01 arg1 [V01,T19] ( 3, 10 ) short -> [fp+0x54] EH-live single-def +; V02 arg2 [V02,T09] ( 7, 42 ) byref -> [fp+0x28] EH-live single-def +; V03 arg3 [V03,T16] ( 5, 26 ) byref -> [fp+0x20] EH-live single-def
;* V04 loc0 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>>
-;* V05 loc1 [V05,T33] ( 0, 0 ) ushort -> zero-ref EH-live single-def -; V06 loc2 [V06,T31] ( 5, 17 ) double -> [fp+0x38] do-not-enreg[Z] EH-live
+;* V05 loc1 [V05,T31] ( 0, 0 ) ushort -> zero-ref EH-live single-def +; V06 loc2 [V06,T29] ( 5, 17 ) double -> [fp+0x48] do-not-enreg[Z] EH-live
; V07 loc3 [V07,T21] ( 6, 6 ) ref -> x20 class-hnd single-def <<unknown class>> ;* V08 loc4 [V08 ] ( 0, 0 ) int -> zero-ref ; V09 loc5 [V09,T18] ( 3, 24 ) byte -> x0 ;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V11 tmp1 [V11 ] ( 9, 9 ) struct (24) [fp+0x20] do-not-enreg[XSF] must-init addr-exposed "NewObjArrayArgs" -; V12 tmp2 [V12,T22] ( 2, 4 ) ref -> x1 class-hnd exact single-def "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> -; V13 tmp3 [V13,T26] ( 2, 4 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V14 tmp4 [V14,T23] ( 2, 4 ) ref -> x15 class-hnd "spilling QMark2" <<unknown class>> -; V15 tmp5 [V15,T00] ( 3,192 ) ref -> x21 class-hnd exact "Single-def Box Helper" <<unknown class>> -; V16 tmp6 [V16,T01] ( 3,192 ) ref -> x21 "inline UNBOX clone1" -; V17 tmp7 [V17,T02] ( 3,192 ) ref -> x21 class-hnd exact "Single-def Box Helper" <System.Char> -; V18 tmp8 [V18,T03] ( 3,192 ) ref -> x21 "inline UNBOX clone1" -; V19 tmp9 [V19,T08] ( 3, 48 ) int -> x0 "dup spill" -; V20 tmp10 [V20,T14] ( 2, 32 ) int -> x1 "impSpillLclRefs" -; V21 tmp11 [V21,T15] ( 2, 32 ) int -> x0 "dup spill" -;* V22 tmp12 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> -;* V23 tmp13 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]>
+; V11 tmp1 [V11 ] ( 9, 9 ) struct (24) [fp+0x30] do-not-enreg[XSF] must-init addr-exposed "NewObjArrayArgs" +; V12 tmp2 [V12,T24] ( 2, 4 ) ref -> x1 class-hnd exact single-def "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> +; V13 tmp3 [V13,T00] ( 3,192 ) ref -> x21 class-hnd exact "Single-def Box Helper" <<unknown class>> +; V14 tmp4 [V14,T01] ( 3,192 ) ref -> x21 "inline UNBOX clone1" +; V15 tmp5 [V15,T02] ( 3,192 ) ref -> x21 class-hnd exact "Single-def Box Helper" <System.Char> +; V16 tmp6 [V16,T03] ( 3,192 ) ref -> x21 "inline UNBOX clone1" +; V17 tmp7 [V17,T08] ( 3, 48 ) int -> x0 "dup spill" +; V18 tmp8 [V18,T14] ( 2, 32 ) int -> x1 "impSpillLclRefs" +; V19 tmp9 [V19,T15] ( 2, 32 ) int -> x0 "dup spill" +;* V20 tmp10 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> +;* V21 tmp11 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> +;* V22 tmp12 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> +;* V23 tmp13 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>>
;* V24 tmp14 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> ;* V25 tmp15 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>>
-;* V26 tmp16 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> -;* V27 tmp17 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> -; V28 tmp18 [V28,T32] ( 3, 0 ) ref -> x0 class-hnd exact single-def "dup spill" <ushort[]> -;* V29 tmp19 [V29 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" -;* V30 tmp20 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V31 tmp21 [V31,T17] ( 4, 26 ) ref -> x0 class-hnd exact "Inline stloc first use temp" <System.String> -;* V32 tmp22 [V32 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" -;* V33 tmp23 [V33,T20] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" -; V34 tmp24 [V34,T27] ( 2, 4 ) long -> x2 "argument with side effect" -; V35 tmp25 [V35,T28] ( 2, 4 ) long -> x2 "argument with side effect" -; V36 tmp26 [V36,T24] ( 3, 6 ) int -> x14 "MD array shared temp" -; V37 tmp27 [V37,T25] ( 3, 6 ) int -> x12 "MD array shared temp" -; V38 PSPSym [V38,T30] ( 1, 1 ) long -> [fp+0x50] do-not-enreg[V] "PSPSym" -; V39 cse0 [V39,T10] ( 2, 36 ) int -> x22 hoist "CSE - aggressive" -; V40 cse1 [V40,T06] ( 4, 72 ) long -> x20 hoist multi-def "CSE - aggressive" -; V41 cse2 [V41,T05] ( 5, 76 ) long -> x20 "CSE - aggressive" -; V42 cse3 [V42,T04] ( 7, 78 ) long -> x21 multi-def "CSE - aggressive" -; V43 cse4 [V43,T11] ( 2, 36 ) long -> x19 hoist "CSE - aggressive" -; V44 cse5 [V44,T12] ( 2, 36 ) long -> x19 hoist "CSE - aggressive" -; V45 cse6 [V45,T13] ( 4, 32 ) int -> x0 "CSE - aggressive" -; V46 cse7 [V46,T29] ( 3, 3 ) int -> xip0 "CSE - moderate"
+; V26 tmp16 [V26,T30] ( 3, 0 ) ref -> x0 class-hnd exact single-def "dup spill" <ushort[]> +;* V27 tmp17 [V27 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" +;* V28 tmp18 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V29 tmp19 [V29,T17] ( 4, 26 ) ref -> x0 class-hnd exact "Inline stloc first use temp" <System.String> +;* V30 tmp20 [V30 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" +;* V31 tmp21 [V31,T20] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" +; V32 tmp22 [V32,T25] ( 2, 4 ) long -> x2 "argument with side effect" +; V33 tmp23 [V33,T26] ( 2, 4 ) long -> x2 "argument with side effect" +; V34 tmp24 [V34,T22] ( 3, 6 ) int -> x0 "MD array shared temp" +; V35 tmp25 [V35,T23] ( 3, 6 ) int -> x2 "MD array shared temp" +; V36 PSPSym [V36,T28] ( 1, 1 ) long -> [fp+0x60] do-not-enreg[V] "PSPSym" +; V37 cse0 [V37,T10] ( 2, 36 ) int -> x22 hoist "CSE - aggressive" +; V38 cse1 [V38,T06] ( 4, 72 ) long -> x20 hoist multi-def "CSE - aggressive" +; V39 cse2 [V39,T05] ( 5, 76 ) long -> x20 "CSE - aggressive" +; V40 cse3 [V40,T04] ( 7, 78 ) long -> x21 multi-def "CSE - aggressive" +; V41 cse4 [V41,T11] ( 2, 36 ) long -> x19 hoist "CSE - aggressive" +; V42 cse5 [V42,T12] ( 2, 36 ) long -> x19 hoist "CSE - aggressive" +; V43 cse6 [V43,T13] ( 4, 32 ) int -> x0 "CSE - aggressive" +; V44 cse7 [V44,T27] ( 3, 3 ) int -> x3 "CSE - moderate" +; TEMP_01 byref -> [fp+0x18]
;
-; Lcl frame size = 72
+; Lcl frame size = 88
G_M19405_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x80]! - stp x19, x20, [sp, #0x58] - stp x21, x22, [sp, #0x68] - str x23, [sp, #0x78]
+ stp fp, lr, [sp, #-0x90]! + stp x19, x20, [sp, #0x68] + stp x21, x22, [sp, #0x78] + str x23, [sp, #0x88]
mov fp, sp
- stp xzr, xzr, [fp, #0x20] // [V11 tmp1], [V11 tmp1+0x08] - str xzr, [fp, #0x30] // [V11 tmp1+0x10] - add x4, sp, #128 - stp x0, x4, [fp, #0x48] // [V00 arg0], [V38 PSPSym] - str w1, [fp, #0x44] // [V01 arg1] - stp x3, x2, [fp, #0x10] // [V03 arg3], [V02 arg2]
+ stp xzr, xzr, [fp, #0x30] // [V11 tmp1], [V11 tmp1+0x08] + str xzr, [fp, #0x40] // [V11 tmp1+0x10] + str xzr, [fp, #0x18] // [TEMP_01] + add x4, sp, #144 + stp x0, x4, [fp, #0x58] // [V00 arg0], [V36 PSPSym] + str w1, [fp, #0x54] // [V01 arg1] + stp x3, x2, [fp, #0x20] // [V03 arg3], [V02 arg2]
; GC ptr vars +{V02 V03} mov x19, x2 ; byrRegs +[x19]
- ;; size=48 bbWeight=1 PerfScore 10.50
+ ;; size=52 bbWeight=1 PerfScore 11.50
G_M19405_IG02: ; bbWeight=1, gcVars=0000000000010200 {V02 V03}, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, gcvars, byref, isz mov w2, #5
- str w2, [fp, #0x20] // [V11 tmp1]
+ str w2, [fp, #0x30] // [V11 tmp1]
mov w2, #24
- str w2, [fp, #0x24] // [V11 tmp1+0x04]
+ str w2, [fp, #0x34] // [V11 tmp1+0x04]
mov w2, #65
- str w2, [fp, #0x28] // [V11 tmp1+0x08]
+ str w2, [fp, #0x38] // [V11 tmp1+0x08]
mov w2, #9
- str w2, [fp, #0x2C] // [V11 tmp1+0x0c]
+ str w2, [fp, #0x3C] // [V11 tmp1+0x0c]
mov w2, #29
- str w2, [fp, #0x30] // [V11 tmp1+0x10] - add x2, fp, #32 // [V11 tmp1]
+ str w2, [fp, #0x40] // [V11 tmp1+0x10] + add x2, fp, #48 // [V11 tmp1]
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 @@ -94,12 +94,12 @@ G_M19405_IG02: ; bbWeight=1, gcVars=0000000000010200 {V02 V03}, gcrefRegs ; gcrRegs +[x0] ; gcr arg pop 0 ldr d16, [@RWD00]
- str d16, [fp, #0x38] // [V06 loc2]
+ str d16, [fp, #0x48] // [V06 loc2]
mov w2, #41
- str w2, [fp, #0x20] // [V11 tmp1]
+ str w2, [fp, #0x30] // [V11 tmp1]
mov w2, #15
- str w2, [fp, #0x24] // [V11 tmp1+0x04] - add x2, fp, #32 // [V11 tmp1]
+ str w2, [fp, #0x34] // [V11 tmp1+0x04] + add x2, fp, #48 // [V11 tmp1]
movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 @@ -122,49 +122,52 @@ G_M19405_IG03: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19 ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- movz x0, #0xD1FFAB1E
+ ldr w0, [x20, #0x18]
; gcrRegs -[x0]
+ mov w2, #26 + sub w0, w2, w0 + ldp w2, w3, [x20, #0x10] + cmp w0, w2 + bhs G_M19405_IG15 + ldr w2, [x20, #0x1C] + mov w4, #65 + sub w2, w4, w2 + cmp w2, w3 + bhs G_M19405_IG15 + madd w0, w0, w3, w2 + ubfiz x0, x0, #3, #32 + add x0, x0, #32 + add x14, x20, x0 + ; byrRegs +[x14] + str x14, [fp, #0x18] // [TEMP_01] + movz x0, #0xD1FFAB1E
movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 bl CORINFO_HELP_CHKCASTARRAY
- ; gcrRegs -[x1] +[x0]
+ ; gcrRegs -[x1 x20] +[x0] + ; byrRegs -[x14]
; gcr arg pop 0
+ ldr x14, [fp, #0x18] // [TEMP_01] + ; byrRegs +[x14]
mov x15, x0 ; gcrRegs +[x15]
- ldr w14, [x20, #0x18] - mov w12, #26 - sub w14, w12, w14 - ldp w12, wip0, [x20, #0x10] - cmp w14, w12 - bhs G_M19405_IG15 - ldr w12, [x20, #0x1C] - mov w0, #65 - ; gcrRegs -[x0] - sub w12, w0, w12 - cmp w12, wip0 - bhs G_M19405_IG15 - madd w14, w14, wip0, w12 - ubfiz x14, x14, #3, #32 - add x14, x14, #32 - add x14, x20, x14 - ; byrRegs +[x14]
bl CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[x15 x20]
+ ; gcrRegs -[x0 x15]
; byrRegs -[x14]
- ;; size=108 bbWeight=1 PerfScore 25.50
+ ;; size=116 bbWeight=1 PerfScore 28.50
G_M19405_IG04: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; byrRegs -[x19]
- ldr x19, [fp, #0x18] // [V02 arg2]
+ ldr x19, [fp, #0x28] // [V02 arg2]
; byrRegs +[x19] ;; size=4 bbWeight=8 PerfScore 16.00 G_M19405_IG05: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref
- ldr d16, [fp, #0x38] // [V06 loc2]
+ ldr d16, [fp, #0x48] // [V06 loc2]
fmov d17, #27.0000 fmul d16, d16, d17
- str d16, [fp, #0x38] // [V06 loc2]
+ str d16, [fp, #0x48] // [V06 loc2]
;; size=16 bbWeight=4 PerfScore 26.00 G_M19405_IG06: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref, isz
- ldrh w0, [fp, #0x48] // [V00 arg0]
+ ldrh w0, [fp, #0x58] // [V00 arg0]
cbz w0, G_M19405_IG08 movz x20, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x20, #0xD1FFAB1E LSL #16 @@ -191,7 +194,7 @@ G_M19405_IG06: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, by ; gcr arg pop 0 cmp x22, x0 beq G_M19405_IG08
- ldrsb x0, [fp, #0x48] // [V00 arg0]
+ ldrsb x0, [fp, #0x58] // [V00 arg0]
; gcrRegs -[x0] uxth w22, w0 ; gcrRegs -[x22] @@ -231,7 +234,7 @@ G_M19405_IG09: ; bbWeight=32, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref ; gcr arg pop 0 mov x21, x0 ...

libraries.pmi.osx.arm64.checked.mch

-28 (-46.67%) : 241718.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 109095.dasm - Microsoft.FSharp.Core.Operators+Unchecked:UnboxSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,37 +18,19 @@ G_M7606_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M7606_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M7606_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M7606_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M7606_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M7606_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M7606_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M7606_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +41,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-40 (-33.33%) : 278753.dasm - System.Collections.Immutable.ImmutableSortedDictionary2+Builder[System.__Canon,System.Nullable1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)

@@ -8,76 +8,48 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 5, 4.25) ref -> x19 this class-hnd single-def <System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]> -; V01 arg1 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> [fp+0x18] class-hnd "spilling QMark2" <System.__Canon>
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <System.__Canon>
;
-; Lcl frame size = 24
+; Lcl frame size = 8
G_M51997_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 x0, [fp, #0x20]
+ str x0, [fp, #0x10]
mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M51997_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M51997_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M51997_IG07 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M51997_IG03: ; bbWeight=0.25, gcrefRegs=80006 {x1 x2 x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x2] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x0, x3 - str x2, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - beq G_M51997_IG05 - ;; size=32 bbWeight=0.25 PerfScore 4.38 -G_M51997_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2] - ; GC ptr vars -{V04} - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- str x0, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - ;; size=12 bbWeight=0.12 PerfScore 0.31 -G_M51997_IG05: ; bbWeight=1, gcVars=0000000000000001 {V04}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0] - ldp x0, x2, [x19, #0x08] - ; gcrRegs +[x0 x2] - ldr x1, [fp, #0x18] // [V04 tmp2]
+ mov x1, x0
; gcrRegs +[x1]
+ ldp x0, x2, [x19, #0x08] + ; gcrRegs +[x2]
movz x3, #0xD1FFAB1E // code for System.Collections.Immutable.ImmutableSortedDictionary`2+Node[System.__Canon,System.Nullable`1[int]]:ContainsKey(System.__Canon,System.Collections.Generic.IComparer`1[System.__Canon]):ubyte:this movk x3, #0xD1FFAB1E LSL #16 movk x3, #1 LSL #32 ldr x3, [x3] ldr wzr, [x0]
- ;; size=28 bbWeight=1 PerfScore 13.50 -G_M51997_IG06: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x28] - ldp fp, lr, [sp], #0x30
+ ;; size=48 bbWeight=1 PerfScore 25.00 +G_M51997_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20
br x3 ; gcr arg pop 0 ;; size=12 bbWeight=1 PerfScore 4.00
-G_M51997_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0-x1] - ; GC ptr vars -{V04} - str x2, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - b G_M51997_IG05 - ;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 120, prolog size 20, PerfScore 28.69, instruction count 30, allocated bytes for code 120 (MethodHash=24b334e2) for method System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 80, prolog size 20, PerfScore 33.00, instruction count 20, allocated bytes for code 80 (MethodHash=24b334e2) for method System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -88,7 +60,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 120 (0x000078)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -96,8 +68,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

+8 (+2.17%) : 162518.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)

@@ -8,27 +8,26 @@ ; 0 inlinees with PGO data; 6 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T08] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.ColumnTypeConverter> -; V01 arg1 [V01,T09] ( 3, 2.50) ref -> x1 class-hnd single-def <System.ComponentModel.ITypeDescriptorContext> -; V02 arg2 [V02,T10] ( 3, 2.50) ref -> x2 class-hnd single-def <System.Globalization.CultureInfo> -; V03 arg3 [V03,T01] ( 8, 26 ) ref -> x19 class-hnd single-def <System.Object>
+; V00 this [V00,T09] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.ColumnTypeConverter> +; V01 arg1 [V01,T10] ( 3, 2.50) ref -> x1 class-hnd single-def <System.ComponentModel.ITypeDescriptorContext> +; V02 arg2 [V02,T11] ( 3, 2.50) ref -> x2 class-hnd single-def <System.Globalization.CultureInfo> +; V03 arg3 [V03,T06] ( 7, 10 ) ref -> x19 class-hnd single-def <System.Object>
; V04 loc0 [V04,T04] ( 8, 21.50) int -> x20 ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V06 tmp1 [V06,T05] ( 2, 4 ) ubyte -> x0 "Inline return value spill temp" ; V07 tmp2 [V07,T00] ( 6, 64 ) ref -> x0 class-hnd exact "Inlining Arg" <System.String>
-;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -;* V09 tmp4 [V09,T12] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V10 tmp5 [V10,T07] ( 2, 8 ) byref -> x3 "impAppendStmt"
+; V08 tmp3 [V08,T03] ( 4, 22 ) ref -> x1 class-hnd exact "Inline stloc first use temp" <System.String> +; V09 tmp4 [V09,T08] ( 2, 8 ) byref -> x3 "impAppendStmt" +;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "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 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 3, 24 ) ref -> x0 "arr expr" -; V17 tmp12 [V17,T03] ( 3, 24 ) ref -> x0 "argument with side effect" -; V18 tmp13 [V18,T11] ( 3, 3 ) ref -> x0 single-def "arr expr" -;* V19 cse0 [V19,T13] ( 0, 0 ) long -> zero-ref "CSE - aggressive" -; V20 cse1 [V20,T06] ( 5, 9.50) long -> x21 "CSE - aggressive"
+; V15 tmp10 [V15,T01] ( 3, 24 ) ref -> x0 "arr expr" +; V16 tmp11 [V16,T02] ( 3, 24 ) ref -> x0 "argument with side effect" +; V17 tmp12 [V17,T12] ( 3, 3 ) ref -> x0 single-def "arr expr" +;* V18 cse0 [V18,T13] ( 0, 0 ) long -> zero-ref "CSE - aggressive" +; V19 cse1 [V19,T07] ( 5, 9.50) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -42,7 +41,7 @@ G_M21223_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=20 bbWeight=1 PerfScore 4.00 G_M21223_IG02: ; bbWeight=1, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x0-x2]
- cbz x19, G_M21223_IG13
+ cbz x19, G_M21223_IG14
;; size=4 bbWeight=1 PerfScore 1.00 G_M21223_IG03: ; bbWeight=0.50, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, byref, isz ldr x3, [x19] @@ -50,14 +49,14 @@ G_M21223_IG03: ; bbWeight=0.50, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs movk x4, #0xD1FFAB1E LSL #16 movk x4, #1 LSL #32 cmp x3, x4
- bne G_M21223_IG13
+ bne G_M21223_IG14
mov w20, wzr movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 ldr w0, [x0]
- tbz w0, #0, G_M21223_IG16
+ tbz w0, #0, G_M21223_IG17
;; size=48 bbWeight=0.50 PerfScore 6.00 G_M21223_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x1-x2] @@ -69,14 +68,14 @@ G_M21223_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ldr w0, [x0, #0x08] ; gcrRegs -[x0] cmp w0, #0
- ble G_M21223_IG09
+ ble G_M21223_IG10
;; size=28 bbWeight=0.50 PerfScore 4.50 G_M21223_IG05: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x0, [x21] ; gcrRegs +[x0] ldr w1, [x0, #0x08] cmp w20, w1
- bhs G_M21223_IG15
+ bhs G_M21223_IG16
add x0, x0, #16 ; gcrRegs -[x0] ; byrRegs +[x0] @@ -90,21 +89,27 @@ G_M21223_IG05: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcr arg pop 0 ldrsb wzr, [x0] cmp x0, x19
- beq G_M21223_IG11
+ beq G_M21223_IG12
;; size=52 bbWeight=4 PerfScore 102.00
-G_M21223_IG06: ; bbWeight=16, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG06: ; bbWeight=2, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz + mov x1, x19 + ; gcrRegs +[x1] + cbz x1, G_M21223_IG09 + ;; size=8 bbWeight=2 PerfScore 3.00 +G_M21223_IG07: ; bbWeight=16, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz
ldr w2, [x0, #0x08]
- ldr w1, [x19, #0x08] - cmp w2, w1 - bne G_M21223_IG08
+ ldr w3, [x1, #0x08] + cmp w2, w3 + bne G_M21223_IG09
;; size=16 bbWeight=16 PerfScore 120.00
-G_M21223_IG07: ; bbWeight=2, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG08: ; bbWeight=2, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz
add x3, x0, #12 ; byrRegs +[x3] ldr w2, [x0, #0x08] lsl w2, w2, #1 mov w2, w2
- add x1, x19, #12
+ add x1, x1, #12 + ; gcrRegs -[x1]
; byrRegs +[x1] mov x0, x3 ; gcrRegs -[x0] @@ -117,9 +122,9 @@ G_M21223_IG07: ; bbWeight=2, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, blr x3 ; byrRegs -[x0-x1] ; gcr arg pop 0
- cbnz w0, G_M21223_IG11
+ cbnz w0, G_M21223_IG12
;; size=48 bbWeight=2 PerfScore 25.00
-G_M21223_IG08: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
add w20, w20, #1 ldr x0, [x21] ; gcrRegs +[x0] @@ -128,24 +133,24 @@ G_M21223_IG08: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by cmp w0, w20 bgt G_M21223_IG05 ;; size=20 bbWeight=4 PerfScore 32.00
-G_M21223_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M21223_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19] movz x0, #184 movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 ;; size=12 bbWeight=0.50 PerfScore 0.75
-G_M21223_IG10: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG11: ; 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_M21223_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M21223_IG12: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
ldr x0, [x21] ; gcrRegs +[x0] ldr w1, [x0, #0x08] cmp w20, w1
- bhs G_M21223_IG15
+ bhs G_M21223_IG16
add x0, x0, #16 ; gcrRegs -[x0] ; byrRegs +[x0] @@ -153,13 +158,13 @@ G_M21223_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000 ; gcrRegs +[x0] ; byrRegs -[x0] ;; size=24 bbWeight=0.50 PerfScore 5.50
-G_M21223_IG12: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG13: ; 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_M21223_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref
+G_M21223_IG14: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x1-x2 x19] mov x3, x19 ; gcrRegs +[x3] @@ -168,19 +173,19 @@ G_M21223_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=800 movk x4, #1 LSL #32 ldr x4, [x4] ;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M21223_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG15: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x4 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M21223_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M21223_IG16: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0-x3 x19] bl CORINFO_HELP_RNGCHKFAIL ; gcr arg pop 0 ;; size=4 bbWeight=0 PerfScore 0.00
-G_M21223_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M21223_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x19] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -191,7 +196,7 @@ G_M21223_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by b G_M21223_IG04 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 368, prolog size 20, PerfScore 310.75, instruction count 92, allocated bytes for code 368 (MethodHash=3d9fad18) for method System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
+; Total bytes of code 376, prolog size 20, PerfScore 313.75, instruction count 94, allocated bytes for code 376 (MethodHash=3d9fad18) for method System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
; ============================================================ Unwind Info: @@ -202,7 +207,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 92 (0x0005c) Actual length = 368 (0x000170)
+ Function Length : 94 (0x0005e) Actual length = 376 (0x000178)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+4 (+2.70%) : 232021.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,19 +10,18 @@ ; ; V00 this [V00,T03] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> x1 class-hnd single-def <System.Object>
-; V02 loc0 [V02,T07] ( 2, 1 ) ref -> x1 class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T06] ( 3, 1.50) ref -> x1 class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 5, 5 ) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T02] ( 5, 5 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T04] ( 4, 2 ) ubyte -> x0 "Inline return value spill temp" -; V08 tmp5 [V08,T05] ( 2, 2 ) byref -> x0 single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 5, 5 ) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T02] ( 5, 5 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T04] ( 4, 2 ) ubyte -> x0 "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 2 ) byref -> x0 single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V14 cse0 [V14,T06] ( 3, 1.50) int -> x3 "CSE - moderate"
+; V13 cse0 [V13,T07] ( 3, 1.50) int -> x3 "CSE - moderate"
; ; Lcl frame size = 0 @@ -52,6 +51,7 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=8 bbWeight=0.50 PerfScore 1.00 G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[x0-x1]
+ cbz x1, G_M57556_IG04
ldr x2, [x0, #0x08] ; gcrRegs +[x2] ldr x1, [x1, #0x08] @@ -60,7 +60,7 @@ G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000 mov w0, #1 ; gcrRegs -[x0] b G_M57556_IG10
- ;; size=24 bbWeight=0.50 PerfScore 4.50
+ ;; size=28 bbWeight=0.50 PerfScore 5.00
G_M57556_IG07: ; bbWeight=0.50, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz cbz x2, G_M57556_IG08 cbz x1, G_M57556_IG08 @@ -96,7 +96,7 @@ G_M57556_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ret lr ;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 148, prolog size 8, PerfScore 21.75, instruction count 37, allocated bytes for code 148 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 152, prolog size 8, PerfScore 22.25, instruction count 38, allocated bytes for code 152 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -107,7 +107,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 37 (0x00025) Actual length = 148 (0x000094)
+ Function Length : 38 (0x00026) Actual length = 152 (0x000098)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+16 (+4.35%) : 96181.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.Canon]:Commit():System.Canon:this (FullOpts)

@@ -7,7 +7,7 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 10, 6.25) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
+; V00 this [V00,T00] ( 8, 6 ) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]> ;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <System.Runtime.ExceptionServices.ExceptionDispatchInfo> @@ -16,27 +16,27 @@ ;* V06 loc5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 tmp2 [V09,T12] ( 4, 0 ) long -> x0 "spilling helperCall" -;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V11 tmp4 [V11,T16] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>>
+;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp4 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V13 tmp6 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V14 tmp7 [V14,T05] ( 4, 4.50) long -> x0 "spilling helperCall" -;* V15 tmp8 [V15 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V16 tmp9 [V16,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -; V17 tmp10 [V17,T09] ( 2, 4 ) long -> x0 "argument with side effect" -; V18 tmp11 [V18,T10] ( 2, 4 ) long -> x0 "argument with side effect" -; V19 tmp12 [V19,T17] ( 2, 0 ) long -> x0 "argument with side effect" -; V20 cse0 [V20,T04] ( 12, 5.40) long -> x20 "CSE - aggressive" -; V21 rat0 [V21,T06] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V22 rat1 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" -; V23 rat2 [V23,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V24 rat3 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" -; V25 rat4 [V25,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V26 rat5 [V26,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V27 rat6 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V28 rat7 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V29 rat8 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
+; V13 tmp6 [V13,T09] ( 2, 4 ) long -> x0 "argument with side effect" +; V14 tmp7 [V14,T16] ( 2, 0 ) long -> x0 "argument with side effect" +; V15 tmp8 [V15,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V16 tmp9 [V16,T17] ( 2, 0 ) long -> x0 "argument with side effect" +; V17 tmp10 [V17,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V18 cse0 [V18,T04] ( 10, 4.40) long -> x20 "CSE - aggressive" +; V19 rat0 [V19,T05] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V20 rat1 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V21 rat2 [V21,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V22 rat3 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" +; V23 rat4 [V23,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V24 rat5 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" +; V25 rat6 [V25,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V26 rat7 [V26,T12] ( 3, 0 ) long -> x0 "runtime lookup" +; V27 rat8 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V28 rat9 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" +; V29 rat10 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -71,7 +71,7 @@ G_M31693_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG15
+ cbnz x0, G_M31693_IG13
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -93,7 +93,7 @@ G_M31693_IG08: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG19
+ cbnz x0, G_M31693_IG16
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -110,53 +110,47 @@ G_M31693_IG10: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movk x1, #1 LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG13 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M31693_IG12: ; bbWeight=0.25, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M31693_IG13: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 3.00 -G_M31693_IG14: ; bbWeight=1, epilog, nogc, extend
+ ldr x0, [x0, #0x08] + ;; size=28 bbWeight=1 PerfScore 9.00 +G_M31693_IG12: ; bbWeight=1, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=1 PerfScore 3.00
-G_M31693_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M31693_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x18]
- cbz x0, G_M31693_IG16 - b G_M31693_IG17
+ cbz x0, G_M31693_IG14 + b G_M31693_IG15
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG18
+G_M31693_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0]
+ ldr x0, [x0, #0x08]
movz x1, #0xD1FFAB1E // code for System.Runtime.ExceptionServices.ExceptionDispatchInfo:Throw():this movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -165,22 +159,22 @@ G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by blr x1 ; gcrRegs -[x0] brk_unix #0
- ;; size=32 bbWeight=0 PerfScore 0.00 -G_M31693_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ ;; size=56 bbWeight=0 PerfScore 0.00 +G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x20]
- cbz x0, G_M31693_IG20 - b G_M31693_IG21
+ cbz x0, G_M31693_IG17 + b G_M31693_IG18
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS @@ -195,7 +189,7 @@ G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by brk_unix #0 ;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 368, prolog size 16, PerfScore 54.88, instruction count 92, allocated bytes for code 368 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
+; Total bytes of code 384, prolog size 16, PerfScore 59.00, instruction count 96, allocated bytes for code 384 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -206,7 +200,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 92 (0x0005c) Actual length = 368 (0x000170)
+ Function Length : 96 (0x00060) Actual length = 384 (0x000180)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

libraries_tests.run.osx.arm64.Release.mch

-28 (-46.67%) : 559621.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -8,12 +8,10 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 11728 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -22,37 +20,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.50 PerfScore 5.25 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 12.12, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -63,7 +43,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 531854.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -8,12 +8,10 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 343 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -22,37 +20,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.50 PerfScore 5.25 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 12.12, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -63,7 +43,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-35.29%) : 61111.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.Canon,System.Canon]:Single():System.__Canon:this (Tier1)

@@ -7,12 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> x0 this single-def -; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def
+; V00 this [V00,T01] ( 3, 3 ) byref -> x2 this single-def +; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x2 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,38 +17,25 @@ G_M64707_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x20]! mov fp, sp str x1, [fp, #0x18]
- ;; size=12 bbWeight=1 PerfScore 2.50 -G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz - ; byrRegs +[x0] - ldr x2, [x0] - ; gcrRegs +[x2] - mov x0, x2 - ; gcrRegs +[x0] - ; byrRegs -[x0] - cbz x0, G_M64707_IG05 - ;; size=12 bbWeight=1 PerfScore 4.50 -G_M64707_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - ldr x1, [x1, #0x08] - cmp x3, x1 - beq G_M64707_IG05 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M64707_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1 - mov x1, x2
+ mov x2, x0 + ; byrRegs +[x2] + ;; size=16 bbWeight=1 PerfScore 3.00 +G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref + ldr x0, [x1, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x08] + ldr x1, [x2]
; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[x1-x2] +[x0] - ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M64707_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ; gcrRegs -[x1] +[x0] + ; byrRegs -[x2] + ;; size=20 bbWeight=1 PerfScore 13.00 +G_M64707_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 68, prolog size 12, PerfScore 12.62, instruction count 17, allocated bytes for code 68 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
+; Total bytes of code 44, prolog size 12, PerfScore 18.00, instruction count 11, allocated bytes for code 44 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -62,7 +46,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 17 (0x00011) Actual length = 68 (0x000044)
+ Function Length : 11 (0x0000b) Actual length = 44 (0x00002c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+8 (+5.13%) : 404935.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)

@@ -11,13 +11,11 @@ ; ; V00 this [V00,T02] ( 4, 3 ) ref -> x0 this class-hnd <OLEDB.Test.ModuleCore.CTestCase> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T03] ( 3, 4.50) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T06] ( 3, 2.50) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <OLEDB.Test.ModuleCore.CTestModule> -; V05 tmp4 [V05,T07] ( 2, 0 ) ref -> x0 single-def "arg temp" -; V06 cse0 [V06,T05] ( 4, 3 ) ref -> x19 "CSE - aggressive" -; V07 rat0 [V07,T04] ( 3, 4 ) ref -> x1 "Spilling to split statement for tree" -; V08 rat1 [V08,T01] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
+; V02 tmp1 [V02,T05] ( 2, 0 ) ref -> x0 single-def "arg temp" +; V03 cse0 [V03,T04] ( 5, 3 ) ref -> x19 "CSE - aggressive" +; V04 rat0 [V04,T03] ( 3, 4 ) ref -> x1 "Spilling to split statement for tree" +; V05 rat1 [V05,T00] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule> +; V06 rat2 [V06,T01] ( 5, 7 ) ref -> x0 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
; ; Lcl frame size = 8 @@ -59,28 +57,30 @@ G_M5100_IG04: ; bbWeight=0, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, G_M5100_IG05: ; bbWeight=1, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] cbz x2, G_M5100_IG09
- mov x1, x19 - ; gcrRegs +[x1] - mov x0, x1
+ mov x0, x19
; gcrRegs +[x0] cbz x0, G_M5100_IG08
- ;; size=16 bbWeight=1 PerfScore 3.00 -G_M5100_IG06: ; bbWeight=0.50, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x2 x19] - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #1 LSL #32 - cmp x2, x3
+ ;; size=12 bbWeight=1 PerfScore 2.50 +G_M5100_IG06: ; bbWeight=0.50, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x2] + ldr x1, [x0] + movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + cmp x1, x2
beq G_M5100_IG08 ;; size=24 bbWeight=0.50 PerfScore 3.00
-G_M5100_IG07: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+G_M5100_IG07: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x3 - bl CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[x1] +[x0]
+ mov x1, x19 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #1 LSL #32 + bl CORINFO_HELP_CHKCASTCLASS + ; gcrRegs -[x1 x19] +[x0]
; gcr arg pop 0
- ;; size=8 bbWeight=0.25 PerfScore 0.38
+ ;; size=20 bbWeight=0 PerfScore 0.00
G_M5100_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc ldr x19, [sp, #0x18] ldp fp, lr, [sp], #0x20 @@ -99,7 +99,7 @@ G_M5100_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 { b G_M5100_IG02 ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 156, prolog size 12, PerfScore 20.88, instruction count 39, allocated bytes for code 156 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
+; Total bytes of code 164, prolog size 12, PerfScore 20.00, instruction count 41, allocated bytes for code 164 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
; ============================================================ Unwind Info: @@ -110,7 +110,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 39 (0x00027) Actual length = 156 (0x00009c)
+ 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)

+32 (+5.48%) : 102174.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder+ImplicitConversion:bindImplicitConversionToBase(Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType):ubyte:this (Tier1)

@@ -11,38 +11,36 @@ ; ; V00 this [V00,T03] ( 11, 3 ) ref -> x20 this class-hnd single-def <Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder+ImplicitConversion> ; V01 arg1 [V01,T01] ( 8, 7 ) ref -> x19 class-hnd single-def <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType>
-; V02 loc0 [V02,T17] ( 4, 0 ) int -> x21
+; V02 loc0 [V02,T15] ( 4, 0 ) int -> x21
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T07] ( 2, 4 ) ref -> x0 single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T02] ( 3, 5 ) ref -> x0 class-hnd "spilling QMark2" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType> -; V06 tmp3 [V06,T14] ( 2, 2 ) ubyte -> x0 "Inline return value spill temp" -; V07 tmp4 [V07,T00] ( 10, 12 ) ref -> x21 class-hnd single-def "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.CType> -; V08 tmp5 [V08,T20] ( 2, 0 ) int -> x0 "guarded devirt return temp" -;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType> -; V10 tmp7 [V10,T09] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateSymbol> -; V11 tmp8 [V11,T15] ( 2, 2 ) ubyte -> x0 "Inline return value spill temp" -; V12 tmp9 [V12,T12] ( 4, 2 ) ubyte -> x0 "Inline return value spill temp" -; V13 tmp10 [V13,T11] ( 6, 2 ) ref -> x24 class-hnd "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.CType> -; V14 tmp11 [V14,T18] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CSharp.RuntimeBinder.Semantics.NullableType> -; V15 tmp12 [V15,T13] ( 4, 2 ) int -> x23 "guarded devirt return temp" -;* V16 tmp13 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType> -; V17 tmp14 [V17,T16] ( 3, 2 ) ubyte -> x23 "Inline return value spill temp" -; V18 tmp15 [V18,T08] ( 2, 4 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateSymbol> -; V19 tmp16 [V19,T21] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateSymbol> -;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.Expr> -; V21 tmp18 [V21,T19] ( 3, 0 ) ref -> x0 single-def "argument with side effect" -; V22 cse0 [V22,T06] ( 4, 4 ) int -> x0 "CSE - aggressive" -; V23 cse1 [V23,T10] ( 3, 3 ) ref -> x21 "CSE - aggressive" -; V24 cse2 [V24,T04] ( 7, 4 ) long -> x22 multi-def "CSE - aggressive" -; V25 cse3 [V25,T05] ( 5, 4 ) long -> x23 multi-def "CSE - aggressive"
+; V04 tmp1 [V04,T12] ( 2, 2 ) ubyte -> x0 "Inline return value spill temp" +; V05 tmp2 [V05,T00] ( 13, 14 ) ref -> x21 class-hnd single-def "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.CType> +; V06 tmp3 [V06,T18] ( 2, 0 ) int -> x0 "guarded devirt return temp" +;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType> +; V08 tmp5 [V08,T07] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateSymbol> +; V09 tmp6 [V09,T13] ( 2, 2 ) ubyte -> x0 "Inline return value spill temp" +; V10 tmp7 [V10,T10] ( 4, 2 ) ubyte -> x0 "Inline return value spill temp" +; V11 tmp8 [V11,T09] ( 6, 2 ) ref -> x22 class-hnd "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.CType> +; V12 tmp9 [V12,T16] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inline stloc first use temp" <Microsoft.CSharp.RuntimeBinder.Semantics.NullableType> +; V13 tmp10 [V13,T11] ( 4, 2 ) int -> x23 "guarded devirt return temp" +;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType> +; V15 tmp12 [V15,T14] ( 3, 2 ) ubyte -> x23 "Inline return value spill temp" +; V16 tmp13 [V16,T05] ( 2, 4 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateSymbol> +; V17 tmp14 [V17,T19] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateSymbol> +;* V18 tmp15 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <Microsoft.CSharp.RuntimeBinder.Semantics.Expr> +; V19 tmp16 [V19,T17] ( 3, 0 ) ref -> x0 single-def "argument with side effect" +; V20 cse0 [V20,T04] ( 4, 4 ) int -> x0 "CSE - aggressive" +; V21 cse1 [V21,T08] ( 3, 3 ) ref -> x21 "CSE - aggressive" +; V22 rat0 [V22,T06] ( 2, 4 ) ref -> x0 "Spilling to split statement for tree" +; V23 rat1 [V23,T02] ( 5, 7.50) ref -> x0 class-hnd "replacement local" <Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType>
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M56129_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x10] - stp x21, x22, [sp, #0x20] - stp x23, x24, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp mov x20, x0 ; gcrRegs +[x20] @@ -54,45 +52,56 @@ G_M56129_IG02: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { ; gcrRegs +[x21] mov x0, x21 ; gcrRegs +[x0]
- cbz x0, G_M56129_IG10
+ cbz x0, G_M56129_IG05
;; size=12 bbWeight=1 PerfScore 4.50 G_M56129_IG03: ; bbWeight=0.50, gcrefRegs=380001 {x0 x19 x20 x21}, byrefRegs=0000 {}, byref, isz
- ldr x22, [x0] - movz x23, #0xD1FFAB1E - movk x23, #0xD1FFAB1E LSL #16 - movk x23, #1 LSL #32 - cmp x22, x23 - bne G_M56129_IG10
+ ldr x1, [x0] + movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + cmp x1, x2 + beq G_M56129_IG05
;; size=24 bbWeight=0.50 PerfScore 3.00
-G_M56129_IG04: ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
+G_M56129_IG04: ; bbWeight=0.25, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- cbz x19, G_M56129_IG06 - cmp x22, x23 - bne G_M56129_IG05
+ mov x0, xzr + ; gcrRegs +[x0] + ;; size=4 bbWeight=0.25 PerfScore 0.12 +G_M56129_IG05: ; bbWeight=1, gcrefRegs=380001 {x0 x19 x20 x21}, byrefRegs=0000 {}, byref, isz + cbz x0, G_M56129_IG11 + cbz x19, G_M56129_IG07 + ldr x0, [x21] + ; gcrRegs -[x0] + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + cmp x0, x1 + bne G_M56129_IG06
ldr x0, [x21, #0x30] ; gcrRegs +[x0] ldrb w1, [x0, #0x98]
- cbz w1, G_M56129_IG06
+ cbz w1, G_M56129_IG07
ldr w0, [x0, #0x94] ; gcrRegs -[x0] cmp w0, #15
- bne G_M56129_IG06 - b G_M56129_IG12 - ;; size=40 bbWeight=1 PerfScore 15.00 -G_M56129_IG05: ; bbWeight=0, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
+ bne G_M56129_IG07 + b G_M56129_IG13 + ;; size=60 bbWeight=1 PerfScore 20.50 +G_M56129_IG06: ; bbWeight=0, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
mov x0, x21 ; gcrRegs +[x0] mov w1, #15
- ldr x2, [x22, #0x58]
+ ldr x2, [x21] + ldr x2, [x2, #0x58]
ldr x2, [x2, #0x28] blr x2 ; gcrRegs -[x0]
- cbnz w0, G_M56129_IG12 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M56129_IG06: ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
+ cbnz w0, G_M56129_IG13 + ;; size=28 bbWeight=0 PerfScore 0.00 +G_M56129_IG07: ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
ldrsb wzr, [x19] cmp x19, x21
- beq G_M56129_IG12
+ beq G_M56129_IG13
mov x0, x19 ; gcrRegs +[x0] mov x1, x21 @@ -103,48 +112,48 @@ G_M56129_IG06: ; bbWeight=1, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=00 ldr x2, [x2] blr x2 ; gcrRegs -[x0-x1]
- cbnz w0, G_M56129_IG12 - mov x24, x19 - ; gcrRegs +[x24] - ldr x22, [x21] - movz x23, #0xD1FFAB1E - movk x23, #0xD1FFAB1E LSL #16 - movk x23, #1 LSL #32 - cmp x22, x23 - bne G_M56129_IG18
+ cbnz w0, G_M56129_IG13 + mov x22, x19 + ; gcrRegs +[x22] + ldr x0, [x21] + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + cmp x0, x1 + bne G_M56129_IG19
ldr x0, [x21, #0x30] ; gcrRegs +[x0] ldr w0, [x0, #0x90] ; gcrRegs -[x0] cmp w0, #1
- beq G_M56129_IG17
+ beq G_M56129_IG18
cmp w0, #3
- beq G_M56129_IG17
+ beq G_M56129_IG18
cmp w0, #2 cset x23, eq ;; size=104 bbWeight=1 PerfScore 28.50
-G_M56129_IG07: ; bbWeight=1, gcrefRegs=1380000 {x19 x20 x21 x24}, byrefRegs=0000 {}, byref, isz - cbnz w23, G_M56129_IG19
+G_M56129_IG08: ; bbWeight=1, gcrefRegs=780000 {x19 x20 x21 x22}, byrefRegs=0000 {}, byref, isz + cbnz w23, G_M56129_IG20
;; size=4 bbWeight=1 PerfScore 1.00
-G_M56129_IG08: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x21 x24]
+G_M56129_IG09: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref + ; gcrRegs -[x21-x22]
mov w0, wzr ;; size=4 bbWeight=1 PerfScore 0.50
-G_M56129_IG09: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - cbnz w0, G_M56129_IG12
+G_M56129_IG10: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + cbnz w0, G_M56129_IG13
;; size=4 bbWeight=1 PerfScore 1.00
-G_M56129_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M56129_IG11: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19-x20] mov w0, wzr ;; size=4 bbWeight=1 PerfScore 0.50
-G_M56129_IG11: ; bbWeight=1, epilog, nogc, extend - ldp x23, x24, [sp, #0x30] - ldp x21, x22, [sp, #0x20] - ldp x19, x20, [sp, #0x10]
+G_M56129_IG12: ; 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=20 bbWeight=1 PerfScore 5.00 -G_M56129_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=20 bbWeight=1 PerfScore 6.00 +G_M56129_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[x19-x20] mov w21, wzr ldr x0, [x19, #0x30] @@ -152,7 +161,7 @@ G_M56129_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 ldr w0, [x0, #0x90] ; gcrRegs -[x0] cmp w0, #4
- bne G_M56129_IG13
+ bne G_M56129_IG14
ldr x0, [x20, #0x20] ; gcrRegs +[x0] ldr x1, [x0] @@ -161,22 +170,22 @@ G_M56129_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 blr x1 ; gcrRegs -[x0 x19] cmp w0, #11
- bne G_M56129_IG13
+ bne G_M56129_IG14
mov w21, #0xD1FFAB1E
- b G_M56129_IG14
+ b G_M56129_IG15
;; size=56 bbWeight=0 PerfScore 0.00
-G_M56129_IG13: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M56129_IG14: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
ldr x1, [x20, #0x10] ; gcrRegs +[x1]
- cbz x1, G_M56129_IG14
+ cbz x1, G_M56129_IG15
ldr x1, [x20, #0x10] ldr w1, [x1, #0x2C] ; gcrRegs -[x1] and w21, w1, #0xD1FFAB1E ;; size=20 bbWeight=0 PerfScore 0.00
-G_M56129_IG14: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M56129_IG15: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
ldrb w1, [x20, #0x2C]
- cbz w1, G_M56129_IG15
+ cbz w1, G_M56129_IG16
...

+16 (+8.33%) : 157495.dasm - System.Collections.Immutable.ImmutableDictionary2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)

@@ -8,76 +8,75 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 60 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 6, 3.50) long -> x0 single-def -; V01 arg0 [V01,T03] ( 4, 3 ) ref -> x20 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> -; V02 arg1 [V02,T01] ( 5, 4 ) byref -> x19 single-def -; V03 loc0 [V03,T04] ( 3, 0 ) ref -> x0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
+; V00 TypeCtx [V00,T00] ( 6, 4 ) long -> x19 single-def +; V01 arg0 [V01,T02] ( 4, 3 ) ref -> x21 class-hnd single-def <System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]]> +; V02 arg1 [V02,T01] ( 5, 4 ) byref -> x20 single-def +; V03 loc0 [V03,T03] ( 3, 0 ) ref -> x0 class-hnd exact single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T00] ( 6, 9 ) ref -> x15 class-hnd "spilling QMark2" <System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]> -;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V07 tmp3 [V07,T07] ( 2, 0 ) long -> x0 "argument with side effect" -; V08 rat0 [V08,T05] ( 3, 0 ) long -> x0 "runtime lookup" -; V09 rat1 [V09,T06] ( 3, 0 ) long -> x2 "fgMakeTemp is creating a new local variable"
+;* V05 tmp1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V06 tmp2 [V06,T06] ( 2, 0 ) long -> x0 "argument with side effect" +; V07 rat0 [V07,T04] ( 3, 0 ) long -> x0 "runtime lookup" +; V08 rat1 [V08,T05] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 8
G_M59789_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, 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 - ; gcrRegs +[x20] - mov x19, x2 - ; byrRegs +[x19] - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M59789_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - mov x15, x20
+ str x0, [fp, #0x10] + mov x19, x0 + mov x21, x1 + ; gcrRegs +[x21] + mov x20, x2 + ; byrRegs +[x20] + ;; size=32 bbWeight=1 PerfScore 6.00 +G_M59789_IG02: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + mov x0, x19 + mov x1, x21 + ; gcrRegs +[x1] + bl CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[x1] +[x0] + mov x15, x0
; gcrRegs +[x15]
- cbz x15, G_M59789_IG04 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M59789_IG03: ; bbWeight=0.50, gcrefRegs=108000 {x15 x20}, byrefRegs=80000 {x19}, byref - ldr x14, [x15] - cmp x14, x0 - csel x15, x15, xzr, eq - ;; size=12 bbWeight=0.50 PerfScore 2.00 -G_M59789_IG04: ; bbWeight=1, gcrefRegs=108000 {x15 x20}, byrefRegs=80000 {x19}, byref, isz - mov x14, x19
+ mov x14, x20
; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF
- ; gcrRegs -[x15]
+ ; gcrRegs -[x0 x15]
; byrRegs -[x14]
- ldr x1, [x19] - ; gcrRegs +[x1] - cbz x1, G_M59789_IG06
+ ldr x0, [x20] + ; gcrRegs +[x0] + cbz x0, G_M59789_IG04
mov w0, #1
- ;; size=20 bbWeight=1 PerfScore 6.00 -G_M59789_IG05: ; bbWeight=1, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+ ; gcrRegs -[x0] + ;; size=36 bbWeight=1 PerfScore 8.50 +G_M59789_IG03: ; 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 -G_M59789_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, gcvars, byref, isz - ; gcrRegs -[x1] - ldr x1, [x0, #0x38] - ldr x1, [x1] - ldr x2, [x1, #0x50] - cbz x2, G_M59789_IG07 - mov x0, x2 - b G_M59789_IG08 - ;; size=24 bbWeight=0 PerfScore 0.00 -G_M59789_IG07: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+ ;; size=16 bbWeight=1 PerfScore 5.00 +G_M59789_IG04: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, gcvars, byref, isz + ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x50] + cbz x0, G_M59789_IG05 + b G_M59789_IG06 + ;; size=20 bbWeight=0 PerfScore 0.00 +G_M59789_IG05: ; bbWeight=0, 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_CLASS
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M59789_IG08: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz - mov x1, x20
+ ;; size=20 bbWeight=0 PerfScore 0.00 +G_M59789_IG06: ; bbWeight=0, gcrefRegs=200000 {x21}, byrefRegs=100000 {x20}, byref, isz + mov x1, x21
; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS
- ; gcrRegs -[x1 x20] +[x0] - cbz x0, G_M59789_IG10
+ ; gcrRegs -[x1 x21] +[x0] + cbz x0, G_M59789_IG08
movz x1, #0xD1FFAB1E // code for System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,int]:ToImmutable():System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -85,28 +84,30 @@ G_M59789_IG08: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19 blr x1 mov x15, x0 ; gcrRegs +[x15]
- mov x14, x19
+ mov x14, x20
; byrRegs +[x14] bl CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[x0 x15]
- ; byrRegs -[x14 x19]
+ ; byrRegs -[x14 x20]
mov w0, #1 ;; size=48 bbWeight=0 PerfScore 0.00
-G_M59789_IG09: ; bbWeight=0, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59789_IG07: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=0 PerfScore 0.00 -G_M59789_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=16 bbWeight=0 PerfScore 0.00 +G_M59789_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, wzr ;; size=4 bbWeight=0 PerfScore 0.00
-G_M59789_IG11: ; bbWeight=0, epilog, nogc, extend - ldp x19, x20, [sp, #0x20]
+G_M59789_IG09: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=0 PerfScore 0.00
+ ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 192, prolog size 16, PerfScore 17.00, instruction count 48, allocated bytes for code 192 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
+; Total bytes of code 208, prolog size 20, PerfScore 19.50, instruction count 52, allocated bytes for code 208 (MethodHash=98ac1672) for method System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
; ============================================================ Unwind Info: @@ -117,7 +118,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 48 (0x00030) Actual length = 192 (0x0000c0)
+ Function Length : 52 (0x00034) Actual length = 208 (0x0000d0)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -131,10 +132,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

librariestestsnotieredcompilation.run.osx.arm64.Release.mch

-28 (-46.67%) : 140805.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 35964.dasm - LamarCodeGeneration.Util.TypeExtensions:AsSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,37 +18,19 @@ G_M24927_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M24927_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M24927_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M24927_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M24927_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M24927_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M24927_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M24927_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M24927_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M24927_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +41,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-40.00%) : 30319.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:b7_2System.__Canon:System.Canon:this (FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> x2 class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,33 +19,21 @@ G_M29555_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x1, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- mov x0, x2 - ; gcrRegs +[x0] - cbz x0, G_M29555_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M29555_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - cmp x3, x1 - beq G_M29555_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M29555_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ ldr x0, [x1, #0x38] + ldr x0, [x0]
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1-x2] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M29555_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 7.50 +G_M29555_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 8.88, instruction count 15, allocated bytes for code 60 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
+; Total bytes of code 36, prolog size 12, PerfScore 12.00, instruction count 9, allocated bytes for code 36 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -58,7 +44,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+43.48%) : 93038.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:b_220():this (FullOpts)

@@ -8,26 +8,25 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataColumnMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8
-G_M18245_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M18245_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp mov x19, x0 ; gcrRegs +[x19]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=1 PerfScore 3.00 +G_M18245_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
ldp x0, x1, [x19, #0x08] ; gcrRegs +[x0-x1] ldrsb wzr, [x0] @@ -38,11 +37,9 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ldr x3, [x3] blr x3 ; gcrRegs -[x0-x1]
- ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ldrsb wzr, [x0]
+ ldr x19, [x19, #0x08] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E
- ; gcrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 movz x1, #0xD1FFAB1E // code for System.Data.Common.DataColumnMappingCollection:ValidateType(System.Object) @@ -50,26 +47,41 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x1, #1 LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x19] - brk_unix #0 - ;; size=76 bbWeight=0 PerfScore 0.00
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + ;; size=104 bbWeight=1 PerfScore 32.50 +G_M18245_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x2 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 92, prolog size 12, PerfScore 0.00, instruction count 23, allocated bytes for code 92 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
+; Total bytes of code 132, prolog size 12, PerfScore 39.50, instruction count 33, allocated bytes for code 132 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 2
- Epilog Count : 0
+ Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 92 (0x00005c)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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 ----
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

+40 (+43.48%) : 93276.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:b_160():this (FullOpts)

@@ -8,26 +8,25 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8
-G_M51850_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51850_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp mov x19, x0 ; gcrRegs +[x19]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=1 PerfScore 3.00 +G_M51850_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
ldp x0, x1, [x19, #0x08] ; gcrRegs +[x0-x1] ldrsb wzr, [x0] @@ -38,11 +37,9 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ldr x3, [x3] blr x3 ; gcrRegs -[x0-x1]
- ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ldrsb wzr, [x0]
+ ldr x19, [x19, #0x08] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E
- ; gcrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #1 LSL #32 movz x1, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:ValidateType(System.Object) @@ -50,26 +47,41 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x1, #1 LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x19] - brk_unix #0 - ;; size=76 bbWeight=0 PerfScore 0.00
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #1 LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + ;; size=104 bbWeight=1 PerfScore 32.50 +G_M51850_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x2 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 92, prolog size 12, PerfScore 0.00, instruction count 23, allocated bytes for code 92 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
+; Total bytes of code 132, prolog size 12, PerfScore 39.50, instruction count 33, allocated bytes for code 132 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 2
- Epilog Count : 0
+ Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 92 (0x00005c)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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 ----
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

+48 (+92.31%) : 90874.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>cDisplayClass7_0:b2():this (FullOpts)

@@ -8,24 +8,24 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 3, 2 ) ref -> x0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
+; V00 this [V00,T01] ( 3, 3 ) ref -> x0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T01] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V04 tmp3 [V04,T03] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V06 cse0 [V06,T02] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V02 tmp1 [V02,T00] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V03 tmp2 [V03,T03] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V04 cse0 [V04,T02] ( 2, 2 ) ref -> x0 "CSE - aggressive"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
-G_M51219_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG - stp fp, lr, [sp, #-0x10]!
+G_M51219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG + stp fp, lr, [sp, #-0x20]! + str x19, [sp, #0x18]
mov fp, sp
- ;; size=8 bbWeight=0 PerfScore 0.00 -G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
+ ;; size=12 bbWeight=1 PerfScore 2.50 +G_M51219_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
; gcrRegs +[x0]
- ldr x0, [x0, #0x08] - ldrsb wzr, [x0]
+ ldr x19, [x0, #0x08] + ; gcrRegs +[x19] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 @@ -35,26 +35,46 @@ G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byre movk x1, #1 LSL #32 ldr x1, [x1] blr x1
- brk_unix #0 - ;; size=44 bbWeight=0 PerfScore 0.00
+ movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + mov w1, wzr + movz x3, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + movk x3, #0xD1FFAB1E LSL #16 + movk x3, #1 LSL #32 + ldr x3, [x3] + ;; size=76 bbWeight=1 PerfScore 20.00 +G_M51219_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x3 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 52, prolog size 8, PerfScore 0.00, instruction count 13, allocated bytes for code 52 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
+; Total bytes of code 100, prolog size 12, PerfScore 26.50, instruction count 25, allocated bytes for code 100 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
+ Function Length : 25 (0x00019) Actual length = 100 (0x000064)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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
- 81 save_fplr_x #1 (0x01); stp fp, lr, [sp, #-16]!
+ ---- Epilog start at index 1 ---- + 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 E4 end

realworld.run.osx.arm64.checked.mch

-24 (-31.58%) : 29644.dasm - System.Management.Automation.PSTypeExtensions+<>c7`1[System.Canon]:b7_1(System.Object):System.Canon:this (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> x19 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> x19 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 8 @@ -23,34 +21,22 @@ G_M56342_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M56342_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M56342_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M56342_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M56342_IG03: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M56342_IG05 - ;; size=28 bbWeight=0.25 PerfScore 4.12 -G_M56342_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M56342_IG05: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=20 bbWeight=1 PerfScore 13.00 +G_M56342_IG03: ; 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 76, prolog size 16, PerfScore 13.81, instruction count 19, allocated bytes for code 76 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.00, instruction count 13, allocated bytes for code 52 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +47,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
+ Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 404.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-25.93%) : 14786.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (FullOpts)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> x20 this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 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" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> x20 "CSE - aggressive"
; ; Lcl frame size = 16 @@ -22,47 +21,36 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x19, x20, [sp, #0x20] mov fp, sp str x1, [fp, #0x18]
- mov x20, x0 - ; gcrRegs +[x20] - mov x19, x1 - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ mov x19, x0 + ; gcrRegs +[x19] + ;; size=20 bbWeight=1 PerfScore 4.00 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x20, [x1, #0x38] + ldr x0, [x20]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x10] blr x2
- ; gcrRegs -[x1 x20]
+ ; gcrRegs -[x1 x19]
mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M60617_IG05 - ;; size=44 bbWeight=1 PerfScore 19.50 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M60617_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x20]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=48 bbWeight=1 PerfScore 22.50 +G_M60617_IG03: ; 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 108, prolog size 16, PerfScore 29.81, instruction count 27, allocated bytes for code 108 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
+; Total bytes of code 80, prolog size 16, PerfScore 29.50, instruction count 20, allocated bytes for code 80 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -73,7 +61,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 30891.dasm - System.Management.Automation.Interpreter.ScriptingRuntimeHelpers:GetPrimitiveDefaultValue(System.Type):System.Object (FullOpts)

@@ -25,24 +25,19 @@ ; V14 tmp11 [V14,T13] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <<unknown class>> ; V15 tmp12 [V15,T14] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <<unknown class>> ; V16 tmp13 [V16,T16] ( 3, 2 ) int -> x19 "Inline return value spill temp"
-;* V17 tmp14 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V18 tmp15 [V18 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V19 tmp16 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V20 tmp17 [V20 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V21 tmp18 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V23 tmp20 [V23 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V24 tmp21 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V25 tmp22 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V26 tmp23 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V27 tmp24 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -; V28 tmp25 [V28,T15] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <<unknown class>> -; V29 tmp26 [V29,T00] ( 15, 15 ) ref -> x0 "Single return block return value" -;* V30 tmp27 [V30,T17] ( 0, 0 ) long -> zero-ref single-def "field V02._dateData (fldOffset=0x0)" P-INDEP -;* V31 tmp28 [V31 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V32 tmp29 [V32 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V33 tmp30 [V33 ] ( 0, 0 ) int -> zero-ref "index expr" -; V34 rat0 [V34,T02] ( 3, 6 ) int -> x1 "ReplaceWithLclVar is creating a new local variable"
+;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V18 tmp15 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V19 tmp16 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V21 tmp18 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> +; V23 tmp20 [V23,T15] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <<unknown class>> +; V24 tmp21 [V24,T00] ( 15, 15 ) ref -> x0 "Single return block return value" +;* V25 tmp22 [V25 ] ( 0, 0 ) long -> zero-ref single-def "field V02._dateData (fldOffset=0x0)" P-INDEP +;* V26 tmp23 [V26 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V27 tmp24 [V27 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "index expr" +; V29 rat0 [V29,T02] ( 3, 6 ) int -> x1 "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 8

+0 (0.00%) : 31183.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeDotNetMethod(System.Dynamic.CallInfo,System.String,System.Management.Automation.PSMethodInvocationConstraints,int,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],System.Dynamic.BindingRestrictions,System.Management.Automation.MethodInformation[],System.Type):System.Dynamic.DynamicMetaObject (FullOpts)

@@ -23,19 +23,19 @@ ; V12 loc3 [V12 ] ( 2, 1.50) ref -> [fp+0x40] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.String> ; V13 loc4 [V13,T02] ( 9, 11 ) int -> x27 ; V14 loc5 [V14,T11] ( 4, 6 ) ref -> x28 class-hnd exact single-def <System.Object[]>
-; V15 loc6 [V15,T41] ( 3, 2.50) ref -> x0 class-hnd single-def <System.Management.Automation.MethodInformation>
+; V15 loc6 [V15,T42] ( 3, 2.50) ref -> x0 class-hnd single-def <System.Management.Automation.MethodInformation>
; V16 loc7 [V16,T00] ( 12, 21.04) int -> [fp+0x3C] ; V17 loc8 [V17,T03] ( 6, 10 ) ref -> x2 class-hnd <System.Object>
-; V18 loc9 [V18,T07] ( 12, 6 ) ref -> x25 class-hnd single-def <<unknown class>> -; V19 loc10 [V19,T05] ( 18, 9 ) ref -> x20 class-hnd <System.Linq.Expressions.Expression>
+; V18 loc9 [V18,T06] ( 12, 6 ) ref -> x25 class-hnd single-def <<unknown class>> +; V19 loc10 [V19,T07] ( 12, 6 ) ref -> x20 class-hnd <System.Linq.Expressions.Expression>
;* V20 loc11 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.String>
-; V21 loc12 [V21,T65] ( 3, 1.50) ref -> x23 class-hnd single-def <System.Linq.Expressions.ParameterExpression>
+; V21 loc12 [V21,T66] ( 3, 1.50) ref -> x23 class-hnd single-def <System.Linq.Expressions.ParameterExpression>
;# V22 OutArgs [V22 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V23 tmp1 [V23 ] ( 0, 0 ) ref -> zero-ref ;* V24 tmp2 [V24 ] ( 0, 0 ) int -> zero-ref ;* V25 tmp3 [V25 ] ( 0, 0 ) ref -> zero-ref ;* V26 tmp4 [V26 ] ( 0, 0 ) int -> zero-ref
-; V27 tmp5 [V27,T06] ( 6, 8 ) ref -> x2
+; V27 tmp5 [V27,T05] ( 6, 8 ) ref -> x2
; V28 tmp6 [V28,T09] ( 6, 6 ) ref -> x19 class-hnd exact single-def "dup spill" <System.Type[]> ;* V29 tmp7 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType> ;* V30 tmp8 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType> @@ -44,15 +44,15 @@ ;* V33 tmp11 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType> ; V34 tmp12 [V34,T13] ( 5, 5 ) ref -> x20 class-hnd exact single-def "dup spill" <System.Object[]> ; V35 tmp13 [V35,T20] ( 4, 4 ) ref -> x23 class-hnd exact single-def "dup spill" <System.Object[]>
-; V36 tmp14 [V36,T29] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <<unknown class>> -; V37 tmp15 [V37,T30] ( 3, 3 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject>
+; V36 tmp14 [V36,T30] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Single-def Box Helper" <<unknown class>> +; V37 tmp15 [V37,T31] ( 3, 3 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject>
; V38 tmp16 [V38,T21] ( 4, 4 ) ref -> x0 class-hnd single-def "dup spill" <System.Type> ;* V39 tmp17 [V39 ] ( 0, 0 ) ref -> zero-ref single-def
-; V40 tmp18 [V40,T66] ( 3, 1.50) ref -> x23 -; V41 tmp19 [V41,T40] ( 5, 2.50) ref -> x23 -; V42 tmp20 [V42,T45] ( 2, 2 ) ref -> x24 class-hnd exact single-def "impAppendStmt" <<unknown class>>
+; V40 tmp18 [V40,T67] ( 3, 1.50) ref -> x23 +; V41 tmp19 [V41,T41] ( 5, 2.50) ref -> x23 +; V42 tmp20 [V42,T46] ( 2, 2 ) ref -> x24 class-hnd exact single-def "impAppendStmt" <<unknown class>>
;* V43 tmp21 [V43 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.Linq.Expressions.ConstantExpression>
-; V44 tmp22 [V44,T46] ( 2, 2 ) ref -> x2 class-hnd single-def "dup spill" <<unknown class>>
+; V44 tmp22 [V44,T47] ( 2, 2 ) ref -> x2 class-hnd single-def "dup spill" <<unknown class>>
;* V45 tmp23 [V45 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.Linq.Expressions.ConstantExpression> ;* V46 tmp24 [V46 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType> ;* V47 tmp25 [V47 ] ( 0, 0 ) ref -> zero-ref single-def @@ -60,67 +60,63 @@ ;* V49 tmp27 [V49 ] ( 0, 0 ) ref -> zero-ref single-def ;* V50 tmp28 [V50 ] ( 0, 0 ) ref -> zero-ref single-def ;* V51 tmp29 [V51 ] ( 0, 0 ) ref -> zero-ref single-def
-; V52 tmp30 [V52,T42] ( 4, 2 ) ref -> x2 -; V53 tmp31 [V53,T26] ( 4, 3 ) ref -> x0 single-def "spilling varStr"
+; V52 tmp30 [V52,T43] ( 4, 2 ) ref -> x2 +; V53 tmp31 [V53,T27] ( 4, 3 ) ref -> x0 single-def "spilling varStr"
;* V54 tmp32 [V54,T71] ( 0, 0 ) int -> zero-ref "spilling unroll qmark"
-; V55 tmp33 [V55,T31] ( 3, 3 ) ref -> x23 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> -; V56 tmp34 [V56,T27] ( 4, 3 ) ref -> x0 single-def "spilling varStr"
+; V55 tmp33 [V55,T32] ( 3, 3 ) ref -> x23 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> +; V56 tmp34 [V56,T28] ( 4, 3 ) ref -> x0 single-def "spilling varStr"
;* V57 tmp35 [V57,T72] ( 0, 0 ) int -> zero-ref "spilling unroll qmark"
-; V58 tmp36 [V58,T32] ( 3, 3 ) ref -> x24 class-hnd exact single-def "dup spill" <System.Linq.Expressions.CatchBlock[]>
+; V58 tmp36 [V58,T33] ( 3, 3 ) ref -> x24 class-hnd exact single-def "dup spill" <System.Linq.Expressions.CatchBlock[]>
; V59 tmp37 [V59,T22] ( 4, 4 ) ref -> x28 class-hnd exact single-def "dup spill" <System.Linq.Expressions.Expression[]>
-; V60 tmp38 [V60,T47] ( 2, 2 ) ref -> x27 class-hnd single-def "impAppendStmt" <System.Type> -; V61 tmp39 [V61,T48] ( 2, 2 ) ref -> [fp+0x28] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> -; V62 tmp40 [V62,T49] ( 2, 2 ) ref -> [fp+0x20] class-hnd spill-single-def "non-inline candidate call" <System.Linq.Expressions.ConstantExpression>
+; V60 tmp38 [V60,T48] ( 2, 2 ) ref -> x27 class-hnd single-def "impAppendStmt" <System.Type> +; V61 tmp39 [V61,T49] ( 2, 2 ) ref -> [fp+0x28] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> +; V62 tmp40 [V62,T50] ( 2, 2 ) ref -> [fp+0x20] class-hnd spill-single-def "non-inline candidate call" <System.Linq.Expressions.ConstantExpression>
;* V63 tmp41 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.Linq.Expressions.ConstantExpression> ;* V64 tmp42 [V64 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Linq.Expressions.Expression>
-; V65 tmp43 [V65,T50] ( 2, 2 ) ref -> x15 class-hnd single-def "Strict ordering of exceptions for Array store" <<unknown class>> -; V66 tmp44 [V66,T51] ( 2, 2 ) ref -> x15 class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.UnaryExpression> -; V67 tmp45 [V67,T52] ( 2, 2 ) ref -> x15 class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.CatchBlock> -; V68 tmp46 [V68,T33] ( 3, 3 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> -; V69 tmp47 [V69,T34] ( 3, 3 ) ref -> x25 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> -; V70 tmp48 [V70,T28] ( 4, 3 ) ref -> x0 single-def "spilling varStr"
+; V65 tmp43 [V65,T51] ( 2, 2 ) ref -> x15 class-hnd single-def "Strict ordering of exceptions for Array store" <<unknown class>> +; V66 tmp44 [V66,T52] ( 2, 2 ) ref -> x15 class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.UnaryExpression> +; V67 tmp45 [V67,T53] ( 2, 2 ) ref -> x15 class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.CatchBlock> +; V68 tmp46 [V68,T34] ( 3, 3 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> +; V69 tmp47 [V69,T35] ( 3, 3 ) ref -> x25 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> +; V70 tmp48 [V70,T29] ( 4, 3 ) ref -> x0 single-def "spilling varStr"
;* V71 tmp49 [V71,T73] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" ; V72 tmp50 [V72,T14] ( 5, 5 ) ref -> x2 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
-; V73 tmp51 [V73,T35] ( 3, 3 ) ref -> x26 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> -; V74 tmp52 [V74,T36] ( 3, 3 ) ref -> x23 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> -; V75 tmp53 [V75,T53] ( 2, 2 ) ref -> x15 class-hnd exact single-def "Inlining Arg" <<unknown class>> -; V76 tmp54 [V76,T67] ( 3, 1.50) ref -> x20 class-hnd "Inline return value spill temp" <System.Linq.Expressions.Expression>
+; V73 tmp51 [V73,T36] ( 3, 3 ) ref -> x26 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> +; V74 tmp52 [V74,T37] ( 3, 3 ) ref -> x23 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> +; V75 tmp53 [V75,T54] ( 2, 2 ) ref -> x15 class-hnd exact single-def "Inlining Arg" <<unknown class>> +; V76 tmp54 [V76,T24] ( 7, 3.50) ref -> x20 class-hnd "Inline return value spill temp" <System.Linq.Expressions.Expression>
; V77 tmp55 [V77,T10] ( 6, 6 ) ref -> x23 class-hnd single-def "Inlining Arg" <System.Linq.Expressions.Expression> ; V78 tmp56 [V78,T23] ( 4, 4 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.Type>
-; V79 tmp57 [V79,T43] ( 4, 2 ) int -> x20 "Inline return value spill temp" -;* V80 tmp58 [V80 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V81 tmp59 [V81 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V82 tmp60 [V82 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V83 tmp61 [V83 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V84 tmp62 [V84 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V85 tmp63 [V85 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V86 tmp64 [V86 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V87 tmp65 [V87 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V88 tmp66 [V88 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.Assembly> -; V89 tmp67 [V89,T70] ( 2, 1 ) ubyte -> x0 "Inline return value spill temp" -; V90 tmp68 [V90,T37] ( 3, 3 ) ref -> x23 class-hnd single-def "Inlining Arg" <System.Attribute[]> -; V91 tmp69 [V91 ] ( 2, 1 ) int -> [fp+0x30] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" -;* V92 tmp70 [V92 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -;* V93 tmp71 [V93 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -; V94 tmp72 [V94,T54] ( 2, 2 ) ref -> x22 class-hnd exact single-def "Inlining Arg" <System.String> -; V95 tmp73 [V95,T38] ( 3, 3 ) ref -> [fp+0x18] class-hnd exact spill-single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> -;* V96 tmp74 [V96 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Type> -; V97 tmp75 [V97,T55] ( 2, 2 ) ref -> x1 single-def "argument with side effect" -; V98 tmp76 [V98,T56] ( 2, 2 ) ref -> x1 single-def "argument with side effect" -; V99 tmp77 [V99,T57] ( 2, 2 ) ref -> x3 single-def "argument with side effect" -; V100 tmp78 [V100,T58] ( 2, 2 ) ref -> x0 single-def "argument with side effect" -; V101 tmp79 [V101,T59] ( 2, 2 ) ref -> x0 single-def "arr expr" -; V102 tmp80 [V102,T39] ( 3, 3 ) ref -> x0 single-def "argument with side effect" -; V103 tmp81 [V103,T60] ( 2, 2 ) ref -> x0 single-def "argument with side effect" -; V104 tmp82 [V104,T61] ( 2, 2 ) ref -> x19 single-def "argument with side effect" -; V105 tmp83 [V105,T62] ( 2, 2 ) ref -> x5 single-def "argument with side effect" -; V106 tmp84 [V106,T63] ( 2, 2 ) ref -> x1 single-def "argument with side effect" -; V107 tmp85 [V107,T64] ( 2, 2 ) ref -> x1 single-def "argument with side effect" -; V108 cse0 [V108,T12] ( 4, 5.04) ref -> [fp+0x10] hoist multi-def "CSE - aggressive" -; V109 cse1 [V109,T25] ( 7, 3.50) long -> x22 "CSE - moderate" -; V110 cse2 [V110,T44] ( 4, 2 ) long -> x24 "CSE - conservative" -; V111 cse3 [V111,T68] ( 3, 1.50) long -> x26 "CSE - conservative" -; V112 cse4 [V112,T24] ( 7, 3.50) ref -> x23 multi-def "CSE - moderate"
+; V79 tmp57 [V79,T44] ( 4, 2 ) int -> x20 "Inline return value spill temp" +;* V80 tmp58 [V80 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V81 tmp59 [V81 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V82 tmp60 [V82 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V83 tmp61 [V83 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.Assembly> +; V84 tmp62 [V84,T70] ( 2, 1 ) ubyte -> x0 "Inline return value spill temp" +; V85 tmp63 [V85,T38] ( 3, 3 ) ref -> x23 class-hnd single-def "Inlining Arg" <System.Attribute[]> +; V86 tmp64 [V86 ] ( 2, 1 ) int -> [fp+0x30] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" +;* V87 tmp65 [V87 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +;* V88 tmp66 [V88 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +; V89 tmp67 [V89,T55] ( 2, 2 ) ref -> x22 class-hnd exact single-def "Inlining Arg" <System.String> +; V90 tmp68 [V90,T39] ( 3, 3 ) ref -> [fp+0x18] class-hnd exact spill-single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> +;* V91 tmp69 [V91 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Type> +; V92 tmp70 [V92,T56] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V93 tmp71 [V93,T57] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V94 tmp72 [V94,T58] ( 2, 2 ) ref -> x3 single-def "argument with side effect" +; V95 tmp73 [V95,T59] ( 2, 2 ) ref -> x0 single-def "argument with side effect" +;* V96 tmp74 [V96 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" +; V97 tmp75 [V97,T60] ( 2, 2 ) ref -> x0 single-def "arr expr" +; V98 tmp76 [V98,T40] ( 3, 3 ) ref -> x0 single-def "argument with side effect" +; V99 tmp77 [V99,T61] ( 2, 2 ) ref -> x0 single-def "argument with side effect" +; V100 tmp78 [V100,T62] ( 2, 2 ) ref -> x19 single-def "argument with side effect" +; V101 tmp79 [V101,T63] ( 2, 2 ) ref -> x5 single-def "argument with side effect" +; V102 tmp80 [V102,T64] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V103 tmp81 [V103,T65] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V104 cse0 [V104,T12] ( 4, 5.04) ref -> [fp+0x10] hoist multi-def "CSE - aggressive" +; V105 cse1 [V105,T26] ( 7, 3.50) long -> x22 "CSE - moderate" +; V106 cse2 [V106,T45] ( 4, 2 ) long -> x24 "CSE - conservative" +; V107 cse3 [V107,T68] ( 3, 1.50) long -> x26 "CSE - conservative" +; V108 cse4 [V108,T25] ( 7, 3.50) ref -> x23 multi-def "CSE - moderate"
; ; Lcl frame size = 80 @@ -177,10 +173,10 @@ G_M1658_IG02: ; bbWeight=1, gcrefRegs=7E80000 {x19 x21 x22 x23 x24 x25 x2 movk x0, #1 LSL #32 ldr x2, [x0] ; gcrRegs +[x2]
- str x2, [fp, #0x10] // [V108 cse0] - ; GC ptr vars +{V108}
+ str x2, [fp, #0x10] // [V104 cse0] + ; GC ptr vars +{V104}
;; size=84 bbWeight=1 PerfScore 20.00
-G_M1658_IG03: ; bbWeight=3.96, gcVars=00000000000000000000000000001000 {V108}, gcrefRegs=17E80000 {x19 x21 x22 x23 x24 x25 x26 x28}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M1658_IG03: ; bbWeight=3.96, gcVars=00000000000000000000000000001000 {V104}, gcrefRegs=17E80000 {x19 x21 x22 x23 x24 x25 x26 x28}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x2] add x0, x19, #16 ; byrRegs +[x0] @@ -196,7 +192,7 @@ G_M1658_IG03: ; bbWeight=3.96, gcVars=00000000000000000000000000001000 {V blr x3 mov x2, x0 ; gcrRegs +[x2]
- ldr x3, [fp, #0x10] // [V108 cse0]
+ ldr x3, [fp, #0x10] // [V104 cse0]
; gcrRegs +[x3] cmp x2, x3 beq G_M1658_IG05 @@ -222,7 +218,7 @@ G_M1658_IG06: ; bbWeight=3.96, gcrefRegs=17E80004 {x2 x19 x21 x22 x23 x24 blt G_M1658_IG03 ;; size=28 bbWeight=3.96 PerfScore 29.70 G_M1658_IG07: ; bbWeight=1, gcVars=00000000000000000000000000000000 {}, gcrefRegs=17E80000 {x19 x21 x22 x23 x24 x25 x26 x28}, byrefRegs=0000 {}, gcvars, byref
- ; GC ptr vars -{V108}
+ ; GC ptr vars -{V104}
b G_M1658_IG12 ;; size=4 bbWeight=1 PerfScore 1.00 G_M1658_IG08: ; bbWeight=0.04, gcrefRegs=17E80000 {x19 x21 x22 x23 x24 x25 x26 x28}, byrefRegs=0000 {}, byref, isz @@ -690,7 +686,7 @@ G_M1658_IG30: ; bbWeight=0.50, gcrefRegs=2380000 {x19 x20 x21 x25}, byref blr x3 mov x23, x0 ; gcrRegs +[x23]
- add x2, fp, #48 // [V91 tmp69]
+ add x2, fp, #48 // [V86 tmp64]
mov x1, x23 ; gcrRegs +[x1] movz x0, #0xD1FFAB1E @@ -718,7 +714,7 @@ G_M1658_IG30: ; bbWeight=0.50, gcrefRegs=2380000 {x19 x20 x21 x25}, byref b G_M1658_IG32 ;; size=152 bbWeight=0.50 PerfScore 20.00 G_M1658_IG31: ; bbWeight=0.50, gcrefRegs=2380000 {x19 x20 x21 x25}, byrefRegs=0000 {}, byref, isz
- ldr w0, [fp, #0x30] // [V91 tmp69]
+ ldr w0, [fp, #0x30] // [V86 tmp64]
cbz w0, G_M1658_IG35 b G_M1658_IG33 ;; size=12 bbWeight=0.50 PerfScore 2.00 @@ -859,8 +855,8 @@ G_M1658_IG36: ; bbWeight=0.50, gcrefRegs=2B80000 {x19 x20 x21 x23 x25}, b ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- str x1, [fp, #0x18] // [V95 tmp73] - ; GC ptr vars +{V95}
+ str x1, [fp, #0x18] // [V90 tmp68] + ; GC ptr vars +{V90}
add x14, x1, #8 ; byrRegs +[x14] mov x15, x22 @@ -891,7 +887,7 @@ G_M1658_IG36: ; bbWeight=0.50, gcrefRegs=2B80000 {x19 x20 x21 x23 x25}, b ; gcrRegs +[x5] mov x4, x19 ; gcrRegs +[x4]
- ldp x3, x2, [fp, #0x18] // [V95 tmp73], [V62 tmp40]
+ ldp x3, x2, [fp, #0x18] // [V90 tmp68], [V62 tmp40]
; gcrRegs +[x2-x3] ldr x0, [fp, #0x28] // [V61 tmp39] mov x1, x23 @@ -900,7 +896,7 @@ G_M1658_IG36: ; bbWeight=0.50, gcrefRegs=2B80000 {x19 x20 x21 x23 x25}, b movk x6, #0xD1FFAB1E LSL #16 movk x6, #1 LSL #32 ldr x6, [x6]
- ; GC ptr vars -{V61 V62 V95}
+ ; GC ptr vars -{V61 V62 V90}
blr x6 ; gcrRegs -[x1-x5 x19] mov x15, x0

+16 (+4.35%) : 4743.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.Canon]:Commit():System.Canon:this (FullOpts)

@@ -7,7 +7,7 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 10, 6.25) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
+; V00 this [V00,T00] ( 8, 6 ) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]> ;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <System.Runtime.ExceptionServices.ExceptionDispatchInfo> @@ -16,27 +16,27 @@ ;* V06 loc5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 tmp2 [V09,T12] ( 4, 0 ) long -> x0 "spilling helperCall" -;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V11 tmp4 [V11,T16] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>>
+;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp4 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V13 tmp6 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V14 tmp7 [V14,T05] ( 4, 4.50) long -> x0 "spilling helperCall" -;* V15 tmp8 [V15 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V16 tmp9 [V16,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -; V17 tmp10 [V17,T09] ( 2, 4 ) long -> x0 "argument with side effect" -; V18 tmp11 [V18,T10] ( 2, 4 ) long -> x0 "argument with side effect" -; V19 tmp12 [V19,T17] ( 2, 0 ) long -> x0 "argument with side effect" -; V20 cse0 [V20,T04] ( 12, 5.40) long -> x20 "CSE - aggressive" -; V21 rat0 [V21,T06] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V22 rat1 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" -; V23 rat2 [V23,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V24 rat3 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" -; V25 rat4 [V25,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V26 rat5 [V26,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V27 rat6 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V28 rat7 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V29 rat8 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
+; V13 tmp6 [V13,T09] ( 2, 4 ) long -> x0 "argument with side effect" +; V14 tmp7 [V14,T16] ( 2, 0 ) long -> x0 "argument with side effect" +; V15 tmp8 [V15,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V16 tmp9 [V16,T17] ( 2, 0 ) long -> x0 "argument with side effect" +; V17 tmp10 [V17,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V18 cse0 [V18,T04] ( 10, 4.40) long -> x20 "CSE - aggressive" +; V19 rat0 [V19,T05] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V20 rat1 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V21 rat2 [V21,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V22 rat3 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" +; V23 rat4 [V23,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V24 rat5 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" +; V25 rat6 [V25,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V26 rat7 [V26,T12] ( 3, 0 ) long -> x0 "runtime lookup" +; V27 rat8 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V28 rat9 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" +; V29 rat10 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -71,7 +71,7 @@ G_M31693_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG15
+ cbnz x0, G_M31693_IG13
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -93,7 +93,7 @@ G_M31693_IG08: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG19
+ cbnz x0, G_M31693_IG16
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -110,53 +110,47 @@ G_M31693_IG10: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movk x1, #1 LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG13 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M31693_IG12: ; bbWeight=0.25, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M31693_IG13: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 3.00 -G_M31693_IG14: ; bbWeight=1, epilog, nogc, extend
+ ldr x0, [x0, #0x08] + ;; size=28 bbWeight=1 PerfScore 9.00 +G_M31693_IG12: ; bbWeight=1, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=1 PerfScore 3.00
-G_M31693_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M31693_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x18]
- cbz x0, G_M31693_IG16 - b G_M31693_IG17
+ cbz x0, G_M31693_IG14 + b G_M31693_IG15
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG18
+G_M31693_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #1 LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0]
+ ldr x0, [x0, #0x08]
movz x1, #0xD1FFAB1E // code for System.Runtime.ExceptionServices.ExceptionDispatchInfo:Throw():this movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 @@ -165,22 +159,22 @@ G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by blr x1 ; gcrRegs -[x0] brk_unix #0
- ;; size=32 bbWeight=0 PerfScore 0.00 -G_M31693_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ ;; size=56 bbWeight=0 PerfScore 0.00 +G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x20]
- cbz x0, G_M31693_IG20 - b G_M31693_IG21
+ cbz x0, G_M31693_IG17 + b G_M31693_IG18
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #1 LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS @@ -195,7 +189,7 @@ G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by brk_unix #0 ;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 368, prolog size 16, PerfScore 54.88, instruction count 92, allocated bytes for code 368 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
+; Total bytes of code 384, prolog size 16, PerfScore 59.00, instruction count 96, allocated bytes for code 384 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -206,7 +200,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 92 (0x0005c) Actual length = 368 (0x000170)
+ Function Length : 96 (0x00060) Actual length = 384 (0x000180)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.osx.arm64.checked.mch 91 86 0 5 -1,964 +0
benchmarks.run_pgo.osx.arm64.checked.mch 283 279 4 0 -7,160 +124
benchmarks.run_tiered.osx.arm64.checked.mch 24 18 6 0 -512 +72
coreclr_tests.run.osx.arm64.checked.mch 177 151 5 21 -3,964 +292
libraries.crossgen2.osx.arm64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.osx.arm64.checked.mch 633 604 9 20 -19,020 +244
libraries_tests.run.osx.arm64.Release.mch 1,135 973 133 29 -27,816 +3,820
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 764 722 16 26 -23,548 +412
realworld.run.osx.arm64.checked.mch 119 112 1 6 -3,204 +16
3,226 2,945 174 107 -87,188 +4,980

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.osx.arm64.checked.mch 23,165 4 23,161 0 (0.00%) 1,701 (6.84%)
benchmarks.run_pgo.osx.arm64.checked.mch 81,906 48,188 33,718 0 (0.00%) 2,333 (2.77%)
benchmarks.run_tiered.osx.arm64.checked.mch 47,856 37,361 10,495 0 (0.00%) 455 (0.94%)
coreclr_tests.run.osx.arm64.checked.mch 577,351 356,848 220,503 0 (0.00%) 8,703 (1.49%)
libraries.crossgen2.osx.arm64.checked.mch 1,870 0 1,870 0 (0.00%) 0 (0.00%)
libraries.pmi.osx.arm64.checked.mch 287,065 18 287,047 0 (0.00%) 29,063 (9.19%)
libraries_tests.run.osx.arm64.Release.mch 607,407 463,650 143,757 0 (0.00%) 27,242 (4.29%)
librariestestsnotieredcompilation.run.osx.arm64.Release.mch 262,455 21,597 240,858 0 (0.00%) 40,691 (13.42%)
realworld.run.osx.arm64.checked.mch 27,255 3 27,252 0 (0.00%) 4,291 (13.60%)
1,916,330 927,669 988,661 0 (0.00%) 114,479 (5.64%)

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: 9421520 (overridden on cmd)
Total bytes of diff: 9419556 (overridden on cmd)
Total bytes of delta: -1964 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -80 : 2288.dasm (-1.73 % of base)
         -72 : 5756.dasm (-2.13 % of base)
         -48 : 4195.dasm (-10.53 % of base)
         -44 : 20942.dasm (-16.18 % of base)
         -44 : 4163.dasm (-4.60 % of base)
         -40 : 18390.dasm (-12.50 % of base)
         -40 : 5072.dasm (-9.26 % of base)
         -40 : 17171.dasm (-4.81 % of base)
         -40 : 19577.dasm (-8.06 % of base)
         -36 : 20805.dasm (-15.00 % of base)
         -28 : 14179.dasm (-2.13 % of base)
         -28 : 16478.dasm (-21.88 % of base)
         -28 : 1233.dasm (-10.29 % of base)
         -28 : 14200.dasm (-6.48 % of base)
         -28 : 18913.dasm (-15.91 % of base)
         -28 : 420.dasm (-28.00 % of base)
         -28 : 6073.dasm (-25.93 % of base)
         -28 : 3084.dasm (-46.67 % of base)
         -28 : 4886.dasm (-3.59 % of base)
         -28 : 10468.dasm (-20.59 % of base)

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

Top method improvements (bytes):
         -80 (-1.73 % of base) : 2288.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -72 (-2.13 % of base) : 5756.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -48 (-10.53 % of base) : 4195.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -44 (-16.18 % of base) : 20942.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-4.60 % of base) : 4163.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -40 (-4.81 % of base) : 17171.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -40 (-12.50 % of base) : 18390.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -40 (-8.06 % of base) : 19577.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -40 (-9.26 % of base) : 5072.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -36 (-15.00 % of base) : 20805.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -28 (-15.91 % of base) : 18913.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -28 (-10.29 % of base) : 1233.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (FullOpts)
         -28 (-21.88 % of base) : 16478.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -28 (-2.13 % of base) : 14179.dasm - Newtonsoft.Json.Utilities.ExpressionReflectionDelegateFactory:CreateSet[System.__Canon](System.Reflection.PropertyInfo):System.Action`2[System.__Canon,System.__Canon]:this (FullOpts)
         -28 (-20.59 % of base) : 10468.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 420.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-6.48 % of base) : 14200.dasm - System.Collections.Generic.Dictionary`2[int,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (FullOpts)
         -28 (-25.93 % of base) : 6073.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -28 (-46.67 % of base) : 3084.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-3.59 % of base) : 4886.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 3084.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -24 (-31.58 % of base) : 3310.dasm - System.Collections.TryGetValueFalse`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 420.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-25.93 % of base) : 6073.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -24 (-22.22 % of base) : 16832.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -28 (-21.88 % of base) : 16478.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -28 (-20.59 % of base) : 10468.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -20 (-20.00 % of base) : 13232.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -20 (-17.86 % of base) : 17381.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -24 (-16.67 % of base) : 23464.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (FullOpts)
         -24 (-16.22 % of base) : 6455.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (FullOpts)
         -44 (-16.18 % of base) : 20942.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -16 (-16.00 % of base) : 2449.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -28 (-15.91 % of base) : 18913.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -36 (-15.00 % of base) : 20805.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -24 (-14.63 % of base) : 13754.dasm - System.Text.Json.Serialization.Converters.IDictionaryConverter`1[System.__Canon]:Add(System.String,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -24 (-14.29 % of base) : 2326.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -24 (-13.33 % of base) : 20273.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (FullOpts)
         -24 (-13.04 % of base) : 12849.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,int,System.__Canon]:Add(int,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -24 (-13.04 % of base) : 5760.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,System.__Canon,System.__Canon]:Add(System.__Canon,byref,System.Text.Json.JsonSerializerOptions,byref):this (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: 31834168 (overridden on cmd)
Total bytes of diff: 31827132 (overridden on cmd)
Total bytes of delta: -7036 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          48 : 76811.dasm (2.54 % of base)
          44 : 11024.dasm (2.34 % of base)
          16 : 77232.dasm (6.45 % of base)
          16 : 46558.dasm (6.45 % of base)

Top file improvements (bytes):
        -396 : 58299.dasm (-8.60 % of base)
         -56 : 63381.dasm (-5.32 % of base)
         -48 : 64692.dasm (-14.63 % of base)
         -48 : 64755.dasm (-8.45 % of base)
         -44 : 28076.dasm (-9.57 % of base)
         -44 : 5302.dasm (-9.57 % of base)
         -32 : 28063.dasm (-6.15 % of base)
         -32 : 5301.dasm (-6.15 % of base)
         -28 : 45108.dasm (-3.27 % of base)
         -28 : 46766.dasm (-3.27 % of base)
         -28 : 58230.dasm (-3.83 % of base)
         -28 : 58953.dasm (-2.01 % of base)
         -28 : 28286.dasm (-28.00 % of base)
         -28 : 42250.dasm (-3.30 % of base)
         -28 : 39379.dasm (-3.30 % of base)
         -28 : 44286.dasm (-3.30 % of base)
         -24 : 63476.dasm (-13.64 % of base)
         -24 : 63551.dasm (-4.88 % of base)
         -24 : 81992.dasm (-2.83 % of base)
         -24 : 82160.dasm (-2.83 % of base)

55 total files with Code Size differences (51 improved, 4 regressed), 0 unchanged.

Top method regressions (bytes):
          48 (2.54 % of base) : 76811.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          44 (2.34 % of base) : 11024.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          16 (6.45 % of base) : 46558.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          16 (6.45 % of base) : 77232.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

Top method improvements (bytes):
        -396 (-8.60 % of base) : 58299.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -56 (-5.32 % of base) : 63381.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -48 (-14.63 % of base) : 64692.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -48 (-8.45 % of base) : 64755.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -44 (-9.57 % of base) : 28076.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -44 (-9.57 % of base) : 5302.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -32 (-6.15 % of base) : 28063.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -32 (-6.15 % of base) : 5301.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-3.83 % of base) : 58230.dasm - Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker:Visit(Microsoft.CodeAnalysis.SyntaxNode):this (Tier1)
         -28 (-2.01 % of base) : 58953.dasm - Microsoft.CodeAnalysis.CSharp.SourceDocumentationCommentUtils:GetDocumentationCommentTriviaFromSyntaxNode(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.DiagnosticBag):System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.CSharp.Syntax.DocumentationCommentTriviaSyntax] (Tier1)
         -28 (-28.00 % of base) : 28286.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-3.27 % of base) : 45108.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.27 % of base) : 46766.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 42250.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 39379.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 44286.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -24 (-2.70 % of base) : 59353.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceMemberContainerTypeSymbol+<GetFieldsToEmit>d__124:MoveNext():ubyte:this (Tier1)
         -24 (-13.64 % of base) : 63476.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -24 (-10.71 % of base) : 64129.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-17.14 % of base) : 57825.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)

Top method regressions (percentages):
          16 (6.45 % of base) : 46558.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          16 (6.45 % of base) : 77232.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          48 (2.54 % of base) : 76811.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          44 (2.34 % of base) : 11024.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

Top method improvements (percentages):
         -28 (-28.00 % of base) : 28286.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -24 (-17.14 % of base) : 57825.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -48 (-14.63 % of base) : 64692.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-13.64 % of base) : 63476.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -24 (-10.71 % of base) : 64129.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -44 (-9.57 % of base) : 28076.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -44 (-9.57 % of base) : 5302.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
        -396 (-8.60 % of base) : 58299.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -48 (-8.45 % of base) : 64755.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -32 (-6.15 % of base) : 28063.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -32 (-6.15 % of base) : 5301.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -20 (-6.10 % of base) : 18020.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -16 (-5.41 % of base) : 63606.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -56 (-5.32 % of base) : 63381.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -24 (-5.22 % of base) : 46026.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -24 (-5.22 % of base) : 47316.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -24 (-4.88 % of base) : 63551.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -24 (-4.48 % of base) : 25370.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.83 % of base) : 58230.dasm - Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker:Visit(Microsoft.CodeAnalysis.SyntaxNode):this (Tier1)
         -28 (-3.30 % of base) : 42250.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)


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: 15071948 (overridden on cmd)
Total bytes of diff: 15071508 (overridden on cmd)
Total bytes of delta: -440 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          12 : 30059.dasm (7.32 % of base)
          12 : 47166.dasm (7.32 % of base)
          12 : 25380.dasm (7.32 % of base)
          12 : 27515.dasm (7.32 % of base)
          12 : 46905.dasm (7.32 % of base)
          12 : 47395.dasm (7.32 % of base)

Top file improvements (bytes):
         -52 : 29708.dasm (-12.87 % of base)
         -44 : 41354.dasm (-16.18 % of base)
         -40 : 41421.dasm (-12.50 % of base)
         -36 : 41322.dasm (-15.00 % of base)
         -28 : 39190.dasm (-4.27 % of base)
         -28 : 13208.dasm (-25.93 % of base)
         -28 : 6631.dasm (-28.00 % of base)
         -28 : 39291.dasm (-12.73 % of base)
         -28 : 39602.dasm (-15.91 % of base)
         -24 : 2858.dasm (-4.51 % of base)
         -24 : 39542.dasm (-17.14 % of base)
         -24 : 41314.dasm (-5.56 % of base)
         -24 : 42147.dasm (-6.45 % of base)
         -24 : 32907.dasm (-11.11 % of base)
         -24 : 41489.dasm (-13.95 % of base)
         -20 : 6205.dasm (-6.10 % of base)
         -20 : 29712.dasm (-5.95 % of base)
         -16 : 41601.dasm (-7.84 % of base)

24 total files with Code Size differences (18 improved, 6 regressed), 0 unchanged.

Top method regressions (bytes):
          12 (7.32 % of base) : 47166.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier1-OSR)
          12 (7.32 % of base) : 47395.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
          12 (7.32 % of base) : 25380.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
          12 (7.32 % of base) : 27515.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
          12 (7.32 % of base) : 30059.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
          12 (7.32 % of base) : 46905.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)

Top method improvements (bytes):
         -52 (-12.87 % of base) : 29708.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -44 (-16.18 % of base) : 41354.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -40 (-12.50 % of base) : 41421.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -36 (-15.00 % of base) : 41322.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-4.27 % of base) : 39190.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (Tier1)
         -28 (-12.73 % of base) : 39291.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -28 (-15.91 % of base) : 39602.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -28 (-28.00 % of base) : 6631.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-25.93 % of base) : 13208.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -24 (-13.95 % of base) : 41489.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -24 (-17.14 % of base) : 39542.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -24 (-11.11 % of base) : 32907.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -24 (-6.45 % of base) : 42147.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -24 (-5.56 % of base) : 41314.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -24 (-4.51 % of base) : 2858.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-6.10 % of base) : 6205.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -20 (-5.95 % of base) : 29712.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,System.Type,ubyte):System.Attribute[] (Tier1)
         -16 (-7.84 % of base) : 41601.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)

Top method regressions (percentages):
          12 (7.32 % of base) : 47166.dasm - PerfLabTests.CastingPerf:FooObjIsFoo():this (Tier1-OSR)
          12 (7.32 % of base) : 47395.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
          12 (7.32 % of base) : 25380.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
          12 (7.32 % of base) : 27515.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
          12 (7.32 % of base) : 30059.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
          12 (7.32 % of base) : 46905.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)

Top method improvements (percentages):
         -28 (-28.00 % of base) : 6631.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-25.93 % of base) : 13208.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -24 (-17.14 % of base) : 39542.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -44 (-16.18 % of base) : 41354.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-15.91 % of base) : 39602.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -36 (-15.00 % of base) : 41322.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-13.95 % of base) : 41489.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -52 (-12.87 % of base) : 29708.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -28 (-12.73 % of base) : 39291.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -40 (-12.50 % of base) : 41421.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-11.11 % of base) : 32907.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -16 (-7.84 % of base) : 41601.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -24 (-6.45 % of base) : 42147.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -20 (-6.10 % of base) : 6205.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -20 (-5.95 % of base) : 29712.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,System.Type,ubyte):System.Attribute[] (Tier1)
         -24 (-5.56 % of base) : 41314.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -24 (-4.51 % of base) : 2858.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-4.27 % of base) : 39190.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (Tier1)

24 total methods with Code Size differences (18 improved, 6 regressed).


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: 455335208 (overridden on cmd)
Total bytes of diff: 455331536 (overridden on cmd)
Total bytes of delta: -3672 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         112 : 389259.dasm (0.93 % of base)
         104 : 389280.dasm (0.86 % of base)
          60 : 485910.dasm (300.00 % of base)
          12 : 531036.dasm (1.19 % of base)
           4 : 256960.dasm (0.79 % of base)

Top file improvements (bytes):
         -80 : 388035.dasm (-5.81 % of base)
         -64 : 518305.dasm (-26.23 % of base)
         -64 : 524364.dasm (-38.10 % of base)
         -56 : 256262.dasm (-19.44 % of base)
         -52 : 388033.dasm (-4.30 % of base)
         -52 : 492267.dasm (-5.06 % of base)
         -52 : 388073.dasm (-4.22 % of base)
         -48 : 492293.dasm (-10.53 % of base)
         -48 : 476858.dasm (-21.82 % of base)
         -44 : 240096.dasm (-6.96 % of base)
         -44 : 491268.dasm (-16.18 % of base)
         -44 : 303890.dasm (-6.92 % of base)
         -44 : 480234.dasm (-23.40 % of base)
         -44 : 480235.dasm (-13.41 % of base)
         -44 : 480246.dasm (-23.40 % of base)
         -44 : 480248.dasm (-13.41 % of base)
         -40 : 487743.dasm (-4.81 % of base)
         -40 : 490425.dasm (-8.06 % of base)
         -40 : 489209.dasm (-12.50 % of base)
         -36 : 491120.dasm (-15.00 % of base)

46 total files with Code Size differences (41 improved, 5 regressed), 20 unchanged.

Top method regressions (bytes):
         112 (0.93 % of base) : 389259.dasm - Program:TestCase0003() (FullOpts)
         104 (0.86 % of base) : 389280.dasm - Program:TestCase0003() (FullOpts)
          60 (300.00 % of base) : 485910.dasm - T:TestEntryPoint():int (FullOpts)
          12 (1.19 % of base) : 531036.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
           4 (0.79 % of base) : 256960.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)

Top method improvements (bytes):
         -80 (-5.81 % of base) : 388035.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (FullOpts)
         -64 (-26.23 % of base) : 518305.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -64 (-38.10 % of base) : 524364.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -56 (-19.44 % of base) : 256262.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -52 (-4.30 % of base) : 388033.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -52 (-4.22 % of base) : 388073.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -52 (-5.06 % of base) : 492267.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -48 (-10.53 % of base) : 492293.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -48 (-21.82 % of base) : 476858.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -44 (-16.18 % of base) : 491268.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-23.40 % of base) : 480246.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-13.41 % of base) : 480248.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -44 (-23.40 % of base) : 480234.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-13.41 % of base) : 480235.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -44 (-6.96 % of base) : 240096.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 303890.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -40 (-4.81 % of base) : 487743.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -40 (-12.50 % of base) : 489209.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -40 (-8.06 % of base) : 490425.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -36 (-15.00 % of base) : 491120.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)

Top method regressions (percentages):
          60 (300.00 % of base) : 485910.dasm - T:TestEntryPoint():int (FullOpts)
          12 (1.19 % of base) : 531036.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
         112 (0.93 % of base) : 389259.dasm - Program:TestCase0003() (FullOpts)
         104 (0.86 % of base) : 389280.dasm - Program:TestCase0003() (FullOpts)
           4 (0.79 % of base) : 256960.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)

Top method improvements (percentages):
         -24 (-42.86 % of base) : 249633.dasm - CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
         -24 (-40.00 % of base) : 249628.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -24 (-40.00 % of base) : 249478.dasm - Program:CastToArray(System.Object):int[] (Tier1)
         -64 (-38.10 % of base) : 524364.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -24 (-28.57 % of base) : 582745.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 581752.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 2368.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -64 (-26.23 % of base) : 518305.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -44 (-23.40 % of base) : 480246.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-23.40 % of base) : 480234.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -48 (-21.82 % of base) : 476858.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -28 (-21.21 % of base) : 582894.dasm - Program+TestGenericInlining+GenericInline`1[System.__Canon]:.ctor():this (FullOpts)
         -24 (-20.00 % of base) : 570666.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (FullOpts)
         -20 (-20.00 % of base) : 528674.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -28 (-20.00 % of base) : 369931.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -56 (-19.44 % of base) : 256262.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -28 (-18.92 % of base) : 506880.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -28 (-18.92 % of base) : 300506.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -20 (-17.86 % of base) : 487954.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -32 (-17.78 % of base) : 256217.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)


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: 60017572 (overridden on cmd)
Total bytes of diff: 59998796 (overridden on cmd)
Total bytes of delta: -18776 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         116 : 131999.dasm (4.86 % of base)
          72 : 125160.dasm (2.65 % of base)
          16 : 287953.dasm (1.17 % of base)
          16 : 96181.dasm (4.35 % of base)
           8 : 162518.dasm (2.17 % of base)
           4 : 226111.dasm (0.93 % of base)
           4 : 34285.dasm (0.42 % of base)
           4 : 163930.dasm (0.07 % of base)
           4 : 232021.dasm (2.70 % of base)

Top file improvements (bytes):
        -600 : 300339.dasm (-25.17 % of base)
        -320 : 110143.dasm (-19.32 % of base)
        -316 : 167807.dasm (-17.14 % of base)
        -264 : 291734.dasm (-36.46 % of base)
        -180 : 109363.dasm (-22.61 % of base)
        -180 : 109370.dasm (-21.84 % of base)
        -172 : 220562.dasm (-8.57 % of base)
        -168 : 221205.dasm (-42.00 % of base)
        -132 : 221207.dasm (-5.91 % of base)
        -120 : 109533.dasm (-18.29 % of base)
        -120 : 109524.dasm (-18.99 % of base)
        -116 : 44085.dasm (-11.11 % of base)
        -112 : 172963.dasm (-1.83 % of base)
        -104 : 162441.dasm (-19.40 % of base)
         -96 : 163442.dasm (-10.67 % of base)
         -80 : 244322.dasm (-1.73 % of base)
         -72 : 258717.dasm (-14.88 % of base)
         -72 : 221126.dasm (-34.62 % of base)
         -72 : 264526.dasm (-13.74 % of base)
         -68 : 264519.dasm (-14.17 % of base)

60 total files with Code Size differences (51 improved, 9 regressed), 20 unchanged.

Top method regressions (bytes):
         116 (4.86 % of base) : 131999.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          72 (2.65 % of base) : 125160.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          16 (4.35 % of base) : 96181.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
          16 (1.17 % of base) : 287953.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           8 (2.17 % of base) : 162518.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
           4 (0.93 % of base) : 226111.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           4 (2.70 % of base) : 232021.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (0.07 % of base) : 163930.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
           4 (0.42 % of base) : 34285.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)

Top method improvements (bytes):
        -600 (-25.17 % of base) : 300339.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -320 (-19.32 % of base) : 110143.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -316 (-17.14 % of base) : 167807.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -264 (-36.46 % of base) : 291734.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
        -180 (-22.61 % of base) : 109363.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -180 (-21.84 % of base) : 109370.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -172 (-8.57 % of base) : 220562.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
        -168 (-42.00 % of base) : 221205.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -132 (-5.91 % of base) : 221207.dasm - System.Xml.Serialization.XmlSchemas:GetSchemaItem(System.Xml.Schema.XmlSchemaObject,System.String,System.String):System.String (FullOpts)
        -120 (-18.29 % of base) : 109533.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericOneDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
        -120 (-18.99 % of base) : 109524.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericZeroDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
        -116 (-11.11 % of base) : 44085.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
        -112 (-1.83 % of base) : 172963.dasm - Newtonsoft.Json.JsonTextReader+<DoReadAsBytesAsync>d__42:MoveNext():this (FullOpts)
        -104 (-19.40 % of base) : 162441.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -96 (-10.67 % of base) : 163442.dasm - System.Data.DataRowExtensions+UnboxT`1[System.__Canon]:NullableFieldUsingReflection(System.Object):System.__Canon (FullOpts)
         -80 (-1.73 % of base) : 244322.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -72 (-14.88 % of base) : 258717.dasm - System.Security.Cryptography.Xml.XmlDsigBase64Transform:LoadInput(System.Object):this (FullOpts)
         -72 (-13.74 % of base) : 264526.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.__Canon](System.Xml.Serialization.XmlSerializer):System.__Canon:this (FullOpts)
         -72 (-34.62 % of base) : 221126.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -68 (-14.17 % of base) : 264519.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.__Canon](System.Runtime.Serialization.XmlObjectSerializer):System.__Canon:this (FullOpts)

Top method regressions (percentages):
         116 (4.86 % of base) : 131999.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          16 (4.35 % of base) : 96181.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
           4 (2.70 % of base) : 232021.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
          72 (2.65 % of base) : 125160.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
           8 (2.17 % of base) : 162518.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
          16 (1.17 % of base) : 287953.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           4 (0.93 % of base) : 226111.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           4 (0.42 % of base) : 34285.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)
           4 (0.07 % of base) : 163930.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 109095.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-46.67 % of base) : 241718.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
        -168 (-42.00 % of base) : 221205.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -264 (-36.46 % of base) : 291734.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
         -72 (-34.62 % of base) : 221126.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -40 (-33.33 % of base) : 278753.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -24 (-31.58 % of base) : 287212.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 312486.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 167356.dasm - System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
         -32 (-28.57 % of base) : 44929.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
         -32 (-28.57 % of base) : 274038.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-28.57 % of base) : 274052.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 170633.dasm - Newtonsoft.Json.Utilities.CollectionWrapper`1[ubyte]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -28 (-28.00 % of base) : 410.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -32 (-27.59 % of base) : 257229.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -32 (-27.59 % of base) : 243753.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.__Canon]:<SetSetter>b__0(System.Object,System.Object):this (FullOpts)
         -32 (-27.59 % of base) : 243762.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.__Canon]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (FullOpts)
         -24 (-27.27 % of base) : 44599.dasm - System.Runtime.CompilerServices.StrongBox`1[System.__Canon]:System.Runtime.CompilerServices.IStrongBox.set_Value(System.Object):this (FullOpts)
         -24 (-27.27 % of base) : 246812.dasm - System.Runtime.Serialization.DataNode`1[System.__Canon]:set_Value(System.Object):this (FullOpts)
         -24 (-27.27 % of base) : 246702.dasm - System.Runtime.Serialization.KeyValue`2[System.__Canon,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Key(System.Object):this (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: 276121528 (overridden on cmd)
Total bytes of diff: 276097532 (overridden on cmd)
Total bytes of delta: -23996 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         116 : 497247.dasm (9.01 % of base)
          64 : 381349.dasm (1.17 % of base)
          48 : 388460.dasm (1.50 % of base)
          48 : 78449.dasm (1.27 % of base)
          48 : 54278.dasm (1.27 % of base)
          44 : 497573.dasm (1.15 % of base)
          44 : 619364.dasm (1.15 % of base)
          44 : 373818.dasm (1.12 % of base)
          44 : 430068.dasm (1.15 % of base)
          44 : 612538.dasm (1.22 % of base)
          44 : 625532.dasm (1.15 % of base)
          44 : 118859.dasm (1.10 % of base)
          44 : 121807.dasm (1.15 % of base)
          40 : 331032.dasm (1.03 % of base)
          40 : 331740.dasm (1.15 % of base)
          40 : 354524.dasm (1.11 % of base)
          40 : 425632.dasm (1.15 % of base)
          40 : 293252.dasm (1.15 % of base)
          40 : 306672.dasm (0.99 % of base)
          40 : 497544.dasm (1.15 % of base)

Top file improvements (bytes):
        -180 : 562940.dasm (-2.55 % of base)
        -140 : 87800.dasm (-5.32 % of base)
        -128 : 484533.dasm (-6.93 % of base)
        -120 : 534109.dasm (-1.88 % of base)
        -112 : 563544.dasm (-2.16 % of base)
        -108 : 606278.dasm (-3.15 % of base)
        -108 : 475577.dasm (-6.04 % of base)
        -104 : 390224.dasm (-4.77 % of base)
         -84 : 475576.dasm (-21.21 % of base)
         -84 : 531942.dasm (-0.88 % of base)
         -80 : 484387.dasm (-7.07 % of base)
         -80 : 558217.dasm (-0.90 % of base)
         -72 : 349111.dasm (-4.38 % of base)
         -72 : 457888.dasm (-10.40 % of base)
         -72 : 196682.dasm (-10.47 % of base)
         -64 : 299773.dasm (-19.05 % of base)
         -64 : 480419.dasm (-2.62 % of base)
         -60 : 159870.dasm (-1.44 % of base)
         -60 : 561509.dasm (-14.29 % of base)
         -60 : 63709.dasm (-1.22 % of base)

86 total files with Code Size differences (51 improved, 35 regressed), 20 unchanged.

Top method regressions (bytes):
         116 (9.01 % of base) : 497247.dasm - Moq.Extensions:IsOrContainsTypeMatcher(System.Type):ubyte (Tier1)
          64 (1.17 % of base) : 381349.dasm - System.Xml.XmlDocument:.ctor(System.Xml.XmlImplementation):this (Tier1)
          48 (1.50 % of base) : 388460.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          48 (1.27 % of base) : 78449.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          48 (1.27 % of base) : 54278.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 497573.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 619364.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.12 % of base) : 373818.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 430068.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.22 % of base) : 612538.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 625532.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.10 % of base) : 118859.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 121807.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.03 % of base) : 331032.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.11 % of base) : 354524.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (0.99 % of base) : 306672.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.15 % of base) : 331740.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.15 % of base) : 425632.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.15 % of base) : 293252.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.15 % of base) : 497544.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)

Top method improvements (bytes):
        -180 (-2.55 % of base) : 562940.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.Text.Json.Serialization.Tests.GenericStructIDictionaryWrapper`2[System.__Canon,System.__Canon],System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -140 (-5.32 % of base) : 87800.dasm - Microsoft.CodeAnalysis.CSharp.ConversionsBase:ClassifyImplicitBuiltInConversionFromExpression(Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,byref):Microsoft.CodeAnalysis.CSharp.Conversion:this (Tier1)
        -128 (-6.93 % of base) : 484533.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
        -120 (-1.88 % of base) : 534109.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.Text.Json.Serialization.Tests.StructWrapperForIDictionary,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -112 (-2.16 % of base) : 563544.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.Text.Json.Serialization.Tests.StructWrapperForIDictionary,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -108 (-3.15 % of base) : 606278.dasm - Microsoft.CodeAnalysis.CodeGen.PrivateImplementationDetails:Freeze():this (Tier1)
        -108 (-6.04 % of base) : 475577.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
        -104 (-4.77 % of base) : 390224.dasm - System.Xml.Xsl.IlGen.XmlILVisitor:VisitGlobalValues(System.Xml.Xsl.Qil.QilList):this (Tier1)
         -84 (-21.21 % of base) : 475576.dasm - Internal.Cryptography.Pal.AnyOS.ManagedPkcsPal:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2):System.__Canon (Tier1)
         -84 (-0.88 % of base) : 531942.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
         -80 (-7.07 % of base) : 484387.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPublicKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
         -80 (-0.90 % of base) : 558217.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
         -72 (-4.38 % of base) : 349111.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
         -72 (-10.40 % of base) : 457888.dasm - System.Tuple`2[System.__Canon,System.__Canon]:Equals(System.Object,System.Collections.IEqualityComparer):ubyte:this (Tier1)
         -72 (-10.47 % of base) : 196682.dasm - System.Tuple`2[System.__Canon,System.__Canon]:Equals(System.Object,System.Collections.IEqualityComparer):ubyte:this (Tier1)
         -64 (-19.05 % of base) : 299773.dasm - (dynamicClass):lambda_method399(System.Runtime.CompilerServices.Closure):System.Collections.Generic.IEnumerable`1[ushort] (FullOpts)
         -64 (-2.62 % of base) : 480419.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetNamedArgument[System.__Canon](System.String):System.__Canon:this (Tier1)
         -60 (-1.44 % of base) : 159870.dasm - Microsoft.CodeAnalysis.CSharp.Binder:BindFieldAccess(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)
         -60 (-1.22 % of base) : 63709.dasm - Microsoft.CodeAnalysis.CSharp.Binder:BindFieldAccess(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)
         -60 (-14.29 % of base) : 561509.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (Tier1)

Top method regressions (percentages):
         116 (9.01 % of base) : 497247.dasm - Moq.Extensions:IsOrContainsTypeMatcher(System.Type):ubyte (Tier1)
          16 (8.33 % of base) : 157495.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          32 (5.48 % of base) : 102174.dasm - Microsoft.CSharp.RuntimeBinder.Semantics.ExpressionBinder+ImplicitConversion:bindImplicitConversionToBase(Microsoft.CSharp.RuntimeBinder.Semantics.AggregateType):ubyte:this (Tier1)
           8 (5.13 % of base) : 404935.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
           8 (3.70 % of base) : 347941.dasm - System.Net.Security.SslStream:MakeEx(System.Security.Cryptography.X509Certificates.X509Certificate):System.Security.Cryptography.X509Certificates.X509Certificate2 (Tier1)
          24 (3.33 % of base) : 157494.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          20 (3.23 % of base) : 383633.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          12 (1.94 % of base) : 296231.dasm - System.Threading.ManualResetEventSlim:CancellationTokenCallback(System.Object) (Tier1)
          32 (1.83 % of base) : 118888.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
           8 (1.64 % of base) : 419768.dasm - System.MulticastDelegate:DeleteFromInvocationList(System.Object[],int,int,int):System.Object[]:this (Tier1)
          28 (1.56 % of base) : 584238.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (1.50 % of base) : 388460.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
           4 (1.41 % of base) : 623660.dasm - System.Threading.Tasks.TaskFactory`1+<>c[int]:<ContinueWhenAllImpl>b__57_0(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task[]],System.Object):int:this (Tier1)
           4 (1.39 % of base) : 624242.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          48 (1.27 % of base) : 78449.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
           4 (1.27 % of base) : 623631.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAllImpl>b__57_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task[]],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          48 (1.27 % of base) : 54278.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.22 % of base) : 612538.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          16 (1.19 % of base) : 563304.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier1)
          16 (1.19 % of base) : 348856.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (Tier1)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 531854.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-46.67 % of base) : 559621.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -24 (-35.29 % of base) : 61111.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -48 (-30.77 % of base) : 497495.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -32 (-28.57 % of base) : 274120.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -32 (-28.57 % of base) : 123489.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-28.00 % of base) : 45415.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -24 (-24.00 % of base) : 286967.dasm - System.Net.Sockets.SocketAsyncContext+OperationQueue`1+<>c[System.__Canon]:<StartAsyncOperation>b__11_1(System.Object):this (Tier1)
         -40 (-23.26 % of base) : 88367.dasm - Microsoft.CodeAnalysis.DefaultTextDocumentServiceProvider:GetService[System.__Canon]():System.__Canon:this (Tier1)
         -40 (-23.26 % of base) : 63984.dasm - Microsoft.CodeAnalysis.DefaultTextDocumentServiceProvider:GetService[System.__Canon]():System.__Canon:this (Tier1)
         -24 (-23.08 % of base) : 592156.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-22.22 % of base) : 533248.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,int]:Add(byref,byref):this (Tier1)
         -24 (-22.22 % of base) : 560261.dasm - System.Text.Json.Serialization.Converters.StackOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -28 (-21.88 % of base) : 59998.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -48 (-21.82 % of base) : 119670.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (Tier1)
         -84 (-21.21 % of base) : 475576.dasm - Internal.Cryptography.Pal.AnyOS.ManagedPkcsPal:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2):System.__Canon (Tier1)
         -24 (-20.69 % of base) : 299630.dasm - (dynamicClass):lambda_method315(System.Runtime.CompilerServices.Closure):long (FullOpts)
         -32 (-20.51 % of base) : 53582.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (Tier1)
         -40 (-20.41 % of base) : 299034.dasm - (dynamicClass):lambda_method43(System.Runtime.CompilerServices.Closure):System.Object (FullOpts)
         -56 (-20.29 % of base) : 585947.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)


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: 129212496 (overridden on cmd)
Total bytes of diff: 129189360 (overridden on cmd)
Total bytes of delta: -23136 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          76 : 141272.dasm (14.07 % of base)
          72 : 92929.dasm (1.37 % of base)
          48 : 90874.dasm (92.31 % of base)
          44 : 178821.dasm (2.35 % of base)
          40 : 93276.dasm (43.48 % of base)
          40 : 93038.dasm (43.48 % of base)
          12 : 182812.dasm (1.84 % of base)
          12 : 37465.dasm (2.97 % of base)
          12 : 37472.dasm (2.97 % of base)
          12 : 37498.dasm (2.70 % of base)
          12 : 37752.dasm (4.17 % of base)
          12 : 37836.dasm (1.71 % of base)
           8 : 37813.dasm (1.80 % of base)
           4 : 37723.dasm (0.49 % of base)
           4 : 96273.dasm (2.63 % of base)
           4 : 37364.dasm (0.40 % of base)

Top file improvements (bytes):
        -600 : 62611.dasm (-25.17 % of base)
        -384 : 164658.dasm (-15.79 % of base)
        -352 : 163542.dasm (-12.59 % of base)
        -304 : 164652.dasm (-12.38 % of base)
        -296 : 204091.dasm (-17.05 % of base)
        -244 : 14511.dasm (-17.04 % of base)
        -224 : 164654.dasm (-12.25 % of base)
        -176 : 164650.dasm (-6.89 % of base)
        -160 : 164655.dasm (-8.97 % of base)
        -160 : 193554.dasm (-7.53 % of base)
        -160 : 196468.dasm (-8.97 % of base)
        -160 : 192184.dasm (-7.53 % of base)
        -144 : 62070.dasm (-12.04 % of base)
        -140 : 300950.dasm (-2.60 % of base)
        -128 : 201828.dasm (-3.03 % of base)
        -128 : 230374.dasm (-3.77 % of base)
        -124 : 164223.dasm (-6.83 % of base)
        -120 : 164657.dasm (-8.96 % of base)
        -116 : 302698.dasm (-3.48 % of base)
        -116 : 164921.dasm (-3.48 % of base)

71 total files with Code Size differences (55 improved, 16 regressed), 20 unchanged.

Top method regressions (bytes):
          76 (14.07 % of base) : 141272.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
          72 (1.37 % of base) : 92929.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
          48 (92.31 % of base) : 90874.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          44 (2.35 % of base) : 178821.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          40 (43.48 % of base) : 93038.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          40 (43.48 % of base) : 93276.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          12 (2.70 % of base) : 37498.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37472.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37465.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (1.71 % of base) : 37836.dasm - FluentAssertions.Primitives.ReferenceTypeAssertions`2[System.__Canon,System.__Canon]:BeOfType(System.Type,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (4.17 % of base) : 37752.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (1.84 % of base) : 182812.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
           8 (1.80 % of base) : 37813.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.40 % of base) : 37364.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEquivalentTo[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.49 % of base) : 37723.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:ContainSingle(System.String,System.Object[]):FluentAssertions.AndWhichConstraint`2[System.__Canon,System.__Canon]:this (FullOpts)
           4 (2.63 % of base) : 96273.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

Top method improvements (bytes):
        -600 (-25.17 % of base) : 62611.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -384 (-15.79 % of base) : 164658.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -352 (-12.59 % of base) : 163542.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -304 (-12.38 % of base) : 164652.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
        -296 (-17.05 % of base) : 204091.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -244 (-17.04 % of base) : 14511.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (FullOpts)
        -224 (-12.25 % of base) : 164654.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
        -176 (-6.89 % of base) : 164650.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)
        -160 (-7.53 % of base) : 193554.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -160 (-7.53 % of base) : 192184.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -160 (-8.97 % of base) : 164655.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (FullOpts)
        -160 (-8.97 % of base) : 196468.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (FullOpts)
        -144 (-12.04 % of base) : 62070.dasm - System.CodeDom.Compiler.Tests.CodeGenerationTests:GenerateCode(System.CodeDom.CodeObject,System.CodeDom.Compiler.CodeDomProvider):System.String (FullOpts)
        -140 (-2.60 % of base) : 300950.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -128 (-3.03 % of base) : 201828.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -128 (-3.77 % of base) : 230374.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
        -124 (-6.83 % of base) : 164223.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (FullOpts)
        -120 (-8.96 % of base) : 164657.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (FullOpts)
        -116 (-3.48 % of base) : 302698.dasm - XmlSerializerTests:Xml_CollectionRoot_MorePrimitiveTypes() (FullOpts)
        -116 (-3.48 % of base) : 164921.dasm - XmlSerializerTests:Xml_CollectionRoot_MorePrimitiveTypes() (FullOpts)

Top method regressions (percentages):
          48 (92.31 % of base) : 90874.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          40 (43.48 % of base) : 93038.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          40 (43.48 % of base) : 93276.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          76 (14.07 % of base) : 141272.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
          12 (4.17 % of base) : 37752.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37472.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37465.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.70 % of base) : 37498.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (2.63 % of base) : 96273.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
          44 (2.35 % of base) : 178821.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          12 (1.84 % of base) : 182812.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
           8 (1.80 % of base) : 37813.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (1.71 % of base) : 37836.dasm - FluentAssertions.Primitives.ReferenceTypeAssertions`2[System.__Canon,System.__Canon]:BeOfType(System.Type,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          72 (1.37 % of base) : 92929.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
           4 (0.49 % of base) : 37723.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:ContainSingle(System.String,System.Object[]):FluentAssertions.AndWhichConstraint`2[System.__Canon,System.__Canon]:this (FullOpts)
           4 (0.40 % of base) : 37364.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEquivalentTo[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 35964.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-46.67 % of base) : 140805.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -24 (-40.00 % of base) : 30319.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
         -56 (-35.00 % of base) : 162695.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
         -72 (-34.62 % of base) : 164038.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -40 (-33.33 % of base) : 69506.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -44 (-33.33 % of base) : 164687.dasm - System.Xml.Schema.XmlSchemaSimpleType:get_DerivedFrom():System.Xml.XmlQualifiedName:this (FullOpts)
         -24 (-31.58 % of base) : 87340.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -24 (-31.58 % of base) : 132361.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 42283.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -24 (-30.00 % of base) : 47913.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -24 (-30.00 % of base) : 42282.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 47905.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 42280.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 47907.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -32 (-28.57 % of base) : 40583.dasm - Microsoft.Extensions.Logging.Testing.TestLogger+<>c__DisplayClass15_0`1[System.__Canon]:<Log>b__0(System.Object,System.Exception):System.String:this (FullOpts)
         -32 (-28.57 % of base) : 184141.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
         -32 (-28.57 % of base) : 74066.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-28.57 % of base) : 125469.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 90443.dasm - System.Data.DataRowExtensions+UnboxT`1[System.__Canon]:NonNullableField(System.Object):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: 10534324 (overridden on cmd)
Total bytes of diff: 10531136 (overridden on cmd)
Total bytes of delta: -3188 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          16 : 4743.dasm (4.35 % of base)

Top file improvements (bytes):
        -120 : 31396.dasm (-28.30 % of base)
         -64 : 26291.dasm (-6.81 % of base)
         -64 : 31056.dasm (-25.81 % of base)
         -60 : 29554.dasm (-20.55 % of base)
         -60 : 8696.dasm (-32.61 % of base)
         -56 : 31033.dasm (-2.52 % of base)
         -56 : 5057.dasm (-4.09 % of base)
         -56 : 5633.dasm (-22.22 % of base)
         -56 : 7618.dasm (-8.70 % of base)
         -52 : 29867.dasm (-8.28 % of base)
         -44 : 19516.dasm (-3.20 % of base)
         -44 : 28691.dasm (-2.68 % of base)
         -44 : 16735.dasm (-16.18 % of base)
         -40 : 18627.dasm (-12.50 % of base)
         -40 : 26861.dasm (-8.06 % of base)
         -40 : 31029.dasm (-17.86 % of base)
         -40 : 31497.dasm (-13.89 % of base)
         -40 : 8344.dasm (-12.50 % of base)
         -40 : 14929.dasm (-4.81 % of base)
         -36 : 23009.dasm (-12.68 % of base)

60 total files with Code Size differences (59 improved, 1 regressed), 6 unchanged.

Top method regressions (bytes):
          16 (4.35 % of base) : 4743.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)

Top method improvements (bytes):
        -120 (-28.30 % of base) : 31396.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -64 (-6.81 % of base) : 26291.dasm - Microsoft.CodeAnalysis.CSharp.AsyncMethodBuilderMemberCollection:TryGetBuilderMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.SyntheticBoundNodeFactory,System.Nullable`1[int],Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol,ubyte,byref):ubyte (FullOpts)
         -64 (-25.81 % of base) : 31056.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -60 (-32.61 % of base) : 8696.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -60 (-20.55 % of base) : 29554.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -56 (-8.70 % of base) : 7618.dasm - FSharp.Compiler.CheckDeclarations+TcDeclarations:SplitTyconDefn(FSharp.Compiler.Syntax.SynTypeDefn):System.Tuple`2[FSharp.Compiler.CheckDeclarations+MutRecDefnsPhase1DataForTycon,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] (FullOpts)
         -56 (-4.09 % of base) : 5057.dasm - FSharp.Compiler.Lexer:endline(FSharp.Compiler.ParseHelpers+LexerEndlineContinuation,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort]):FSharp.Compiler.Parser+token (FullOpts)
         -56 (-2.52 % of base) : 31033.dasm - System.Management.Automation.ScriptBlock:BindArgumentsForScriptblockInvoke(System.Management.Automation.RuntimeDefinedParameter[],System.Object[],System.Management.Automation.ExecutionContext,ubyte,System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable],System.Management.Automation.MutableTuple):System.Object[] (FullOpts)
         -56 (-22.22 % of base) : 5633.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -52 (-8.28 % of base) : 29867.dasm - System.Management.Automation.SessionStateScope:CreateFunction(System.String,System.Management.Automation.ScriptBlock,System.Management.Automation.FunctionInfo,int,System.Management.Automation.ExecutionContext,System.String):System.Management.Automation.FunctionInfo (FullOpts)
         -44 (-3.20 % of base) : 19516.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
         -44 (-16.18 % of base) : 16735.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-2.68 % of base) : 28691.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)
         -40 (-12.50 % of base) : 8344.dasm - FSharp.Compiler.CheckExpressions:TcAdjustExprForTypeDirectedConversions(FSharp.Compiler.CheckExpressions+TcFileState,FSharp.Compiler.ConstraintSolver+OverallTy,FSharp.Compiler.TypedTree+TType,FSharp.Compiler.CheckExpressions+TcEnv,FSharp.Compiler.Text.Range,FSharp.Compiler.TypedTree+Expr):FSharp.Compiler.TypedTree+Expr (FullOpts)
         -40 (-4.81 % of base) : 14929.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -40 (-12.50 % of base) : 18627.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -40 (-8.06 % of base) : 26861.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -40 (-13.89 % of base) : 31497.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -40 (-17.86 % of base) : 31029.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -36 (-12.68 % of base) : 23009.dasm - System.Linq.ImmutableArrayExtensions:SequenceEqual[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`3[System.__Canon,System.__Canon,ubyte]):ubyte (FullOpts)

Top method regressions (percentages):
          16 (4.35 % of base) : 4743.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)

Top method improvements (percentages):
         -60 (-32.61 % of base) : 8696.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -24 (-31.58 % of base) : 29644.dasm - System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
        -120 (-28.30 % of base) : 31396.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -28 (-28.00 % of base) : 404.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-25.93 % of base) : 14786.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -64 (-25.81 % of base) : 31056.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -28 (-23.33 % of base) : 9664.dasm - FSharp.Compiler.TypedTree+ValFlags:WithRecursiveValInfo(FSharp.Compiler.TypedTree+ValRecursiveScopeInfo):FSharp.Compiler.TypedTree+ValFlags:this (FullOpts)
         -56 (-22.22 % of base) : 5633.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -28 (-21.21 % of base) : 4630.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -20 (-20.83 % of base) : 15225.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -60 (-20.55 % of base) : 29554.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -32 (-19.05 % of base) : 31423.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -28 (-18.42 % of base) : 9773.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -20 (-17.86 % of base) : 15478.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -40 (-17.86 % of base) : 31029.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-17.50 % of base) : 10670.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)
         -24 (-17.14 % of base) : 20916.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (FullOpts)
         -44 (-16.18 % of base) : 16735.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -16 (-16.00 % of base) : 28864.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -28 (-15.91 % of base) : 10061.dasm - FSharp.Compiler.CheckDeclarations+MutRecBindingChecking+hasStaticBindings@2118-1:Invoke(FSharp.Compiler.CheckDeclarations+IncrClassChecking+IncrClassBindingGroup):ubyte:this (FullOpts)



windows arm64

Diffs are based on 1,946,084 contexts (937,487 MinOpts, 1,008,597 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 126,564 (6.11%)

Overall (-112,536 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 9,187,124 -2,028
benchmarks.run_pgo.windows.arm64.checked.mch 36,367,068 -37,524
benchmarks.run_tiered.windows.arm64.checked.mch 14,833,264 -888
coreclr_tests.run.windows.arm64.checked.mch 465,711,032 -4,220
libraries.pmi.windows.arm64.checked.mch 59,048,316 -17,792
libraries_tests.run.windows.arm64.Release.mch 283,365,108 -22,292
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 135,947,544 -23,692
realworld.run.windows.arm64.checked.mch 11,178,536 -4,084
smoke_tests.nativeaot.windows.arm64.checked.mch 3,956 -16

FullOpts (-112,536 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.arm64.checked.mch 9,186,588 -2,028
benchmarks.run_pgo.windows.arm64.checked.mch 20,171,496 -37,524
benchmarks.run_tiered.windows.arm64.checked.mch 3,654,868 -888
coreclr_tests.run.windows.arm64.checked.mch 124,877,544 -4,220
libraries.pmi.windows.arm64.checked.mch 58,928,332 -17,792
libraries_tests.run.windows.arm64.Release.mch 80,222,284 -22,292
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 122,794,048 -23,692
realworld.run.windows.arm64.checked.mch 10,614,556 -4,084
smoke_tests.nativeaot.windows.arm64.checked.mch 3,956 -16

Example diffs

benchmarks.run.windows.arm64.checked.mch

-28 (-46.67%) : 4136.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-31.58%) : 5069.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.Canon,System.Canon]:b10_1(System.Canon):System.__Canon:this (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> x19 this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.__Canon>
+; V00 this [V00,T00] ( 3, 3 ) ref -> x19 this class-hnd single-def <System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.__Canon>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 8 @@ -23,34 +21,22 @@ G_M11807_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M11807_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M11807_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M11807_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M11807_IG03: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3, #0x08] - cmp x2, x3 - beq G_M11807_IG05 - ;; size=28 bbWeight=0.25 PerfScore 4.12 -G_M11807_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x08]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M11807_IG05: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=20 bbWeight=1 PerfScore 13.00 +G_M11807_IG03: ; 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 76, prolog size 16, PerfScore 13.81, instruction count 19, allocated bytes for code 76 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.00, instruction count 13, allocated bytes for code 52 (MethodHash=4ad6d1e0) for method System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +47,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
+ Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 684.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+0 (0.00%) : 13988.dasm - System.Collections.Generic.SortedSet1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable1[System.Canon],System.Collections.Generic.IComparer`1[System.Canon]):this (FullOpts)

@@ -25,40 +25,41 @@ ; V14 tmp6 [V14,T02] ( 4, 16 ) int -> x22 "impSpillLclRefs" ; V15 tmp7 [V15,T10] ( 2, 8 ) ref -> x15 class-hnd "Strict ordering of exceptions for Array store" <System.__Canon> ; V16 tmp8 [V16,T33] ( 3, 2 ) long -> x1 "spilling helperCall"
-; V17 tmp9 [V17,T34] ( 3, 2 ) long -> x2 "spilling helperCall" -;* V18 tmp10 [V18,T42] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V19 tmp11 [V19 ] ( 0, 0 ) ref -> zero-ref single-def -; V20 tmp12 [V20,T19] ( 4, 3.50) ref -> x15 -;* V21 tmp13 [V21 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V22 tmp14 [V22,T18] ( 2, 4 ) long -> x0 "argument with side effect" -; V23 tmp15 [V23,T39] ( 2, 2 ) long -> x0 "argument with side effect" -; V24 tmp16 [V24,T40] ( 2, 2 ) long -> x0 "argument with side effect"
+;* V17 tmp9 [V17 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V18 tmp10 [V18 ] ( 0, 0 ) ref -> zero-ref single-def +; V19 tmp11 [V19,T19] ( 4, 3.50) ref -> x15 +;* V20 tmp12 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V21 tmp13 [V21,T18] ( 2, 4 ) long -> x0 "argument with side effect" +; V22 tmp14 [V22,T39] ( 2, 2 ) long -> x0 "argument with side effect" +; V23 tmp15 [V23,T40] ( 2, 2 ) long -> x0 "argument with side effect" +; V24 tmp16 [V24,T41] ( 2, 2 ) long -> x0 "argument with side effect"
; V25 tmp17 [V25,T03] ( 2, 16 ) ref -> x1 "argument with side effect" ; V26 cse0 [V26,T15] ( 2, 4.50) long -> x24 hoist "CSE - aggressive" ; V27 cse1 [V27,T09] ( 3, 10 ) long -> x27 "CSE - aggressive"
-; V28 cse2 [V28,T41] ( 3, 1.50) int -> x0 "CSE - conservative"
+; V28 cse2 [V28,T42] ( 3, 1.50) int -> x0 "CSE - conservative"
; V29 cse3 [V29,T07] ( 4, 10.50) int -> x25 hoist "CSE - aggressive" ; V30 cse4 [V30,T05] ( 5, 12.50) byref -> x26 hoist "CSE - aggressive" ; V31 cse5 [V31,T06] ( 3, 12 ) int -> x2 "CSE - aggressive" ; V32 rat0 [V32,T27] ( 3, 2.20) long -> x0 "Spilling to split statement for tree"
-; V33 rat1 [V33,T35] ( 3, 2 ) long -> x1 "runtime lookup"
+; V33 rat1 [V33,T34] ( 3, 2 ) long -> x1 "runtime lookup"
; V34 rat2 [V34,T20] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable" ; V35 rat3 [V35,T16] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" ; V36 rat4 [V36,T17] ( 3, 4 ) long -> x0 "runtime lookup" ; V37 rat5 [V37,T12] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" ; V38 rat6 [V38,T28] ( 3, 2.20) long -> x0 "Spilling to split statement for tree"
-; V39 rat7 [V39,T21] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V40 rat8 [V40,T29] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V41 rat9 [V41,T36] ( 3, 2 ) long -> x0 "runtime lookup" -; V42 rat10 [V42,T22] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V43 rat11 [V43,T30] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V44 rat12 [V44,T37] ( 3, 2 ) long -> x0 "runtime lookup" -; V45 rat13 [V45,T23] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" -; V46 rat14 [V46,T31] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V47 rat15 [V47,T38] ( 3, 2 ) long -> x24 "runtime lookup" -; V48 rat16 [V48,T24] ( 3, 2.80) long -> x24 "fgMakeTemp is creating a new local variable" -; V49 rat17 [V49,T32] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" -; V50 rat18 [V50,T25] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
+; V39 rat7 [V39,T35] ( 3, 2 ) long -> x0 "runtime lookup" +; V40 rat8 [V40,T21] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V41 rat9 [V41,T29] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V42 rat10 [V42,T36] ( 3, 2 ) long -> x0 "runtime lookup" +; V43 rat11 [V43,T22] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V44 rat12 [V44,T30] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V45 rat13 [V45,T37] ( 3, 2 ) long -> x0 "runtime lookup" +; V46 rat14 [V46,T23] ( 3, 2.80) long -> x2 "fgMakeTemp is creating a new local variable" +; V47 rat15 [V47,T31] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V48 rat16 [V48,T38] ( 3, 2 ) long -> x24 "runtime lookup" +; V49 rat17 [V49,T24] ( 3, 2.80) long -> x24 "fgMakeTemp is creating a new local variable" +; V50 rat18 [V50,T32] ( 3, 2.20) long -> x0 "Spilling to split statement for tree" +; V51 rat19 [V51,T25] ( 3, 2.80) long -> x1 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -154,21 +155,22 @@ G_M4921_IG11: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs= cbz x2, G_M4921_IG13 ;; size=20 bbWeight=0.50 PerfScore 6.50 G_M4921_IG12: ; bbWeight=0.40, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref
+ mov x0, x2
b G_M4921_IG14
- ;; size=4 bbWeight=0.40 PerfScore 0.40
+ ;; size=8 bbWeight=0.40 PerfScore 0.60
G_M4921_IG13: ; bbWeight=0.10, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov x2, x0 - ;; size=20 bbWeight=0.10 PerfScore 0.30
+ ;; size=16 bbWeight=0.10 PerfScore 0.25
G_M4921_IG14: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x20] - cmp x0, x2 - beq G_M4921_IG16
+ mov x1, x20 + ; gcrRegs +[x1] + bl CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[x1] +[x0] + cbnz x0, G_M4921_IG16
mov x0, x19
- ; gcrRegs +[x0]
mov x1, x20 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for System.Collections.Generic.SortedSet`1[System.__Canon]:HasEqualComparer(System.Collections.Generic.SortedSet`1[System.__Canon]):ubyte:this @@ -207,7 +209,7 @@ G_M4921_IG14: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs= bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15] ; byrRegs -[x14]
- ;; size=128 bbWeight=0.50 PerfScore 22.50
+ ;; size=128 bbWeight=0.50 PerfScore 21.50
G_M4921_IG15: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, epilog, nogc ldp x27, x28, [sp, #0x60] ldp x25, x26, [sp, #0x50] @@ -414,7 +416,7 @@ G_M4921_IG34: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr brk_windows #0 ;; size=44 bbWeight=0 PerfScore 0.00
-; Total bytes of code 908, prolog size 32, PerfScore 228.95, instruction count 227, allocated bytes for code 908 (MethodHash=e434ecc6) for method System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 908, prolog size 32, PerfScore 228.10, instruction count 227, allocated bytes for code 908 (MethodHash=e434ecc6) for method System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
; ============================================================ Unwind Info:

+4 (+0.40%) : 2563.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)

@@ -12,53 +12,47 @@ ; V01 arg1 [V01,T07] ( 11, 7.50) ref -> x19 class-hnd single-def <System.Object> ; V02 loc0 [V02,T02] ( 19, 19 ) long -> [fp+0x18] do-not-enreg[Z] EH-live ; V03 loc1 [V03,T15] ( 5, 4 ) long -> x20
-; V04 loc2 [V04,T24] ( 2, 2 ) long -> x0 -; V05 loc3 [V05,T28] ( 3, 1.50) ref -> x19 class-hnd single-def <<unknown class>>
+; V04 loc2 [V04,T22] ( 2, 2 ) long -> x0 +; V05 loc3 [V05,T26] ( 3, 1.50) ref -> x19 class-hnd single-def <<unknown class>>
; V06 loc4 [V06,T03] ( 5, 16.50) int -> x2
-; V07 loc5 [V07,T25] ( 2, 2 ) long -> x0
+; V07 loc5 [V07,T23] ( 2, 2 ) long -> x0
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V09 tmp1 [V09,T16] ( 2, 4 ) byref -> x21 single-def "impAppendStmt" ; V10 tmp2 [V10,T13] ( 3, 6 ) byref -> x0 single-def "dup spill"
-; V11 tmp3 [V11,T22] ( 2, 2 ) byref -> x22 single-def "impAppendStmt" -; V12 tmp4 [V12,T19] ( 3, 3 ) byref -> x21 single-def "dup spill" -;* V13 tmp5 [V13,T31] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V14 tmp6 [V14,T23] ( 2, 2 ) ref -> x19 class-hnd "spilling QMark2" <<unknown class>> -; V15 tmp7 [V15,T04] ( 2, 16 ) byref -> x24 "impAppendStmt" -; V16 tmp8 [V16,T01] ( 3, 24 ) byref -> x0 "dup spill" -;* V17 tmp9 [V17,T32] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V18 tmp10 [V18,T30] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V19 tmp11 [V19 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V20 tmp12 [V20 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V21 tmp13 [V21,T17] ( 4, 3.50) long -> x0 "Inline stloc first use temp" -;* V22 tmp14 [V22 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V23 tmp15 [V23,T00] ( 5, 32 ) ref -> x25 class-hnd "Inlining Arg" <System.Object> -;* V24 tmp16 [V24 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V25 tmp17 [V25 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V26 tmp18 [V26,T34] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> -;* V27 tmp19 [V27,T27] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V28 tmp20 [V28,T09] ( 2, 8 ) byref -> x0 "Inlining Arg" -; V29 tmp21 [V29,T05] ( 4, 14 ) long -> x0 "Inline stloc first use temp" -;* V30 tmp22 [V30 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V31 tmp23 [V31 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V32 tmp24 [V32,T35] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V33 tmp25 [V33,T21] ( 4, 2 ) long -> x0 "Inline stloc first use temp" -;* V34 tmp26 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V35 tmp27 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <<unknown class>> -; V36 tmp28 [V36,T26] ( 2, 2 ) long -> x0 "field V19._handle (fldOffset=0x0)" P-INDEP -; V37 tmp29 [V37,T10] ( 2, 8 ) long -> x0 "field V24._handle (fldOffset=0x0)" P-INDEP -; V38 tmp30 [V38,T29] ( 2, 1 ) long -> x0 "field V30._handle (fldOffset=0x0)" P-INDEP -; V39 tmp31 [V39,T36] ( 2, 0 ) ref -> x20 single-def "argument with side effect" -; V40 tmp32 [V40,T37] ( 2, 0 ) ref -> x2 single-def "argument with side effect" -; V41 tmp33 [V41,T38] ( 2, 0 ) ref -> x20 "argument with side effect" -; V42 tmp34 [V42,T39] ( 2, 0 ) ref -> x2 "argument with side effect" -; V43 PSPSym [V43,T33] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" -;* V44 cse0 [V44 ] ( 0, 0 ) ref -> zero-ref "CSE - conservative" -; V45 cse1 [V45,T20] ( 3, 2.50) ref -> x0 "CSE - moderate" -; V46 cse2 [V46,T12] ( 5, 6 ) int -> x22 multi-def "CSE - aggressive" -; V47 cse3 [V47,T11] ( 4, 6.50) long -> x21 "CSE - aggressive" -; V48 cse4 [V48,T14] ( 2, 4.50) byref -> x19 hoist "CSE - moderate" -; V49 cse5 [V49,T06] ( 3, 12 ) int -> x23 "CSE - aggressive" -; V50 cse6 [V50,T18] ( 4, 2 ) long -> registers multi-def "CSE - moderate"
+; V11 tmp3 [V11,T21] ( 2, 2 ) byref -> x22 single-def "impAppendStmt" +; V12 tmp4 [V12,T18] ( 3, 3 ) byref -> x21 single-def "dup spill" +; V13 tmp5 [V13,T04] ( 2, 16 ) byref -> x24 "impAppendStmt" +; V14 tmp6 [V14,T01] ( 3, 24 ) byref -> x0 "dup spill" +;* V15 tmp7 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V16 tmp8 [V16 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V17 tmp9 [V17,T17] ( 4, 3.50) long -> x0 "Inline stloc first use temp" +;* V18 tmp10 [V18 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +; V19 tmp11 [V19,T00] ( 5, 32 ) ref -> x25 class-hnd "Inlining Arg" <System.Object> +;* V20 tmp12 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V21 tmp13 [V21 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V22 tmp14 [V22,T29] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> +;* V23 tmp15 [V23,T25] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V24 tmp16 [V24,T09] ( 2, 8 ) byref -> x0 "Inlining Arg" +; V25 tmp17 [V25,T05] ( 4, 14 ) long -> x0 "Inline stloc first use temp" +;* V26 tmp18 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V27 tmp19 [V27 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V28 tmp20 [V28,T30] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V29 tmp21 [V29,T20] ( 4, 2 ) long -> x0 "Inline stloc first use temp" +;* V30 tmp22 [V30 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V31 tmp23 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <<unknown class>> +; V32 tmp24 [V32,T24] ( 2, 2 ) long -> x0 "field V15._handle (fldOffset=0x0)" P-INDEP +; V33 tmp25 [V33,T10] ( 2, 8 ) long -> x0 "field V20._handle (fldOffset=0x0)" P-INDEP +; V34 tmp26 [V34,T27] ( 2, 1 ) long -> x0 "field V26._handle (fldOffset=0x0)" P-INDEP +; V35 tmp27 [V35,T31] ( 2, 0 ) ref -> x20 single-def "argument with side effect" +; V36 tmp28 [V36,T32] ( 2, 0 ) ref -> x2 single-def "argument with side effect" +; V37 tmp29 [V37,T33] ( 2, 0 ) ref -> x20 "argument with side effect" +; V38 tmp30 [V38,T34] ( 2, 0 ) ref -> x2 "argument with side effect" +; V39 PSPSym [V39,T28] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" +; V40 cse0 [V40,T12] ( 5, 6 ) int -> registers multi-def "CSE - aggressive" +; V41 cse1 [V41,T19] ( 3, 2.50) ref -> x0 "CSE - moderate" +; V42 cse2 [V42,T11] ( 4, 6.50) long -> x21 "CSE - aggressive" +; V43 cse3 [V43,T14] ( 2, 4.50) byref -> x19 hoist "CSE - moderate" +; V44 cse4 [V44,T06] ( 3, 12 ) int -> x23 "CSE - aggressive"
; ; Lcl frame size = 24 @@ -70,7 +64,7 @@ G_M14417_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x25, [sp, #0x58] mov fp, sp add x2, sp, #96
- str x2, [fp, #0x20] // [V43 PSPSym]
+ str x2, [fp, #0x20] // [V39 PSPSym]
str x0, [fp, #0x10] // [V00 this] ; GC ptr vars +{V00} mov x19, x1 @@ -85,13 +79,13 @@ G_M14417_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ;; size=8 bbWeight=1 PerfScore 1.50 G_M14417_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x1, [x19]
- movz x21, #0xD1FFAB1E - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - cmp x1, x21
+ movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + cmp x1, x2
bne G_M14417_IG05
- ldr w22, [x19, #0x08] - mov w1, w22
+ ldr w21, [x19, #0x08] + mov w1, w21
add x20, x1, #1 b G_M14417_IG06 ;; size=40 bbWeight=0.50 PerfScore 5.50 @@ -167,13 +161,14 @@ G_M14417_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, cmp x0, x1 bne G_M14417_IG22 mov w2, wzr
- ldr w22, [x19, #0x08]
+ ldr w0, [x19, #0x08] + sxtw w22, w0
cmp w22, #0 ble G_M14417_IG15 add x19, x19, #16 ; gcrRegs -[x19] ; byrRegs +[x19]
- ;; size=44 bbWeight=0.50 PerfScore 5.75
+ ;; size=48 bbWeight=0.50 PerfScore 6.00
G_M14417_IG10: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref, isz ldr x0, [fp, #0x18] // [V02 loc0] add w23, w2, #1 @@ -448,7 +443,7 @@ G_M14417_IG27: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 992, prolog size 40, PerfScore 236.00, instruction count 248, allocated bytes for code 992 (MethodHash=533fc7ae) for method System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)
+; Total bytes of code 996, prolog size 40, PerfScore 236.25, instruction count 249, allocated bytes for code 996 (MethodHash=533fc7ae) for method System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)
; ============================================================ Unwind Info: @@ -459,7 +454,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 225 (0x000e1) Actual length = 900 (0x000384)
+ Function Length : 226 (0x000e2) Actual length = 904 (0x000388)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+44 (+8.59%) : 2943.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)

@@ -8,29 +8,28 @@ ; 0 inlinees with PGO data; 9 single block inlinees; 7 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T05] ( 3, 3 ) ref -> [fp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> -; V01 arg1 [V01,T00] ( 8, 8 ) ref -> x19 class-hnd single-def <System.Threading.Tasks.Task> -; V02 arg2 [V02,T02] ( 4, 4 ) ubyte -> [fp+0x1C] EH-live single-def
+; V00 this [V00,T02] ( 4, 2.50) ref -> [fp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> +; V01 arg1 [V01,T00] ( 8, 5 ) ref -> x19 class-hnd single-def <System.Threading.Tasks.Task> +; V02 arg2 [V02,T01] ( 5, 3.50) ubyte -> [fp+0x1C] EH-live single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
-; V05 tmp2 [V05,T07] ( 4, 4 ) ubyte -> x1 "Inline return value spill temp" -; V06 tmp3 [V06,T06] ( 4, 4 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V07 tmp4 [V07,T12] ( 3, 3 ) ubyte -> x1 "Inline return value spill temp" -; V08 tmp5 [V08,T09] ( 2, 4 ) byref -> x1 single-def "Inlining Arg"
+; V05 tmp2 [V05,T07] ( 4, 2 ) ubyte -> x1 "Inline return value spill temp" +; V06 tmp3 [V06,T06] ( 4, 2 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V07 tmp4 [V07,T12] ( 3, 1.50) ubyte -> x1 "Inline return value spill temp" +; V08 tmp5 [V08,T09] ( 2, 2 ) byref -> x1 single-def "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource>
-; V10 tmp7 [V10,T13] ( 2, 2 ) int -> x1 "Inline stloc first use temp"
+; V10 tmp7 [V10,T13] ( 2, 1 ) int -> x1 "Inline stloc first use temp"
;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "dup spill" <System.Object> ;* V12 tmp9 [V12 ] ( 0, 0 ) ref -> zero-ref
-;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V15 tmp12 [V15 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V16 tmp13 [V16,T10] ( 2, 4 ) byref -> x1 single-def "argument with side effect" -; V17 PSPSym [V17,T14] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" -; V18 cse0 [V18,T01] ( 7, 7 ) byref -> x20 "CSE - aggressive" -; V19 cse1 [V19,T11] ( 3, 3 ) ref -> x1 "CSE - aggressive" -; V20 rat0 [V20,T08] ( 3, 4 ) byref -> x21 "TLS field access" -; V21 rat1 [V21,T03] ( 3, 6 ) long -> x1 "TLS access" -; V22 rat2 [V22,T04] ( 3, 6 ) long -> x1 "ThreadStaticBlockBase access"
+;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> +;* V14 tmp11 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V15 tmp12 [V15,T10] ( 2, 2 ) byref -> x1 single-def "argument with side effect" +; V16 PSPSym [V16,T14] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" +; V17 cse0 [V17,T03] ( 7, 3.50) byref -> x20 "CSE - aggressive" +; V18 cse1 [V18,T11] ( 3, 1.50) ref -> x1 "CSE - moderate" +; V19 rat0 [V19,T08] ( 3, 2 ) byref -> x21 "TLS field access" +; V20 rat1 [V20,T04] ( 3, 3 ) long -> x1 "TLS access" +; V21 rat2 [V21,T05] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access"
; ; Lcl frame size = 24 @@ -40,16 +39,18 @@ G_M14922_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x21, [sp, #0x38] mov fp, sp add x3, sp, #64
- str x3, [fp, #0x20] // [V17 PSPSym]
+ str x3, [fp, #0x20] // [V16 PSPSym]
str x0, [fp, #0x10] // [V00 this] ; GC ptr vars +{V00} str w2, [fp, #0x1C] // [V02 arg2] mov x19, x1 ; gcrRegs +[x19] ;; size=36 bbWeight=1 PerfScore 7.50
-G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000004 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
tst w2, #255
- beq G_M14922_IG04
+ beq G_M14922_IG05 + ;; size=8 bbWeight=1 PerfScore 1.50 +G_M14922_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
cmp x19, #0 cset x0, ne movz x1, #0xD1FFAB1E // code for <unknown method> @@ -67,16 +68,16 @@ G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=800 blr x1 ; gcrRegs -[x0] ; gcr arg pop 0
- cbnz w0, G_M14922_IG04
+ cbnz w0, G_M14922_IG05
mov w0, wzr
- ;; size=68 bbWeight=1 PerfScore 15.50 -G_M14922_IG03: ; bbWeight=1, epilog, nogc, extend
+ ;; size=60 bbWeight=0.50 PerfScore 7.00 +G_M14922_IG04: ; 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=1 PerfScore 5.00 -G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.50 +G_M14922_IG05: ; bbWeight=0.50, gcVars=0000000000000004 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
add x20, x19, #52 ; byrRegs +[x20] ldapr w1, [x20] @@ -87,20 +88,20 @@ G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=800 ldapr x1, [x1] ; gcrRegs +[x1] ; byrRegs -[x1]
- cbz x1, G_M14922_IG08
+ cbz x1, G_M14922_IG09
add x3, x1, #56 ; byrRegs +[x3] ldapr w3, [x3] ; byrRegs -[x3] cmp w3, #1
- beq G_M14922_IG07
+ beq G_M14922_IG08
add x1, x1, #64 ; gcrRegs -[x1] ; byrRegs +[x1] ldr x1, [x1] ; gcrRegs +[x1] ; byrRegs -[x1]
- cbz x1, G_M14922_IG05
+ cbz x1, G_M14922_IG06
add x1, x1, #32 ; gcrRegs -[x1] ; byrRegs +[x1] @@ -108,42 +109,42 @@ G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=800 ; byrRegs -[x1] cmp w1, #0 cset x1, ne
- b G_M14922_IG06 - ;; size=76 bbWeight=1 PerfScore 24.50 -G_M14922_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ b G_M14922_IG07 + ;; size=76 bbWeight=0.50 PerfScore 12.25 +G_M14922_IG06: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
mov w1, wzr
- ;; size=4 bbWeight=1 PerfScore 0.50 -G_M14922_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - b G_M14922_IG09 - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M14922_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ ;; size=4 bbWeight=0.50 PerfScore 0.25 +G_M14922_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref + b G_M14922_IG10 + ;; size=4 bbWeight=0.50 PerfScore 0.50 +G_M14922_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
mov w1, #1
- b G_M14922_IG09 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M14922_IG08: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ b G_M14922_IG10 + ;; size=8 bbWeight=0.50 PerfScore 0.75 +G_M14922_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
mov w1, wzr
- ;; size=4 bbWeight=1 PerfScore 0.50 -G_M14922_IG09: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
+ ;; size=4 bbWeight=0.50 PerfScore 0.25 +G_M14922_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
ldapr w3, [x20] and w3, w3, #0xD1FFAB1E mov w4, #0xD1FFAB1E cmp w1, #0 ccmp w3, w4, z, eq
- beq G_M14922_IG12
+ beq G_M14922_IG13
ldr x1, [xpr, #0x58] ldr x1, [x1, #0x10] ldr w3, [x1, #0xD0] cmp w3, #9
- blt G_M14922_IG11
+ blt G_M14922_IG12
ldr x1, [x1, #0xD8] ldr x1, [x1, #0x48]
- cbz x1, G_M14922_IG11
+ cbz x1, G_M14922_IG12
ldr x1, [x1] ; byrRegs +[x1] add x21, x1, #16 ; byrRegs +[x21]
- ;; size=64 bbWeight=1 PerfScore 27.00 -G_M14922_IG10: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=200000 {x21}, byref
+ ;; size=64 bbWeight=0.50 PerfScore 13.50 +G_M14922_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=200000 {x21}, byref
; byrRegs -[x1 x20] add x1, x21, #104 ; byrRegs +[x1] @@ -158,9 +159,9 @@ G_M14922_IG10: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=200000 {x21 ; gcrRegs -[x0 x19] ; byrRegs -[x1 x21] ; gcr arg pop 0
- b G_M14922_IG13 - ;; size=36 bbWeight=1 PerfScore 8.00 -G_M14922_IG11: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ b G_M14922_IG14 + ;; size=36 bbWeight=0.50 PerfScore 4.00 +G_M14922_IG12: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x19] mov w0, #9 bl CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED @@ -168,18 +169,18 @@ G_M14922_IG11: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcr arg pop 0 mov x21, x0 ; byrRegs +[x21]
- b G_M14922_IG10
+ b G_M14922_IG11
;; size=16 bbWeight=0 PerfScore 0.00
-G_M14922_IG12: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
+G_M14922_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
; byrRegs -[x0 x21] +[x20] ldapr w1, [x20] and w1, w1, #0xD1FFAB1E cmp w1, #0xD1FFAB1E, LSL #12
- beq G_M14922_IG13
+ beq G_M14922_IG14
ldapr w1, [x20] orr w1, w1, #0xD1FFAB1E swpal w1, w1, [x20]
- tbnz w1, #22, G_M14922_IG13
+ tbnz w1, #22, G_M14922_IG14
mov x0, x19 ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -190,33 +191,47 @@ G_M14922_IG12: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20 ; gcrRegs -[x0 x19] ; byrRegs -[x20] ; gcr arg pop 0
- ;; size=56 bbWeight=1 PerfScore 18.50 -G_M14922_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ldr x0, [fp, #0x20] // [V17 PSPSym] - bl G_M14922_IG17 - ;; size=8 bbWeight=1 PerfScore 3.00 -G_M14922_IG14: ; bbWeight=1, nogc, extend - nop - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M14922_IG15: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=56 bbWeight=0.50 PerfScore 9.25 +G_M14922_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + ldrb w2, [fp, #0x1C] // [V02 arg2] + tst w2, #255 + beq G_M14922_IG15 + ldr x0, [fp, #0x10] // [V00 this] + ; gcrRegs +[x0] + ldrsb wzr, [x0] + movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + ldr x0, [x0] + ; gcrRegs +[x0] + movz x1, #0xD1FFAB1E // code for System.Threading.PortableThreadPool:NotifyWorkItemProgress():this + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + ldr x1, [x1]
; GC ptr vars -{V00}
+ blr x1 + ; gcrRegs -[x0] + ; gcr arg pop 0 + ;; size=56 bbWeight=0.50 PerfScore 9.25 +G_M14922_IG15: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov w0, #1 ...

benchmarks.run_pgo.windows.arm64.checked.mch

-28 (-28.00%) : 8639.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-17.14%) : 63316.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.Canon]:get_Current():System.Canon:this (Tier1)

@@ -8,22 +8,19 @@ ; 1 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 4.00) byref -> x0 this single-def -; V01 TypeCtx [V01,T02] ( 4, 3.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4.00) byref -> x0 this single-def +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x19 single-def
;# 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 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T10] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T08] ( 4, 2.13) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> -; V08 tmp6 [V08,T04] ( 2, 4.00) byref -> x1 single-def "Inlining Arg" -; V09 tmp7 [V09,T03] ( 3, 5.00) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref single-def -;* V11 tmp9 [V11,T11] ( 0, 0 ) int -> zero-ref -; V12 tmp10 [V12,T07] ( 2, 3.00) int -> x2 "Inlining Arg" -; V13 tmp11 [V13,T09] ( 2, 2.00) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V14 tmp12 [V14,T06] ( 3, 3.00) ref -> x0 single-def "argument with side effect" -; V15 cse0 [V15,T05] ( 4, 3.00) ref -> x0 "CSE - aggressive"
+; V04 tmp2 [V04,T07] ( 3, 2.00) ref -> x1 class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> +; V05 tmp3 [V05,T03] ( 2, 4.00) byref -> x1 single-def "Inlining Arg" +; V06 tmp4 [V06,T02] ( 3, 5.00) ref -> x1 class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def +;* V08 tmp6 [V08,T09] ( 0, 0 ) int -> zero-ref +; V09 tmp7 [V09,T06] ( 2, 3.00) int -> x2 "Inlining Arg" +; V10 tmp8 [V10,T08] ( 2, 2.00) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V11 tmp9 [V11,T05] ( 3, 3.00) ref -> x0 single-def "argument with side effect" +; V12 cse0 [V12,T04] ( 4, 3.00) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -67,33 +64,21 @@ G_M44215_IG04: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, b mov x1, x0 ; gcrRegs +[x1] ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M44215_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M44215_IG08 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M44215_IG06: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M44215_IG08 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M44215_IG07: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M44215_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 10.00 +G_M44215_IG06: ; 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 140, prolog size 16, PerfScore 31.06, instruction count 35, allocated bytes for code 140 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
+; Total bytes of code 116, prolog size 16, PerfScore 36.00, instruction count 29, allocated bytes for code 116 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -104,7 +89,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ 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)

-48 (-14.63%) : 69780.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.Canon]:get_Item(int):System.Canon:this (Tier1)

@@ -10,22 +10,17 @@ ; Final local variable assignments ; ; V00 this [V00,T02] ( 4, 3.29) byref -> x0 this single-def
-; V01 TypeCtx [V01,T00] ( 5, 3.86) long -> x19 single-def
+; V01 TypeCtx [V01,T00] ( 5, 4 ) long -> x19 single-def
; V02 arg1 [V02,T01] ( 5, 3.29) int -> x2 single-def
-; V03 loc0 [V03,T03] ( 10, 5 ) ref -> x20 class-hnd single-def <Microsoft.CodeAnalysis.SyntaxNode>
+; V03 loc0 [V03,T03] ( 8, 4.29) ref -> x20 class-hnd single-def <Microsoft.CodeAnalysis.SyntaxNode>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T11] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V06 tmp2 [V06 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V07 tmp3 [V07,T09] ( 3, 0.71) long -> x3 "fgMakeTemp is creating a new local variable" -; V08 tmp4 [V08,T07] ( 5, 2.14) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V09 tmp5 [V09,T05] ( 3, 3.57) long -> x1 "fgMakeTemp is creating a new local variable" -; V10 tmp6 [V10,T06] ( 3, 2.86) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -;* V11 tmp7 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -; V12 tmp8 [V12,T04] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V13 tmp9 [V13,T08] ( 3, 1.14) int -> x1 "Inlining Arg" -; V14 tmp10 [V14,T10] ( 4, 0.64) ref -> x1 "guarded devirt return temp" -;* V15 tmp11 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren> -; V16 tmp12 [V16,T12] ( 2, 0 ) ref -> x1 single-def "argument with side effect"
+; V05 tmp1 [V05,T07] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V06 tmp2 [V06 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +; V07 tmp3 [V07,T04] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V08 tmp4 [V08,T05] ( 3, 1.14) int -> x1 "Inlining Arg" +; V09 tmp5 [V09,T06] ( 3, 0.57) ref -> x1 "guarded devirt return temp" +;* V10 tmp6 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren> +; V11 tmp7 [V11,T08] ( 2, 0 ) ref -> x1 single-def "argument with side effect"
; ; Lcl frame size = 16 @@ -40,57 +35,44 @@ G_M13118_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byre ; byrRegs +[x0] ldr x20, [x0, #0x08] ; gcrRegs +[x20]
- cbz x20, G_M13118_IG12
+ cbz x20, G_M13118_IG08
ldr x1, [x20, #0x18] ; gcrRegs +[x1] ldrh w1, [x1, #0x0C] ; gcrRegs -[x1] cmp w1, #1
- beq G_M13118_IG07
+ beq G_M13118_IG05
;; size=24 bbWeight=1 PerfScore 11.50 G_M13118_IG03: ; bbWeight=0.71, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz ; byrRegs -[x0]
- cbnz w2, G_M13118_IG12 - ldr x0, [x20] - ldr x1, [x19, #0x38] - ldr x1, [x1] - ldr x1, [x1] - cmp x0, x1 - beq G_M13118_IG05 - ;; size=28 bbWeight=0.71 PerfScore 10.36 -G_M13118_IG04: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - mov x0, x1
+ cbnz w2, G_M13118_IG08 + ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
mov x1, x20 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1 x20] +[x0]
- b G_M13118_IG06 - ;; size=16 bbWeight=0.36 PerfScore 1.07 -G_M13118_IG05: ; bbWeight=0.36, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] +[x20] - mov x0, x20 - ; gcrRegs +[x0] - ;; size=4 bbWeight=0.36 PerfScore 0.18 -G_M13118_IG06: ; bbWeight=0.71, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[x20]
+ ;; size=24 bbWeight=0.71 PerfScore 8.21 +G_M13118_IG04: ; bbWeight=0.71, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0.71 PerfScore 2.14
-G_M13118_IG07: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, gcvars, byref, isz
+G_M13118_IG05: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=0001 {x0}, gcvars, byref, isz
; gcrRegs -[x0] +[x20] ; byrRegs +[x0] ldr w0, [x0] ; byrRegs -[x0] cmp w2, w0
- bhs G_M13118_IG12
+ bhs G_M13118_IG08
lsl w1, w2, #1 ldr x0, [x20] movz x2, #0xD1FFAB1E movk x2, #0xD1FFAB1E LSL #16 movk x2, #0xD1FFAB1E LSL #32 cmp x0, x2
- bne G_M13118_IG13
+ bne G_M13118_IG09
mov x0, x20 ; gcrRegs +[x0] movz x2, #0xD1FFAB1E // code for Microsoft.CodeAnalysis.Syntax.SyntaxList+WithThreeChildren:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this @@ -102,32 +84,20 @@ G_M13118_IG07: ; bbWeight=0.29, gcVars=0000000000000000 {}, gcrefRegs=100 mov x1, x0 ; gcrRegs +[x1] ;; size=68 bbWeight=0.29 PerfScore 5.14
-G_M13118_IG08: ; bbWeight=0.29, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M13118_IG06: ; bbWeight=0.29, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M13118_IG11 - ;; size=8 bbWeight=0.29 PerfScore 0.43 -G_M13118_IG09: ; bbWeight=0.14, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M13118_IG11 - ;; size=24 bbWeight=0.14 PerfScore 1.93 -G_M13118_IG10: ; bbWeight=0.07, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.07 PerfScore 0.11 -G_M13118_IG11: ; bbWeight=0.29, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=0.29 PerfScore 2.86 +G_M13118_IG07: ; bbWeight=0.29, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=0.29 PerfScore 0.86
-G_M13118_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M13118_IG08: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -157,7 +127,7 @@ G_M13118_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 { bl CORINFO_HELP_THROW ; gcrRegs -[x0 x19] ;; size=76 bbWeight=0 PerfScore 0.00
-G_M13118_IG13: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
+G_M13118_IG09: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
; gcrRegs +[x20] mov x0, x20 ; gcrRegs +[x0] @@ -168,10 +138,10 @@ G_M13118_IG13: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ; gcrRegs -[x20] mov x1, x0 ; gcrRegs +[x1]
- b G_M13118_IG08
+ b G_M13118_IG06
;; size=28 bbWeight=0 PerfScore 0.00
-; Total bytes of code 328, prolog size 16, PerfScore 37.71, instruction count 82, allocated bytes for code 328 (MethodHash=6436ccc1) for method Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
+; Total bytes of code 280, prolog size 16, PerfScore 34.71, instruction count 70, allocated bytes for code 280 (MethodHash=6436ccc1) for method Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -182,7 +152,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 82 (0x00052) Actual length = 328 (0x000148)
+ Function Length : 70 (0x00046) Actual length = 280 (0x000118)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+48 (+2.55%) : 29312.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

@@ -11,43 +11,43 @@ ; ; V00 this [V00,T00] ( 19, 17.02) ref -> x19 this class-hnd single-def <System.Reflection.Emit.DynamicMethod> ; V01 arg1 [V01,T17] ( 4, 4 ) ref -> x24 class-hnd single-def <System.String>
-; V02 arg2 [V02,T19] ( 3, 3 ) int -> x2 single-def -; V03 arg3 [V03,T20] ( 3, 3 ) int -> x3 single-def -; V04 arg4 [V04,T11] ( 7, 4.36) ref -> x22 class-hnd single-def <System.Type>
+; V02 arg2 [V02,T20] ( 3, 3 ) int -> x2 single-def +; V03 arg3 [V03,T21] ( 3, 3 ) int -> x3 single-def +; V04 arg4 [V04,T12] ( 7, 4.36) ref -> x22 class-hnd single-def <System.Type>
; V05 arg5 [V05,T10] ( 5, 6.02) ref -> x21 class-hnd single-def <System.Type[]>
-; V06 arg6 [V06,T08] ( 10, 7.01) ref -> x20 class-hnd single-def <System.Type>
+; V06 arg6 [V06,T06] ( 10, 7.01) ref -> x20 class-hnd single-def <System.Type>
; V07 arg7 [V07,T13] ( 7, 4.04) ref -> x23 class-hnd single-def <System.Reflection.Module>
-; V08 arg8 [V08,T42] ( 2, 1.00) ubyte -> [fp+0x70] single-def -; V09 arg9 [V09,T41] ( 1, 1.01) ubyte -> x25 single-def
+; V08 arg8 [V08,T44] ( 2, 1.00) ubyte -> [fp+0x70] single-def +; V09 arg9 [V09,T43] ( 1, 1.01) ubyte -> x25 single-def
; V10 loc0 [V10,T02] ( 7, 13.06) int -> x27
-; V11 loc1 [V11,T07] ( 10, 9.41) ref -> x20 class-hnd exact <System.RuntimeType>
+; V11 loc1 [V11,T07] ( 9, 8.91) ref -> x20 class-hnd exact single-def <System.RuntimeType>
;# V12 OutArgs [V12 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V13 tmp1 [V13,T46] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V13 tmp1 [V13,T48] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
;* V14 tmp2 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp3 [V15 ] ( 0, 0 ) ref -> zero-ref
-; V16 tmp4 [V16,T33] ( 4, 2.69) ref -> x15 -; V17 tmp5 [V17,T29] ( 2, 2.01) int -> x0 -; V18 tmp6 [V18,T40] ( 2, 0.03) int -> x0 -; V19 tmp7 [V19,T30] ( 2, 2.01) int -> x0 -; V20 tmp8 [V20,T35] ( 3, 1.99) ref -> x20 -;* V21 tmp9 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V22 tmp10 [V22,T47] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V23 tmp11 [V23,T45] ( 2, 0.00) int -> x0 -;* V24 tmp12 [V24 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V25 tmp13 [V25,T12] ( 6, 6.07) ref -> x15 class-hnd "spilling QMark2" <System.RuntimeType> -; V26 tmp14 [V26,T48] ( 3, 0 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V27 tmp15 [V27,T04] ( 3, 12.06) ref -> [fp+0x10] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> -;* V28 tmp16 [V28 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -; V29 tmp17 [V29,T01] ( 5, 15.07) ref -> x15 class-hnd "spilling QMark2" <System.RuntimeType> -; V30 tmp18 [V30,T49] ( 3, 0 ) ref -> x22 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V31 tmp19 [V31,T50] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V32 tmp20 [V32,T26] ( 3, 4.02) ref -> x15 "guarded devirt return temp" -; V33 tmp21 [V33,T03] ( 5, 12.06) ref -> x0 "guarded devirt arg temp" -;* V34 tmp22 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V35 tmp23 [V35,T39] ( 3, 1.35) ref -> x22 "guarded devirt return temp" -;* V36 tmp24 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V37 tmp25 [V37,T34] ( 3, 1.99) ref -> x20 "guarded devirt return temp" -;* V38 tmp26 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
+; V16 tmp4 [V16,T35] ( 4, 2.69) ref -> x15 +; V17 tmp5 [V17,T30] ( 2, 2.01) int -> x0 +; V18 tmp6 [V18,T42] ( 2, 0.03) int -> x0 +; V19 tmp7 [V19,T31] ( 2, 2.01) int -> x0 +; V20 tmp8 [V20,T37] ( 3, 1.99) ref -> x20 +; V21 tmp9 [V21,T49] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V22 tmp10 [V22,T47] ( 2, 0.00) int -> x0 +; V23 tmp11 [V23,T34] ( 2, 2.70) ref -> x15 class-hnd exact single-def "dup spill" <System.RuntimeType> +; V24 tmp12 [V24,T50] ( 3, 0 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V25 tmp13 [V25,T04] ( 3, 12.06) ref -> [fp+0x18] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> +; V26 tmp14 [V26,T09] ( 2, 8.04) ref -> x15 class-hnd exact "Strict ordering of exceptions for Array store" <System.RuntimeType> +; V27 tmp15 [V27,T51] ( 3, 0 ) ref -> x22 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V28 tmp16 [V28,T52] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V29 tmp17 [V29,T27] ( 3, 4.02) ref -> x0 "guarded devirt return temp" +; V30 tmp18 [V30,T03] ( 5, 12.06) ref -> x0 "guarded devirt arg temp" +;* V31 tmp19 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V32 tmp20 [V32,T41] ( 3, 1.35) ref -> x22 "guarded devirt return temp" +;* V33 tmp21 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V34 tmp22 [V34,T36] ( 3, 1.99) ref -> x20 "guarded devirt return temp" +;* V35 tmp23 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V36 tmp24 [V36 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V37 tmp25 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V38 tmp26 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp27 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V40 tmp28 [V40 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V41 tmp29 [V41 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" @@ -58,52 +58,51 @@ ;* V46 tmp34 [V46 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V47 tmp35 [V47 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V48 tmp36 [V48 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-;* V49 tmp37 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V50 tmp38 [V50 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V51 tmp39 [V51 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V52 tmp40 [V52,T43] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V53 tmp41 [V53,T22] ( 5, 4.95) ubyte -> x0 "Inline stloc first use temp" -;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> -;* V55 tmp43 [V55 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> -;* V56 tmp44 [V56 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> -;* V57 tmp45 [V57 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> -; V59 tmp47 [V59,T21] ( 12, 4.95) ref -> x23 class-hnd "Inline stloc first use temp" <System.Type> -; V60 tmp48 [V60,T24] ( 3, 4.95) int -> x1 "guarded devirt return temp" -;* V61 tmp49 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V62 tmp50 [V62,T25] ( 3, 4.95) ubyte -> x1 "Inline return value spill temp" -; V63 tmp51 [V63,T23] ( 5, 4.95) ubyte -> x0 "Inline stloc first use temp" -;* V64 tmp52 [V64 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> -;* V65 tmp53 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V66 tmp54 [V66 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> -; V67 tmp55 [V67,T51] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> -;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V69 tmp57 [V69,T36] ( 3, 1.98) int -> x1 -; V70 tmp58 [V70,T38] ( 2, 1.98) ubyte -> x14 "Inline stloc first use temp" -;* V71 tmp59 [V71 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V72 tmp60 [V72 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V73 tmp61 [V73 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V74 tmp62 [V74,T28] ( 2, 3.96) byref -> x14 single-def "Inlining Arg" -;* V75 tmp63 [V75 ] ( 0, 0 ) ref -> zero-ref single-def "field V55.m_type (fldOffset=0x0)" P-INDEP -; V76 tmp64 [V76,T31] ( 5, 2.97) ref -> x0 single-def "field V56.m_type (fldOffset=0x0)" P-INDEP -; V77 tmp65 [V77,T37] ( 2, 1.98) ref -> x0 single-def "field V64.m_type (fldOffset=0x0)" P-INDEP -;* V78 tmp66 [V78 ] ( 0, 0 ) long -> zero-ref "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP -; V79 tmp67 [V79,T32] ( 3, 2.97) long -> x14 "field V71.m_asTAddr (fldOffset=0x0)" P-INDEP -; V80 tmp68 [V80,T05] ( 3, 12.06) ref -> x2 "arr expr" -;* V81 tmp69 [V81,T27] ( 0, 0 ) ref -> zero-ref "arr expr" -; V82 tmp70 [V82,T52] ( 2, 0 ) ref -> x1 "argument with side effect" -; V83 tmp71 [V83,T53] ( 2, 0 ) ref -> x1 "argument with side effect" -; V84 tmp72 [V84,T44] ( 2, 0.06) ref -> x1 single-def "argument with side effect" -; V85 tmp73 [V85,T54] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V86 tmp74 [V86,T55] ( 2, 0 ) ref -> x2 single-def "argument with side effect" -; V87 tmp75 [V87,T56] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V88 tmp76 [V88,T57] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V89 cse0 [V89,T14] ( 3, 6.03) ref -> x14 "CSE - aggressive" -; V90 cse1 [V90,T15] ( 3, 6.03) ref -> x0 "CSE - aggressive" -; V91 cse2 [V91,T09] ( 4, 8.04) long -> x28 "CSE - aggressive" -; V92 cse3 [V92,T16] ( 2, 4.02) ref -> x2 "CSE - aggressive" -; V93 cse4 [V93,T06] ( 12, 11.67) long -> [fp+0x18] multi-def "CSE - aggressive" -; V94 cse5 [V94,T18] ( 4, 5.03) int -> x26 "CSE - moderate"
+;* V49 tmp37 [V49,T45] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V50 tmp38 [V50,T23] ( 5, 4.95) ubyte -> x0 "Inline stloc first use temp" +;* V51 tmp39 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> +;* V52 tmp40 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> +;* V53 tmp41 [V53 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> +;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V55 tmp43 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> +; V56 tmp44 [V56,T22] ( 12, 4.95) ref -> x21 class-hnd "Inline stloc first use temp" <System.Type> +; V57 tmp45 [V57,T25] ( 3, 4.95) int -> x1 "guarded devirt return temp" +;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V59 tmp47 [V59,T26] ( 3, 4.95) ubyte -> x1 "Inline return value spill temp" +; V60 tmp48 [V60,T24] ( 5, 4.95) ubyte -> x0 "Inline stloc first use temp" +;* V61 tmp49 [V61 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> +;* V62 tmp50 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V63 tmp51 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V64 tmp52 [V64,T53] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> +;* V65 tmp53 [V65 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V66 tmp54 [V66,T38] ( 3, 1.98) int -> x1 +; V67 tmp55 [V67,T40] ( 2, 1.98) ubyte -> x14 "Inline stloc first use temp" +;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V69 tmp57 [V69 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V70 tmp58 [V70 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V71 tmp59 [V71,T29] ( 2, 3.96) byref -> x14 single-def "Inlining Arg" +;* V72 tmp60 [V72 ] ( 0, 0 ) ref -> zero-ref single-def "field V52.m_type (fldOffset=0x0)" P-INDEP +; V73 tmp61 [V73,T32] ( 5, 2.97) ref -> x0 single-def "field V53.m_type (fldOffset=0x0)" P-INDEP +; V74 tmp62 [V74,T39] ( 2, 1.98) ref -> x0 single-def "field V61.m_type (fldOffset=0x0)" P-INDEP +;* V75 tmp63 [V75 ] ( 0, 0 ) long -> zero-ref "field V65.m_asTAddr (fldOffset=0x0)" P-INDEP +; V76 tmp64 [V76,T33] ( 3, 2.97) long -> x14 "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP +; V77 tmp65 [V77,T05] ( 3, 12.06) ref -> x14 "arr expr" +;* V78 tmp66 [V78,T28] ( 0, 0 ) ref -> zero-ref "arr expr" +; V79 tmp67 [V79,T54] ( 2, 0 ) ref -> x1 "argument with side effect" +; V80 tmp68 [V80,T55] ( 2, 0 ) ref -> x1 "argument with side effect" +; V81 tmp69 [V81,T46] ( 2, 0.06) ref -> x1 single-def "argument with side effect" +; V82 tmp70 [V82,T56] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V83 tmp71 [V83,T57] ( 2, 0 ) ref -> x2 single-def "argument with side effect" +; V84 tmp72 [V84,T58] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V85 tmp73 [V85,T59] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V86 cse0 [V86,T14] ( 3, 6.03) ref -> x14 "CSE - aggressive" +; V87 cse1 [V87,T15] ( 3, 6.03) ref -> x0 "CSE - aggressive" +; V88 cse2 [V88,T08] ( 4, 8.04) long -> x28 "CSE - aggressive" +; V89 cse3 [V89,T16] ( 2, 4.02) ref -> x14 "CSE - aggressive" +; V90 cse4 [V90,T19] ( 4, 5.03) int -> x26 "CSE - moderate" +; V91 rat0 [V91,T01] ( 5, 15.07) ref -> x15 class-hnd "replacement local" <System.RuntimeType> +; V92 rat1 [V92,T18] ( 5, 5.06) ref -> x22 class-hnd "replacement local" <System.RuntimeType> +; V93 rat2 [V93,T11] ( 5, 7.43) ref -> x20 class-hnd "replacement local" <System.RuntimeType>
; ; Lcl frame size = 16 @@ -130,13 +129,13 @@ G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ldr w25, [fp, #0x78] // [V09 arg9] ;; size=56 bbWeight=1 PerfScore 11.50 G_M32743_IG02: ; bbWeight=1, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
- cbz x24, G_M32743_IG41
+ cbz x24, G_M32743_IG43
cmp w2, #22 ccmp w3, #1, 0, eq
- bne G_M32743_IG42
+ bne G_M32743_IG44
;; size=16 bbWeight=1 PerfScore 3.00 G_M32743_IG03: ; bbWeight=1.01, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
- cbz x21, G_M32743_IG46
+ cbz x21, G_M32743_IG48
ldr w26, [x21, #0x08] mov w1, w26 movz x0, #0xD1FFAB1E @@ -162,30 +161,33 @@ G_M32743_IG04: ; bbWeight=2.01, gcrefRegs=1F80000 {x19 x20 x21 x22 x23 x2 ubfiz x28, x27, #3, #32 ldr x0, [x14, x28] ; gcrRegs +[x0]
- cbz x0, G_M32743_IG44
+ cbz x0, G_M32743_IG46
ldr x1, [x19, #0x08] ; gcrRegs +[x1]
- str x1, [fp, #0x10] // [V27 tmp15] - ; GC ptr vars +{V27}
+ str x1, [fp, #0x18] // [V25 tmp13] + ; GC ptr vars +{V25}
ldr x14, [x0] ; byrRegs -[x14]
- movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x14, x2 - bne G_M32743_IG43
+ movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #0xD1FFAB1E LSL #32 + cmp x14, x15 + bne G_M32743_IG45 + ;; size=48 bbWeight=2.01 PerfScore 31.15 +G_M32743_IG05: ; bbWeight=2.01, gcVars=0000000000000010 {V25}, gcrefRegs=1F80003 {x0 x1 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, gcvars, byref, isz
mov x15, x0 ; gcrRegs +[x15]
- ;; size=52 bbWeight=2.01 PerfScore 32.16 -G_M32743_IG05: ; bbWeight=2.01, gcVars=0000000000000010 {V27}, gcrefRegs=1F88002 {x1 x15 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[x0]
cbz x15, G_M32743_IG08
- ;; size=4 bbWeight=2.01 PerfScore 2.01
+ ;; size=8 bbWeight=2.01 PerfScore 3.01
G_M32743_IG06: ; bbWeight=1.00, gcrefRegs=1F88002 {x1 x15 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz
+ ; gcrRegs -[x0]
ldr x14, [x15]
- cmp x14, x2
+ movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #0xD1FFAB1E LSL #32 + cmp x14, x12
beq G_M32743_IG08
- ;; size=12 bbWeight=1.00 PerfScore 4.52
+ ;; size=24 bbWeight=1.00 PerfScore 6.03
G_M32743_IG07: ; bbWeight=0.50, gcrefRegs=1F80002 {x1 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref ; gcrRegs -[x15] mov x15, xzr @@ -194,76 +196,84 @@ G_M32743_IG07: ; bbWeight=0.50, gcrefRegs=1F80002 {x1 x19 x20 x21 x22 x23 G_M32743_IG08: ; bbWeight=2.01, gcrefRegs=1F88002 {x1 x15 x19 x20 x21 x22 x23 x24}, byrefRegs=0000 {}, byref, isz ldr w14, [x1, #0x08] cmp w27, w14
- bhs G_M32743_IG40
+ bhs G_M32743_IG42
add x14, x1, #16 ; byrRegs +[x14] add x14, x14, x28
- ; GC ptr vars -{V27}
+ ; GC ptr vars -{V25}
bl CORINFO_HELP_ASSIGN_REF ...

+16 (+6.90%) : 52521.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,17 +10,15 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,301.84) int -> x19
+; V01 loc0 [V01,T01] ( 4,301.84) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,452.30) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,251.28) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,753.84) ref -> x15 class-hnd "spilling QMark2" <PerfLabTests.Foo[]> -; V06 cse0 [V06,T05] ( 2,100.62) ref -> x23 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3,100.53) ref -> x22 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.63) int -> x20 "CSE - aggressive" -; V09 cse3 [V09,T07] ( 3,100.53) long -> x21 "CSE - aggressive" -; V10 rat0 [V10,T09] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" -; V11 rat1 [V11,T08] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.Foo[]>
+; V03 cse0 [V03,T03] ( 2,100.62) ref -> x23 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4,100.53) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.63) int -> x20 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3,100.53) long -> x21 "CSE - aggressive" +; V07 rat0 [V07,T07] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" +; V08 rat1 [V08,T06] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.Foo[]> +; V09 rat2 [V09,T00] ( 5,703.58) ref -> x15 class-hnd "replacement local" <PerfLabTests.Foo[]>
; ; Lcl frame size = 8 @@ -33,10 +31,10 @@ G_M13964_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldr w19, [fp, #0x84] ;; size=24 bbWeight=0.01 PerfScore 0.07 G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ldr w20, [x0]
+ movz x14, #0xD1FFAB1E + movk x14, #0xD1FFAB1E LSL #16 + movk x14, #0xD1FFAB1E LSL #32 + ldr w20, [x14]
cmp w19, w20 bge G_M13964_IG11 movz x21, #0xD1FFAB1E @@ -51,11 +49,11 @@ G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr cbz x23, G_M13964_IG05 ;; size=52 bbWeight=0.01 PerfScore 0.13 G_M13964_IG03: ; bbWeight=0.01, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x23] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2
+ ldr x14, [x23] + movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #0xD1FFAB1E LSL #32 + cmp x14, x15
beq G_M13964_IG05 ;; size=24 bbWeight=0.01 PerfScore 0.03 G_M13964_IG04: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref @@ -75,45 +73,49 @@ G_M13964_IG04: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {} ;; size=36 bbWeight=0 PerfScore 0.00 G_M13964_IG05: ; bbWeight=100.61, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- cbz x23, G_M13964_IG10
+ cbz x23, G_M13964_IG08
;; size=4 bbWeight=100.61 PerfScore 100.61 G_M13964_IG06: ; bbWeight=100.51, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz
+ mov x15, x22 + ; gcrRegs +[x15] + cbnz x15, G_M13964_IG09 + ;; size=8 bbWeight=100.51 PerfScore 150.77 +G_M13964_IG07: ; bbWeight=100.51, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref + add x14, x21, #16 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + ;; size=8 bbWeight=100.51 PerfScore 150.77 +G_M13964_IG08: ; bbWeight=100.61, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz + add w19, w19, #1 + cmp w19, w20 + bge G_M13964_IG11 + b G_M13964_IG05 + ;; size=16 bbWeight=100.61 PerfScore 301.83 +G_M13964_IG09: ; bbWeight=50.26, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[x15] + ldr x14, [x15] + movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #0xD1FFAB1E LSL #32 + cmp x14, x12 + beq G_M13964_IG07 + ;; size=24 bbWeight=50.26 PerfScore 301.53 +G_M13964_IG10: ; bbWeight=0, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + ; gcrRegs -[x15]
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M13964_IG09 - ;; size=12 bbWeight=100.51 PerfScore 201.02 -G_M13964_IG07: ; bbWeight=50.26, gcrefRegs=C08002 {x1 x15 x22 x23}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M13964_IG09 - ;; size=24 bbWeight=50.26 PerfScore 301.53 -G_M13964_IG08: ; bbWeight=25.13, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
bl CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x15, x0 ; gcrRegs +[x15]
- ;; size=12 bbWeight=25.13 PerfScore 50.26 -G_M13964_IG09: ; bbWeight=100.51, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - add x14, x21, #16 - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15] - ;; size=8 bbWeight=100.51 PerfScore 150.77 -G_M13964_IG10: ; bbWeight=100.61, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz - add w19, w19, #1 - cmp w19, w20 - blt G_M13964_IG05 - ;; size=12 bbWeight=100.61 PerfScore 201.22
+ b G_M13964_IG07 + ;; size=28 bbWeight=0 PerfScore 0.00
G_M13964_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[x22-x23]
+ ; gcrRegs -[x0 x15 x22-x23]
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -122,7 +124,7 @@ G_M13964_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 232, prolog size 24, PerfScore 1005.64, instruction count 58, allocated bytes for code 232 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 248, prolog size 24, PerfScore 1005.74, instruction count 62, allocated bytes for code 248 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -133,7 +135,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 58 (0x0003a) Actual length = 232 (0x0000e8)
+ 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)

+16 (+7.41%) : 85443.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,17 +10,15 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf2.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,301.84) int -> x19
+; V01 loc0 [V01,T01] ( 4,301.84) int -> x19
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,452.30) ref -> x1 "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,251.28) long -> x2 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,753.84) ref -> x15 class-hnd "spilling QMark2" <PerfLabTests.CastingPerf2.Foo> -; V06 cse0 [V06,T05] ( 2,100.62) ref -> x23 hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3,100.53) ref -> x22 "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.63) int -> x20 "CSE - aggressive" -; V09 cse3 [V09,T07] ( 3,100.53) long -> x21 "CSE - aggressive" -; V10 rat0 [V10,T09] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" -; V11 rat1 [V11,T08] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
+; V03 cse0 [V03,T03] ( 2,100.62) ref -> x23 hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4,100.53) ref -> x22 "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.63) int -> x20 "CSE - aggressive" +; V06 cse3 [V06,T05] ( 3,100.53) long -> x21 "CSE - aggressive" +; V07 rat0 [V07,T07] ( 3, 0.04) ref -> x1 "Spilling to split statement for tree" +; V08 rat1 [V08,T06] ( 5, 0.07) ref -> x23 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo> +; V09 rat2 [V09,T00] ( 5,703.58) ref -> x15 class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
; ; Lcl frame size = 8 @@ -33,10 +31,10 @@ G_M59156_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldr w19, [fp, #0x84] ;; size=24 bbWeight=0.01 PerfScore 0.07 G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movz x0, #0xD1FFAB1E - movk x0, #0xD1FFAB1E LSL #16 - movk x0, #0xD1FFAB1E LSL #32 - ldr w20, [x0]
+ movz x14, #0xD1FFAB1E + movk x14, #0xD1FFAB1E LSL #16 + movk x14, #0xD1FFAB1E LSL #32 + ldr w20, [x14]
cmp w19, w20 bge G_M59156_IG11 movz x21, #0xD1FFAB1E @@ -51,11 +49,11 @@ G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr cbz x23, G_M59156_IG05 ;; size=52 bbWeight=0.01 PerfScore 0.13 G_M59156_IG03: ; bbWeight=0.01, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref, isz
- ldr x0, [x23] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2
+ ldr x14, [x23] + movz x15, #0xD1FFAB1E + movk x15, #0xD1FFAB1E LSL #16 + movk x15, #0xD1FFAB1E LSL #32 + cmp x14, x15
beq G_M59156_IG05 ;; size=24 bbWeight=0.01 PerfScore 0.03 G_M59156_IG04: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {}, byref @@ -71,45 +69,49 @@ G_M59156_IG04: ; bbWeight=0, gcrefRegs=400002 {x1 x22}, byrefRegs=0000 {} ;; size=20 bbWeight=0 PerfScore 0.00 G_M59156_IG05: ; bbWeight=100.61, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0]
- cbz x23, G_M59156_IG10
+ cbz x23, G_M59156_IG08
;; size=4 bbWeight=100.61 PerfScore 100.61 G_M59156_IG06: ; bbWeight=100.51, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz
+ mov x15, x22 + ; gcrRegs +[x15] + cbnz x15, G_M59156_IG09 + ;; size=8 bbWeight=100.51 PerfScore 150.77 +G_M59156_IG07: ; bbWeight=100.51, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref + add x14, x21, #80 + bl CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[x15] + ;; size=8 bbWeight=100.51 PerfScore 150.77 +G_M59156_IG08: ; bbWeight=100.61, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz + add w19, w19, #1 + cmp w19, w20 + bge G_M59156_IG11 + b G_M59156_IG05 + ;; size=16 bbWeight=100.61 PerfScore 301.83 +G_M59156_IG09: ; bbWeight=50.26, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[x15] + ldr x14, [x15] + movz x12, #0xD1FFAB1E + movk x12, #0xD1FFAB1E LSL #16 + movk x12, #0xD1FFAB1E LSL #32 + cmp x14, x12 + beq G_M59156_IG07 + ;; size=24 bbWeight=50.26 PerfScore 301.53 +G_M59156_IG10: ; bbWeight=0, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref + ; gcrRegs -[x15]
mov x1, x22 ; gcrRegs +[x1]
- mov x15, x1 - ; gcrRegs +[x15] - cbz x15, G_M59156_IG09 - ;; size=12 bbWeight=100.51 PerfScore 201.02 -G_M59156_IG07: ; bbWeight=50.26, gcrefRegs=C08002 {x1 x15 x22 x23}, byrefRegs=0000 {}, byref, isz - ldr x0, [x15] - movz x2, #0xD1FFAB1E - movk x2, #0xD1FFAB1E LSL #16 - movk x2, #0xD1FFAB1E LSL #32 - cmp x0, x2 - beq G_M59156_IG09 - ;; size=24 bbWeight=50.26 PerfScore 301.53 -G_M59156_IG08: ; bbWeight=25.13, gcrefRegs=C00002 {x1 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x15] - mov x0, x2
+ movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32
bl CORINFO_HELP_CHKCASTCLASS_SPECIAL ; gcrRegs -[x1] +[x0] ; gcr arg pop 0 mov x15, x0 ; gcrRegs +[x15]
- ;; size=12 bbWeight=25.13 PerfScore 50.26 -G_M59156_IG09: ; bbWeight=100.51, gcrefRegs=C08000 {x15 x22 x23}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - add x14, x21, #80 - bl CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[x15] - ;; size=8 bbWeight=100.51 PerfScore 150.77 -G_M59156_IG10: ; bbWeight=100.61, gcrefRegs=C00000 {x22 x23}, byrefRegs=0000 {}, byref, isz - add w19, w19, #1 - cmp w19, w20 - blt G_M59156_IG05 - ;; size=12 bbWeight=100.61 PerfScore 201.22
+ b G_M59156_IG07 + ;; size=28 bbWeight=0 PerfScore 0.00
G_M59156_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[x22-x23]
+ ; gcrRegs -[x0 x15 x22-x23]
ldr x23, [sp, #0x38] ldp x21, x22, [sp, #0x28] ldp x19, x20, [sp, #0x18] @@ -118,7 +120,7 @@ G_M59156_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 216, prolog size 24, PerfScore 1005.64, instruction count 54, allocated bytes for code 216 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 232, prolog size 24, PerfScore 1005.74, instruction count 58, allocated bytes for code 232 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info: @@ -129,7 +131,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 54 (0x00036) Actual length = 216 (0x0000d8)
+ 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)

benchmarks.run_tiered.windows.arm64.checked.mch

-28 (-28.00%) : 7746.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-25.93%) : 23737.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (Tier1)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> x20 this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 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" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> x20 "CSE - aggressive"
; ; Lcl frame size = 16 @@ -22,47 +21,36 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x19, x20, [sp, #0x20] mov fp, sp str x1, [fp, #0x18]
- mov x20, x0 - ; gcrRegs +[x20] - mov x19, x1 - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ mov x19, x0 + ; gcrRegs +[x19] + ;; size=20 bbWeight=1 PerfScore 4.00 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x20, [x1, #0x38] + ldr x0, [x20]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x10] blr x2
- ; gcrRegs -[x1 x20]
+ ; gcrRegs -[x1 x19]
mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M60617_IG05 - ;; size=44 bbWeight=1 PerfScore 19.50 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M60617_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x20]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=48 bbWeight=1 PerfScore 22.50 +G_M60617_IG03: ; 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 108, prolog size 16, PerfScore 29.81, instruction count 27, allocated bytes for code 108 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
+; Total bytes of code 80, prolog size 16, PerfScore 29.50, instruction count 20, allocated bytes for code 80 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -73,7 +61,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-21.88%) : 21519.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttributeSystem.__Canon:System.__Canon (Tier1)

@@ -8,14 +8,13 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> x20 class-hnd single-def <System.Reflection.MemberInfo> -; V02 arg1 [V02,T03] ( 3, 3 ) ubyte -> x21 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x19 class-hnd single-def <System.Reflection.MemberInfo> +; V02 arg1 [V02,T02] ( 3, 3 ) ubyte -> x20 single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T04] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T06] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp4 [V07,T05] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
+; V04 tmp1 [V04,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 tmp2 [V05,T04] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V06 cse0 [V06,T05] ( 3, 3 ) long -> x21 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -25,51 +24,40 @@ G_M29548_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x21, [sp, #0x28] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - mov x20, x1 - ; gcrRegs +[x20] - mov w21, w2 - ;; size=32 bbWeight=1 PerfScore 6.00 -G_M29548_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ mov x19, x1 + ; gcrRegs +[x19] + mov w20, w2 + ;; size=28 bbWeight=1 PerfScore 5.50 +G_M29548_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x21, [x0, #0x38] + ldr x0, [x21]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- uxtb w2, w21 - mov x0, x20
+ uxtb w2, w20 + mov x0, x19
movz x3, #0xD1FFAB1E // code for System.Attribute:GetCustomAttribute(System.Reflection.MemberInfo,System.Type,ubyte):System.Attribute movk x3, #0xD1FFAB1E LSL #16 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] blr x3
- ; gcrRegs -[x1 x20]
+ ; gcrRegs -[x1 x19]
mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M29548_IG05 - ;; size=52 bbWeight=1 PerfScore 15.50 -G_M29548_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M29548_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M29548_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x21]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M29548_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=56 bbWeight=1 PerfScore 18.50 +G_M29548_IG03: ; bbWeight=1, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=1 PerfScore 5.00
-; Total bytes of code 128, prolog size 20, PerfScore 29.31, instruction count 32, allocated bytes for code 128 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
+; Total bytes of code 100, prolog size 20, PerfScore 29.00, instruction count 25, allocated bytes for code 100 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -80,7 +68,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 32 (0x00020) Actual length = 128 (0x000080)
+ 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)

-24 (-1.80%) : 21178.dasm - System.Xml.Serialization.FieldModel:.ctor(System.Reflection.MemberInfo,System.Type,System.Xml.Serialization.TypeDesc):this (Tier1)

@@ -8,8 +8,8 @@ ; 0 inlinees with PGO data; 14 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 17, 13 ) ref -> x20 this class-hnd single-def <System.Xml.Serialization.FieldModel> -; V01 arg1 [V01,T00] ( 17, 13.50) ref -> x19 class-hnd single-def <System.Reflection.MemberInfo>
+; V00 this [V00,T00] ( 17, 13 ) ref -> x19 this class-hnd single-def <System.Xml.Serialization.FieldModel> +; V01 arg1 [V01,T01] ( 15, 12.50) ref -> x20 class-hnd single-def <System.Reflection.MemberInfo>
; V02 arg2 [V02,T05] ( 3, 3 ) ref -> x21 class-hnd single-def <System.Type> ; V03 arg3 [V03,T06] ( 3, 3 ) ref -> x22 class-hnd single-def <System.Xml.Serialization.TypeDesc> ; V04 loc0 [V04,T08] ( 9, 4 ) ref -> x21 class-hnd single-def <System.Reflection.FieldInfo> @@ -17,107 +17,104 @@ ;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V07 tmp1 [V07,T03] ( 3, 6 ) ref -> x21 class-hnd single-def "non-inline candidate call" <System.Type> ;* V08 tmp2 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "non-inline candidate call" <System.Type>
-; V09 tmp3 [V09,T10] ( 4, 4 ) ref -> x21 class-hnd single-def "non-inline candidate call" <System.Type> -; V10 tmp4 [V10,T19] ( 2, 2 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V11 tmp5 [V11,T16] ( 2, 2 ) ref -> x0 class-hnd "spilling QMark2" <System.Reflection.FieldInfo> -; V12 tmp6 [V12,T20] ( 2, 2 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V13 tmp7 [V13,T17] ( 2, 2 ) ref -> x0 class-hnd "spilling QMark2" <System.Reflection.PropertyInfo> -; V14 tmp8 [V14,T28] ( 2, 0 ) ref -> x19 class-hnd exact single-def "non-inline candidate call" <System.String> -; V15 tmp9 [V15,T29] ( 2, 0 ) ref -> x20 class-hnd exact single-def "non-inline candidate call" <System.String> -; V16 tmp10 [V16,T30] ( 2, 0 ) ref -> x21 class-hnd exact single-def "impAppendStmt" <System.String> -; V17 tmp11 [V17,T24] ( 3, 0 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V18 tmp12 [V18 ] ( 0, 0 ) ref -> zero-ref -;* V19 tmp13 [V19 ] ( 0, 0 ) ref -> zero-ref single-def -; V20 tmp14 [V20,T22] ( 2, 1 ) int -> x14 -;* V21 tmp15 [V21 ] ( 0, 0 ) ref -> zero-ref -;* V22 tmp16 [V22 ] ( 0, 0 ) ref -> zero-ref single-def -; V23 tmp17 [V23,T23] ( 2, 1 ) int -> x14 -; V24 tmp18 [V24,T31] ( 2, 0 ) ref -> x19 class-hnd exact single-def "non-inline candidate call" <System.String> -; V25 tmp19 [V25,T32] ( 2, 0 ) ref -> x20 class-hnd exact single-def "non-inline candidate call" <System.String> -; V26 tmp20 [V26,T33] ( 2, 0 ) ref -> x21 class-hnd exact single-def "impAppendStmt" <System.String> -; V27 tmp21 [V27,T25] ( 3, 0 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V28 tmp22 [V28,T11] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> -;* V29 tmp23 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.MethodInfo>
+; V09 tmp3 [V09,T09] ( 4, 4 ) ref -> x21 class-hnd single-def "non-inline candidate call" <System.Type> +; V10 tmp4 [V10,T25] ( 2, 0 ) ref -> x19 class-hnd exact single-def "non-inline candidate call" <System.String> +; V11 tmp5 [V11,T26] ( 2, 0 ) ref -> x20 class-hnd exact single-def "non-inline candidate call" <System.String> +; V12 tmp6 [V12,T27] ( 2, 0 ) ref -> x21 class-hnd exact single-def "impAppendStmt" <System.String> +; V13 tmp7 [V13,T21] ( 3, 0 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref +;* V15 tmp9 [V15 ] ( 0, 0 ) ref -> zero-ref single-def +; V16 tmp10 [V16,T19] ( 2, 1 ) int -> x14 +;* V17 tmp11 [V17 ] ( 0, 0 ) ref -> zero-ref +;* V18 tmp12 [V18 ] ( 0, 0 ) ref -> zero-ref single-def +; V19 tmp13 [V19,T20] ( 2, 1 ) int -> x14 +; V20 tmp14 [V20,T28] ( 2, 0 ) ref -> x19 class-hnd exact single-def "non-inline candidate call" <System.String> +; V21 tmp15 [V21,T29] ( 2, 0 ) ref -> x20 class-hnd exact single-def "non-inline candidate call" <System.String> +; V22 tmp16 [V22,T30] ( 2, 0 ) ref -> x21 class-hnd exact single-def "impAppendStmt" <System.String> +; V23 tmp17 [V23,T22] ( 3, 0 ) ref -> x22 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V24 tmp18 [V24,T10] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> +;* V25 tmp19 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.MethodInfo> +;* V26 tmp20 [V26 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V27 tmp21 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> +;* V28 tmp22 [V28 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V29 tmp23 [V29,T14] ( 3, 3 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String>
;* V30 tmp24 [V30 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-;* V31 tmp25 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.String> -;* V32 tmp26 [V32 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V33 tmp27 [V33,T15] ( 3, 3 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> -;* V34 tmp28 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V35 tmp29 [V35,T12] ( 2, 4 ) ref -> x1 single-def "argument with side effect" -; V36 tmp30 [V36,T13] ( 2, 4 ) ref -> x0 single-def "argument with side effect" -; V37 tmp31 [V37,T04] ( 3, 6 ) ref -> x21 single-def "argument with side effect" -; V38 tmp32 [V38,T14] ( 2, 4 ) ref -> x1 single-def "argument with side effect" -; V39 tmp33 [V39,T18] ( 2, 2 ) ref -> x0 single-def "argument with side effect" -; V40 tmp34 [V40,T26] ( 3, 0 ) ref -> x0 single-def "argument with side effect" -; V41 tmp35 [V41,T34] ( 2, 0 ) ref -> x3 single-def "argument with side effect" -; V42 tmp36 [V42,T35] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V43 tmp37 [V43,T27] ( 3, 0 ) ref -> x0 single-def "argument with side effect" -; V44 tmp38 [V44,T36] ( 2, 0 ) ref -> x3 single-def "argument with side effect" -; V45 tmp39 [V45,T37] ( 2, 0 ) ref -> x1 single-def "argument with side effect" -; V46 cse0 [V46,T02] ( 8, 7 ) long -> x24 "CSE - aggressive" -; V47 cse1 [V47,T21] ( 4, 1.50) long -> x22 "CSE - moderate" -; V48 cse2 [V48,T09] ( 6, 4 ) long -> x23 "CSE - moderate"
+; V31 tmp25 [V31,T15] ( 3, 3 ) ref -> x0 class-hnd single-def "Inlining Arg" <System.Reflection.FieldInfo> +; V32 tmp26 [V32,T11] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V33 tmp27 [V33,T12] ( 2, 4 ) ref -> x0 single-def "argument with side effect" +; V34 tmp28 [V34,T04] ( 3, 6 ) ref -> x21 single-def "argument with side effect" +; V35 tmp29 [V35,T13] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V36 tmp30 [V36,T17] ( 2, 2 ) ref -> x0 single-def "argument with side effect" +; V37 tmp31 [V37,T23] ( 3, 0 ) ref -> x0 single-def "argument with side effect" +; V38 tmp32 [V38,T31] ( 2, 0 ) ref -> x3 single-def "argument with side effect" +; V39 tmp33 [V39,T32] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V40 tmp34 [V40,T16] ( 3, 3 ) ref -> x0 single-def "argument with side effect" +; V41 tmp35 [V41,T24] ( 3, 0 ) ref -> x0 single-def "argument with side effect" +; V42 tmp36 [V42,T33] ( 2, 0 ) ref -> x3 single-def "argument with side effect" +; V43 tmp37 [V43,T34] ( 2, 0 ) ref -> x1 single-def "argument with side effect" +; V44 cse0 [V44,T02] ( 8, 7 ) long -> x23 "CSE - aggressive" +; V45 cse1 [V45,T18] ( 4, 1.50) long -> x22 "CSE - moderate"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M45586_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x10] - stp x21, x22, [sp, #0x20] - stp x23, x24, [sp, #0x30]
+ stp x19, x20, [sp, #0x18] + stp x21, x22, [sp, #0x28] + str x23, [sp, #0x38]
mov fp, sp
- mov x20, x0 - ; gcrRegs +[x20] - mov x19, x1
+ mov x19, x0
; gcrRegs +[x19]
+ mov x20, x1 + ; gcrRegs +[x20]
mov x21, x2 ; gcrRegs +[x21] mov x22, x3 ; gcrRegs +[x22] ;; size=36 bbWeight=1 PerfScore 6.50 G_M45586_IG02: ; bbWeight=1, gcrefRegs=780000 {x19 x20 x21 x22}, byrefRegs=0000 {}, byref, isz
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0]
- ldr x23, [x19] - ldr x24, [x23, #0x48] - ldr x1, [x24, #0x30]
+ ldr x1, [x20] + ldr x23, [x1, #0x48] + ldr x1, [x23, #0x30]
blr x1
- add x14, x20, #40
+ add x14, x19, #40
; byrRegs +[x14] mov x15, x0 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15] ; byrRegs -[x14]
- add x14, x20, #32
+ add x14, x19, #32
; byrRegs +[x14] mov x15, x21 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x15 x21] ; byrRegs -[x14]
- add x14, x20, #48
+ add x14, x19, #48
; byrRegs +[x14] mov x15, x22 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x15 x22] ; byrRegs -[x14]
- add x14, x20, #8
+ add x14, x19, #8
; byrRegs +[x14]
- mov x15, x19
+ mov x15, x20
; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x15] ; byrRegs -[x14]
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0]
- ldr x1, [x24, #0x38]
+ ldr x1, [x23, #0x38]
blr x1 mov x21, x0 ; gcrRegs +[x21]
- mov x0, x19 - ldr x1, [x24, #0x30]
+ mov x0, x20 + ldr x1, [x23, #0x30]
blr x1 mov x1, x0 ; gcrRegs +[x1] @@ -148,27 +145,27 @@ G_M45586_IG02: ; bbWeight=1, gcrefRegs=780000 {x19 x20 x21 x22}, byrefReg ldr x7, [x7] blr x7 ; gcrRegs -[x1 x21]
- add x14, x20, #24
+ add x14, x19, #24
; byrRegs +[x14] mov x15, x0 ; gcrRegs +[x15] bl CORINFO_HELP_ASSIGN_REF ; gcrRegs -[x0 x15] ; byrRegs -[x14]
- ldr x0, [x20, #0x18]
+ ldr x0, [x19, #0x18]
; gcrRegs +[x0] cmp x0, #0 cset x0, ne ; gcrRegs -[x0]
- strb w0, [x20, #0x3C] - mov x0, x19
+ strb w0, [x19, #0x3C] + mov x0, x20
; gcrRegs +[x0]
- ldr x1, [x24, #0x38]
+ ldr x1, [x23, #0x38]
blr x1 mov x21, x0 ; gcrRegs +[x21]
- mov x0, x19 - ldr x1, [x24, #0x30]
+ mov x0, x20 + ldr x1, [x23, #0x30]
blr x1 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 @@ -211,8 +208,8 @@ G_M45586_IG03: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs mov w14, #1 tst w0, #32 cinc w14, w14, eq
- str w14, [x20, #0x38] - add x14, x20, #16
+ str w14, [x19, #0x38] + add x14, x19, #16
; byrRegs +[x14] mov x15, x21 ; gcrRegs +[x15] @@ -222,14 +219,14 @@ G_M45586_IG03: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs b G_M45586_IG06 ;; size=84 bbWeight=0.50 PerfScore 11.75 G_M45586_IG04: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
- mov x0, x19
+ mov x0, x20
; gcrRegs +[x0]
- ldr x1, [x24, #0x38]
+ ldr x1, [x23, #0x38]
blr x1 mov x21, x0 ; gcrRegs +[x21]
- mov x0, x19 - ldr x1, [x24, #0x30]
+ mov x0, x20 + ldr x1, [x23, #0x30]
blr x1 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 @@ -275,8 +272,8 @@ G_M45586_IG04: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=000 mov w14, #1 cmp w0, #0 cinc w14, w14, ne
- str w14, [x20, #0x38] - add x14, x20, #16
+ str w14, [x19, #0x38] + add x14, x19, #16
; byrRegs +[x14] mov x15, x21 ...

-8 (-1.36%) : 47388.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.Canon]:<.cctor>b4_0(System.Object):this (Tier1)

@@ -7,49 +7,49 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T07] ( 3, 3 ) ref -> [fp+0x20] this class-hnd EH-live single-def <System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]> -; V01 arg1 [V01,T00] ( 6, 5.50) ref -> x19 class-hnd single-def <System.Object> -; V02 loc0 [V02,T01] ( 9, 6 ) ref -> [fp+0x18] do-not-enreg[M] class-hnd exact EH-live <<unknown class>> -; V03 loc1 [V03,T11] ( 4, 4 ) ref -> x21 class-hnd single-def <<unknown class>> -; V04 loc2 [V04,T17] ( 2, 1 ) int -> [fp+0x34] do-not-enreg[Z] EH-live
+; V00 this [V00,T07] ( 3, 3 ) ref -> [fp+0x18] this class-hnd EH-live single-def <System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]> +; V01 arg1 [V01,T01] ( 4, 4 ) ref -> x19 class-hnd single-def <System.Object> +; V02 loc0 [V02,T00] ( 10, 6 ) ref -> [fp+0x10] class-hnd exact EH-live spill-single-def <<unknown class>> +; V03 loc1 [V03,T11] ( 4, 4 ) ref -> x22 class-hnd single-def <<unknown class>> +; V04 loc2 [V04,T17] ( 2, 1 ) int -> [fp+0x2C] do-not-enreg[Z] EH-live
;* V05 loc3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <<unknown class>> ; V06 loc4 [V06,T19] ( 4, 0 ) ref -> x19 class-hnd single-def <<unknown class>> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V08 tmp1 [V08,T16] ( 2, 3 ) long -> x1 "spilling helperCall" -;* V09 tmp2 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>>
+;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V11 tmp4 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V12 tmp5 [V12,T02] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup" -;* V13 tmp6 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V14 tmp7 [V14,T03] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup" -; V15 tmp8 [V15,T20] ( 3, 0 ) ref -> x1 class-hnd single-def "impSpillSpecialSideEff" <<unknown class>> -; V16 tmp9 [V16 ] ( 2, 0 ) struct ( 8) [fp+0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Threading.CancellationToken> -;* V17 tmp10 [V17 ] ( 0, 0 ) struct ( 8) zero-ref single-def "spilled call-like call argument" <System.Threading.CancellationToken> -; V18 tmp11 [V18 ] ( 2, 0 ) ref -> [fp+0x28] do-not-enreg[X] addr-exposed "field V16._source (fldOffset=0x0)" P-DEP -; V19 tmp12 [V19,T21] ( 2, 0 ) ref -> x1 "field V17._source (fldOffset=0x0)" P-INDEP
+; V11 tmp4 [V11,T02] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup" +;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +; V13 tmp6 [V13,T03] ( 4, 6 ) long -> x11 "VirtualCall with runtime lookup" +; V14 tmp7 [V14,T20] ( 3, 0 ) ref -> x1 class-hnd single-def "impSpillSpecialSideEff" <<unknown class>> +; V15 tmp8 [V15 ] ( 2, 0 ) struct ( 8) [fp+0x20] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Threading.CancellationToken> +;* V16 tmp9 [V16 ] ( 0, 0 ) struct ( 8) zero-ref single-def "spilled call-like call argument" <System.Threading.CancellationToken> +; V17 tmp10 [V17 ] ( 2, 0 ) ref -> [fp+0x20] do-not-enreg[X] addr-exposed "field V15._source (fldOffset=0x0)" P-DEP +; V18 tmp11 [V18,T21] ( 2, 0 ) ref -> x1 "field V16._source (fldOffset=0x0)" P-INDEP +; V19 tmp12 [V19,T14] ( 2, 4 ) long -> x1 "argument with side effect"
; V20 tmp13 [V20,T13] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
-; V21 tmp14 [V21,T14] ( 2, 4 ) long -> x2 "argument with side effect" -; V22 PSPSym [V22,T18] ( 1, 1 ) long -> [fp+0x40] do-not-enreg[V] "PSPSym" -; V23 cse0 [V23,T15] ( 3, 3 ) long -> x2 "CSE - aggressive"
+; V21 tmp14 [V21,T15] ( 2, 4 ) long -> x0 "argument with side effect" +; V22 PSPSym [V22,T18] ( 1, 1 ) long -> [fp+0x38] do-not-enreg[V] "PSPSym" +; V23 cse0 [V23,T16] ( 3, 3 ) long -> x21 "CSE - aggressive"
; V24 cse1 [V24,T08] ( 6, 4.56) long -> x20 "CSE - aggressive" ; V25 rat0 [V25,T10] ( 3, 4.40) long -> x1 "Spilling to split statement for tree"
-; V26 rat1 [V26,T12] ( 3, 4 ) long -> x2 "runtime lookup" -; V27 rat2 [V27,T04] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable"
+; V26 rat1 [V26,T12] ( 3, 4 ) long -> x21 "runtime lookup" +; V27 rat2 [V27,T04] ( 3, 5.60) long -> x21 "fgMakeTemp is creating a new local variable"
; V28 rat3 [V28,T05] ( 3, 5.60) long -> x11 "fgMakeTemp is creating a new local variable" ; V29 rat4 [V29,T06] ( 3, 5.60) long -> x0 "spilling expr" ; V30 rat5 [V30,T09] ( 3, 4.48) long -> x11 "fgMakeTemp is creating a new local variable" ;
-; Lcl frame size = 56
+; Lcl frame size = 48
G_M57110_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x60]!
- stp x19, x20, [sp, #0x48] - str x21, [sp, #0x58]
+ stp x19, x20, [sp, #0x40] + stp x21, x22, [sp, #0x50]
mov fp, sp
- str xzr, [fp, #0x28] // [V16 tmp9]
+ str xzr, [fp, #0x20] // [V15 tmp8]
add x2, sp, #96
- stp x0, x2, [fp, #0x38] // [V22 PSPSym] - str x0, [fp, #0x20] // [V00 this]
+ stp x0, x2, [fp, #0x30] // [V22 PSPSym] + str x0, [fp, #0x18] // [V00 this]
; GC ptr vars +{V00} mov x19, x1 ; gcrRegs +[x19] @@ -60,8 +60,8 @@ G_M57110_IG02: ; bbWeight=1, gcVars=0000000000000080 {V00}, gcrefRegs=800 mov x1, x20 ldr x2, [x1, #0x38] ldr x2, [x2]
- ldr x2, [x2, #0x10] - cbz x2, G_M57110_IG04
+ ldr x21, [x2, #0x10] + cbz x21, G_M57110_IG04
;; size=24 bbWeight=1 PerfScore 13.50 G_M57110_IG03: ; bbWeight=0.80, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref ; gcrRegs -[x0] @@ -74,30 +74,27 @@ G_M57110_IG04: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ; gcr arg pop 0
- mov x2, x0
+ mov x21, x0
;; size=24 bbWeight=0.20 PerfScore 0.70 G_M57110_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- mov x1, x2 - str x19, [fp, #0x18] // [V02 loc0] - ; GC ptr vars +{V02} - cbz x19, G_M57110_IG08 - ;; size=12 bbWeight=1 PerfScore 2.50 -G_M57110_IG06: ; bbWeight=0.50, gcVars=0000000000000082 {V00 V02}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz - ldr x3, [x19] - cmp x3, x1 - bne G_M57110_IG08 - ;; size=12 bbWeight=0.50 PerfScore 2.25 -G_M57110_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x1, [fp, #0x18] // [V02 loc0]
+ mov x1, x21 + mov x0, x1 + mov x1, x19
; gcrRegs +[x1]
- ldr x21, [x1, #0x40] - ; gcrRegs +[x21] - cbnz x21, G_M57110_IG10 - ;; size=12 bbWeight=1 PerfScore 6.00 -G_M57110_IG08: ; bbWeight=1, gcVars=0000000000000080 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x1 x21] - ; GC ptr vars -{V02} - mov x0, x2
+ bl CORINFO_HELP_ISINSTANCEOFCLASS + ; gcrRegs -[x1] +[x0] + ; gcr arg pop 0 + str x0, [fp, #0x10] // [V02 loc0] + ; GC ptr vars +{V02} + cbz x0, G_M57110_IG06 + ldr x22, [x0, #0x40] + ; gcrRegs +[x22] + cbnz x22, G_M57110_IG08 + ;; size=32 bbWeight=1 PerfScore 8.50 +G_M57110_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x22] + ; GC ptr vars -{V00 V02} + mov x0, x21
mov x1, x19 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for <unknown method> @@ -108,28 +105,26 @@ G_M57110_IG08: ; bbWeight=1, gcVars=0000000000000080 {V00}, gcrefRegs=800 ; gcrRegs -[x1 x19] ; gcr arg pop 0 ;; size=28 bbWeight=1 PerfScore 6.50
-G_M57110_IG09: ; bbWeight=1, epilog, nogc, extend - ldr x21, [sp, #0x58] - ldp x19, x20, [sp, #0x48]
+G_M57110_IG07: ; bbWeight=1, epilog, nogc, extend + ldp x21, x22, [sp, #0x50] + ldp x19, x20, [sp, #0x40]
ldp fp, lr, [sp], #0x60 ret lr
- ;; size=16 bbWeight=1 PerfScore 5.00 -G_M57110_IG10: ; bbWeight=1, gcVars=0000000000000082 {V00 V02}, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[x21] - ; GC ptr vars +{V01 V02} - ldr x1, [fp, #0x18] // [V02 loc0] - ; gcrRegs +[x1] - str xzr, [x1, #0x40]
+ ;; size=16 bbWeight=1 PerfScore 4.00 +G_M57110_IG08: ; bbWeight=1, gcVars=0000000000000081 {V00 V02}, gcrefRegs=400001 {x0 x22}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[x0 x22] + ; GC ptr vars +{V00 V02} + str xzr, [x0, #0x40]
ldr x1, [x20, #0x38]
- ; gcrRegs -[x1]
ldr x1, [x1] ldr x11, [x1, #0x18]
- cbz x11, G_M57110_IG12 - ;; size=24 bbWeight=1 PerfScore 13.00 -G_M57110_IG11: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref - b G_M57110_IG13
+ cbz x11, G_M57110_IG10 + ;; size=20 bbWeight=1 PerfScore 11.00 +G_M57110_IG09: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0] + b G_M57110_IG11
;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M57110_IG12: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
+G_M57110_IG10: ; bbWeight=0.20, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 @@ -138,34 +133,32 @@ G_M57110_IG12: ; bbWeight=0.20, gcrefRegs=200000 {x21}, byrefRegs=0000 {} ; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.20 PerfScore 0.70
-G_M57110_IG13: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref - ldr x1, [fp, #0x18] // [V02 loc0] - ; gcrRegs +[x1] - ldrsh w1, [x1, #0x48] - ; gcrRegs -[x1] - mov x0, x21
+G_M57110_IG11: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + ldr x0, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x0]
+ ldrsh w1, [x0, #0x48] + mov x0, x22
ldr x2, [x11] blr x2 ; gcrRegs -[x0] ; gcr arg pop 0
- str w0, [fp, #0x34] // [V04 loc2]
+ str w0, [fp, #0x2C] // [V04 loc2]
;; size=24 bbWeight=1 PerfScore 10.50
-G_M57110_IG14: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
+G_M57110_IG12: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
ldr x0, [x20, #0x38] ldr x0, [x0] ldr x1, [x0, #0x08] cmp x1, #32
- ble G_M57110_IG17
+ ble G_M57110_IG15
;; size=20 bbWeight=1 PerfScore 10.50
-G_M57110_IG15: ; bbWeight=0.80, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
+G_M57110_IG13: ; bbWeight=0.80, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref, isz
ldr x11, [x0, #0x20]
- cbz x11, G_M57110_IG17
+ cbz x11, G_M57110_IG15
;; size=8 bbWeight=0.80 PerfScore 3.20
-G_M57110_IG16: ; bbWeight=0.64, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref - b G_M57110_IG18
+G_M57110_IG14: ; bbWeight=0.64, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + b G_M57110_IG16
;; size=4 bbWeight=0.64 PerfScore 0.64
-G_M57110_IG17: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
+G_M57110_IG15: ; bbWeight=0.36, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 @@ -174,20 +167,18 @@ G_M57110_IG17: ; bbWeight=0.36, gcrefRegs=200000 {x21}, byrefRegs=0000 {} ; gcr arg pop 0 mov x11, x0 ;; size=24 bbWeight=0.36 PerfScore 1.26
-G_M57110_IG18: ; bbWeight=1, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref - ldr x1, [fp, #0x18] // [V02 loc0] - ; gcrRegs +[x1] - ldrsh w1, [x1, #0x48] - ; gcrRegs -[x1] - mov x0, x21
+G_M57110_IG16: ; bbWeight=1, gcrefRegs=400000 {x22}, byrefRegs=0000 {}, byref + ldr x0, [fp, #0x10] // [V02 loc0]
; gcrRegs +[x0]
+ ldrsh w1, [x0, #0x48] + mov x0, x22
ldr x2, [x11] blr x2
- ; gcrRegs -[x21]
+ ; gcrRegs -[x22]
; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- ldr x0, [fp, #0x18] // [V02 loc0]
...

+4 (+0.40%) : 15789.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (Tier1)

@@ -12,53 +12,47 @@ ; V01 arg1 [V01,T07] ( 11, 7.50) ref -> x19 class-hnd single-def <System.Object> ; V02 loc0 [V02,T02] ( 19, 19 ) long -> [fp+0x18] do-not-enreg[Z] EH-live ; V03 loc1 [V03,T15] ( 5, 4 ) long -> x20
-; V04 loc2 [V04,T24] ( 2, 2 ) long -> x0 -; V05 loc3 [V05,T28] ( 3, 1.50) ref -> x19 class-hnd single-def <<unknown class>>
+; V04 loc2 [V04,T22] ( 2, 2 ) long -> x0 +; V05 loc3 [V05,T26] ( 3, 1.50) ref -> x19 class-hnd single-def <<unknown class>>
; V06 loc4 [V06,T03] ( 5, 16.50) int -> x2
-; V07 loc5 [V07,T25] ( 2, 2 ) long -> x0
+; V07 loc5 [V07,T23] ( 2, 2 ) long -> x0
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V09 tmp1 [V09,T16] ( 2, 4 ) byref -> x21 single-def "impAppendStmt" ; V10 tmp2 [V10,T13] ( 3, 6 ) byref -> x0 single-def "dup spill"
-; V11 tmp3 [V11,T22] ( 2, 2 ) byref -> x22 single-def "impAppendStmt" -; V12 tmp4 [V12,T19] ( 3, 3 ) byref -> x21 single-def "dup spill" -;* V13 tmp5 [V13,T31] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V14 tmp6 [V14,T23] ( 2, 2 ) ref -> x19 class-hnd "spilling QMark2" <<unknown class>> -; V15 tmp7 [V15,T04] ( 2, 16 ) byref -> x24 "impAppendStmt" -; V16 tmp8 [V16,T01] ( 3, 24 ) byref -> x0 "dup spill" -;* V17 tmp9 [V17,T32] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V18 tmp10 [V18,T30] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V19 tmp11 [V19 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V20 tmp12 [V20 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V21 tmp13 [V21,T17] ( 4, 3.50) long -> x0 "Inline stloc first use temp" -;* V22 tmp14 [V22 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V23 tmp15 [V23,T00] ( 5, 32 ) ref -> x25 class-hnd "Inlining Arg" <System.Object> -;* V24 tmp16 [V24 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V25 tmp17 [V25 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V26 tmp18 [V26,T34] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> -;* V27 tmp19 [V27,T27] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V28 tmp20 [V28,T09] ( 2, 8 ) byref -> x0 "Inlining Arg" -; V29 tmp21 [V29,T05] ( 4, 14 ) long -> x0 "Inline stloc first use temp" -;* V30 tmp22 [V30 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V31 tmp23 [V31 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V32 tmp24 [V32,T35] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V33 tmp25 [V33,T21] ( 4, 2 ) long -> x0 "Inline stloc first use temp" -;* V34 tmp26 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V35 tmp27 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <<unknown class>> -; V36 tmp28 [V36,T26] ( 2, 2 ) long -> x0 "field V19._handle (fldOffset=0x0)" P-INDEP -; V37 tmp29 [V37,T10] ( 2, 8 ) long -> x0 "field V24._handle (fldOffset=0x0)" P-INDEP -; V38 tmp30 [V38,T29] ( 2, 1 ) long -> x0 "field V30._handle (fldOffset=0x0)" P-INDEP -; V39 tmp31 [V39,T36] ( 2, 0 ) ref -> x20 single-def "argument with side effect" -; V40 tmp32 [V40,T37] ( 2, 0 ) ref -> x2 single-def "argument with side effect" -; V41 tmp33 [V41,T38] ( 2, 0 ) ref -> x20 "argument with side effect" -; V42 tmp34 [V42,T39] ( 2, 0 ) ref -> x2 "argument with side effect" -; V43 PSPSym [V43,T33] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" -;* V44 cse0 [V44 ] ( 0, 0 ) ref -> zero-ref "CSE - conservative" -; V45 cse1 [V45,T20] ( 3, 2.50) ref -> x0 "CSE - moderate" -; V46 cse2 [V46,T12] ( 5, 6 ) int -> x22 multi-def "CSE - aggressive" -; V47 cse3 [V47,T11] ( 4, 6.50) long -> x21 "CSE - aggressive" -; V48 cse4 [V48,T14] ( 2, 4.50) byref -> x19 hoist "CSE - moderate" -; V49 cse5 [V49,T06] ( 3, 12 ) int -> x23 "CSE - aggressive" -; V50 cse6 [V50,T18] ( 4, 2 ) long -> registers multi-def "CSE - moderate"
+; V11 tmp3 [V11,T21] ( 2, 2 ) byref -> x22 single-def "impAppendStmt" +; V12 tmp4 [V12,T18] ( 3, 3 ) byref -> x21 single-def "dup spill" +; V13 tmp5 [V13,T04] ( 2, 16 ) byref -> x24 "impAppendStmt" +; V14 tmp6 [V14,T01] ( 3, 24 ) byref -> x0 "dup spill" +;* V15 tmp7 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V16 tmp8 [V16 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V17 tmp9 [V17,T17] ( 4, 3.50) long -> x0 "Inline stloc first use temp" +;* V18 tmp10 [V18 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +; V19 tmp11 [V19,T00] ( 5, 32 ) ref -> x25 class-hnd "Inlining Arg" <System.Object> +;* V20 tmp12 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V21 tmp13 [V21 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V22 tmp14 [V22,T29] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> +;* V23 tmp15 [V23,T25] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V24 tmp16 [V24,T09] ( 2, 8 ) byref -> x0 "Inlining Arg" +; V25 tmp17 [V25,T05] ( 4, 14 ) long -> x0 "Inline stloc first use temp" +;* V26 tmp18 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V27 tmp19 [V27 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V28 tmp20 [V28,T30] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V29 tmp21 [V29,T20] ( 4, 2 ) long -> x0 "Inline stloc first use temp" +;* V30 tmp22 [V30 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V31 tmp23 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <<unknown class>> +; V32 tmp24 [V32,T24] ( 2, 2 ) long -> x0 "field V15._handle (fldOffset=0x0)" P-INDEP +; V33 tmp25 [V33,T10] ( 2, 8 ) long -> x0 "field V20._handle (fldOffset=0x0)" P-INDEP +; V34 tmp26 [V34,T27] ( 2, 1 ) long -> x0 "field V26._handle (fldOffset=0x0)" P-INDEP +; V35 tmp27 [V35,T31] ( 2, 0 ) ref -> x20 single-def "argument with side effect" +; V36 tmp28 [V36,T32] ( 2, 0 ) ref -> x2 single-def "argument with side effect" +; V37 tmp29 [V37,T33] ( 2, 0 ) ref -> x20 "argument with side effect" +; V38 tmp30 [V38,T34] ( 2, 0 ) ref -> x2 "argument with side effect" +; V39 PSPSym [V39,T28] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" +; V40 cse0 [V40,T12] ( 5, 6 ) int -> registers multi-def "CSE - aggressive" +; V41 cse1 [V41,T19] ( 3, 2.50) ref -> x0 "CSE - moderate" +; V42 cse2 [V42,T11] ( 4, 6.50) long -> x21 "CSE - aggressive" +; V43 cse3 [V43,T14] ( 2, 4.50) byref -> x19 hoist "CSE - moderate" +; V44 cse4 [V44,T06] ( 3, 12 ) int -> x23 "CSE - aggressive"
; ; Lcl frame size = 24 @@ -70,7 +64,7 @@ G_M14417_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x25, [sp, #0x58] mov fp, sp add x2, sp, #96
- str x2, [fp, #0x20] // [V43 PSPSym]
+ str x2, [fp, #0x20] // [V39 PSPSym]
str x0, [fp, #0x10] // [V00 this] ; GC ptr vars +{V00} mov x19, x1 @@ -85,13 +79,13 @@ G_M14417_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ;; size=8 bbWeight=1 PerfScore 1.50 G_M14417_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x1, [x19]
- movz x21, #0xD1FFAB1E - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - cmp x1, x21
+ movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + cmp x1, x2
bne G_M14417_IG05
- ldr w22, [x19, #0x08] - mov w1, w22
+ ldr w21, [x19, #0x08] + mov w1, w21
add x20, x1, #1 b G_M14417_IG06 ;; size=40 bbWeight=0.50 PerfScore 5.50 @@ -167,13 +161,14 @@ G_M14417_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, cmp x0, x1 bne G_M14417_IG22 mov w2, wzr
- ldr w22, [x19, #0x08]
+ ldr w0, [x19, #0x08] + sxtw w22, w0
cmp w22, #0 ble G_M14417_IG15 add x19, x19, #16 ; gcrRegs -[x19] ; byrRegs +[x19]
- ;; size=44 bbWeight=0.50 PerfScore 5.75
+ ;; size=48 bbWeight=0.50 PerfScore 6.00
G_M14417_IG10: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref, isz ldr x0, [fp, #0x18] // [V02 loc0] add w23, w2, #1 @@ -448,7 +443,7 @@ G_M14417_IG27: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 992, prolog size 40, PerfScore 236.00, instruction count 248, allocated bytes for code 992 (MethodHash=533fc7ae) for method System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (Tier1)
+; Total bytes of code 996, prolog size 40, PerfScore 236.25, instruction count 249, allocated bytes for code 996 (MethodHash=533fc7ae) for method System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (Tier1)
; ============================================================ Unwind Info: @@ -459,7 +454,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 225 (0x000e1) Actual length = 900 (0x000384)
+ Function Length : 226 (0x000e2) Actual length = 904 (0x000388)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

coreclr_tests.run.windows.arm64.checked.mch

-24 (-40.00%) : 218368.dasm - CastExpansionTests:CastToGenericSystem.__Canon:System.Object:this (Tier1)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <CastExpansionTests>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> x2 class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,33 +19,21 @@ G_M64337_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x1, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+G_M64337_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- mov x0, x2 - ; gcrRegs +[x0] - cbz x0, G_M64337_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M64337_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - cmp x3, x1 - beq G_M64337_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M64337_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ ldr x0, [x1, #0x38] + ldr x0, [x0]
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1-x2] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M64337_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 7.50 +G_M64337_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 8.88, instruction count 15, allocated bytes for code 60 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
+; Total bytes of code 36, prolog size 12, PerfScore 12.00, instruction count 9, allocated bytes for code 36 (MethodHash=c97f04ae) for method CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
; ============================================================ Unwind Info: @@ -58,7 +44,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-28.57%) : 314841.dasm - Program+TestDelegateFatFunctionPointers:OtherGenericSystem.__Canon:System.__Canon:this (FullOpts)

@@ -8,12 +8,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Program+TestDelegateFatFunctionPointers>
-; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def -; V02 arg1 [V02,T02] ( 3, 3 ) ref -> x2 class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T04] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V04 tmp1 [V04,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T03] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -22,40 +21,30 @@ G_M51557_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x1, [fp, #0x10]
- mov x19, x1 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M51557_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M51557_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ldr x0, [x1, #0x38] + ldr x19, [x0] + mov x0, x19
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFANY ; gcrRegs -[x1-x2] +[x0] mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M51557_IG05 - ;; size=24 bbWeight=1 PerfScore 9.00 -G_M51557_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M51557_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M51557_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ mov x0, x19
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M51557_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=32 bbWeight=1 PerfScore 10.00 +G_M51557_IG03: ; 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 84, prolog size 16, PerfScore 19.81, instruction count 21, allocated bytes for code 84 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 60, prolog size 16, PerfScore 17.50, instruction count 15, allocated bytes for code 60 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +55,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 21 (0x00015) Actual length = 84 (0x000054)
+ Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 319906.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+1.28%) : 474779.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)

@@ -11,157 +11,152 @@ ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.DefaultBinder> ;* V01 arg1 [V01 ] ( 0, 0 ) int -> zero-ref single-def
-; V02 arg2 [V02,T34] ( 6, 6 ) ref -> x20 class-hnd single-def <System.Reflection.MethodBase[]> -; V03 arg3 [V03,T17] ( 12, 13.83) ref -> [fp+0xC8] class-hnd <System.Type[]>
+; V02 arg2 [V02,T33] ( 6, 6 ) ref -> x20 class-hnd single-def <System.Reflection.MethodBase[]> +; V03 arg3 [V03,T17] ( 12, 13.83) ref -> [fp+0xD0] class-hnd <System.Type[]>
;* V04 arg4 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Reflection.ParameterModifier[]> ; V05 loc0 [V05,T15] ( 41, 22.29) int -> x24
-; V06 loc1 [V06,T13] ( 7, 34.73) int -> x26 -; V07 loc2 [V07,T43] ( 8, 6.40) ref -> x23 class-hnd exact single-def <System.Type[]> -; V08 loc3 [V08,T29] ( 12, 8.93) ref -> [fp+0xC0] class-hnd spill-single-def <System.Reflection.MethodBase[]> -; V09 loc4 [V09,T46] ( 10, 5.19) int -> registers -; V10 loc5 [V10,T76] ( 9, 0.17) int -> x25 -; V11 loc6 [V11,T82] ( 6, 0.05) ubyte -> x26
+; V06 loc1 [V06,T13] ( 7, 34.73) int -> x23 +; V07 loc2 [V07,T41] ( 8, 6.40) ref -> x23 class-hnd exact single-def <System.Type[]> +; V08 loc3 [V08,T28] ( 12, 8.93) ref -> [fp+0xC8] class-hnd spill-single-def <System.Reflection.MethodBase[]> +; V09 loc4 [V09,T44] ( 10, 5.19) int -> registers +; V10 loc5 [V10,T76] ( 9, 0.17) int -> x23 +; V11 loc6 [V11,T84] ( 6, 0.05) ubyte -> x22
; V12 loc7 [V12,T77] ( 8, 0.16) ref -> x28 class-hnd exact single-def <int[]>
-; V13 loc8 [V13,T83] ( 3, 0.03) ref -> x0 class-hnd single-def <System.Reflection.MethodBase>
+; V13 loc8 [V13,T85] ( 3, 0.03) ref -> x0 class-hnd single-def <System.Reflection.MethodBase>
;* V14 loc9 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[System.Reflection.ParameterInfo]> ;* V15 loc10 [V15 ] ( 0, 0 ) ref -> zero-ref class-hnd <System.Type>
-; V16 loc11 [V16,T35] ( 12, 7.83) ref -> [fp+0xB8] class-hnd <System.Type> -; V17 loc12 [V17,T54] ( 3, 4.37) ref -> [fp+0xB0] class-hnd <System.Reflection.SignatureType> -; V18 loc13 [V18,T04] ( 9, 80.40) ref -> [fp+0xA8] class-hnd <System.Reflection.MethodInfo> -; V19 loc14 [V19,T65] ( 6, 1.28) ref -> [fp+0xA0] class-hnd exact <System.RuntimeType>
+; V16 loc11 [V16,T34] ( 12, 7.83) ref -> [fp+0xC0] class-hnd <System.Type> +; V17 loc12 [V17,T53] ( 3, 4.37) ref -> [fp+0xB8] class-hnd <System.Reflection.SignatureType> +; V18 loc13 [V18,T09] ( 7, 42 ) ref -> [fp+0xB0] class-hnd <System.Reflection.MethodInfo> +; V19 loc14 [V19,T65] ( 5, 1.17) ref -> [fp+0xA8] class-hnd exact <System.RuntimeType>
; V20 loc15 [V20,T78] ( 6, 0.15) int -> x0 ;# V21 OutArgs [V21 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V22 tmp1 [V22,T36] ( 6, 7.47) ref -> registers class-hnd "Strict ordering of exceptions for Array store" <System.Type> -; V23 tmp2 [V23,T37] ( 4, 7.47) ref -> x25 "CASTCLASS eval op1" -; V24 tmp3 [V24,T24] ( 6, 9.33) ref -> x25 class-hnd "spilling QMark2" <System.RuntimeType> -; V25 tmp4 [V25,T86] ( 3, 0 ) ref -> x21 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V26 tmp5 [V26,T87] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V27 tmp6 [V27 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V28 tmp7 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V29 tmp8 [V29,T32] ( 4, 8.40) int -> x20 "impSpillLclRefs" -; V30 tmp9 [V30,T55] ( 2, 4.20) ref -> x15 class-hnd "Strict ordering of exceptions for Array store" <System.Reflection.MethodBase> -; V31 tmp10 [V31,T20] ( 10, 13.51) ref -> x0 "guarded devirt arg temp" -;* V32 tmp11 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -;* V33 tmp12 [V33 ] ( 0, 0 ) struct (16) zero-ref multireg-ret "guarded devirt return temp" <System.ReadOnlySpan`1[System.Reflection.ParameterInfo]> -; V34 tmp13 [V34,T18] ( 10, 15.20) ref -> x25 "guarded devirt arg temp" -;* V35 tmp14 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> -; V36 tmp15 [V36,T23] ( 14, 11.60) ref -> [fp+0x98] "guarded devirt return temp" -; V37 tmp16 [V37,T09] ( 11, 43.01) ref -> [fp+0x90] spill-single-def "guarded devirt arg temp" -;* V38 tmp17 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeParameterInfo> -; V39 tmp18 [V39,T66] ( 3, 0.47) ref -> registers "guarded devirt return temp"
+; V22 tmp1 [V22,T35] ( 6, 7.47) ref -> registers class-hnd "Strict ordering of exceptions for Array store" <System.Type> +; V23 tmp2 [V23,T88] ( 3, 0 ) ref -> x21 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V24 tmp3 [V24,T89] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V25 tmp4 [V25,T32] ( 4, 8.40) int -> x20 "impSpillLclRefs" +; V26 tmp5 [V26,T54] ( 2, 4.20) ref -> x15 class-hnd "Strict ordering of exceptions for Array store" <System.Reflection.MethodBase> +; V27 tmp6 [V27,T20] ( 10, 13.51) ref -> x0 "guarded devirt arg temp" +;* V28 tmp7 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +;* V29 tmp8 [V29 ] ( 0, 0 ) struct (16) zero-ref multireg-ret "guarded devirt return temp" <System.ReadOnlySpan`1[System.Reflection.ParameterInfo]> +; V30 tmp9 [V30,T18] ( 10, 15.20) ref -> x28 "guarded devirt arg temp" +;* V31 tmp10 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> +; V32 tmp11 [V32,T23] ( 14, 11.60) ref -> [fp+0xA0] "guarded devirt return temp" +; V33 tmp12 [V33,T08] ( 11, 43.01) ref -> [fp+0x98] spill-single-def "guarded devirt arg temp" +;* V34 tmp13 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeParameterInfo> +; V35 tmp14 [V35,T66] ( 3, 0.47) ref -> x1 "guarded devirt return temp" +;* V36 tmp15 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V37 tmp16 [V37,T63] ( 9, 1.40) ref -> [fp+0x90] "guarded devirt return temp" +;* V38 tmp17 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V39 tmp18 [V39,T60] ( 3, 2.53) int -> x0 "guarded devirt return temp"
;* V40 tmp19 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType>
-; V41 tmp20 [V41,T63] ( 9, 1.40) ref -> [fp+0x88] "guarded devirt return temp" -;* V42 tmp21 [V42 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V43 tmp22 [V43,T61] ( 3, 2.53) int -> x0 "guarded devirt return temp" -;* V44 tmp23 [V44 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -;* V45 tmp24 [V45 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Object> -; V46 tmp25 [V46,T41] ( 7, 7.01) ref -> x22 class-hnd single-def "Inline stloc first use temp" <System.Object> -;* V47 tmp26 [V47 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V48 tmp27 [V48,T57] ( 4, 4 ) byref -> x1 single-def "Inline stloc first use temp" -; V49 tmp28 [V49,T58] ( 4, 4 ) byref -> x0 single-def "Inline stloc first use temp" -; V50 tmp29 [V50,T56] ( 4, 4.01) long -> x0 "Inline stloc first use temp" -; V51 tmp30 [V51,T40] ( 7, 7.01) long -> x2 "Inline stloc first use temp" -;* V52 tmp31 [V52 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <<unknown class>> -;* V53 tmp32 [V53 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <<unknown class>> -; V54 tmp33 [V54,T60] ( 2, 4 ) byref -> x3 single-def "Inlining Arg" -;* V55 tmp34 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Reflection.ParameterInfo[]> -; V56 tmp35 [V56,T25] ( 2, 10.13) ref -> x2 class-hnd "dup spill" <System.Reflection.ParameterInfo[]> -; V57 tmp36 [V57,T21] ( 6, 11.93) ref -> x2 -; V58 tmp37 [V58,T88] ( 3, 0 ) ref -> x2 class-hnd "dup spill" <System.Reflection.ParameterInfo[]> -;* V59 tmp38 [V59 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.ParameterInfo[]> -; V60 tmp39 [V60,T89] ( 2, 0 ) ref -> x2 class-hnd exact "dup spill" <System.Signature> -; V61 tmp40 [V61,T85] ( 4, 0 ) ref -> x2 -;* V62 tmp41 [V62 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.Reflection.ParameterInfo]> -; V63 tmp42 [V63,T52] ( 4, 4.78) ref -> [fp+0x80] class-hnd "Inline stloc first use temp" <System.RuntimeType>
+;* V41 tmp20 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Object> +; V42 tmp21 [V42,T39] ( 7, 7.01) ref -> x25 class-hnd single-def "Inline stloc first use temp" <System.Object> +;* V43 tmp22 [V43 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V44 tmp23 [V44,T56] ( 4, 4 ) byref -> x1 single-def "Inline stloc first use temp" +; V45 tmp24 [V45,T57] ( 4, 4 ) byref -> x0 single-def "Inline stloc first use temp" +; V46 tmp25 [V46,T55] ( 4, 4.01) long -> x0 "Inline stloc first use temp" +; V47 tmp26 [V47,T38] ( 7, 7.01) long -> x2 "Inline stloc first use temp" +;* V48 tmp27 [V48 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <<unknown class>> +;* V49 tmp28 [V49 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <<unknown class>> +; V50 tmp29 [V50,T59] ( 2, 4 ) byref -> x3 single-def "Inlining Arg" +;* V51 tmp30 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Reflection.ParameterInfo[]> +; V52 tmp31 [V52,T24] ( 2, 10.13) ref -> x2 class-hnd "dup spill" <System.Reflection.ParameterInfo[]> +; V53 tmp32 [V53,T21] ( 6, 11.93) ref -> x2 +; V54 tmp33 [V54,T90] ( 3, 0 ) ref -> x2 class-hnd "dup spill" <System.Reflection.ParameterInfo[]> +;* V55 tmp34 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Reflection.ParameterInfo[]> +; V56 tmp35 [V56,T91] ( 2, 0 ) ref -> x2 class-hnd exact "dup spill" <System.Signature> +; V57 tmp36 [V57,T87] ( 4, 0 ) ref -> x2 +;* V58 tmp37 [V58 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.Reflection.ParameterInfo]> +; V59 tmp38 [V59,T51] ( 4, 4.78) ref -> [fp+0x88] class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V60 tmp39 [V60 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V61 tmp40 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Signature> +;* V62 tmp41 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Signature> +;* V63 tmp42 [V63 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V64 tmp43 [V64 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V65 tmp44 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Signature> -;* V66 tmp45 [V66 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Signature> -;* V67 tmp46 [V67 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V68 tmp47 [V68 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V69 tmp48 [V69,T08] ( 2, 64.32) ubyte -> x0 "Inline return value spill temp" -; V70 tmp49 [V70,T03] ( 3,136.20) ref -> [fp+0x78] class-hnd spill-single-def "Inlining Arg" <System.Type> -; V71 tmp50 [V71,T07] ( 3, 68.10) ref -> [fp+0x70] class-hnd spill-single-def "Inline stloc first use temp" <System.Reflection.SignatureType> -; V72 tmp51 [V72,T00] ( 5,491.83) ref -> [fp+0x68] class-hnd spill-single-def "Inlining Arg" <System.Reflection.ParameterInfo> -; V73 tmp52 [V73,T62] ( 3, 2.40) ref -> x1 "guarded devirt return temp" -;* V74 tmp53 [V74 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> -;* V75 tmp54 [V75 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" <System.RuntimeType[]> -; V76 tmp55 [V76,T10] ( 4, 39.71) ref -> x1 -;* V77 tmp56 [V77 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType[]> -; V78 tmp57 [V78 ] ( 4, 76.80) ref -> [fp+0xE8] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.RuntimeType[]> -;* V79 tmp58 [V79 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "spilling ret_expr" <System.Reflection.RuntimeMethodInfo> -; V80 tmp59 [V80,T06] ( 2, 76.80) long -> x0 "impAppendStmt" -;* V81 tmp60 [V81 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> -; V82 tmp61 [V82,T11] ( 2, 38.40) ref -> x1 class-hnd exact "Inline stloc first use temp" <System.RuntimeType[]> -;* V83 tmp62 [V83 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> -;* V84 tmp63 [V84 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <<unknown class>> -;* V85 tmp64 [V85 ] ( 0, 0 ) long -> zero-ref ld-addr-op "NewObj constructor temp" -;* V86 tmp65 [V86 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V87 tmp66 [V87 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> -;* V88 tmp67 [V88 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V89 tmp68 [V89,T94] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V90 tmp69 [V90 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[int]> -; V91 tmp70 [V91,T64] ( 3, 1.40) int -> x0 "Span.get_Item index" -; V92 tmp71 [V92,T71] ( 2, 0.47) int -> [fp+0xE4] spill-single-def "Inline stloc first use temp" -;* V93 tmp72 [V93 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V94 tmp73 [V94 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[int]> -; V95 tmp74 [V95,T72] ( 2, 0.47) int -> x0 "Inline return value spill temp" -;* V96 tmp75 [V96 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V97 tmp76 [V97 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V98 tmp77 [V98 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V99 tmp78 [V99 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V100 tmp79 [V100 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V101 tmp80 [V101,T67] ( 3, 0.47) int -> x0 "Inline return value spill temp" -;* V102 tmp81 [V102 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V103 tmp82 [V103 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V104 tmp83 [V104,T68] ( 3, 0.47) int -> x0 "guarded devirt return temp" -;* V105 tmp84 [V105 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -;* V106 tmp85 [V106 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V107 tmp86 [V107 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V108 tmp87 [V108 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V109 tmp88 [V109 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V110 tmp89 [V110 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V111 tmp90 [V111,T59] ( 4, 4.00) ref -> x0 "Single return block return value" -; V112 FramesRoot [V112,T05] ( 6, 78.80) long -> x21 "Pinvoke FrameListRoot" -; V113 PInvokeFrame[V113 ] ( 8, 80.80) struct (72) [fp+0x10] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" -; V114 tmp93 [V114,T26] ( 3, 10.10) byref -> [fp+0x60] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP -; V115 tmp94 [V115,T30] ( 3, 8.85) int -> x25 "field V14._length (fldOffset=0x8)" P-INDEP -; V116 tmp95 [V116,T47] ( 3, 5.07) byref -> x28 "field V33._reference (fldOffset=0x0)" P-INDEP -; V117 tmp96 [V117,T49] ( 3, 5.07) int -> x25 "field V33._length (fldOffset=0x8)" P-INDEP -; V118 tmp97 [V118,T48] ( 3, 5.07) byref -> x28 "field V62._reference (fldOffset=0x0)" P-INDEP -; V119 tmp98 [V119,T50] ( 3, 5.07) int -> x25 "field V62._length (fldOffset=0x8)" P-INDEP -;* V120 tmp99 [V120 ] ( 0, 0 ) long -> zero-ref "field V81._ptr (fldOffset=0x0)" P-INDEP -; V121 tmp100 [V121,T12] ( 2, 38.40) long -> x1 "field V87._ptr (fldOffset=0x0)" P-INDEP -; V122 tmp101 [V122,T69] ( 2, 0.47) byref -> [fp+0x58] spill-single-def "field V90._reference (fldOffset=0x0)" P-INDEP -;* V123 tmp102 [V123,T73] ( 0, 0 ) int -> zero-ref "field V90._length (fldOffset=0x8)" P-INDEP -; V124 tmp103 [V124,T70] ( 2, 0.47) byref -> x1 "field V94._reference (fldOffset=0x0)" P-INDEP -;* V125 tmp104 [V125,T74] ( 0, 0 ) int -> zero-ref "field V94._length (fldOffset=0x8)" P-INDEP -; V126 tmp105 [V126,T90] ( 2, 0 ) ref -> x22 "argument with side effect" -; V127 tmp106 [V127,T91] ( 2, 0 ) ref -> x2 "argument with side effect" -; V128 tmp107 [V128,T27] ( 3, 9.56) ref -> x1 "arr expr" -; V129 tmp108 [V129,T28] ( 3, 9.56) int -> x0 "index expr" -; V130 tmp109 [V130,T01] ( 2,242.13) ref -> x1 "argument with side effect" -;* V131 tmp110 [V131 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" -; V132 tmp111 [V132,T75] ( 4, 0.20) ref -> x0 "argument with side effect" -; V133 tmp112 [V133,T92] ( 2, 0 ) ref -> x20 single-def "argument with side effect" -; V134 tmp113 [V134,T93] ( 2, 0 ) ref -> x2 single-def "argument with side effect" -; V135 cse0 [V135,T81] ( 4, 0.06) ref -> x1 "CSE - conservative" -; V136 cse1 [V136,T44] ( 3, 5.54) ref -> x1 "CSE - moderate" -; V137 cse2 [V137,T84] ( 3, 0.02) int -> x0 "CSE - conservative" -; V138 cse3 [V138,T16] ( 5, 16.72) long -> [fp+0xD8] spill-single-def "CSE - aggressive" -; V139 cse4 [V139,T38] ( 4, 7.39) long -> x25 "CSE - moderate" -; V140 cse5 [V140,T53] ( 3, 4.78) int -> x0 "CSE - moderate" -; V141 cse6 [V141,T80] ( 4, 0.07) long -> x25 "CSE - conservative" -; V142 cse7 [V142,T02] ( 6,152.93) ref -> x1 multi-def "CSE - aggressive" -; V143 cse8 [V143,T14] ( 15, 24.00) int -> registers multi-def "CSE - moderate" -; V144 cse9 [V144,T42] ( 10, 6.65) int -> x23 "CSE - moderate" -; V145 cse10 [V145,T45] ( 6, 5.52) int -> x22 "CSE - moderate" -; V146 cse11 [V146,T39] ( 13, 7.05) long -> [fp+0xD0] hoist multi-def "CSE - moderate" -; V147 rat0 [V147,T33] ( 3, 8.26) ref -> x1 "Spilling to split statement for tree" -; V148 rat1 [V148,T19] ( 5, 13.80) ref -> x2 class-hnd "replacement local" <System.Reflection.SignatureType> -; V149 rat2 [V149,T79] ( 5, 0.14) ref -> x2 class-hnd "replacement local" <System.Reflection.SignatureType> -; V150 rat3 [V150,T22] ( 5, 11.67) ref -> registers class-hnd "replacement local" <System.Reflection.SignatureType> -; V151 rat4 [V151,T51] ( 3, 4.80) ref -> x3 "Spilling to split statement for tree" -; V152 rat5 [V152,T31] ( 5, 8.40) ref -> registers class-hnd "replacement local" <System.Reflection.MethodInfo>
+; V65 tmp44 [V65,T07] ( 2, 64.32) ubyte -> x0 "Inline return value spill temp" +; V66 tmp45 [V66,T03] ( 3,136.20) ref -> [fp+0x80] class-hnd spill-single-def "Inlining Arg" <System.Type> +; V67 tmp46 [V67,T06] ( 3, 68.10) ref -> [fp+0x78] class-hnd spill-single-def "Inline stloc first use temp" <System.Reflection.SignatureType> +; V68 tmp47 [V68,T00] ( 5,491.83) ref -> [fp+0x70] class-hnd spill-single-def "Inlining Arg" <System.Reflection.ParameterInfo> +; V69 tmp48 [V69,T61] ( 3, 2.40) ref -> x1 "guarded devirt return temp" +;* V70 tmp49 [V70 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> +;* V71 tmp50 [V71 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "dup spill" <System.RuntimeType[]> +; V72 tmp51 [V72,T10] ( 4, 39.71) ref -> x1 +;* V73 tmp52 [V73 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType[]> +; V74 tmp53 [V74 ] ( 4, 76.80) ref -> [fp+0xE8] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd "Inline stloc first use temp" <System.RuntimeType[]> +;* V75 tmp54 [V75 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "spilling ret_expr" <System.Reflection.RuntimeMethodInfo> +; V76 tmp55 [V76,T05] ( 2, 76.80) long -> x0 "impAppendStmt" +;* V77 tmp56 [V77 ] ( 0, 0 ) struct ( 8) zero-ref "spilled call-like call argument" <System.Runtime.CompilerServices.ObjectHandleOnStack> +; V78 tmp57 [V78,T11] ( 2, 38.40) ref -> x1 class-hnd exact "Inline stloc first use temp" <System.RuntimeType[]> +;* V79 tmp58 [V79 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.Reflection.RuntimeMethodInfo> +;* V80 tmp59 [V80 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <<unknown class>> +;* V81 tmp60 [V81 ] ( 0, 0 ) long -> zero-ref ld-addr-op "NewObj constructor temp" +;* V82 tmp61 [V82 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V83 tmp62 [V83 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.ObjectHandleOnStack> +;* V84 tmp63 [V84 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V85 tmp64 [V85,T96] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V86 tmp65 [V86 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[int]> +; V87 tmp66 [V87,T64] ( 3, 1.40) int -> x0 "Span.get_Item index" +; V88 tmp67 [V88,T71] ( 2, 0.47) int -> [fp+0xE4] spill-single-def "Inline stloc first use temp" +;* V89 tmp68 [V89 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V90 tmp69 [V90 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[int]> +; V91 tmp70 [V91,T72] ( 2, 0.47) int -> x0 "Inline return value spill temp" +;* V92 tmp71 [V92 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V93 tmp72 [V93 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +; V94 tmp73 [V94,T67] ( 3, 0.47) int -> x0 "Inline return value spill temp" +; V95 tmp74 [V95,T68] ( 3, 0.47) int -> x0 "guarded devirt return temp" +;* V96 tmp75 [V96 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +;* V97 tmp76 [V97 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V98 tmp77 [V98 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V99 tmp78 [V99 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +; V100 tmp79 [V100,T58] ( 4, 4.00) ref -> x0 "Single return block return value" +; V101 FramesRoot [V101,T04] ( 6, 78.80) long -> x21 "Pinvoke FrameListRoot" +; V102 PInvokeFrame[V102 ] ( 8, 80.80) struct (72) [fp+0x18] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar" +; V103 tmp82 [V103,T25] ( 3, 10.10) byref -> [fp+0x68] spill-single-def "field V14._reference (fldOffset=0x0)" P-INDEP +; V104 tmp83 [V104,T29] ( 3, 8.85) int -> x22 "field V14._length (fldOffset=0x8)" P-INDEP +; V105 tmp84 [V105,T45] ( 3, 5.07) byref -> x28 "field V29._reference (fldOffset=0x0)" P-INDEP
...

+12 (+2.52%) : 482437.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b_100(System.Object):this (Tier1)

@@ -8,25 +8,25 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.ThreadPoolTaskScheduler+<>c>
-; V01 arg1 [V01,T02] ( 6, 4.12) ref -> x19 class-hnd single-def <System.Object>
+; V01 arg1 [V01,T03] ( 6, 4 ) ref -> x19 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T12] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 8, 10.75) ref -> x20 class-hnd "spilling QMark2" <System.Threading.Tasks.Task> -;* V05 tmp3 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V07 tmp5 [V07,T07] ( 4, 2.50) ubyte -> x1 "Inline return value spill temp" -; V08 tmp6 [V08,T04] ( 4, 3 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V09 tmp7 [V09,T13] ( 3, 1 ) ubyte -> x1 "Inline return value spill temp" -; V10 tmp8 [V10,T08] ( 3, 2.34) byref -> x1 single-def "Inlining Arg" -;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> -; V12 tmp10 [V12,T14] ( 2, 1 ) int -> x0 "Inline stloc first use temp" -; V13 tmp11 [V13,T10] ( 2, 2 ) byref -> x1 single-def "argument with side effect" -; V14 cse0 [V14,T03] ( 7, 5.50) byref -> x19 "CSE - aggressive" -; V15 cse1 [V15,T11] ( 3, 1.50) ref -> x1 "CSE - moderate" -; V16 rat0 [V16,T09] ( 3, 2 ) byref -> x21 "TLS field access" -; V17 rat1 [V17,T05] ( 3, 3 ) long -> x1 "TLS access" -; V18 rat2 [V18,T06] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access" -; V19 rat3 [V19,T01] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <System.Threading.Tasks.Task>
+;* V03 tmp1 [V03 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V04 tmp2 [V04,T00] ( 5, 8 ) ref -> x20 class-hnd single-def "Inlining Arg" <System.Threading.Tasks.Task> +;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V06 tmp4 [V06,T08] ( 4, 2.50) ubyte -> x1 "Inline return value spill temp" +; V07 tmp5 [V07,T05] ( 4, 3 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V08 tmp6 [V08,T13] ( 3, 1 ) ubyte -> x1 "Inline return value spill temp" +; V09 tmp7 [V09,T09] ( 3, 2.34) byref -> x1 single-def "Inlining Arg" +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> +; V11 tmp9 [V11,T14] ( 2, 1 ) int -> x0 "Inline stloc first use temp" +; V12 tmp10 [V12,T11] ( 2, 2 ) byref -> x1 single-def "argument with side effect" +; V13 cse0 [V13,T04] ( 7, 5.50) byref -> x19 "CSE - aggressive" +; V14 cse1 [V14,T12] ( 3, 1.50) ref -> x1 "CSE - moderate" +; V15 rat0 [V15,T10] ( 3, 2 ) byref -> x21 "TLS field access" +; V16 rat1 [V16,T06] ( 3, 3 ) long -> x1 "TLS access" +; V17 rat2 [V17,T07] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access" +; V18 rat3 [V18,T01] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <System.Threading.Tasks.Task> +; V19 rat4 [V19,T02] ( 5, 7 ) ref -> x20 class-hnd "replacement local" <System.Threading.Tasks.Task>
; ; Lcl frame size = 8 @@ -49,7 +49,7 @@ G_M60851_IG03: ; bbWeight=0.50, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 cmp x0, x1
- bne G_M60851_IG23
+ bne G_M60851_IG22
;; size=24 bbWeight=0.50 PerfScore 3.00 G_M60851_IG04: ; bbWeight=1, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz cbnz x2, G_M60851_IG06 @@ -72,29 +72,18 @@ G_M60851_IG05: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, G_M60851_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz mov x20, x19 ; gcrRegs +[x20]
- cbz x20, G_M60851_IG09
+ cbz x20, G_M60851_IG08
;; size=8 bbWeight=1 PerfScore 1.50
-G_M60851_IG07: ; bbWeight=0.25, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x20] - movz x1, #0xD1FFAB1E - movk x1, #0xD1FFAB1E LSL #16 - movk x1, #0xD1FFAB1E LSL #32 - cmp x0, x1 - beq G_M60851_IG09 - ;; size=24 bbWeight=0.25 PerfScore 1.50 -G_M60851_IG08: ; bbWeight=0.12, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x20] - mov x0, x1 - mov x1, x19 - ; gcrRegs +[x1] - bl CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[x1 x19] +[x0] - ; gcr arg pop 0 - mov x20, x0 - ; gcrRegs +[x20] - ;; size=16 bbWeight=0.12 PerfScore 0.31 -G_M60851_IG09: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x0]
+G_M60851_IG07: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + ldr x1, [x20] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + cmp x1, x0 + bne G_M60851_IG23 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M60851_IG08: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x19]
add x19, x20, #52 ; byrRegs +[x19] ldapr w1, [x19] @@ -105,31 +94,31 @@ G_M60851_IG09: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, b ldapr x1, [x1] ; gcrRegs +[x1] ; byrRegs -[x1]
- cbz x1, G_M60851_IG15
+ cbz x1, G_M60851_IG14
;; size=28 bbWeight=1 PerfScore 9.50
-G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=100002 {x1 x20}, byrefRegs=80000 {x19}, byref, isz
+G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=100002 {x1 x20}, byrefRegs=80000 {x19}, byref, isz
add x0, x1, #56 ; byrRegs +[x0] ldapr w0, [x0] ; byrRegs -[x0] cmp w0, #1
- beq G_M60851_IG14
+ beq G_M60851_IG13
add x1, x1, #64 ; gcrRegs -[x1] ; byrRegs +[x1] ldr x0, [x1] ; gcrRegs +[x0]
- cbnz x0, G_M60851_IG13
+ cbnz x0, G_M60851_IG12
;; size=28 bbWeight=0.50 PerfScore 4.75
-G_M60851_IG11: ; bbWeight=0.33, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M60851_IG10: ; bbWeight=0.33, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
; gcrRegs -[x0] ; byrRegs -[x1] mov w1, wzr ;; size=4 bbWeight=0.33 PerfScore 0.17
-G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref - b G_M60851_IG16
+G_M60851_IG11: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref + b G_M60851_IG15
;; size=4 bbWeight=0.50 PerfScore 0.50
-G_M60851_IG13: ; bbWeight=0.17, gcrefRegs=100000 {x20}, byrefRegs=80002 {x1 x19}, byref
+G_M60851_IG12: ; bbWeight=0.17, gcrefRegs=100000 {x20}, byrefRegs=80002 {x1 x19}, byref
; byrRegs +[x1] ldr x1, [x1] ; gcrRegs +[x1] @@ -141,24 +130,24 @@ G_M60851_IG13: ; bbWeight=0.17, gcrefRegs=100000 {x20}, byrefRegs=80002 { ; byrRegs -[x1] cmp w1, #0 cset x1, ne
- b G_M60851_IG12
+ b G_M60851_IG11
;; size=24 bbWeight=0.17 PerfScore 1.43
-G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
mov w1, #1
- b G_M60851_IG16
+ b G_M60851_IG15
;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
+G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref
mov w1, wzr ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M60851_IG16: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
+G_M60851_IG15: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, byref, isz
ldapr w0, [x19] and w0, w0, #0xD1FFAB1E mov w2, #0xD1FFAB1E cmp w1, #0 ccmp w0, w2, z, eq
- beq G_M60851_IG20
+ beq G_M60851_IG19
;; size=24 bbWeight=1 PerfScore 6.00
-G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG16: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz
; byrRegs -[x19] ldr x1, [xpr, #0x58] ldr x1, [x1, #0x10] @@ -173,7 +162,7 @@ G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=0000 {} add x21, x1, #16 ; byrRegs +[x21] ;; size=40 bbWeight=0.50 PerfScore 10.50
-G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
; byrRegs -[x1] add x1, x21, #104 ; byrRegs +[x1] @@ -185,24 +174,24 @@ G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] ;; size=28 bbWeight=0.50 PerfScore 3.00
-G_M60851_IG19: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG18: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x3 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M60851_IG20: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, gcvars, byref, isz
+G_M60851_IG19: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=80000 {x19}, gcvars, byref, isz
; gcrRegs -[x0] ; byrRegs -[x1 x21] +[x19] ldapr w0, [x19] and w0, w0, #0xD1FFAB1E cmp w0, #0xD1FFAB1E, LSL #12
- beq G_M60851_IG22
+ beq G_M60851_IG21
ldapr w0, [x19] orr w0, w0, #0xD1FFAB1E swpal w0, w0, [x19]
- tbnz w0, #22, G_M60851_IG22
+ tbnz w0, #22, G_M60851_IG21
mov x0, x20 ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -210,14 +199,14 @@ G_M60851_IG20: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100 movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] ;; size=52 bbWeight=0.50 PerfScore 8.75
-G_M60851_IG21: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG20: ; 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_M60851_IG22: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M60851_IG21: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[x0 x20] ; byrRegs -[x19] ldr x21, [sp, #0x28] @@ -225,7 +214,7 @@ G_M60851_IG22: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M60851_IG23: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
+G_M60851_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x19] mov x1, x19 ; gcrRegs +[x1] @@ -239,18 +228,32 @@ G_M60851_IG23: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 ; gcrRegs +[x2] b G_M60851_IG04 ;; size=28 bbWeight=0 PerfScore 0.00
+G_M60851_IG23: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0 x2] + mov x1, x19 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTCLASS_SPECIAL + ; gcrRegs -[x1 x19] +[x0] + ; gcr arg pop 0 + mov x20, x0 + ; gcrRegs +[x20] + b G_M60851_IG08 + ;; size=28 bbWeight=0 PerfScore 0.00
G_M60851_IG24: ; bbWeight=0, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref
- ; gcrRegs -[x0 x2 x19] +[x20]
...

+12 (+3.37%) : 592045.dasm - ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey:Equals(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey):ubyte:this (Tier1)

@@ -5,31 +5,29 @@ ; optimized using Dynamic PGO ; fp based frame ; fully interruptible
-; with Dynamic PGO: edge weights are invalid, and fgCalledCount is 20200
+; with Dynamic PGO: edge weights are valid, and fgCalledCount is 20200
; 3 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T02] ( 4, 4 ) byref -> x0 this single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T12] ( 2, 1.46) int -> x0 "guarded devirt return temp"
+; V03 tmp1 [V03,T09] ( 2, 1.46) int -> x0 "guarded devirt return temp"
; V04 tmp2 [V04,T00] ( 6, 8 ) ref -> x20 single-def "guarded devirt arg temp" ;* V05 tmp3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> ;* V06 tmp4 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.Object>
-; V07 tmp5 [V07,T11] ( 3, 1.46) int -> x0 -;* V08 tmp6 [V08,T07] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V09 tmp7 [V09,T03] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <Internal.TypeSystem.TypeDesc> -; V10 tmp8 [V10,T06] ( 3, 2.92) ref -> x21 class-hnd "impAppendStmt" <Internal.TypeSystem.TypeSystemContext> -;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> -; V12 tmp10 [V12,T13] ( 3, 0.82) ref -> x21 "guarded devirt return temp" -; V13 tmp11 [V13,T09] ( 5, 2.45) ref -> x0 single-def "guarded devirt arg temp" -;* V14 tmp12 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> -; V15 tmp13 [V15,T10] ( 3, 1.46) ref -> x22 "guarded devirt return temp" -; V16 tmp14 [V16,T04] ( 5, 4.38) ref -> x0 single-def "guarded devirt arg temp" -;* V17 tmp15 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> -; V18 tmp16 [V18,T01] ( 8, 4.51) ref -> x19 single-def "field V01.Target (fldOffset=0x0)" P-INDEP -; V19 tmp17 [V19,T05] ( 2, 2 ) int -> x2 single-def "field V01.Id (fldOffset=0x8)" P-INDEP -; V20 cse0 [V20,T08] ( 3, 2.73) long -> x21 "CSE - aggressive"
+; V07 tmp5 [V07,T08] ( 3, 1.46) int -> x0 +; V08 tmp6 [V08,T05] ( 3, 2.92) ref -> x21 class-hnd "impAppendStmt" <Internal.TypeSystem.TypeSystemContext> +;* V09 tmp7 [V09,T10] ( 0, 0 ) ref -> zero-ref single-def "guarded devirt arg temp" +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaType> +; V11 tmp9 [V11,T11] ( 3, 0.82) ref -> x21 "guarded devirt return temp" +; V12 tmp10 [V12,T06] ( 5, 2.45) ref -> x0 single-def "guarded devirt arg temp" +;* V13 tmp11 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> +; V14 tmp12 [V14,T07] ( 3, 1.46) ref -> x22 "guarded devirt return temp" +; V15 tmp13 [V15,T03] ( 5, 4.38) ref -> x0 single-def "guarded devirt arg temp" +;* V16 tmp14 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Internal.TypeSystem.Ecma.EcmaAssembly> +; V17 tmp15 [V17,T01] ( 8, 4.51) ref -> x19 single-def "field V01.Target (fldOffset=0x0)" P-INDEP +; V18 tmp16 [V18,T04] ( 2, 2 ) int -> x2 single-def "field V01.Id (fldOffset=0x8)" P-INDEP
; ; Lcl frame size = 0 @@ -49,14 +47,14 @@ G_M34119_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0001 {x0}, ldr x20, [x0] ; gcrRegs +[x20] ldr x1, [x20]
- movz x21, #0xD1FFAB1E - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - cmp x1, x21
+ movz x0, #0xD1FFAB1E + ; byrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + cmp x1, x0
bne G_M34119_IG11 ;; size=40 bbWeight=1 PerfScore 13.50 G_M34119_IG03: ; bbWeight=0.73, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz
- ; byrRegs -[x0]
mov x1, x19 ; gcrRegs +[x1] movz x0, #0xD1FFAB1E @@ -68,9 +66,12 @@ G_M34119_IG03: ; bbWeight=0.73, gcrefRegs=180000 {x19 x20}, byrefRegs=000 cbz x0, G_M34119_IG17 ldr x0, [x19] ; gcrRegs -[x0]
- cmp x0, x21
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + cmp x0, x1
bne G_M34119_IG07
- ;; size=36 bbWeight=0.73 PerfScore 6.21
+ ;; size=48 bbWeight=0.73 PerfScore 7.30
G_M34119_IG04: ; bbWeight=0.41, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz ldr x0, [x19, #0x58] ; gcrRegs +[x0] @@ -187,7 +188,7 @@ G_M34119_IG17: ; bbWeight=0, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 { b G_M34119_IG09 ;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 356, prolog size 20, PerfScore 54.13, instruction count 89, allocated bytes for code 356 (MethodHash=958b7ab8) for method ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey:Equals(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey):ubyte:this (Tier1)
+; Total bytes of code 368, prolog size 20, PerfScore 55.23, instruction count 92, allocated bytes for code 368 (MethodHash=958b7ab8) for method ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey:Equals(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -198,7 +199,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 89 (0x00059) Actual length = 356 (0x000164)
+ Function Length : 92 (0x0005c) Actual length = 368 (0x000170)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

libraries.pmi.windows.arm64.checked.mch

-28 (-46.67%) : 29403.dasm - Microsoft.FSharp.Core.Operators+Unchecked:UnboxSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,37 +18,19 @@ G_M7606_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M7606_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M7606_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M7606_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M7606_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M7606_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M7606_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M7606_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M7606_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +41,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 216663.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-40 (-33.33%) : 248275.dasm - System.Collections.Immutable.ImmutableSortedDictionary2+Builder[System.__Canon,System.Nullable1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)

@@ -8,76 +8,48 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 5, 4.25) ref -> x19 this class-hnd single-def <System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]> -; V01 arg1 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> [fp+0x18] class-hnd "spilling QMark2" <System.__Canon>
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 class-hnd single-def "Inlining Arg" <System.__Canon>
;
-; Lcl frame size = 24
+; Lcl frame size = 8
G_M51997_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 x0, [fp, #0x20]
+ str x0, [fp, #0x10]
mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M51997_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M51997_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M51997_IG07 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M51997_IG03: ; bbWeight=0.25, gcrefRegs=80006 {x1 x2 x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x2] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x0, x3 - str x2, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - beq G_M51997_IG05 - ;; size=32 bbWeight=0.25 PerfScore 4.38 -G_M51997_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2] - ; GC ptr vars -{V04} - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- str x0, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - ;; size=12 bbWeight=0.12 PerfScore 0.31 -G_M51997_IG05: ; bbWeight=1, gcVars=0000000000000001 {V04}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0] - ldp x0, x2, [x19, #0x08] - ; gcrRegs +[x0 x2] - ldr x1, [fp, #0x18] // [V04 tmp2]
+ mov x1, x0
; gcrRegs +[x1]
+ ldp x0, x2, [x19, #0x08] + ; gcrRegs +[x2]
movz x3, #0xD1FFAB1E // code for System.Collections.Immutable.ImmutableSortedDictionary`2+Node[System.__Canon,System.Nullable`1[int]]:ContainsKey(System.__Canon,System.Collections.Generic.IComparer`1[System.__Canon]):ubyte:this movk x3, #0xD1FFAB1E LSL #16 movk x3, #0xD1FFAB1E LSL #32 ldr x3, [x3] ldr wzr, [x0]
- ;; size=28 bbWeight=1 PerfScore 13.50 -G_M51997_IG06: ; bbWeight=1, epilog, nogc, extend - ldr x19, [sp, #0x28] - ldp fp, lr, [sp], #0x30
+ ;; size=48 bbWeight=1 PerfScore 25.00 +G_M51997_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20
br x3 ; gcr arg pop 0 ;; size=12 bbWeight=1 PerfScore 4.00
-G_M51997_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0-x1] - ; GC ptr vars -{V04} - str x2, [fp, #0x18] // [V04 tmp2] - ; GC ptr vars +{V04} - b G_M51997_IG05 - ;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 120, prolog size 20, PerfScore 28.69, instruction count 30, allocated bytes for code 120 (MethodHash=24b334e2) for method System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 80, prolog size 20, PerfScore 33.00, instruction count 20, allocated bytes for code 80 (MethodHash=24b334e2) for method System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -88,7 +60,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 30 (0x0001e) Actual length = 120 (0x000078)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -96,8 +68,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

+8 (+1.67%) : 174251.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)

@@ -8,27 +8,26 @@ ; 2 inlinees with PGO data; 5 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T10] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.ColumnTypeConverter> -; V01 arg1 [V01,T11] ( 3, 2.50) ref -> x1 class-hnd single-def <System.ComponentModel.ITypeDescriptorContext> -; V02 arg2 [V02,T12] ( 3, 2.50) ref -> x2 class-hnd single-def <System.Globalization.CultureInfo> -; V03 arg3 [V03,T01] ( 8, 25.91) ref -> x19 class-hnd single-def <System.Object>
+; V00 this [V00,T09] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.ColumnTypeConverter> +; V01 arg1 [V01,T10] ( 3, 2.50) ref -> x1 class-hnd single-def <System.ComponentModel.ITypeDescriptorContext> +; V02 arg2 [V02,T11] ( 3, 2.50) ref -> x2 class-hnd single-def <System.Globalization.CultureInfo> +; V03 arg3 [V03,T06] ( 7, 9.99) ref -> x19 class-hnd single-def <System.Object>
; V04 loc0 [V04,T04] ( 8, 21.50) int -> x20 ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T08] ( 2, 4 ) ubyte -> x0 "Inline return value spill temp"
+; V06 tmp1 [V06,T12] ( 2, 4 ) ubyte -> x0 "Inline return value spill temp"
; V07 tmp2 [V07,T00] ( 6, 63.81) ref -> x0 class-hnd exact "Inlining Arg" <System.String>
-;* V08 tmp3 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.String> -;* V09 tmp4 [V09,T05] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.String> -; V10 tmp5 [V10,T07] ( 2, 8 ) byref -> x3 "impAppendStmt"
+; V08 tmp3 [V08,T03] ( 4, 21.88) ref -> x1 class-hnd exact "Inline stloc first use temp" <System.String> +; V09 tmp4 [V09,T07] ( 2, 8 ) byref -> x3 "impAppendStmt" +;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp7 [V12 ] ( 0, 0 ) ubyte -> zero-ref "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 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V16 tmp11 [V16,T02] ( 3, 24 ) ref -> x0 "arr expr" -; V17 tmp12 [V17,T03] ( 3, 24 ) ref -> x0 "argument with side effect" -; V18 tmp13 [V18,T13] ( 3, 3 ) ref -> x0 single-def "arr expr" -;* V19 cse0 [V19,T09] ( 0, 0 ) long -> zero-ref multi-def "CSE - aggressive" -; V20 cse1 [V20,T06] ( 7, 14 ) long -> x21 multi-def "CSE - aggressive"
+; V15 tmp10 [V15,T01] ( 3, 24 ) ref -> x0 "arr expr" +; V16 tmp11 [V16,T02] ( 3, 24 ) ref -> x0 "argument with side effect" +; V17 tmp12 [V17,T13] ( 3, 3 ) ref -> x0 single-def "arr expr" +;* V18 cse0 [V18,T08] ( 0, 0 ) long -> zero-ref multi-def "CSE - aggressive" +; V19 cse1 [V19,T05] ( 7, 14 ) long -> x21 multi-def "CSE - aggressive"
; ; Lcl frame size = 8 @@ -42,7 +41,7 @@ G_M21223_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=20 bbWeight=1 PerfScore 4.00 G_M21223_IG02: ; bbWeight=1, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[x0-x2]
- cbz x19, G_M21223_IG15
+ cbz x19, G_M21223_IG16
;; size=4 bbWeight=1 PerfScore 1.00 G_M21223_IG03: ; bbWeight=0.50, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, byref, isz ldr x3, [x19] @@ -50,14 +49,14 @@ G_M21223_IG03: ; bbWeight=0.50, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs movk x4, #0xD1FFAB1E LSL #16 movk x4, #0xD1FFAB1E LSL #32 cmp x3, x4
- bne G_M21223_IG15
+ bne G_M21223_IG16
mov w20, wzr movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr w0, [x0]
- tbz w0, #0, G_M21223_IG18
+ tbz w0, #0, G_M21223_IG19
;; size=48 bbWeight=0.50 PerfScore 6.00 G_M21223_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x1-x2] @@ -69,14 +68,14 @@ G_M21223_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ldr w0, [x0, #0x08] ; gcrRegs -[x0] cmp w0, #0
- ble G_M21223_IG10
+ ble G_M21223_IG11
;; size=28 bbWeight=0.50 PerfScore 4.50 G_M21223_IG05: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x0, [x21] ; gcrRegs +[x0] ldr w1, [x0, #0x08] cmp w20, w1
- bhs G_M21223_IG17
+ bhs G_M21223_IG18
add x0, x0, #16 ; gcrRegs -[x0] ; byrRegs +[x0] @@ -90,21 +89,27 @@ G_M21223_IG05: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcr arg pop 0 ldrsb wzr, [x0] cmp x0, x19
- beq G_M21223_IG12
+ beq G_M21223_IG13
;; size=52 bbWeight=4 PerfScore 102.00
-G_M21223_IG06: ; bbWeight=15.91, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG06: ; bbWeight=1.99, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz + mov x1, x19 + ; gcrRegs +[x1] + cbz x1, G_M21223_IG09 + ;; size=8 bbWeight=1.99 PerfScore 2.98 +G_M21223_IG07: ; bbWeight=15.91, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz
ldr w2, [x0, #0x08]
- ldr w1, [x19, #0x08] - cmp w2, w1 - bne G_M21223_IG08
+ ldr w3, [x1, #0x08] + cmp w2, w3 + bne G_M21223_IG09
;; size=16 bbWeight=15.91 PerfScore 119.30
-G_M21223_IG07: ; bbWeight=2, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG08: ; bbWeight=2, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz
add x3, x0, #12 ; byrRegs +[x3] ldr w2, [x0, #0x08] lsl w2, w2, #1 mov w2, w2
- add x1, x19, #12
+ add x1, x1, #12 + ; gcrRegs -[x1]
; byrRegs +[x1] mov x0, x3 ; gcrRegs -[x0] @@ -117,17 +122,17 @@ G_M21223_IG07: ; bbWeight=2, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, blr x3 ; byrRegs -[x0-x1] ; gcr arg pop 0
- cbnz w0, G_M21223_IG12
+ cbnz w0, G_M21223_IG13
;; size=48 bbWeight=2 PerfScore 25.00
-G_M21223_IG08: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
add w20, w20, #1 movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr w0, [x0]
- tbz w0, #0, G_M21223_IG19
+ tbz w0, #0, G_M21223_IG20
;; size=24 bbWeight=4 PerfScore 24.00
-G_M21223_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG10: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 @@ -138,26 +143,26 @@ G_M21223_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by cmp w0, w20 bgt G_M21223_IG05 ;; size=28 bbWeight=4 PerfScore 36.00
-G_M21223_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M21223_IG11: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19] movz x0, #184 movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ;; size=12 bbWeight=0.50 PerfScore 0.75
-G_M21223_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_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.50
-G_M21223_IG12: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M21223_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ldr w2, [x0]
- tbz w2, #0, G_M21223_IG20
+ tbz w2, #0, G_M21223_IG21
;; size=20 bbWeight=0.50 PerfScore 2.75
-G_M21223_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M21223_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
movz x21, #0xD1FFAB1E // data for <unknown class>:<unknown field> movk x21, #0xD1FFAB1E LSL #16 movk x21, #0xD1FFAB1E LSL #32 @@ -165,7 +170,7 @@ G_M21223_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs +[x0] ldr w1, [x0, #0x08] cmp w20, w1
- bhs G_M21223_IG17
+ bhs G_M21223_IG18
add x0, x0, #16 ; gcrRegs -[x0] ; byrRegs +[x0] @@ -173,13 +178,13 @@ G_M21223_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs +[x0] ; byrRegs -[x0] ;; size=36 bbWeight=0.50 PerfScore 6.25
-G_M21223_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG15: ; 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_M21223_IG15: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref
+G_M21223_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80007 {x0 x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x1-x2 x19] mov x3, x19 ; gcrRegs +[x3] @@ -188,19 +193,19 @@ G_M21223_IG15: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=800 movk x4, #0xD1FFAB1E LSL #32 ldr x4, [x4] ;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M21223_IG16: ; bbWeight=0.50, epilog, nogc, extend
+G_M21223_IG17: ; bbWeight=0.50, epilog, nogc, extend
ldr x21, [sp, #0x28] ldp x19, x20, [sp, #0x18] ldp fp, lr, [sp], #0x30 br x4 ; gcr arg pop 0 ;; size=16 bbWeight=0.50 PerfScore 2.50
-G_M21223_IG17: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M21223_IG18: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0-x3 x19] bl CORINFO_HELP_RNGCHKFAIL ; gcr arg pop 0 ;; size=4 bbWeight=0 PerfScore 0.00
-G_M21223_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M21223_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x19] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -210,16 +215,16 @@ G_M21223_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcr arg pop 0 b G_M21223_IG04 ;; size=24 bbWeight=0 PerfScore 0.00
-G_M21223_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M21223_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 mov w1, #54 bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE ; gcr arg pop 0
- b G_M21223_IG09
+ b G_M21223_IG10
;; size=24 bbWeight=0 PerfScore 0.00
-G_M21223_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M21223_IG21: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -227,10 +232,10 @@ G_M21223_IG20: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov w1, #54 bl CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE ; gcr arg pop 0
- b G_M21223_IG13
+ b G_M21223_IG14
;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 480, prolog size 20, PerfScore 341.55, instruction count 120, allocated bytes for code 480 (MethodHash=3d9fad18) for method System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
...

+4 (+2.63%) : 258239.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,18 +10,17 @@ ; ; V00 this [V00,T02] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> x1 class-hnd single-def <System.Object>
-; V02 loc0 [V02,T06] ( 2, 1 ) ref -> x1 class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T04] ( 3, 1.50) ref -> x1 class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 6, 4.92) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T03] ( 5, 4.33) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T05] ( 4, 1 ) ubyte -> x0 "Inline return value spill temp" -; V08 tmp5 [V08,T04] ( 2, 1.17) byref -> x0 single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 6, 4.92) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T03] ( 5, 4.33) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T06] ( 4, 1 ) ubyte -> x0 "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 1.17) byref -> x0 single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; ; Lcl frame size = 0 @@ -51,12 +50,13 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=8 bbWeight=0.50 PerfScore 1.00 G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[x0-x1]
+ cbz x1, G_M57556_IG04
ldr x2, [x0, #0x08] ; gcrRegs +[x2] ldr x1, [x1, #0x08] cmp x2, x1 beq G_M57556_IG13
- ;; size=16 bbWeight=0.50 PerfScore 3.75
+ ;; size=20 bbWeight=0.50 PerfScore 4.25
G_M57556_IG07: ; bbWeight=0.44, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] cbz x2, G_M57556_IG12 @@ -100,7 +100,7 @@ G_M57556_IG13: ; bbWeight=0.06, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr b G_M57556_IG11 ;; size=8 bbWeight=0.06 PerfScore 0.10
-; Total bytes of code 152, prolog size 8, PerfScore 19.18, instruction count 38, allocated bytes for code 152 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 156, prolog size 8, PerfScore 19.68, instruction count 39, allocated bytes for code 156 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -111,7 +111,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 152 (0x000098)
+ 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)

+4 (+2.63%) : 259820.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,18 +10,17 @@ ; ; V00 this [V00,T02] ( 3, 2.50) ref -> x0 this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> x1 class-hnd single-def <System.Object>
-; V02 loc0 [V02,T06] ( 2, 1 ) ref -> x1 class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T04] ( 3, 1.50) ref -> x1 class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 6, 4.92) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T03] ( 5, 4.33) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T05] ( 4, 1 ) ubyte -> x0 "Inline return value spill temp" -; V08 tmp5 [V08,T04] ( 2, 1.17) byref -> x0 single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 6, 4.92) ref -> x2 class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T03] ( 5, 4.33) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T06] ( 4, 1 ) ubyte -> x0 "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 1.17) byref -> x0 single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; ; Lcl frame size = 0 @@ -51,12 +50,13 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=8 bbWeight=0.50 PerfScore 1.00 G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[x0-x1]
+ cbz x1, G_M57556_IG04
ldr x2, [x0, #0x08] ; gcrRegs +[x2] ldr x1, [x1, #0x08] cmp x2, x1 beq G_M57556_IG13
- ;; size=16 bbWeight=0.50 PerfScore 3.75
+ ;; size=20 bbWeight=0.50 PerfScore 4.25
G_M57556_IG07: ; bbWeight=0.44, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0] cbz x2, G_M57556_IG12 @@ -100,7 +100,7 @@ G_M57556_IG13: ; bbWeight=0.06, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr b G_M57556_IG11 ;; size=8 bbWeight=0.06 PerfScore 0.10
-; Total bytes of code 152, prolog size 8, PerfScore 19.18, instruction count 38, allocated bytes for code 152 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 156, prolog size 8, PerfScore 19.68, instruction count 39, allocated bytes for code 156 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info: @@ -111,7 +111,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 38 (0x00026) Actual length = 152 (0x000098)
+ 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)

libraries_tests.run.windows.arm64.Release.mch

-28 (-46.67%) : 569293.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (Tier1)

@@ -8,12 +8,10 @@ ; with Dynamic PGO: edge weights are valid, and fgCalledCount is 67264 ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.50) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.25) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 2.50) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 7.50) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -22,37 +20,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.50, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.50 PerfScore 5.25 -G_M8451_IG04: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 12.12, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
; ============================================================ Unwind Info: @@ -63,7 +43,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-35.29%) : 62297.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.Canon,System.Canon]:Single():System.__Canon:this (Tier1)

@@ -7,12 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> x0 this single-def -; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def
+; V00 this [V00,T01] ( 3, 3 ) byref -> x2 this single-def +; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x2 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,38 +17,25 @@ G_M64707_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x20]! mov fp, sp str x1, [fp, #0x18]
- ;; size=12 bbWeight=1 PerfScore 2.50 -G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz - ; byrRegs +[x0] - ldr x2, [x0] - ; gcrRegs +[x2] - mov x0, x2 - ; gcrRegs +[x0] - ; byrRegs -[x0] - cbz x0, G_M64707_IG05 - ;; size=12 bbWeight=1 PerfScore 4.50 -G_M64707_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - ldr x1, [x1, #0x08] - cmp x3, x1 - beq G_M64707_IG05 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M64707_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1 - mov x1, x2
+ mov x2, x0 + ; byrRegs +[x2] + ;; size=16 bbWeight=1 PerfScore 3.00 +G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0004 {x2}, byref + ldr x0, [x1, #0x38] + ldr x0, [x0] + ldr x0, [x0, #0x08] + ldr x1, [x2]
; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[x1-x2] +[x0] - ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M64707_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ; gcrRegs -[x1] +[x0] + ; byrRegs -[x2] + ;; size=20 bbWeight=1 PerfScore 13.00 +G_M64707_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 68, prolog size 12, PerfScore 12.62, instruction count 17, allocated bytes for code 68 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
+; Total bytes of code 44, prolog size 12, PerfScore 18.00, instruction count 11, allocated bytes for code 44 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -62,7 +46,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 17 (0x00011) Actual length = 68 (0x000044)
+ Function Length : 11 (0x0000b) Actual length = 44 (0x00002c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-48 (-30.77%) : 517391.dasm - Moq.Mock`1[System.Canon]:get_Object():System.Canon:this (Tier1)

@@ -8,13 +8,11 @@ ; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 7, 3.87) ref -> x19 this class-hnd single-def <Moq.Mock`1[System.__Canon]>
+; V00 this [V00,T00] ( 5, 3.50) ref -> x0 this class-hnd single-def <Moq.Mock`1[System.__Canon]>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V05 tmp4 [V05,T02] ( 4, 1.62) ref -> x1 "guarded devirt return temp" -;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Moq.Mock`1[System.IO.Stream]>
+; V02 tmp1 [V02,T02] ( 3, 1.50) ref -> x1 "guarded devirt return temp" +;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Moq.Mock`1[System.IO.Stream]> +; V04 cse0 [V04,T01] ( 4, 3.12) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -22,21 +20,17 @@ G_M6043_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp
- str x0, [fp, #0x10] - mov x19, x0 - ; gcrRegs +[x19] - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M6043_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19]
+ ;; size=12 bbWeight=1 PerfScore 2.50 +G_M6043_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[x0] + ldr x19, [x0]
movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32
- cmp x0, x1
+ cmp x19, x1
bne G_M6043_IG04 ;; size=24 bbWeight=1 PerfScore 6.00
-G_M6043_IG03: ; bbWeight=0.39, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - mov x0, x19 - ; gcrRegs +[x0]
+G_M6043_IG03: ; bbWeight=0.39, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
movz x1, #0xD1FFAB1E // code for Moq.Mock`1[System.__Canon]:OnGetObject():System.Object:this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -45,46 +39,30 @@ G_M6043_IG03: ; bbWeight=0.39, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, mov x1, x0 ; gcrRegs +[x1] b G_M6043_IG05
- ;; size=32 bbWeight=0.39 PerfScore 2.89 -G_M6043_IG04: ; bbWeight=0.12, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0-x1] - mov x0, x19 - ; gcrRegs +[x0] - ldr x1, [x19] - ldr x1, [x1, #0x58]
+ ;; size=28 bbWeight=0.39 PerfScore 2.69 +G_M6043_IG04: ; bbWeight=0.12, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref + ; gcrRegs -[x1] + ldr x1, [x19, #0x58]
ldr x1, [x1] blr x1 mov x1, x0 ; gcrRegs +[x1]
- ;; size=24 bbWeight=0.12 PerfScore 1.27 -G_M6043_IG05: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+ ;; size=16 bbWeight=0.12 PerfScore 0.86 +G_M6043_IG05: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M6043_IG08 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M6043_IG06: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M6043_IG08 - ;; size=28 bbWeight=0.25 PerfScore 4.12 -G_M6043_IG07: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M6043_IG08: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 10.00 +G_M6043_IG06: ; 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 156, prolog size 16, PerfScore 23.97, instruction count 39, allocated bytes for code 156 (MethodHash=4a40e864) for method Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
+; Total bytes of code 108, prolog size 12, PerfScore 26.06, instruction count 27, allocated bytes for code 108 (MethodHash=4a40e864) for method Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -95,7 +73,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 39 (0x00027) Actual length = 156 (0x00009c)
+ Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+16 (+10.00%) : 423400.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)

@@ -11,13 +11,11 @@ ; ; V00 this [V00,T02] ( 4, 3 ) ref -> x0 this class-hnd <OLEDB.Test.ModuleCore.CTestCase> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T03] ( 3, 4.50) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T06] ( 3, 2.50) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 7.50) ref -> x0 class-hnd "spilling QMark2" <OLEDB.Test.ModuleCore.CTestModule> -; V05 tmp4 [V05,T07] ( 2, 0 ) ref -> x0 single-def "arg temp" -; V06 cse0 [V06,T05] ( 4, 3 ) ref -> x19 "CSE - aggressive" -; V07 rat0 [V07,T04] ( 3, 4 ) ref -> x1 "Spilling to split statement for tree" -; V08 rat1 [V08,T01] ( 6, 7 ) ref -> x2 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
+; V02 tmp1 [V02,T05] ( 2, 0 ) ref -> x0 single-def "arg temp" +; V03 cse0 [V03,T04] ( 5, 3 ) ref -> x19 "CSE - aggressive" +; V04 rat0 [V04,T03] ( 3, 4 ) ref -> x1 "Spilling to split statement for tree" +; V05 rat1 [V05,T00] ( 5, 7 ) ref -> x2 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule> +; V06 rat2 [V06,T01] ( 5, 7 ) ref -> x0 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
; ; Lcl frame size = 8 @@ -38,38 +36,42 @@ G_M5100_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref ;; size=16 bbWeight=1 PerfScore 5.00 G_M5100_IG03: ; bbWeight=1, gcrefRegs=80004 {x2 x19}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[x0-x1]
- cbz x2, G_M5100_IG10 - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M5100_IG04: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x2] - mov x1, x19 - ; gcrRegs +[x1] - mov x0, x1
+ cbz x2, G_M5100_IG07 + mov x0, x19
; gcrRegs +[x0]
- cbz x0, G_M5100_IG07 - ;; size=12 bbWeight=1 PerfScore 2.00 -G_M5100_IG05: ; bbWeight=0.50, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[x19] - ldr x2, [x0] - movz x3, #0xD1FFAB1E - movk x3, #0xD1FFAB1E LSL #16 - movk x3, #0xD1FFAB1E LSL #32 - cmp x2, x3 - beq G_M5100_IG07 - ;; size=24 bbWeight=0.50 PerfScore 3.00 -G_M5100_IG06: ; bbWeight=0.25, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3 - bl CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[x1] +[x0] - ; gcr arg pop 0 - ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M5100_IG07: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ cbnz x0, G_M5100_IG05 + ;; size=12 bbWeight=1 PerfScore 2.50 +G_M5100_IG04: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[x2 x19]
ldr x19, [sp, #0x18] ldp fp, lr, [sp], #0x20 ret lr ;; size=12 bbWeight=1 PerfScore 4.00
-G_M5100_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80006 {x1 x2 x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M5100_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[x19] + ldr x1, [x0] + movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + cmp x1, x2 + beq G_M5100_IG04 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M5100_IG06: ; bbWeight=0.07, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x0] + b G_M5100_IG10 + ;; size=4 bbWeight=0.07 PerfScore 0.07 +G_M5100_IG07: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + mov x1, x19 + ; gcrRegs +[x1] + movz x0, #0xD1FFAB1E + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + bl CORINFO_HELP_CHKCASTCLASS + ; gcrRegs -[x1 x19] +[x0] + ; gcr arg pop 0 + b G_M5100_IG02 + ;; size=24 bbWeight=0 PerfScore 0.00 +G_M5100_IG08: ; bbWeight=0.50, gcrefRegs=80006 {x1 x2 x19}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[x0] +[x1-x2 x19] ldr x0, [x2] movz x3, #0xD1FFAB1E @@ -78,7 +80,7 @@ G_M5100_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=8000 cmp x0, x3 beq G_M5100_IG03 ;; size=24 bbWeight=0.50 PerfScore 3.00
-G_M5100_IG09: ; bbWeight=0, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M5100_IG09: ; bbWeight=0, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs -[x2] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 @@ -88,7 +90,7 @@ G_M5100_IG09: ; bbWeight=0, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x2, x0 ; gcrRegs +[x2]
- cbnz x2, G_M5100_IG04
+ b G_M5100_IG03
;; size=24 bbWeight=0 PerfScore 0.00 G_M5100_IG10: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref ; gcrRegs -[x0 x2] @@ -100,10 +102,10 @@ G_M5100_IG10: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr bl CORINFO_HELP_CHKCASTCLASS ; gcrRegs -[x1 x19] +[x0] ; gcr arg pop 0
- b G_M5100_IG02
+ b G_M5100_IG04
;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 160, prolog size 12, PerfScore 20.88, instruction count 40, allocated bytes for code 160 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
+; Total bytes of code 176, prolog size 12, PerfScore 20.07, instruction count 44, allocated bytes for code 176 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
; ============================================================ Unwind Info: @@ -114,7 +116,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
+ 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)

+36 (+12.50%) : 217737.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -11,45 +11,56 @@ ; ; V00 arg0 [V00,T00] ( 11, 7 ) ref -> x19 class-hnd single-def <System.Type> ;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T08] ( 3, 2 ) ref -> x0 "guarded devirt return temp"
+; V02 tmp1 [V02,T07] ( 3, 2 ) ref -> x0 "guarded devirt return temp"
;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V04 tmp3 [V04,T07] ( 4, 2 ) ubyte -> x1 "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T12] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T09] ( 3, 2 ) int -> x22 -; V09 tmp8 [V09,T10] ( 2, 2 ) ubyte -> x1 "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V12 tmp11 [V12,T03] ( 2, 4 ) byref -> x22 single-def "Inlining Arg" -;* V13 tmp12 [V13,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V14 tmp13 [V14,T04] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V15 tmp14 [V15 ] ( 0, 0 ) long -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V16 tmp15 [V16,T05] ( 3, 3 ) long -> x22 "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 cse0 [V17,T01] ( 3, 3 ) long -> x20 "CSE - aggressive" -; V18 cse1 [V18,T02] ( 3, 3 ) long -> x21 "CSE - aggressive" -; V19 cse2 [V19,T06] ( 3, 3 ) int -> x0 "CSE - moderate"
+; V04 tmp3 [V04,T06] ( 4, 2 ) ubyte -> x1 "Inline return value spill temp" +; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> x20 class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T08] ( 3, 2 ) int -> x21 +; V08 tmp7 [V08,T09] ( 2, 2 ) ubyte -> x1 "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +; V11 tmp10 [V11,T03] ( 2, 4 ) byref -> x21 single-def "Inlining Arg" +;* V12 tmp11 [V12,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V13 tmp12 [V13 ] ( 0, 0 ) long -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V14 tmp13 [V14,T04] ( 3, 3 ) long -> x21 "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 cse0 [V15,T05] ( 3, 3 ) int -> x0 "CSE - aggressive" +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> x20 class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG stp fp, lr, [sp, #-0x30]!
- stp x19, x20, [sp, #0x10] - stp x21, x22, [sp, #0x20]
+ stp x19, x20, [sp, #0x18] + str x21, [sp, #0x28]
mov fp, sp mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00 G_M8853_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- ldr x20, [x19] - movz x21, #0xD1FFAB1E - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - cmp x20, x21 - bne G_M8853_IG10 - ldr x22, [x19, #0x18] - and w0, w22, #2 - cbnz w0, G_M8853_IG09
+ ldrsb wzr, [x19] + mov x20, x19 + ; gcrRegs +[x20] + cbz x20, G_M8853_IG05 + ;; size=12 bbWeight=1 PerfScore 4.50 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + ldr x0, [x20] + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + cmp x0, x1 + beq G_M8853_IG05 + ;; size=24 bbWeight=0.50 PerfScore 3.00 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ; gcrRegs -[x20] + mov x20, xzr + ; gcrRegs +[x20] + ;; size=4 bbWeight=0.25 PerfScore 0.12 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + cbz x20, G_M8853_IG13 + ldr x21, [x20, #0x18] + and w0, w21, #2 + cbnz w0, G_M8853_IG12
cmp w0, #0 cset x0, eq movz x1, #0xD1FFAB1E // code for <unknown method> @@ -57,36 +68,41 @@ G_M8853_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- ldr w0, [x22]
+ ldr w0, [x21]
and w0, w0, #0xD1FFAB1E cmp w0, #192, LSL #12
- cset x22, eq - ;; size=80 bbWeight=1 PerfScore 21.50 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - uxtb w1, w22 - cbnz w1, G_M8853_IG11
+ cset x21, eq + ;; size=60 bbWeight=1 PerfScore 16.50 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, byref, isz + uxtb w1, w21 + cbnz w1, G_M8853_IG14
;; size=8 bbWeight=1 PerfScore 1.50
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x20]
movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 cmp x19, x0
- bne G_M8853_IG07
+ bne G_M8853_IG10
;; size=20 bbWeight=1 PerfScore 3.00
-G_M8853_IG05: ; bbWeight=0.84, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG08: ; bbWeight=0.84, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19] mov x0, xzr ;; size=4 bbWeight=0.84 PerfScore 0.42
-G_M8853_IG06: ; bbWeight=0.84, epilog, nogc, extend - ldp x21, x22, [sp, #0x20] - ldp x19, x20, [sp, #0x10]
+G_M8853_IG09: ; bbWeight=0.84, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=16 bbWeight=0.84 PerfScore 3.36 -G_M8853_IG07: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.84 PerfScore 4.20 +G_M8853_IG10: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs +[x19]
- cmp x20, x21 - bne G_M8853_IG13
+ ldr x0, [x19] + movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + cmp x0, x1 + bne G_M8853_IG16
mov x0, x19 ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -95,19 +111,20 @@ G_M8853_IG07: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=80000 { ldr x1, [x1] blr x1 ; gcrRegs -[x19]
- ;; size=32 bbWeight=1 PerfScore 7.50 -G_M8853_IG08: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc - ldp x21, x22, [sp, #0x20] - ldp x19, x20, [sp, #0x10]
+ ;; size=48 bbWeight=1 PerfScore 12.00 +G_M8853_IG11: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr
- ;; size=16 bbWeight=1 PerfScore 4.00 -G_M8853_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[x0] +[x19] - mov w22, wzr - b G_M8853_IG03
+ ;; size=16 bbWeight=1 PerfScore 5.00 +G_M8853_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=180000 {x19 x20}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs -[x0] +[x19-x20] + mov w21, wzr + b G_M8853_IG06
;; size=8 bbWeight=0 PerfScore 0.00
-G_M8853_IG10: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG13: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[x20]
mov x0, x19 ; gcrRegs +[x0] ldr x1, [x19] @@ -117,21 +134,21 @@ G_M8853_IG10: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byr ; gcrRegs -[x0] tst w0, #32 cset x1, ne
- cbz w1, G_M8853_IG04
+ cbz w1, G_M8853_IG07
;; size=32 bbWeight=0 PerfScore 0.00
-G_M8853_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG14: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[x19] movz x0, #0xD1FFAB1E movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 ;; size=12 bbWeight=0 PerfScore 0.00
-G_M8853_IG12: ; bbWeight=0, epilog, nogc, extend - ldp x21, x22, [sp, #0x20] - ldp x19, x20, [sp, #0x10]
+G_M8853_IG15: ; bbWeight=0, epilog, nogc, extend + ldr x21, [sp, #0x28] + ldp x19, x20, [sp, #0x18]
ldp fp, lr, [sp], #0x30 ret lr ;; size=16 bbWeight=0 PerfScore 0.00
-G_M8853_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
+G_M8853_IG16: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[x19] mov x0, x19 ; gcrRegs +[x0] @@ -140,10 +157,10 @@ G_M8853_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 { ldr x1, [x1, #0x20] blr x1 ; gcrRegs -[x19]
- b G_M8853_IG08
+ b G_M8853_IG11
;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 288, prolog size 16, PerfScore 45.28, instruction count 72, allocated bytes for code 288 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 324, prolog size 16, PerfScore 54.24, instruction count 81, allocated bytes for code 324 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -154,7 +171,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 72 (0x00048) Actual length = 288 (0x000120)
+ Function Length : 81 (0x00051) Actual length = 324 (0x000144)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -168,10 +185,9 @@ Unwind Info: ---- Unwind codes ---- E1 set_fp; mov fp, sp ---- Epilog start at index 1 ----
- E6 save_next - C8 02 save_regp X#0 Z#2 (0x02); stp x19, x20, [sp, #16]
+ 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

+44 (+13.41%) : 634715.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)

@@ -9,21 +9,20 @@ ; 2 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 3, 2.00) ref -> [fp+0x18] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler>
+; V00 this [V00,T04] ( 4, 2.00) ref -> [fp+0x18] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler>
; V01 arg1 [V01,T00] ( 5, 4.00) ref -> x19 class-hnd single-def <System.Threading.Tasks.Task>
-; V02 arg2 [V02,T03] ( 4, 3.00) ubyte -> [fp+0x24] EH-live single-def
+; V02 arg2 [V02,T03] ( 5, 3.00) ubyte -> [fp+0x24] EH-live single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T07] ( 2, 2.00) ubyte -> x0 "Inline return value spill temp" ; V05 tmp2 [V05,T06] ( 3, 2.99) ref -> x0 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> ;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "dup spill" <System.Object> ;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref
-;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V11 PSPSym [V11,T08] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" -; V12 rat0 [V12,T05] ( 3, 3.99) byref -> x20 "TLS field access" -; V13 rat1 [V13,T01] ( 3, 5.99) long -> x0 "TLS access" -; V14 rat2 [V14,T02] ( 3, 5.99) long -> x0 "ThreadStaticBlockBase access"
+;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> +;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V10 PSPSym [V10,T08] ( 1, 1 ) long -> [fp+0x28] do-not-enreg[V] "PSPSym" +; V11 rat0 [V11,T05] ( 3, 3.99) byref -> x20 "TLS field access" +; V12 rat1 [V12,T01] ( 3, 5.99) long -> x0 "TLS access" +; V13 rat2 [V13,T02] ( 3, 5.99) long -> x0 "ThreadStaticBlockBase access"
; ; Lcl frame size = 32 @@ -32,7 +31,7 @@ G_M14922_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x19, x20, [sp, #0x30] mov fp, sp add x3, sp, #64
- str x3, [fp, #0x28] // [V11 PSPSym]
+ str x3, [fp, #0x28] // [V10 PSPSym]
str x0, [fp, #0x18] // [V00 this] ; GC ptr vars +{V00} str w2, [fp, #0x24] // [V02 arg2] @@ -56,10 +55,10 @@ G_M14922_IG03: ; bbWeight=1.00, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ldr x0, [x0, #0x28] ldr w1, [x0, #0xD0] cmp w1, #7
- blt G_M14922_IG12
+ blt G_M14922_IG11
ldr x0, [x0, #0xD8] ldr x0, [x0, #0x38]
- cbz x0, G_M14922_IG12
+ cbz x0, G_M14922_IG11
ldr x0, [x0] ; byrRegs +[x0] add x20, x0, #16 @@ -109,47 +108,10 @@ G_M14922_IG07: ; bbWeight=0.00, gcVars=0000000000000010 {V00}, gcrefRegs= ; gcrRegs -[x0 x19] ; gcr arg pop 0 ;; size=32 bbWeight=0.00 PerfScore 0.03
-G_M14922_IG08: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ldr x0, [fp, #0x28] // [V11 PSPSym] - bl G_M14922_IG13 - ;; size=8 bbWeight=0.00 PerfScore 0.01 -G_M14922_IG09: ; bbWeight=0.00, nogc, extend - nop - ;; size=4 bbWeight=0.00 PerfScore 0.00 -G_M14922_IG10: ; bbWeight=0.00, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; GC ptr vars -{V00 V04} - mov w0, #1 - ;; size=4 bbWeight=0.00 PerfScore 0.00 -G_M14922_IG11: ; bbWeight=0.00, epilog, nogc, extend - ldp x19, x20, [sp, #0x30] - ldp fp, lr, [sp], #0x40 - ret lr - ;; size=12 bbWeight=0.00 PerfScore 0.01 -G_M14922_IG12: ; bbWeight=0, gcVars=0000000000000010 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs +[x19] - ; GC ptr vars +{V00 V04} - mov w0, #7 - bl CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED - ; byrRegs +[x0] - ; gcr arg pop 0 - mov x20, x0 - ; byrRegs +[x20] - b G_M14922_IG04 - ;; size=16 bbWeight=0 PerfScore 0.00 -G_M14922_IG13: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc - ; gcrRegs -[x19] - ; byrRegs -[x0 x20] - stp fp, lr, [sp, #-0x30]! - stp x19, x20, [sp, #0x20] - add x3, fp, #64 - str x3, [sp, #0x18] - ;; size=16 bbWeight=0.00 PerfScore 0.01 -G_M14922_IG14: ; bbWeight=0.00, gcVars=0000000000000010 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M14922_IG08: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
ldrb w2, [fp, #0x24] // [V02 arg2] tst w2, #255
- beq G_M14922_IG16 - ;; size=12 bbWeight=0.00 PerfScore 0.01 -G_M14922_IG15: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ beq G_M14922_IG09
ldr x0, [fp, #0x18] // [V00 this] ; gcrRegs +[x0] ldrsb wzr, [x0] @@ -167,14 +129,63 @@ G_M14922_IG15: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr blr x1 ; gcrRegs -[x0] ; gcr arg pop 0
- ;; size=44 bbWeight=0.00 PerfScore 0.01 -G_M14922_IG16: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
+ ;; size=56 bbWeight=0.00 PerfScore 0.05 +G_M14922_IG09: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov w0, #1 + ;; size=4 bbWeight=0.00 PerfScore 0.00 +G_M14922_IG10: ; bbWeight=0.00, epilog, nogc, extend + ldp x19, x20, [sp, #0x30] + ldp fp, lr, [sp], #0x40 + ret lr + ;; size=12 bbWeight=0.00 PerfScore 0.01 +G_M14922_IG11: ; bbWeight=0, gcVars=0000000000000010 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs +[x19] + ; GC ptr vars +{V00 V04} + mov w0, #7 + bl CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED + ; byrRegs +[x0] + ; gcr arg pop 0 + mov x20, x0 + ; byrRegs +[x20] + b G_M14922_IG04 + ;; size=16 bbWeight=0 PerfScore 0.00 +G_M14922_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc + ; gcrRegs -[x19] + ; byrRegs -[x0 x20] + stp fp, lr, [sp, #-0x30]! + stp x19, x20, [sp, #0x20] + add x3, fp, #64 + str x3, [sp, #0x18] + ;; size=16 bbWeight=0 PerfScore 0.00 +G_M14922_IG13: ; bbWeight=0, gcVars=0000000000000010 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz + ldrb w2, [fp, #0x24] // [V02 arg2] + tst w2, #255 + beq G_M14922_IG14 + ldr x0, [fp, #0x18] // [V00 this] + ; gcrRegs +[x0] + ldrsb wzr, [x0] + movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + ldr x0, [x0] + ; gcrRegs +[x0] + movz x1, #0xD1FFAB1E // code for System.Threading.PortableThreadPool:NotifyWorkItemProgress():this + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + ldr x1, [x1] + ; GC ptr vars -{V00 V04} + blr x1 + ; gcrRegs -[x0] + ; gcr arg pop 0 + ;; size=56 bbWeight=0 PerfScore 0.00 +G_M14922_IG14: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet epilog, nogc
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr
- ;; size=12 bbWeight=0.00 PerfScore 0.02
+ ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 328, prolog size 32, PerfScore 56.01, instruction count 82, allocated bytes for code 328 (MethodHash=bbabc5b5) for method System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
+; Total bytes of code 372, prolog size 32, PerfScore 56.00, instruction count 93, allocated bytes for code 372 (MethodHash=bbabc5b5) for method System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -185,7 +196,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 61 (0x0003d) Actual length = 244 (0x0000f4)
+ Function Length : 72 (0x00048) Actual length = 288 (0x000120)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e) @@ -220,6 +231,5 @@ Unwind Info: E4 end *************** EH table for System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this
-1 EH table entries, 0 duplicate clauses, 1 cloned finallys, 2 total EH entries reported to VM -EH#0: try [G_M14922_IG07..G_M14922_IG08) handled by [G_M14922_IG13..END) (finally) -EH#1: try [G_M14922_IG08..G_M14922_IG08) handled by [G_M14922_IG08..G_M14922_IG10) (finally) cloned finally
+1 EH table entries, 0 duplicate clauses, 0 cloned finallys, 1 total EH entries reported to VM +EH#0: try [G_M14922_IG07..G_M14922_IG08) handled by [G_M14922_IG12..END) (fault)

librariestestsnotieredcompilation.run.windows.arm64.Release.mch

-28 (-46.67%) : 36780.dasm - LamarCodeGeneration.Util.TypeExtensions:AsSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -20,37 +18,19 @@ G_M24927_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M24927_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M24927_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M24927_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M24927_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M24927_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M24927_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M24927_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M24927_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M24927_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +41,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-46.67%) : 146388.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> x0 single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x0 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,37 +19,19 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x0, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x2, x1 - ; gcrRegs +[x2] - cbz x2, G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0006 {x1 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x2]
ldr x0, [x0, #0x38] ldr x0, [x0]
- cmp x3, x0 - beq G_M8451_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref - ; gcrRegs -[x2]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- mov x2, x0 - ; gcrRegs +[x2] - ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x2 - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=12 bbWeight=1 PerfScore 7.00 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 9.31, instruction count 15, allocated bytes for code 60 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 32, prolog size 12, PerfScore 11.50, instruction count 8, allocated bytes for code 32 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -62,7 +42,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-24 (-40.00%) : 30922.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:b7_2System.__Canon:System.Canon:this (FullOpts)

@@ -8,11 +8,9 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c>
-; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> x1 single-def -; V02 arg1 [V02,T02] ( 4, 3.12) ref -> x2 class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> x1 single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> x2 class-hnd single-def <Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> x1 "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 16 @@ -21,33 +19,21 @@ G_M29555_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov fp, sp str x1, [fp, #0x18] ;; size=12 bbWeight=1 PerfScore 2.50
-G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref, isz
+G_M29555_IG02: ; bbWeight=1, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref
; gcrRegs +[x2]
- mov x0, x2 - ; gcrRegs +[x0] - cbz x0, G_M29555_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M29555_IG03: ; bbWeight=0.25, gcrefRegs=0005 {x0 x2}, byrefRegs=0000 {}, byref, isz - ldr x3, [x0] - ldr x1, [x1, #0x38] - ldr x1, [x1] - cmp x3, x1 - beq G_M29555_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M29555_IG04: ; bbWeight=0.12, gcrefRegs=0004 {x2}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x1
+ ldr x0, [x1, #0x38] + ldr x0, [x0]
mov x1, x2 ; gcrRegs +[x1] bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1-x2] +[x0]
- ;; size=12 bbWeight=0.12 PerfScore 0.25 -G_M29555_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=16 bbWeight=1 PerfScore 7.50 +G_M29555_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x20 ret lr ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 12, PerfScore 8.88, instruction count 15, allocated bytes for code 60 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
+; Total bytes of code 36, prolog size 12, PerfScore 12.00, instruction count 9, allocated bytes for code 36 (MethodHash=462e8c8c) for method Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -58,7 +44,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+40 (+43.48%) : 91249.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:b_160():this (FullOpts)

@@ -8,26 +8,25 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8
-G_M51850_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51850_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp mov x19, x0 ; gcrRegs +[x19]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=1 PerfScore 3.00 +G_M51850_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
ldp x0, x1, [x19, #0x08] ; gcrRegs +[x0-x1] ldrsb wzr, [x0] @@ -38,11 +37,9 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ldr x3, [x3] blr x3 ; gcrRegs -[x0-x1]
- ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ldrsb wzr, [x0]
+ ldr x19, [x19, #0x08] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E
- ; gcrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 movz x1, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:ValidateType(System.Object) @@ -50,26 +47,41 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x19] - brk_windows #0 - ;; size=76 bbWeight=0 PerfScore 0.00
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + ;; size=104 bbWeight=1 PerfScore 32.50 +G_M51850_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x2 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 92, prolog size 12, PerfScore 0.00, instruction count 23, allocated bytes for code 92 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
+; Total bytes of code 132, prolog size 12, PerfScore 39.50, instruction count 33, allocated bytes for code 132 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 2
- Epilog Count : 0
+ Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 92 (0x00005c)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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 ----
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

+40 (+43.48%) : 96259.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:b_220():this (FullOpts)

@@ -8,26 +8,25 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> x19 this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataColumnMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> x0 "CSE - aggressive"
; ; Lcl frame size = 8
-G_M18245_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M18245_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x20]! str x19, [sp, #0x18] mov fp, sp mov x19, x0 ; gcrRegs +[x19]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ ;; size=16 bbWeight=1 PerfScore 3.00 +G_M18245_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
ldp x0, x1, [x19, #0x08] ; gcrRegs +[x0-x1] ldrsb wzr, [x0] @@ -38,11 +37,9 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ldr x3, [x3] blr x3 ; gcrRegs -[x0-x1]
- ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ldrsb wzr, [x0]
+ ldr x19, [x19, #0x08] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E
- ; gcrRegs -[x0]
movk x0, #0xD1FFAB1E LSL #16 movk x0, #0xD1FFAB1E LSL #32 movz x1, #0xD1FFAB1E // code for System.Data.Common.DataColumnMappingCollection:ValidateType(System.Object) @@ -50,26 +47,41 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- ; gcrRegs -[x19] - brk_windows #0 - ;; size=76 bbWeight=0 PerfScore 0.00
+ movz x1, #0xD1FFAB1E + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + movz x2, #0xD1FFAB1E // code for System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + ;; size=104 bbWeight=1 PerfScore 32.50 +G_M18245_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x2 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 92, prolog size 12, PerfScore 0.00, instruction count 23, allocated bytes for code 92 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
+; Total bytes of code 132, prolog size 12, PerfScore 39.50, instruction count 33, allocated bytes for code 132 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data) Code Words : 2
- Epilog Count : 0
+ Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 23 (0x00017) Actual length = 92 (0x00005c)
+ Function Length : 33 (0x00021) Actual length = 132 (0x000084)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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 ----
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

+48 (+92.31%) : 96647.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>cDisplayClass7_0:b2():this (FullOpts)

@@ -8,24 +8,24 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 3, 2 ) ref -> x0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
+; V00 this [V00,T01] ( 3, 3 ) ref -> x0 this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T01] ( 2, 0 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V04 tmp3 [V04,T03] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V06 cse0 [V06,T02] ( 2, 0 ) ref -> x0 "CSE - aggressive"
+; V02 tmp1 [V02,T00] ( 3, 6 ) ref -> x19 class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V03 tmp2 [V03,T03] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V04 cse0 [V04,T02] ( 2, 2 ) ref -> x0 "CSE - aggressive"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
-G_M51219_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG - stp fp, lr, [sp, #-0x10]!
+G_M51219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG + stp fp, lr, [sp, #-0x20]! + str x19, [sp, #0x18]
mov fp, sp
- ;; size=8 bbWeight=0 PerfScore 0.00 -G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
+ ;; size=12 bbWeight=1 PerfScore 2.50 +G_M51219_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref
; gcrRegs +[x0]
- ldr x0, [x0, #0x08] - ldrsb wzr, [x0]
+ ldr x19, [x0, #0x08] + ; gcrRegs +[x19] + ldrsb wzr, [x19]
movz x0, #0xD1FFAB1E ; gcrRegs -[x0] movk x0, #0xD1FFAB1E LSL #16 @@ -35,26 +35,46 @@ G_M51219_IG02: ; bbWeight=0, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byre movk x1, #0xD1FFAB1E LSL #32 ldr x1, [x1] blr x1
- brk_windows #0 - ;; size=44 bbWeight=0 PerfScore 0.00
+ movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + mov x0, x19 + ; gcrRegs +[x0] + mov w1, wzr + movz x3, #0xD1FFAB1E // code for System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + movk x3, #0xD1FFAB1E LSL #16 + movk x3, #0xD1FFAB1E LSL #32 + ldr x3, [x3] + ;; size=76 bbWeight=1 PerfScore 20.00 +G_M51219_IG03: ; bbWeight=1, epilog, nogc, extend + ldr x19, [sp, #0x18] + ldp fp, lr, [sp], #0x20 + br x3 + ;; size=12 bbWeight=1 PerfScore 4.00
-; Total bytes of code 52, prolog size 8, PerfScore 0.00, instruction count 13, allocated bytes for code 52 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
+; Total bytes of code 100, prolog size 12, PerfScore 26.50, instruction count 25, allocated bytes for code 100 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
; ============================================================ Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 1 - Epilog Count : 0
+ Code Words : 2 + Epilog Count : 1
E bit : 0 X bit : 0 Vers : 0
- Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
+ Function Length : 25 (0x00019) Actual length = 100 (0x000064)
---- Epilog scopes ----
- No epilogs
+ ---- Scope 0 + 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
- 81 save_fplr_x #1 (0x01); stp fp, lr, [sp, #-16]!
+ ---- Epilog start at index 1 ---- + 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 E4 end

realworld.run.windows.arm64.checked.mch

-24 (-31.58%) : 31440.dasm - System.Management.Automation.PSTypeExtensions+<>c7`1[System.Canon]:b7_1(System.Object):System.Canon:this (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 2.25) ref -> x19 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> -; V01 arg1 [V01,T01] ( 4, 3.12) ref -> x1 class-hnd single-def <System.Object>
+; V00 this [V00,T00] ( 3, 3 ) ref -> x19 this class-hnd single-def <System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]> +; V01 arg1 [V01,T01] ( 3, 3 ) ref -> x1 class-hnd single-def <System.Object>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 8 @@ -23,34 +21,22 @@ G_M56342_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov x19, x0 ; gcrRegs +[x19] ;; size=20 bbWeight=1 PerfScore 4.00
-G_M56342_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref, isz
+G_M56342_IG02: ; bbWeight=1, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x1]
- mov x0, x1 - ; gcrRegs +[x0] - cbz x0, G_M56342_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M56342_IG03: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x38] - ldr x3, [x3] - ldr x3, [x3] - cmp x2, x3 - beq G_M56342_IG05 - ;; size=28 bbWeight=0.25 PerfScore 4.12 -G_M56342_IG04: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - mov x0, x3
+ ldr x0, [x19] + ldr x0, [x0, #0x38] + ldr x0, [x0] + ldr x0, [x0]
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M56342_IG05: ; bbWeight=1, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=20 bbWeight=1 PerfScore 13.00 +G_M56342_IG03: ; 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 76, prolog size 16, PerfScore 13.81, instruction count 19, allocated bytes for code 76 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 52, prolog size 16, PerfScore 21.00, instruction count 13, allocated bytes for code 52 (MethodHash=169a23e9) for method System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -61,7 +47,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 19 (0x00013) Actual length = 76 (0x00004c)
+ Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-28.00%) : 684.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> x19 single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> x19 "CSE - aggressive"
; ; Lcl frame size = 8 @@ -20,11 +19,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x19, [sp, #0x18] mov fp, sp str x0, [fp, #0x10]
- mov x19, x0 - ;; size=20 bbWeight=1 PerfScore 4.00 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ ;; size=16 bbWeight=1 PerfScore 3.50 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ldr x19, [x0, #0x38] + ldr x0, [x19]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -34,28 +32,18 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, blr x1 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M13946_IG05 - ;; size=40 bbWeight=1 PerfScore 14.00 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M13946_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x19]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=44 bbWeight=1 PerfScore 17.00 +G_M13946_IG03: ; 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 100, prolog size 16, PerfScore 24.81, instruction count 25, allocated bytes for code 100 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 72, prolog size 16, PerfScore 24.50, instruction count 18, allocated bytes for code 72 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info: @@ -66,7 +54,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 25 (0x00019) Actual length = 100 (0x000064)
+ Function Length : 18 (0x00012) Actual length = 72 (0x000048)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

-28 (-25.93%) : 18096.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (FullOpts)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> x20 this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> x19 single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> x19 this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> x1 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> x1 single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 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" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> x1 single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> x1 single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> x20 "CSE - aggressive"
; ; Lcl frame size = 16 @@ -22,47 +21,36 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, stp x19, x20, [sp, #0x20] mov fp, sp str x1, [fp, #0x18]
- mov x20, x0 - ; gcrRegs +[x20] - mov x19, x1 - ;; size=24 bbWeight=1 PerfScore 4.50 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=0000 {}, byref, isz - ldr x0, [x19, #0x38] - ldr x0, [x0]
+ mov x19, x0 + ; gcrRegs +[x19] + ;; size=20 bbWeight=1 PerfScore 4.00 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref + ldr x20, [x1, #0x38] + ldr x0, [x20]
bl CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[x0] mov x1, x0 ; gcrRegs +[x1]
- mov x0, x20 - ldr x2, [x20]
+ mov x0, x19 + ldr x2, [x19]
ldr x2, [x2, #0x70] ldr x2, [x2, #0x10] blr x2
- ; gcrRegs -[x1 x20]
+ ; gcrRegs -[x1 x19]
mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M60617_IG05 - ;; size=44 bbWeight=1 PerfScore 19.50 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0003 {x0 x1}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19, #0x38] - ldr x3, [x3] - cmp x2, x3 - beq G_M60617_IG05 - ;; size=20 bbWeight=0.25 PerfScore 2.62 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0002 {x1}, byrefRegs=0000 {}, byref
+ ldr x0, [x20]
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=48 bbWeight=1 PerfScore 22.50 +G_M60617_IG03: ; 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 108, prolog size 16, PerfScore 29.81, instruction count 27, allocated bytes for code 108 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
+; Total bytes of code 80, prolog size 16, PerfScore 29.50, instruction count 20, allocated bytes for code 80 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -73,7 +61,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 27 (0x0001b) Actual length = 108 (0x00006c)
+ Function Length : 20 (0x00014) Actual length = 80 (0x000050)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+4 (+0.40%) : 14502.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)

@@ -12,53 +12,47 @@ ; V01 arg1 [V01,T07] ( 11, 7.50) ref -> x19 class-hnd single-def <System.Object> ; V02 loc0 [V02,T02] ( 19, 19 ) long -> [fp+0x18] do-not-enreg[Z] EH-live ; V03 loc1 [V03,T15] ( 5, 4 ) long -> x20
-; V04 loc2 [V04,T24] ( 2, 2 ) long -> x0 -; V05 loc3 [V05,T28] ( 3, 1.50) ref -> x19 class-hnd single-def <<unknown class>>
+; V04 loc2 [V04,T22] ( 2, 2 ) long -> x0 +; V05 loc3 [V05,T26] ( 3, 1.50) ref -> x19 class-hnd single-def <<unknown class>>
; V06 loc4 [V06,T03] ( 5, 16.50) int -> x2
-; V07 loc5 [V07,T25] ( 2, 2 ) long -> x0
+; V07 loc5 [V07,T23] ( 2, 2 ) long -> x0
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V09 tmp1 [V09,T16] ( 2, 4 ) byref -> x21 single-def "impAppendStmt" ; V10 tmp2 [V10,T13] ( 3, 6 ) byref -> x0 single-def "dup spill"
-; V11 tmp3 [V11,T22] ( 2, 2 ) byref -> x22 single-def "impAppendStmt" -; V12 tmp4 [V12,T19] ( 3, 3 ) byref -> x21 single-def "dup spill" -;* V13 tmp5 [V13,T31] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V14 tmp6 [V14,T23] ( 2, 2 ) ref -> x19 class-hnd "spilling QMark2" <<unknown class>> -; V15 tmp7 [V15,T04] ( 2, 16 ) byref -> x24 "impAppendStmt" -; V16 tmp8 [V16,T01] ( 3, 24 ) byref -> x0 "dup spill" -;* V17 tmp9 [V17,T32] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V18 tmp10 [V18,T30] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V19 tmp11 [V19 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V20 tmp12 [V20 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V21 tmp13 [V21,T17] ( 4, 3.50) long -> x0 "Inline stloc first use temp" -;* V22 tmp14 [V22 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V23 tmp15 [V23,T00] ( 5, 32 ) ref -> x25 class-hnd "Inlining Arg" <System.Object> -;* V24 tmp16 [V24 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V25 tmp17 [V25 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V26 tmp18 [V26,T34] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> -;* V27 tmp19 [V27,T27] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V28 tmp20 [V28,T09] ( 2, 8 ) byref -> x0 "Inlining Arg" -; V29 tmp21 [V29,T05] ( 4, 14 ) long -> x0 "Inline stloc first use temp" -;* V30 tmp22 [V30 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> -;* V31 tmp23 [V31 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" -; V32 tmp24 [V32,T35] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V33 tmp25 [V33,T21] ( 4, 2 ) long -> x0 "Inline stloc first use temp" -;* V34 tmp26 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V35 tmp27 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <<unknown class>> -; V36 tmp28 [V36,T26] ( 2, 2 ) long -> x0 "field V19._handle (fldOffset=0x0)" P-INDEP -; V37 tmp29 [V37,T10] ( 2, 8 ) long -> x0 "field V24._handle (fldOffset=0x0)" P-INDEP -; V38 tmp30 [V38,T29] ( 2, 1 ) long -> x0 "field V30._handle (fldOffset=0x0)" P-INDEP -; V39 tmp31 [V39,T36] ( 2, 0 ) ref -> x20 single-def "argument with side effect" -; V40 tmp32 [V40,T37] ( 2, 0 ) ref -> x2 single-def "argument with side effect" -; V41 tmp33 [V41,T38] ( 2, 0 ) ref -> x20 "argument with side effect" -; V42 tmp34 [V42,T39] ( 2, 0 ) ref -> x2 "argument with side effect" -; V43 PSPSym [V43,T33] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" -;* V44 cse0 [V44 ] ( 0, 0 ) ref -> zero-ref "CSE - conservative" -; V45 cse1 [V45,T20] ( 3, 2.50) ref -> x0 "CSE - moderate" -; V46 cse2 [V46,T12] ( 5, 6 ) int -> x22 multi-def "CSE - aggressive" -; V47 cse3 [V47,T11] ( 4, 6.50) long -> x21 "CSE - aggressive" -; V48 cse4 [V48,T14] ( 2, 4.50) byref -> x19 hoist "CSE - moderate" -; V49 cse5 [V49,T06] ( 3, 12 ) int -> x23 "CSE - aggressive" -; V50 cse6 [V50,T18] ( 4, 2 ) long -> registers multi-def "CSE - moderate"
+; V11 tmp3 [V11,T21] ( 2, 2 ) byref -> x22 single-def "impAppendStmt" +; V12 tmp4 [V12,T18] ( 3, 3 ) byref -> x21 single-def "dup spill" +; V13 tmp5 [V13,T04] ( 2, 16 ) byref -> x24 "impAppendStmt" +; V14 tmp6 [V14,T01] ( 3, 24 ) byref -> x0 "dup spill" +;* V15 tmp7 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V16 tmp8 [V16 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V17 tmp9 [V17,T17] ( 4, 3.50) long -> x0 "Inline stloc first use temp" +;* V18 tmp10 [V18 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +; V19 tmp11 [V19,T00] ( 5, 32 ) ref -> x25 class-hnd "Inlining Arg" <System.Object> +;* V20 tmp12 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V21 tmp13 [V21 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V22 tmp14 [V22,T29] ( 3, 0 ) ref -> x19 class-hnd exact "NewObj constructor temp" <<unknown class>> +;* V23 tmp15 [V23,T25] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V24 tmp16 [V24,T09] ( 2, 8 ) byref -> x0 "Inlining Arg" +; V25 tmp17 [V25,T05] ( 4, 14 ) long -> x0 "Inline stloc first use temp" +;* V26 tmp18 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> +;* V27 tmp19 [V27 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp" +; V28 tmp20 [V28,T30] ( 3, 0 ) ref -> x19 class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V29 tmp21 [V29,T20] ( 4, 2 ) long -> x0 "Inline stloc first use temp" +;* V30 tmp22 [V30 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V31 tmp23 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <<unknown class>> +; V32 tmp24 [V32,T24] ( 2, 2 ) long -> x0 "field V15._handle (fldOffset=0x0)" P-INDEP +; V33 tmp25 [V33,T10] ( 2, 8 ) long -> x0 "field V20._handle (fldOffset=0x0)" P-INDEP +; V34 tmp26 [V34,T27] ( 2, 1 ) long -> x0 "field V26._handle (fldOffset=0x0)" P-INDEP +; V35 tmp27 [V35,T31] ( 2, 0 ) ref -> x20 single-def "argument with side effect" +; V36 tmp28 [V36,T32] ( 2, 0 ) ref -> x2 single-def "argument with side effect" +; V37 tmp29 [V37,T33] ( 2, 0 ) ref -> x20 "argument with side effect" +; V38 tmp30 [V38,T34] ( 2, 0 ) ref -> x2 "argument with side effect" +; V39 PSPSym [V39,T28] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" +; V40 cse0 [V40,T12] ( 5, 6 ) int -> registers multi-def "CSE - aggressive" +; V41 cse1 [V41,T19] ( 3, 2.50) ref -> x0 "CSE - moderate" +; V42 cse2 [V42,T11] ( 4, 6.50) long -> x21 "CSE - aggressive" +; V43 cse3 [V43,T14] ( 2, 4.50) byref -> x19 hoist "CSE - moderate" +; V44 cse4 [V44,T06] ( 3, 12 ) int -> x23 "CSE - aggressive"
; ; Lcl frame size = 24 @@ -70,7 +64,7 @@ G_M14417_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x25, [sp, #0x58] mov fp, sp add x2, sp, #96
- str x2, [fp, #0x20] // [V43 PSPSym]
+ str x2, [fp, #0x20] // [V39 PSPSym]
str x0, [fp, #0x10] // [V00 this] ; GC ptr vars +{V00} mov x19, x1 @@ -85,13 +79,13 @@ G_M14417_IG03: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ;; size=8 bbWeight=1 PerfScore 1.50 G_M14417_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz ldr x1, [x19]
- movz x21, #0xD1FFAB1E - movk x21, #0xD1FFAB1E LSL #16 - movk x21, #0xD1FFAB1E LSL #32 - cmp x1, x21
+ movz x2, #0xD1FFAB1E + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + cmp x1, x2
bne G_M14417_IG05
- ldr w22, [x19, #0x08] - mov w1, w22
+ ldr w21, [x19, #0x08] + mov w1, w21
add x20, x1, #1 b G_M14417_IG06 ;; size=40 bbWeight=0.50 PerfScore 5.50 @@ -167,13 +161,14 @@ G_M14417_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, cmp x0, x1 bne G_M14417_IG22 mov w2, wzr
- ldr w22, [x19, #0x08]
+ ldr w0, [x19, #0x08] + sxtw w22, w0
cmp w22, #0 ble G_M14417_IG15 add x19, x19, #16 ; gcrRegs -[x19] ; byrRegs +[x19]
- ;; size=44 bbWeight=0.50 PerfScore 5.75
+ ;; size=48 bbWeight=0.50 PerfScore 6.00
G_M14417_IG10: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=80000 {x19}, byref, isz ldr x0, [fp, #0x18] // [V02 loc0] add w23, w2, #1 @@ -448,7 +443,7 @@ G_M14417_IG27: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret lr ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 992, prolog size 40, PerfScore 236.00, instruction count 248, allocated bytes for code 992 (MethodHash=533fc7ae) for method System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)
+; Total bytes of code 996, prolog size 40, PerfScore 236.25, instruction count 249, allocated bytes for code 996 (MethodHash=533fc7ae) for method System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)
; ============================================================ Unwind Info: @@ -459,7 +454,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 225 (0x000e1) Actual length = 900 (0x000384)
+ Function Length : 226 (0x000e2) Actual length = 904 (0x000388)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+16 (+4.35%) : 4651.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.Canon]:Commit():System.Canon:this (FullOpts)

@@ -7,7 +7,7 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 10, 6.25) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
+; V00 this [V00,T00] ( 8, 6 ) ref -> x19 this class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]> ;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact <System.Runtime.ExceptionServices.ExceptionDispatchInfo> @@ -16,27 +16,27 @@ ;* V06 loc5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V09 tmp2 [V09,T12] ( 4, 0 ) long -> x0 "spilling helperCall" -;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V11 tmp4 [V11,T16] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>>
+;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" +;* V11 tmp4 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V13 tmp6 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall" -; V14 tmp7 [V14,T05] ( 4, 4.50) long -> x0 "spilling helperCall" -;* V15 tmp8 [V15 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V16 tmp9 [V16,T11] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -; V17 tmp10 [V17,T09] ( 2, 4 ) long -> x0 "argument with side effect" -; V18 tmp11 [V18,T10] ( 2, 4 ) long -> x0 "argument with side effect" -; V19 tmp12 [V19,T17] ( 2, 0 ) long -> x0 "argument with side effect" -; V20 cse0 [V20,T04] ( 12, 5.40) long -> x20 "CSE - aggressive" -; V21 rat0 [V21,T06] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" -; V22 rat1 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" -; V23 rat2 [V23,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" -; V24 rat3 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" -; V25 rat4 [V25,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V26 rat5 [V26,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" -; V27 rat6 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" -; V28 rat7 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" -; V29 rat8 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
+; V13 tmp6 [V13,T09] ( 2, 4 ) long -> x0 "argument with side effect" +; V14 tmp7 [V14,T16] ( 2, 0 ) long -> x0 "argument with side effect" +; V15 tmp8 [V15,T10] ( 2, 4 ) long -> x0 "argument with side effect" +; V16 tmp9 [V16,T17] ( 2, 0 ) long -> x0 "argument with side effect" +; V17 tmp10 [V17,T11] ( 2, 4 ) long -> x0 "argument with side effect" +; V18 cse0 [V18,T04] ( 10, 4.40) long -> x20 "CSE - aggressive" +; V19 rat0 [V19,T05] ( 3, 4.40) long -> x0 "Spilling to split statement for tree" +; V20 rat1 [V20,T06] ( 3, 4 ) long -> x0 "runtime lookup" +; V21 rat2 [V21,T01] ( 3, 5.60) long -> x2 "fgMakeTemp is creating a new local variable" +; V22 rat3 [V22,T07] ( 3, 4 ) long -> x0 "runtime lookup" +; V23 rat4 [V23,T02] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V24 rat5 [V24,T08] ( 3, 4 ) long -> x0 "runtime lookup" +; V25 rat6 [V25,T03] ( 3, 5.60) long -> x0 "fgMakeTemp is creating a new local variable" +; V26 rat7 [V26,T12] ( 3, 0 ) long -> x0 "runtime lookup" +; V27 rat8 [V27,T13] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable" +; V28 rat9 [V28,T14] ( 3, 0 ) long -> x0 "runtime lookup" +; V29 rat10 [V29,T15] ( 3, 0 ) long -> x0 "fgMakeTemp is creating a new local variable"
; ; Lcl frame size = 16 @@ -71,7 +71,7 @@ G_M31693_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG15
+ cbnz x0, G_M31693_IG13
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -93,7 +93,7 @@ G_M31693_IG08: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcrRegs +[x1] bl CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[x1] +[x0]
- cbnz x0, G_M31693_IG19
+ cbnz x0, G_M31693_IG16
ldr x0, [x20, #0x38] ; gcrRegs -[x0] ldr x0, [x0] @@ -110,53 +110,47 @@ G_M31693_IG10: ; bbWeight=0.20, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0.20 PerfScore 0.60
-G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG13 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M31693_IG12: ; bbWeight=0.25, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG11: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=8 bbWeight=0.25 PerfScore 0.38 -G_M31693_IG13: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0] - ;; size=4 bbWeight=1 PerfScore 3.00 -G_M31693_IG14: ; bbWeight=1, epilog, nogc, extend
+ ldr x0, [x0, #0x08] + ;; size=28 bbWeight=1 PerfScore 9.00 +G_M31693_IG12: ; bbWeight=1, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 ret lr ;; size=12 bbWeight=1 PerfScore 3.00
-G_M31693_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M31693_IG13: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[x0] ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x18]
- cbz x0, G_M31693_IG16 - b G_M31693_IG17
+ cbz x0, G_M31693_IG14 + b G_M31693_IG15
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG14: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz - cmp x20, x0 - beq G_M31693_IG18
+G_M31693_IG15: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1]
- bl CORINFO_HELP_CHKCASTCLASS_SPECIAL
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS + movk x2, #0xD1FFAB1E LSL #16 + movk x2, #0xD1FFAB1E LSL #32 + ldr x2, [x2] + blr x2
; gcrRegs -[x1] +[x0]
- ;; size=16 bbWeight=0 PerfScore 0.00 -G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref - ; gcrRegs -[x0] - ldr x0, [x19, #0x08] - ; gcrRegs +[x0]
+ ldr x0, [x0, #0x08]
movz x1, #0xD1FFAB1E // code for System.Runtime.ExceptionServices.ExceptionDispatchInfo:Throw():this movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 @@ -165,22 +159,22 @@ G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by blr x1 ; gcrRegs -[x0] brk_windows #0
- ;; size=32 bbWeight=0 PerfScore 0.00 -G_M31693_IG19: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ ;; size=56 bbWeight=0 PerfScore 0.00 +G_M31693_IG16: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
ldr x0, [x20, #0x38] ldr x0, [x0] ldr x0, [x0, #0x20]
- cbz x0, G_M31693_IG20 - b G_M31693_IG21
+ cbz x0, G_M31693_IG17 + b G_M31693_IG18
;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG20: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG17: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x0, x20 movz x1, #0xD1FFAB1E movk x1, #0xD1FFAB1E LSL #16 movk x1, #0xD1FFAB1E LSL #32 bl CORINFO_HELP_RUNTIMEHANDLE_CLASS ;; size=20 bbWeight=0 PerfScore 0.00
-G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+G_M31693_IG18: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
mov x1, x19 ; gcrRegs +[x1] movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTCLASS @@ -195,7 +189,7 @@ G_M31693_IG21: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by brk_windows #0 ;; size=36 bbWeight=0 PerfScore 0.00
-; Total bytes of code 368, prolog size 16, PerfScore 54.88, instruction count 92, allocated bytes for code 368 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
+; Total bytes of code 384, prolog size 16, PerfScore 59.00, instruction count 96, allocated bytes for code 384 (MethodHash=8a908432) for method Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -206,7 +200,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 92 (0x0005c) Actual length = 368 (0x000170)
+ Function Length : 96 (0x00060) Actual length = 384 (0x000180)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

+44 (+8.59%) : 4735.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)

@@ -8,29 +8,28 @@ ; 0 inlinees with PGO data; 9 single block inlinees; 7 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T05] ( 3, 3 ) ref -> [fp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> -; V01 arg1 [V01,T00] ( 8, 8 ) ref -> x19 class-hnd single-def <System.Threading.Tasks.Task> -; V02 arg2 [V02,T02] ( 4, 4 ) ubyte -> [fp+0x1C] EH-live single-def
+; V00 this [V00,T02] ( 4, 2.50) ref -> [fp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> +; V01 arg1 [V01,T00] ( 8, 5 ) ref -> x19 class-hnd single-def <System.Threading.Tasks.Task> +; V02 arg2 [V02,T01] ( 5, 3.50) ubyte -> [fp+0x1C] EH-live single-def
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
-; V05 tmp2 [V05,T07] ( 4, 4 ) ubyte -> x1 "Inline return value spill temp" -; V06 tmp3 [V06,T06] ( 4, 4 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V07 tmp4 [V07,T12] ( 3, 3 ) ubyte -> x1 "Inline return value spill temp" -; V08 tmp5 [V08,T09] ( 2, 4 ) byref -> x1 single-def "Inlining Arg"
+; V05 tmp2 [V05,T07] ( 4, 2 ) ubyte -> x1 "Inline return value spill temp" +; V06 tmp3 [V06,T06] ( 4, 2 ) ref -> x1 class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V07 tmp4 [V07,T12] ( 3, 1.50) ubyte -> x1 "Inline return value spill temp" +; V08 tmp5 [V08,T09] ( 2, 2 ) byref -> x1 single-def "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource>
-; V10 tmp7 [V10,T13] ( 2, 2 ) int -> x1 "Inline stloc first use temp"
+; V10 tmp7 [V10,T13] ( 2, 1 ) int -> x1 "Inline stloc first use temp"
;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "dup spill" <System.Object> ;* V12 tmp9 [V12 ] ( 0, 0 ) ref -> zero-ref
-;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V15 tmp12 [V15 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V16 tmp13 [V16,T10] ( 2, 4 ) byref -> x1 single-def "argument with side effect" -; V17 PSPSym [V17,T14] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" -; V18 cse0 [V18,T01] ( 7, 7 ) byref -> x20 "CSE - aggressive" -; V19 cse1 [V19,T11] ( 3, 3 ) ref -> x1 "CSE - aggressive" -; V20 rat0 [V20,T08] ( 3, 4 ) byref -> x21 "TLS field access" -; V21 rat1 [V21,T03] ( 3, 6 ) long -> x1 "TLS access" -; V22 rat2 [V22,T04] ( 3, 6 ) long -> x1 "ThreadStaticBlockBase access"
+;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> +;* V14 tmp11 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V15 tmp12 [V15,T10] ( 2, 2 ) byref -> x1 single-def "argument with side effect" +; V16 PSPSym [V16,T14] ( 1, 1 ) long -> [fp+0x20] do-not-enreg[V] "PSPSym" +; V17 cse0 [V17,T03] ( 7, 3.50) byref -> x20 "CSE - aggressive" +; V18 cse1 [V18,T11] ( 3, 1.50) ref -> x1 "CSE - moderate" +; V19 rat0 [V19,T08] ( 3, 2 ) byref -> x21 "TLS field access" +; V20 rat1 [V20,T04] ( 3, 3 ) long -> x1 "TLS access" +; V21 rat2 [V21,T05] ( 3, 3 ) long -> x1 "ThreadStaticBlockBase access"
; ; Lcl frame size = 24 @@ -40,16 +39,18 @@ G_M14922_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, str x21, [sp, #0x38] mov fp, sp add x3, sp, #64
- str x3, [fp, #0x20] // [V17 PSPSym]
+ str x3, [fp, #0x20] // [V16 PSPSym]
str x0, [fp, #0x10] // [V00 this] ; GC ptr vars +{V00} str w2, [fp, #0x1C] // [V02 arg2] mov x19, x1 ; gcrRegs +[x19] ;; size=36 bbWeight=1 PerfScore 7.50
-G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000004 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
tst w2, #255
- beq G_M14922_IG04
+ beq G_M14922_IG05 + ;; size=8 bbWeight=1 PerfScore 1.50 +G_M14922_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
cmp x19, #0 cset x0, ne movz x1, #0xD1FFAB1E // code for <unknown method> @@ -67,16 +68,16 @@ G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=800 blr x1 ; gcrRegs -[x0] ; gcr arg pop 0
- cbnz w0, G_M14922_IG04
+ cbnz w0, G_M14922_IG05
mov w0, wzr
- ;; size=68 bbWeight=1 PerfScore 15.50 -G_M14922_IG03: ; bbWeight=1, epilog, nogc, extend
+ ;; size=60 bbWeight=0.50 PerfScore 7.00 +G_M14922_IG04: ; 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=1 PerfScore 5.00 -G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=16 bbWeight=0.50 PerfScore 2.50 +G_M14922_IG05: ; bbWeight=0.50, gcVars=0000000000000004 {V00}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref, isz
add x20, x19, #52 ; byrRegs +[x20] ldapr w1, [x20] @@ -87,20 +88,20 @@ G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=800 ldapr x1, [x1] ; gcrRegs +[x1] ; byrRegs -[x1]
- cbz x1, G_M14922_IG08
+ cbz x1, G_M14922_IG09
add x3, x1, #56 ; byrRegs +[x3] ldapr w3, [x3] ; byrRegs -[x3] cmp w3, #1
- beq G_M14922_IG07
+ beq G_M14922_IG08
add x1, x1, #64 ; gcrRegs -[x1] ; byrRegs +[x1] ldr x1, [x1] ; gcrRegs +[x1] ; byrRegs -[x1]
- cbz x1, G_M14922_IG05
+ cbz x1, G_M14922_IG06
add x1, x1, #32 ; gcrRegs -[x1] ; byrRegs +[x1] @@ -108,42 +109,42 @@ G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000020 {V00}, gcrefRegs=800 ; byrRegs -[x1] cmp w1, #0 cset x1, ne
- b G_M14922_IG06 - ;; size=76 bbWeight=1 PerfScore 24.50 -G_M14922_IG05: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ b G_M14922_IG07 + ;; size=76 bbWeight=0.50 PerfScore 12.25 +G_M14922_IG06: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
mov w1, wzr
- ;; size=4 bbWeight=1 PerfScore 0.50 -G_M14922_IG06: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref - b G_M14922_IG09 - ;; size=4 bbWeight=1 PerfScore 1.00 -G_M14922_IG07: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ ;; size=4 bbWeight=0.50 PerfScore 0.25 +G_M14922_IG07: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref + b G_M14922_IG10 + ;; size=4 bbWeight=0.50 PerfScore 0.50 +G_M14922_IG08: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
mov w1, #1
- b G_M14922_IG09 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M14922_IG08: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
+ b G_M14922_IG10 + ;; size=8 bbWeight=0.50 PerfScore 0.75 +G_M14922_IG09: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref
mov w1, wzr
- ;; size=4 bbWeight=1 PerfScore 0.50 -G_M14922_IG09: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
+ ;; size=4 bbWeight=0.50 PerfScore 0.25 +G_M14922_IG10: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
ldapr w3, [x20] and w3, w3, #0xD1FFAB1E mov w4, #0xD1FFAB1E cmp w1, #0 ccmp w3, w4, z, eq
- beq G_M14922_IG12
+ beq G_M14922_IG13
ldr x1, [xpr, #0x58] ldr x1, [x1, #0x10] ldr w3, [x1, #0xD0] cmp w3, #11
- blt G_M14922_IG11
+ blt G_M14922_IG12
ldr x1, [x1, #0xD8] ldr x1, [x1, #0x58]
- cbz x1, G_M14922_IG11
+ cbz x1, G_M14922_IG12
ldr x1, [x1] ; byrRegs +[x1] add x21, x1, #16 ; byrRegs +[x21]
- ;; size=64 bbWeight=1 PerfScore 27.00 -G_M14922_IG10: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=200000 {x21}, byref
+ ;; size=64 bbWeight=0.50 PerfScore 13.50 +G_M14922_IG11: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=200000 {x21}, byref
; byrRegs -[x1 x20] add x1, x21, #104 ; byrRegs +[x1] @@ -158,9 +159,9 @@ G_M14922_IG10: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=200000 {x21 ; gcrRegs -[x0 x19] ; byrRegs -[x1 x21] ; gcr arg pop 0
- b G_M14922_IG13 - ;; size=36 bbWeight=1 PerfScore 8.00 -G_M14922_IG11: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
+ b G_M14922_IG14 + ;; size=36 bbWeight=0.50 PerfScore 4.00 +G_M14922_IG12: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
; gcrRegs +[x19] mov w0, #11 bl CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED @@ -168,18 +169,18 @@ G_M14922_IG11: ; bbWeight=0, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by ; gcr arg pop 0 mov x21, x0 ; byrRegs +[x21]
- b G_M14922_IG10
+ b G_M14922_IG11
;; size=16 bbWeight=0 PerfScore 0.00
-G_M14922_IG12: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
+G_M14922_IG13: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20}, byref, isz
; byrRegs -[x0 x21] +[x20] ldapr w1, [x20] and w1, w1, #0xD1FFAB1E cmp w1, #0xD1FFAB1E, LSL #12
- beq G_M14922_IG13
+ beq G_M14922_IG14
ldapr w1, [x20] orr w1, w1, #0xD1FFAB1E swpal w1, w1, [x20]
- tbnz w1, #22, G_M14922_IG13
+ tbnz w1, #22, G_M14922_IG14
mov x0, x19 ; gcrRegs +[x0] movz x1, #0xD1FFAB1E // code for <unknown method> @@ -190,33 +191,47 @@ G_M14922_IG12: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=100000 {x20 ; gcrRegs -[x0 x19] ; byrRegs -[x20] ; gcr arg pop 0
- ;; size=56 bbWeight=1 PerfScore 18.50 -G_M14922_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - ldr x0, [fp, #0x20] // [V17 PSPSym] - bl G_M14922_IG17 - ;; size=8 bbWeight=1 PerfScore 3.00 -G_M14922_IG14: ; bbWeight=1, nogc, extend - nop - ;; size=4 bbWeight=1 PerfScore 0.50 -G_M14922_IG15: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=56 bbWeight=0.50 PerfScore 9.25 +G_M14922_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + ldrb w2, [fp, #0x1C] // [V02 arg2] + tst w2, #255 + beq G_M14922_IG15 + ldr x0, [fp, #0x10] // [V00 this] + ; gcrRegs +[x0] + ldrsb wzr, [x0] + movz x0, #0xD1FFAB1E + ; gcrRegs -[x0] + movk x0, #0xD1FFAB1E LSL #16 + movk x0, #0xD1FFAB1E LSL #32 + ldr x0, [x0] + ; gcrRegs +[x0] + movz x1, #0xD1FFAB1E // code for System.Threading.PortableThreadPool:NotifyWorkItemProgress():this + movk x1, #0xD1FFAB1E LSL #16 + movk x1, #0xD1FFAB1E LSL #32 + ldr x1, [x1]
; GC ptr vars -{V00}
+ blr x1 + ; gcrRegs -[x0] + ; gcr arg pop 0 + ;; size=56 bbWeight=0.50 PerfScore 9.25 +G_M14922_IG15: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov w0, #1 ...

smoke_tests.nativeaot.windows.arm64.checked.mch

-16 (-11.43%) : 56.dasm - System.Linq.Expressions.Expression`1[System.Canon]:Compile(ubyte):System.Canon:this (FullOpts)

@@ -7,14 +7,13 @@ ; fully interruptible ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 3.25) ref -> x19 this class-hnd single-def <System.Linq.Expressions.Expression`1[System.__Canon]>
+; V00 this [V00,T00] ( 5, 3.50) ref -> x19 this class-hnd single-def <System.Linq.Expressions.Expression`1[System.__Canon]>
; V01 arg1 [V01,T01] ( 3, 3 ) ubyte -> x1 single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [sp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 3 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.Interpreter.LightCompiler> -; V04 tmp2 [V04,T05] ( 3, 2.25) ref -> x1 single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T06] ( 3, 1.25) long -> x3 "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T02] ( 5, 3.75) ref -> x0 class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T04] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Linq.Expressions.Interpreter.LightDelegateCreator>
+; V03 tmp1 [V03,T02] ( 3, 3 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.Interpreter.LightCompiler> +; V04 tmp2 [V04,T03] ( 3, 3 ) ref -> x0 class-hnd exact single-def "Inlining Arg" <System.Linq.Expressions.Interpreter.LightDelegateCreator> +; V05 tmp3 [V05,T04] ( 2, 2 ) ref -> x1 single-def "argument with side effect" +; V06 tmp4 [V06,T05] ( 2, 2 ) long -> x20 "argument with side effect"
; ; Lcl frame size = 16 @@ -28,9 +27,9 @@ G_M37852_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 { ;; size=20 bbWeight=1 PerfScore 4.00 G_M37852_IG02: ; bbWeight=1, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz uxtb w0, w1
- tbz w0, #0, G_M37852_IG07
+ tbz w0, #0, G_M37852_IG05
;; size=8 bbWeight=1 PerfScore 1.50
-G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
adrp x0, [HIGH RELOC #0xD1FFAB1E] // System.Linq.Expressions.Interpreter.LightCompiler add x0, x0, [LOW RELOC #0xD1FFAB1E] bl CORINFO_HELP_NEWSFAST @@ -49,6 +48,9 @@ G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcrRegs -[x1 x20] ; gcr arg pop 0 ldrsb wzr, [x0]
+ ldr x1, [x19] + ldr x1, [x1, #0x88] + ldr x20, [x1, #0x08]
mov x1, xzr ; gcrRegs +[x1] bl System.Linq.Expressions.Interpreter.LightDelegateCreator:CreateDelegate(System.Runtime.CompilerServices.IStrongBox[]):System.Delegate:this @@ -56,41 +58,30 @@ G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, ; gcr arg pop 0 mov x1, x0 ; gcrRegs +[x1]
- cbz x0, G_M37852_IG06 - ;; size=52 bbWeight=0.50 PerfScore 5.75 -G_M37852_IG04: ; bbWeight=0.25, gcrefRegs=80003 {x0 x1 x19}, byrefRegs=0000 {}, byref, isz - ldr x2, [x0] - ldr x3, [x19] - ldr x3, [x3, #0x88] - ldr x3, [x3, #0x08] - cmp x2, x3 - beq G_M37852_IG06 - ;; size=24 bbWeight=0.25 PerfScore 3.38 -G_M37852_IG05: ; bbWeight=0.12, gcrefRegs=80002 {x1 x19}, byrefRegs=0000 {}, byref
+ mov x0, x20
; gcrRegs -[x0]
- mov x0, x3
bl CORINFO_HELP_CHKCASTANY ; gcrRegs -[x1] +[x0] ; gcr arg pop 0
- ;; size=8 bbWeight=0.12 PerfScore 0.19 -G_M37852_IG06: ; bbWeight=0.50, gcrefRegs=80001 {x0 x19}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=68 bbWeight=0.50 PerfScore 10.50 +G_M37852_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_M37852_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
+G_M37852_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0] mov x0, x19 ; gcrRegs +[x0] ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M37852_IG08: ; bbWeight=0.50, epilog, nogc, extend
+G_M37852_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldp x19, x20, [sp, #0x20] ldp fp, lr, [sp], #0x30 b System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this ; gcr arg pop 0 ;; size=12 bbWeight=0.50 PerfScore 1.50
-; Total bytes of code 140, prolog size 20, PerfScore 18.06, instruction count 35, allocated bytes for code 140 (MethodHash=ab956c23) for method System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)
+; Total bytes of code 124, prolog size 20, PerfScore 19.25, instruction count 31, allocated bytes for code 124 (MethodHash=ab956c23) for method System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info: @@ -101,7 +92,7 @@ Unwind Info: E bit : 0 X bit : 0 Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ Function Length : 31 (0x0001f) Actual length = 124 (0x00007c)
---- Epilog scopes ---- ---- Scope 0 Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.arm64.checked.mch 94 87 2 5 -2,076 +48
benchmarks.run_pgo.windows.arm64.checked.mch 1,394 1,386 8 0 -37,820 +296
benchmarks.run_tiered.windows.arm64.checked.mch 38 37 1 0 -892 +4
coreclr_tests.run.windows.arm64.checked.mch 201 168 9 24 -4,596 +376
libraries.crossgen2.windows.arm64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.windows.arm64.checked.mch 594 566 7 21 -18,072 +280
libraries_tests.run.windows.arm64.Release.mch 1,170 999 147 24 -26,596 +4,304
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 779 734 19 26 -24,276 +584
realworld.run.windows.arm64.checked.mch 143 134 3 6 -4,148 +64
smoke_tests.nativeaot.windows.arm64.checked.mch 1 1 0 0 -16 +0
4,414 4,112 196 106 -118,492 +5,956

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.arm64.checked.mch 22,738 4 22,734 0 (0.00%) 1,719 (7.03%)
benchmarks.run_pgo.windows.arm64.checked.mch 89,096 48,583 40,513 0 (0.00%) 8,739 (8.93%)
benchmarks.run_tiered.windows.arm64.checked.mch 48,205 36,702 11,503 0 (0.00%) 555 (1.14%)
coreclr_tests.run.windows.arm64.checked.mch 585,907 362,948 222,959 0 (0.00%) 9,304 (1.56%)
libraries.crossgen2.windows.arm64.checked.mch 2,119 0 2,119 0 (0.00%) 0 (0.00%)
libraries.pmi.windows.arm64.checked.mch 275,953 6 275,947 0 (0.00%) 29,392 (9.63%)
libraries_tests.run.windows.arm64.Release.mch 618,575 467,644 150,931 0 (0.00%) 30,066 (4.64%)
librariestestsnotieredcompilation.run.windows.arm64.Release.mch 274,630 21,597 253,033 0 (0.00%) 42,345 (13.36%)
realworld.run.windows.arm64.checked.mch 28,803 3 28,800 0 (0.00%) 4,444 (13.37%)
smoke_tests.nativeaot.windows.arm64.checked.mch 58 0 58 0 (0.00%) 0 (0.00%)
1,946,084 937,487 1,008,597 0 (0.00%) 126,564 (6.11%)

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: 9187124 (overridden on cmd)
Total bytes of diff: 9185096 (overridden on cmd)
Total bytes of delta: -2028 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          44 : 2943.dasm (8.59 % of base)
           4 : 2563.dasm (0.40 % of base)

Top file improvements (bytes):
        -128 : 10696.dasm (-3.64 % of base)
         -80 : 4911.dasm (-1.64 % of base)
         -56 : 2519.dasm (-21.21 % of base)
         -48 : 1495.dasm (-10.53 % of base)
         -44 : 1438.dasm (-4.60 % of base)
         -44 : 20785.dasm (-16.18 % of base)
         -40 : 16890.dasm (-4.81 % of base)
         -40 : 18129.dasm (-12.50 % of base)
         -40 : 19323.dasm (-8.06 % of base)
         -40 : 6022.dasm (-9.26 % of base)
         -36 : 20648.dasm (-15.00 % of base)
         -28 : 13919.dasm (-2.13 % of base)
         -28 : 16119.dasm (-21.88 % of base)
         -28 : 17321.dasm (-4.27 % of base)
         -28 : 18659.dasm (-15.91 % of base)
         -28 : 4385.dasm (-12.28 % of base)
         -28 : 4823.dasm (-25.93 % of base)
         -28 : 8213.dasm (-20.59 % of base)
         -28 : 4136.dasm (-46.67 % of base)
         -28 : 18782.dasm (-12.73 % of base)

55 total files with Code Size differences (53 improved, 2 regressed), 5 unchanged.

Top method regressions (bytes):
          44 (8.59 % of base) : 2943.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)
           4 (0.40 % of base) : 2563.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)

Top method improvements (bytes):
        -128 (-3.64 % of base) : 10696.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -80 (-1.64 % of base) : 4911.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -56 (-21.21 % of base) : 2519.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -48 (-10.53 % of base) : 1495.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -44 (-16.18 % of base) : 20785.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-4.60 % of base) : 1438.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -40 (-4.81 % of base) : 16890.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -40 (-12.50 % of base) : 18129.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -40 (-8.06 % of base) : 19323.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -40 (-9.26 % of base) : 6022.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -36 (-15.00 % of base) : 20648.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -28 (-4.27 % of base) : 17321.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (FullOpts)
         -28 (-12.73 % of base) : 18782.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -28 (-15.91 % of base) : 18659.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -28 (-12.28 % of base) : 4385.dasm - Microsoft.Extensions.Options.OptionsMonitor`1[System.__Canon]:add__onChange(System.Action`2[System.__Canon,System.__Canon]):this (FullOpts)
         -28 (-21.88 % of base) : 16119.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -28 (-2.13 % of base) : 13919.dasm - Newtonsoft.Json.Utilities.ExpressionReflectionDelegateFactory:CreateSet[System.__Canon](System.Reflection.PropertyInfo):System.Action`2[System.__Canon,System.__Canon]:this (FullOpts)
         -28 (-20.59 % of base) : 8213.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 684.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-25.93 % of base) : 4823.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)

Top method regressions (percentages):
          44 (8.59 % of base) : 2943.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)
           4 (0.40 % of base) : 2563.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 4136.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -24 (-31.58 % of base) : 5069.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 684.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-25.93 % of base) : 4823.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -24 (-22.22 % of base) : 16486.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -28 (-21.88 % of base) : 16119.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -56 (-21.21 % of base) : 2519.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -28 (-20.59 % of base) : 8213.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -20 (-20.00 % of base) : 11482.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -20 (-17.86 % of base) : 17100.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -24 (-16.67 % of base) : 22932.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (FullOpts)
         -24 (-16.22 % of base) : 10699.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,System.__Canon,System.__Canon]:Add(System.__Canon,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -24 (-16.22 % of base) : 10414.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (FullOpts)
         -44 (-16.18 % of base) : 20785.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -16 (-16.00 % of base) : 7438.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -28 (-15.91 % of base) : 18659.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (FullOpts)
         -36 (-15.00 % of base) : 20648.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -24 (-14.63 % of base) : 15033.dasm - System.Text.Json.Serialization.Converters.IDictionaryConverter`1[System.__Canon]:Add(System.String,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -24 (-14.29 % of base) : 5285.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -24 (-13.33 % of base) : 19956.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (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: 36367068 (overridden on cmd)
Total bytes of diff: 36329544 (overridden on cmd)
Total bytes of delta: -37524 (-0.10 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          52 : 89803.dasm (2.87 % of base)
          52 : 25512.dasm (2.87 % of base)
          48 : 29312.dasm (2.55 % of base)
          48 : 33819.dasm (2.54 % of base)
          32 : 25068.dasm (1.02 % of base)
          32 : 77148.dasm (1.80 % of base)
          16 : 52521.dasm (6.90 % of base)
          16 : 85443.dasm (7.41 % of base)

Top file improvements (bytes):
        -396 : 64024.dasm (-8.60 % of base)
         -56 : 68676.dasm (-5.32 % of base)
         -56 : 17422.dasm (-11.97 % of base)
         -48 : 69780.dasm (-14.63 % of base)
         -48 : 69833.dasm (-8.39 % of base)
         -44 : 27720.dasm (-9.91 % of base)
         -32 : 27706.dasm (-6.35 % of base)
         -32 : 3744.dasm (-6.35 % of base)
         -28 : 24053.dasm (-5.15 % of base)
         -28 : 15945.dasm (-5.15 % of base)
         -28 : 24049.dasm (-3.30 % of base)
         -28 : 64002.dasm (-8.43 % of base)
         -28 : 8639.dasm (-28.00 % of base)
         -28 : 24173.dasm (-3.30 % of base)
         -28 : 64503.dasm (-2.01 % of base)
         -28 : 7061.dasm (-3.30 % of base)
         -28 : 20717.dasm (-5.15 % of base)
         -28 : 24325.dasm (-3.30 % of base)
         -28 : 24637.dasm (-5.15 % of base)
         -28 : 24909.dasm (-3.30 % of base)

58 total files with Code Size differences (50 improved, 8 regressed), 0 unchanged.

Top method regressions (bytes):
          52 (2.87 % of base) : 89803.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          52 (2.87 % of base) : 25512.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (2.55 % of base) : 29312.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (2.54 % of base) : 33819.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          32 (1.02 % of base) : 25068.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          32 (1.80 % of base) : 77148.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          16 (6.90 % of base) : 52521.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          16 (7.41 % of base) : 85443.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

Top method improvements (bytes):
        -396 (-8.60 % of base) : 64024.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -56 (-5.32 % of base) : 68676.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -56 (-11.97 % of base) : 17422.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -48 (-14.63 % of base) : 69780.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -48 (-8.39 % of base) : 69833.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -44 (-9.91 % of base) : 27720.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -32 (-6.35 % of base) : 27706.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -32 (-6.35 % of base) : 3744.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-2.01 % of base) : 64503.dasm - Microsoft.CodeAnalysis.CSharp.SourceDocumentationCommentUtils:GetDocumentationCommentTriviaFromSyntaxNode(Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode,Microsoft.CodeAnalysis.DiagnosticBag):System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.CSharp.Syntax.DocumentationCommentTriviaSyntax] (Tier1)
         -28 (-9.46 % of base) : 64007.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-8.43 % of base) : 64002.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -28 (-28.00 % of base) : 8639.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-5.15 % of base) : 24053.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 15945.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 24049.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 24173.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 7061.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 20717.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-3.30 % of base) : 24325.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 24637.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          16 (7.41 % of base) : 85443.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          16 (6.90 % of base) : 52521.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          52 (2.87 % of base) : 89803.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          52 (2.87 % of base) : 25512.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (2.55 % of base) : 29312.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (2.54 % of base) : 33819.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          32 (1.80 % of base) : 77148.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          32 (1.02 % of base) : 25068.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)

Top method improvements (percentages):
         -28 (-28.00 % of base) : 8639.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -24 (-17.14 % of base) : 63316.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -48 (-14.63 % of base) : 69780.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-13.64 % of base) : 68773.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -56 (-11.97 % of base) : 17422.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -24 (-10.71 % of base) : 69344.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -44 (-9.91 % of base) : 27720.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -28 (-9.46 % of base) : 64007.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
        -396 (-8.60 % of base) : 64024.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -28 (-8.43 % of base) : 64002.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -48 (-8.39 % of base) : 69833.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -20 (-6.41 % of base) : 14902.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -32 (-6.35 % of base) : 27706.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -32 (-6.35 % of base) : 3744.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -16 (-5.41 % of base) : 68882.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -56 (-5.32 % of base) : 68676.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -24 (-5.22 % of base) : 64908.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -24 (-5.22 % of base) : 50764.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-5.15 % of base) : 24053.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -28 (-5.15 % of base) : 15945.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: 14833264 (overridden on cmd)
Total bytes of diff: 14832376 (overridden on cmd)
Total bytes of delta: -888 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
           4 : 15789.dasm (0.40 % of base)

Top file improvements (bytes):
         -56 : 43268.dasm (-21.21 % of base)
         -52 : 2432.dasm (-12.75 % of base)
         -44 : 41381.dasm (-16.18 % of base)
         -44 : 27047.dasm (-4.60 % of base)
         -40 : 41453.dasm (-12.50 % of base)
         -36 : 41025.dasm (-15.00 % of base)
         -32 : 19799.dasm (-17.78 % of base)
         -28 : 23737.dasm (-25.93 % of base)
         -28 : 38694.dasm (-12.73 % of base)
         -28 : 7746.dasm (-28.00 % of base)
         -28 : 24013.dasm (-3.41 % of base)
         -28 : 21519.dasm (-21.88 % of base)
         -28 : 38590.dasm (-4.27 % of base)
         -28 : 41055.dasm (-15.91 % of base)
         -24 : 2004.dasm (-4.51 % of base)
         -24 : 28936.dasm (-11.76 % of base)
         -24 : 29010.dasm (-4.38 % of base)
         -24 : 38916.dasm (-17.14 % of base)
         -24 : 15003.dasm (-5.56 % of base)
         -24 : 21178.dasm (-1.80 % of base)

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

Top method regressions (bytes):
           4 (0.40 % of base) : 15789.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (Tier1)

Top method improvements (bytes):
         -56 (-21.21 % of base) : 43268.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -52 (-12.75 % of base) : 2432.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -44 (-16.18 % of base) : 41381.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -44 (-4.60 % of base) : 27047.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (Tier1)
         -40 (-12.50 % of base) : 41453.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -36 (-15.00 % of base) : 41025.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -32 (-17.78 % of base) : 19799.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -28 (-4.27 % of base) : 38590.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (Tier1)
         -28 (-12.73 % of base) : 38694.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -28 (-15.91 % of base) : 41055.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -28 (-28.00 % of base) : 7746.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-21.88 % of base) : 21519.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -28 (-25.93 % of base) : 23737.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -28 (-3.41 % of base) : 24013.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (Tier1)
         -24 (-13.95 % of base) : 41579.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -24 (-17.14 % of base) : 38916.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -24 (-12.00 % of base) : 39681.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -24 (-3.31 % of base) : 18490.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier1)
         -24 (-6.45 % of base) : 27055.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -24 (-5.56 % of base) : 15003.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)

Top method regressions (percentages):
           4 (0.40 % of base) : 15789.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (Tier1)

Top method improvements (percentages):
         -28 (-28.00 % of base) : 7746.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -28 (-25.93 % of base) : 23737.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -28 (-21.88 % of base) : 21519.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -56 (-21.21 % of base) : 43268.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -20 (-20.00 % of base) : 21812.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -32 (-17.78 % of base) : 19799.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -24 (-17.14 % of base) : 38916.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -44 (-16.18 % of base) : 41381.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-15.91 % of base) : 41055.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -36 (-15.00 % of base) : 41025.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-13.95 % of base) : 41579.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -52 (-12.75 % of base) : 2432.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -28 (-12.73 % of base) : 38694.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -40 (-12.50 % of base) : 41453.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -24 (-12.00 % of base) : 39681.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -24 (-11.76 % of base) : 28936.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -16 (-7.84 % of base) : 41684.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -24 (-6.45 % of base) : 27055.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -20 (-6.41 % of base) : 6628.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -20 (-5.81 % of base) : 2436.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,System.Type,ubyte):System.Attribute[] (Tier1)

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


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: 465711032 (overridden on cmd)
Total bytes of diff: 465706812 (overridden on cmd)
Total bytes of delta: -4220 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         112 : 2966.dasm (0.93 % of base)
         112 : 2987.dasm (0.93 % of base)
          60 : 197440.dasm (300.00 % of base)
          40 : 474779.dasm (1.28 % of base)
          12 : 256468.dasm (1.19 % of base)
          12 : 482437.dasm (2.52 % of base)
          12 : 589553.dasm (0.60 % of base)
          12 : 592045.dasm (3.37 % of base)
           4 : 295344.dasm (0.93 % of base)

Top file improvements (bytes):
         -80 : 455.dasm (-5.81 % of base)
         -64 : 242380.dasm (-26.23 % of base)
         -64 : 248852.dasm (-38.10 % of base)
         -56 : 481846.dasm (-16.87 % of base)
         -56 : 448921.dasm (-21.21 % of base)
         -52 : 204676.dasm (-5.06 % of base)
         -52 : 208.dasm (-4.22 % of base)
         -52 : 582866.dasm (-12.75 % of base)
         -52 : 454.dasm (-4.30 % of base)
         -48 : 180152.dasm (-21.82 % of base)
         -48 : 204702.dasm (-10.53 % of base)
         -44 : 180768.dasm (-2.63 % of base)
         -44 : 203506.dasm (-16.18 % of base)
         -44 : 318995.dasm (-6.92 % of base)
         -44 : 563859.dasm (-6.92 % of base)
         -44 : 187086.dasm (-23.40 % of base)
         -44 : 584565.dasm (-6.92 % of base)
         -44 : 187065.dasm (-13.41 % of base)
         -44 : 399431.dasm (-6.92 % of base)
         -44 : 187064.dasm (-23.40 % of base)

53 total files with Code Size differences (44 improved, 9 regressed), 23 unchanged.

Top method regressions (bytes):
         112 (0.93 % of base) : 2966.dasm - Program:TestCase0003() (FullOpts)
         112 (0.93 % of base) : 2987.dasm - Program:TestCase0003() (FullOpts)
          60 (300.00 % of base) : 197440.dasm - T:TestEntryPoint():int (FullOpts)
          40 (1.28 % of base) : 474779.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          12 (1.19 % of base) : 256468.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          12 (3.37 % of base) : 592045.dasm - ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey:Equals(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey):ubyte:this (Tier1)
          12 (0.60 % of base) : 589553.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          12 (2.52 % of base) : 482437.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
           4 (0.93 % of base) : 295344.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)

Top method improvements (bytes):
         -80 (-5.81 % of base) : 455.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (FullOpts)
         -64 (-26.23 % of base) : 242380.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -64 (-38.10 % of base) : 248852.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -56 (-16.87 % of base) : 481846.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -56 (-21.21 % of base) : 448921.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -52 (-4.30 % of base) : 454.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -52 (-4.22 % of base) : 208.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -52 (-5.06 % of base) : 204676.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -52 (-12.75 % of base) : 582866.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -48 (-10.53 % of base) : 204702.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -48 (-21.82 % of base) : 180152.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -44 (-16.18 % of base) : 203506.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-23.40 % of base) : 187086.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-23.40 % of base) : 187064.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-13.41 % of base) : 187065.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -44 (-6.92 % of base) : 318995.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 563859.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 584565.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-6.92 % of base) : 399431.dasm - System.Reflection.Emit.DynamicMethod:CreateDelegate(System.Type,System.Object):System.Delegate:this (Instrumented Tier1)
         -44 (-2.63 % of base) : 180768.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)

Top method regressions (percentages):
          60 (300.00 % of base) : 197440.dasm - T:TestEntryPoint():int (FullOpts)
          12 (3.37 % of base) : 592045.dasm - ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey:Equals(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey):ubyte:this (Tier1)
          12 (2.52 % of base) : 482437.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          40 (1.28 % of base) : 474779.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          12 (1.19 % of base) : 256468.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
         112 (0.93 % of base) : 2966.dasm - Program:TestCase0003() (FullOpts)
         112 (0.93 % of base) : 2987.dasm - Program:TestCase0003() (FullOpts)
           4 (0.93 % of base) : 295344.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
          12 (0.60 % of base) : 589553.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)

Top method improvements (percentages):
         -24 (-40.00 % of base) : 218368.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -64 (-38.10 % of base) : 248852.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -24 (-28.57 % of base) : 314841.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -28 (-28.00 % of base) : 319906.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -64 (-26.23 % of base) : 242380.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -44 (-23.40 % of base) : 187086.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -44 (-23.40 % of base) : 187064.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -48 (-21.82 % of base) : 180152.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -28 (-21.21 % of base) : 314993.dasm - Program+TestGenericInlining+GenericInline`1[System.__Canon]:.ctor():this (FullOpts)
         -56 (-21.21 % of base) : 448921.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -24 (-20.00 % of base) : 296125.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (FullOpts)
         -20 (-20.00 % of base) : 254993.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -28 (-18.92 % of base) : 183059.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -28 (-18.92 % of base) : 250365.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -20 (-17.86 % of base) : 200233.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -32 (-17.78 % of base) : 481986.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -28 (-17.50 % of base) : 294976.dasm - System.CommandLine.Binding.ArgumentConverter:GetValueOrDefault[System.__Canon](System.CommandLine.Binding.ArgumentConversionResult):System.__Canon (FullOpts)
         -28 (-17.50 % of base) : 180106.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)
         -28 (-17.50 % of base) : 218361.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -56 (-16.87 % of base) : 481846.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)


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: 59048316 (overridden on cmd)
Total bytes of diff: 59030524 (overridden on cmd)
Total bytes of delta: -17792 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         116 : 113967.dasm (4.72 % of base)
          72 : 175637.dasm (1.35 % of base)
          72 : 107128.dasm (2.65 % of base)
           8 : 174251.dasm (1.67 % of base)
           4 : 234882.dasm (0.93 % of base)
           4 : 258239.dasm (2.63 % of base)
           4 : 259820.dasm (2.63 % of base)

Top file improvements (bytes):
        -600 : 243493.dasm (-25.17 % of base)
        -320 : 139899.dasm (-16.74 % of base)
        -320 : 92021.dasm (-19.00 % of base)
        -264 : 290991.dasm (-36.46 % of base)
        -184 : 29680.dasm (-23.00 % of base)
        -184 : 29687.dasm (-22.22 % of base)
        -168 : 205366.dasm (-8.27 % of base)
        -168 : 206011.dasm (-42.00 % of base)
        -132 : 206013.dasm (-5.91 % of base)
        -120 : 29844.dasm (-18.99 % of base)
        -120 : 29853.dasm (-18.29 % of base)
        -116 : 12041.dasm (-11.28 % of base)
        -104 : 145088.dasm (-1.81 % of base)
        -104 : 174174.dasm (-19.40 % of base)
         -80 : 219289.dasm (-1.70 % of base)
         -76 : 175161.dasm (-6.64 % of base)
         -72 : 205932.dasm (-34.62 % of base)
         -72 : 294056.dasm (-14.88 % of base)
         -72 : 30748.dasm (-13.74 % of base)
         -68 : 30741.dasm (-14.17 % of base)

59 total files with Code Size differences (52 improved, 7 regressed), 20 unchanged.

Top method regressions (bytes):
         116 (4.72 % of base) : 113967.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          72 (2.65 % of base) : 107128.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          72 (1.35 % of base) : 175637.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
           8 (1.67 % of base) : 174251.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
           4 (0.93 % of base) : 234882.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           4 (2.63 % of base) : 258239.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (2.63 % of base) : 259820.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

Top method improvements (bytes):
        -600 (-25.17 % of base) : 243493.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -320 (-16.74 % of base) : 139899.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -320 (-19.00 % of base) : 92021.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -264 (-36.46 % of base) : 290991.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
        -184 (-23.00 % of base) : 29680.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -184 (-22.22 % of base) : 29687.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
        -168 (-8.27 % of base) : 205366.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
        -168 (-42.00 % of base) : 206011.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -132 (-5.91 % of base) : 206013.dasm - System.Xml.Serialization.XmlSchemas:GetSchemaItem(System.Xml.Schema.XmlSchemaObject,System.String,System.String):System.String (FullOpts)
        -120 (-18.29 % of base) : 29853.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericOneDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
        -120 (-18.99 % of base) : 29844.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericZeroDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
        -116 (-11.28 % of base) : 12041.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
        -104 (-1.81 % of base) : 145088.dasm - Newtonsoft.Json.JsonTextReader+<DoReadAsBytesAsync>d__42:MoveNext():this (FullOpts)
        -104 (-19.40 % of base) : 174174.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -80 (-1.70 % of base) : 219289.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -76 (-6.64 % of base) : 175161.dasm - System.Data.DataRowExtensions+UnboxT`1[System.__Canon]:NullableFieldUsingReflection(System.Object):System.__Canon (FullOpts)
         -72 (-14.88 % of base) : 294056.dasm - System.Security.Cryptography.Xml.XmlDsigBase64Transform:LoadInput(System.Object):this (FullOpts)
         -72 (-13.74 % of base) : 30748.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.__Canon](System.Xml.Serialization.XmlSerializer):System.__Canon:this (FullOpts)
         -72 (-34.62 % of base) : 205932.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -68 (-14.17 % of base) : 30741.dasm - System.ServiceModel.Syndication.SyndicationElementExtension:GetObject[System.__Canon](System.Runtime.Serialization.XmlObjectSerializer):System.__Canon:this (FullOpts)

Top method regressions (percentages):
         116 (4.72 % of base) : 113967.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          72 (2.65 % of base) : 107128.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
           4 (2.63 % of base) : 258239.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           4 (2.63 % of base) : 259820.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           8 (1.67 % of base) : 174251.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
          72 (1.35 % of base) : 175637.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
           4 (0.93 % of base) : 234882.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 29403.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-46.67 % of base) : 216663.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
        -168 (-42.00 % of base) : 206011.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -264 (-36.46 % of base) : 290991.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
         -72 (-34.62 % of base) : 205932.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -40 (-33.33 % of base) : 248275.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -24 (-31.58 % of base) : 256271.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 224815.dasm - CSharpx.Either+<>c__DisplayClass13_0`1[System.__Canon]:<Cast>b__0():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 179038.dasm - System.Data.Common.SqlUdtStorage:SetStorage(System.Object,System.Collections.BitArray):this (FullOpts)
         -32 (-28.57 % of base) : 12356.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
         -32 (-28.57 % of base) : 302369.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-28.57 % of base) : 302383.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 142793.dasm - Newtonsoft.Json.Utilities.CollectionWrapper`1[ubyte]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
         -32 (-27.59 % of base) : 231560.dasm - Microsoft.Extensions.Hosting.Internal.ConfigureContainerAdapter`1[System.__Canon]:ConfigureContainer(Microsoft.Extensions.Hosting.HostBuilderContext,System.Object):this (FullOpts)
         -32 (-27.59 % of base) : 218721.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.__Canon]:<SetSetter>b__0(System.Object,System.Object):this (FullOpts)
         -32 (-27.59 % of base) : 218730.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass15_0[System.__Canon]:<SetShouldSerialize>b__0(System.Object,System.Object):ubyte:this (FullOpts)
         -24 (-27.27 % of base) : 188703.dasm - System.Runtime.Serialization.DataNode`1[System.__Canon]:set_Value(System.Object):this (FullOpts)
         -24 (-27.27 % of base) : 188588.dasm - System.Runtime.Serialization.KeyValue`2[System.__Canon,System.Nullable`1[int]]:System.Runtime.Serialization.IKeyValue.set_Key(System.Object):this (FullOpts)
         -28 (-26.92 % of base) : 246423.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -28 (-26.92 % of base) : 203203.dasm - System.Xml.Xsl.Runtime.XmlQuerySequence`1[System.__Canon]:System.Collections.IList.IndexOf(System.Object):int:this (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: 283365108 (overridden on cmd)
Total bytes of diff: 283342816 (overridden on cmd)
Total bytes of delta: -22292 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         116 : 517023.dasm (7.25 % of base)
          60 : 212706.dasm (2.34 % of base)
          48 : 639841.dasm (1.39 % of base)
          48 : 244085.dasm (1.28 % of base)
          48 : 406194.dasm (1.49 % of base)
          44 : 169558.dasm (1.17 % of base)
          44 : 334392.dasm (1.18 % of base)
          44 : 391358.dasm (1.12 % of base)
          44 : 629473.dasm (1.15 % of base)
          44 : 632549.dasm (7.80 % of base)
          44 : 154567.dasm (9.09 % of base)
          44 : 169945.dasm (1.27 % of base)
          44 : 177815.dasm (7.91 % of base)
          44 : 484821.dasm (1.18 % of base)
          44 : 541740.dasm (1.18 % of base)
          44 : 590357.dasm (7.80 % of base)
          44 : 634715.dasm (13.41 % of base)
          40 : 629532.dasm (1.16 % of base)
          40 : 634319.dasm (1.05 % of base)
          40 : 219538.dasm (1.40 % of base)

Top file improvements (bytes):
        -152 : 496471.dasm (-10.58 % of base)
        -104 : 407960.dasm (-4.77 % of base)
        -104 : 553247.dasm (-1.01 % of base)
         -84 : 517151.dasm (-4.45 % of base)
         -84 : 51965.dasm (-4.74 % of base)
         -80 : 568915.dasm (-0.91 % of base)
         -80 : 637324.dasm (-23.26 % of base)
         -72 : 283304.dasm (-10.47 % of base)
         -72 : 599050.dasm (-4.46 % of base)
         -68 : 217781.dasm (-10.90 % of base)
         -64 : 311096.dasm (-21.05 % of base)
         -64 : 497622.dasm (-5.32 % of base)
         -64 : 454765.dasm (-16.16 % of base)
         -60 : 421561.dasm (-2.01 % of base)
         -60 : 575618.dasm (-14.29 % of base)
         -60 : 153601.dasm (-1.40 % of base)
         -60 : 597676.dasm (-2.44 % of base)
         -60 : 418714.dasm (-5.21 % of base)
         -56 : 210409.dasm (-2.35 % of base)
         -56 : 366887.dasm (-22.22 % of base)

83 total files with Code Size differences (52 improved, 31 regressed), 20 unchanged.

Top method regressions (bytes):
         116 (7.25 % of base) : 517023.dasm - Moq.Extensions:IsOrContainsTypeMatcher(System.Type):ubyte (Tier1)
          60 (2.34 % of base) : 212706.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          48 (1.49 % of base) : 406194.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          48 (1.28 % of base) : 244085.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          48 (1.39 % of base) : 639841.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (7.80 % of base) : 632549.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          44 (9.09 % of base) : 154567.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          44 (7.91 % of base) : 177815.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          44 (7.80 % of base) : 590357.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          44 (13.41 % of base) : 634715.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          44 (1.17 % of base) : 169558.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.18 % of base) : 334392.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.12 % of base) : 391358.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.15 % of base) : 629473.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.18 % of base) : 484821.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.18 % of base) : 541740.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          44 (1.27 % of base) : 169945.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.40 % of base) : 219538.dasm - System.IO.Internal.TempFileCollection:SafeDelete():this (Tier1)
          40 (1.05 % of base) : 634319.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          40 (1.06 % of base) : 314168.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)

Top method improvements (bytes):
        -152 (-10.58 % of base) : 496471.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
        -104 (-1.01 % of base) : 553247.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -104 (-4.77 % of base) : 407960.dasm - System.Xml.Xsl.IlGen.XmlILVisitor:VisitGlobalValues(System.Xml.Xsl.Qil.QilList):this (Tier1)
         -84 (-4.74 % of base) : 51965.dasm - Microsoft.CodeAnalysis.Host.Mef.MefWorkspaceServices:GetService[System.__Canon]():System.__Canon:this (Tier1)
         -84 (-4.45 % of base) : 517151.dasm - System.Linq.Expressions.Compiler.LambdaCompiler:EmitExpression(System.Linq.Expressions.Expression,int):this (Tier1)
         -80 (-0.91 % of base) : 568915.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
         -80 (-23.26 % of base) : 637324.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -72 (-4.46 % of base) : 599050.dasm - Microsoft.CodeAnalysis.CSharp.OverloadResolution:ExpressionMatchExactly(Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,byref):ubyte:this (Tier1)
         -72 (-10.47 % of base) : 283304.dasm - System.Tuple`2[System.__Canon,System.__Canon]:Equals(System.Object,System.Collections.IEqualityComparer):ubyte:this (Tier1)
         -68 (-10.90 % of base) : 217781.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (Tier1)
         -64 (-21.05 % of base) : 311096.dasm - (dynamicClass):lambda_method1696(System.Runtime.CompilerServices.Closure):System.Collections.Generic.IEnumerable`1[ushort] (FullOpts)
         -64 (-16.16 % of base) : 454765.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (Tier1)
         -64 (-5.32 % of base) : 497622.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPublicKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (Tier1)
         -60 (-1.40 % of base) : 153601.dasm - Microsoft.CodeAnalysis.CSharp.Binder:BindFieldAccess(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,Microsoft.CodeAnalysis.CSharp.Symbols.FieldSymbol,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,ubyte,ubyte,ubyte):Microsoft.CodeAnalysis.CSharp.BoundExpression:this (Tier1)
         -60 (-2.44 % of base) : 597676.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.TypeParameterSymbol:ConstraintTypesWithDefinitionUseSiteDiagnostics(byref):System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.CSharp.Symbols.TypeWithAnnotations]:this (Tier1)
         -60 (-5.21 % of base) : 418714.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (Tier1)
         -60 (-14.29 % of base) : 575618.dasm - System.Collections.Generic.Dictionary`2[System.__Canon,System.__Canon]:System.Collections.IDictionary.set_Item(System.Object,System.Object):this (Tier1)
         -60 (-2.01 % of base) : 421561.dasm - System.Xml.RwFactoryWriterTests.CXmlDriverEngine:ProcessIncludes(System.String[],System.String,System.Xml.Linq.XElement,OLEDB.Test.ModuleCore.MyDict`2[System.String,System.Object],System.Collections.IList):this (Tier1)
         -56 (-11.97 % of base) : 79009.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -56 (-22.22 % of base) : 366887.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)

Top method regressions (percentages):
          44 (13.41 % of base) : 634715.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          36 (12.50 % of base) : 217737.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          16 (10.00 % of base) : 423400.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
          44 (9.09 % of base) : 154567.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          16 (8.33 % of base) : 150645.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:TryCastToImmutableMap(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],byref):ubyte (Tier1)
          44 (7.91 % of base) : 177815.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          44 (7.80 % of base) : 632549.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          44 (7.80 % of base) : 590357.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
         116 (7.25 % of base) : 517023.dasm - Moq.Extensions:IsOrContainsTypeMatcher(System.Type):ubyte (Tier1)
          20 (3.68 % of base) : 403065.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          24 (3.33 % of base) : 150644.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
           8 (2.56 % of base) : 636222.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          60 (2.34 % of base) : 212706.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
           8 (2.00 % of base) : 363436.dasm - System.Threading.CancellationTokenSource:Invoke(System.Delegate,System.Object,System.Threading.CancellationTokenSource) (Tier1)
           8 (1.96 % of base) : 177009.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          28 (1.56 % of base) : 588044.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          48 (1.49 % of base) : 406194.dasm - System.DefaultBinder:SelectMethod(int,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]):System.Reflection.MethodBase:this (Tier1)
          40 (1.40 % of base) : 219538.dasm - System.IO.Internal.TempFileCollection:SafeDelete():this (Tier1)
          48 (1.39 % of base) : 639841.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
           8 (1.36 % of base) : 335029.dasm - System.Net.Http.Headers.ObjectCollection`1[System.__Canon]:Add(System.__Canon):this (Tier1)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 569293.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -24 (-35.29 % of base) : 62297.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -48 (-30.77 % of base) : 517391.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -32 (-28.57 % of base) : 114326.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -32 (-28.57 % of base) : 113339.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -28 (-28.00 % of base) : 1383.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -32 (-27.59 % of base) : 574378.dasm - System.Text.Json.Serialization.Metadata.JsonPropertyInfo`1+<>c__DisplayClass10_0[System.__Canon]:<SetSetter>b__0(System.Object,System.Object):this (Tier1)
         -24 (-26.09 % of base) : 123855.dasm - Microsoft.Extensions.DependencyInjection.ServiceDescriptor:get_ImplementationFactory():System.Func`2[System.IServiceProvider,System.Object]:this (Tier1)
         -80 (-23.26 % of base) : 637324.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -24 (-23.08 % of base) : 597042.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxListBuilder`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -28 (-22.58 % of base) : 113409.dasm - Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests:CreateInstance[System.__Canon](Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests+CreateInstanceFunc,System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -40 (-22.22 % of base) : 310584.dasm - (dynamicClass):lambda_method490(System.Runtime.CompilerServices.Closure):System.Object (FullOpts)
         -24 (-22.22 % of base) : 575237.dasm - System.Text.Json.Serialization.Converters.QueueOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -24 (-22.22 % of base) : 575236.dasm - System.Text.Json.Serialization.Converters.StackOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (Tier1)
         -56 (-22.22 % of base) : 366887.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -56 (-22.22 % of base) : 341316.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -56 (-22.22 % of base) : 363417.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -28 (-21.88 % of base) : 114476.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -28 (-21.88 % of base) : 54632.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -48 (-21.82 % of base) : 113737.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:Equals(System.Object,System.Object):ubyte:this (Tier1)


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: 135947544 (overridden on cmd)
Total bytes of diff: 135923852 (overridden on cmd)
Total bytes of delta: -23692 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         132 : 229804.dasm (6.21 % of base)
          84 : 69058.dasm (3.25 % of base)
          76 : 149299.dasm (14.07 % of base)
          48 : 96647.dasm (92.31 % of base)
          44 : 187263.dasm (2.36 % of base)
          40 : 91249.dasm (43.48 % of base)
          40 : 96259.dasm (43.48 % of base)
          16 : 93756.dasm (0.30 % of base)
          12 : 191040.dasm (2.10 % of base)
          12 : 37891.dasm (2.97 % of base)
          12 : 37896.dasm (2.97 % of base)
          12 : 187348.dasm (2.10 % of base)
          12 : 38356.dasm (1.71 % of base)
          12 : 37921.dasm (2.70 % of base)
          12 : 38092.dasm (4.17 % of base)
           8 : 38125.dasm (1.80 % of base)
           4 : 37917.dasm (0.49 % of base)
           4 : 97815.dasm (2.63 % of base)
           4 : 38128.dasm (0.40 % of base)

Top file improvements (bytes):
        -600 : 64486.dasm (-25.17 % of base)
        -384 : 173042.dasm (-15.79 % of base)
        -352 : 171926.dasm (-12.59 % of base)
        -304 : 173036.dasm (-12.38 % of base)
        -296 : 221200.dasm (-17.05 % of base)
        -296 : 199653.dasm (-17.05 % of base)
        -244 : 14376.dasm (-17.04 % of base)
        -224 : 173038.dasm (-12.25 % of base)
        -176 : 173034.dasm (-6.89 % of base)
        -160 : 205065.dasm (-7.53 % of base)
        -160 : 207887.dasm (-8.97 % of base)
        -160 : 173039.dasm (-8.97 % of base)
        -160 : 203708.dasm (-7.53 % of base)
        -144 : 64268.dasm (-12.04 % of base)
        -140 : 314665.dasm (-2.60 % of base)
        -128 : 216092.dasm (-3.03 % of base)
        -128 : 243112.dasm (-3.77 % of base)
        -124 : 228196.dasm (-7.93 % of base)
        -124 : 172607.dasm (-6.83 % of base)
        -120 : 173041.dasm (-8.96 % of base)

73 total files with Code Size differences (54 improved, 19 regressed), 21 unchanged.

Top method regressions (bytes):
         132 (6.21 % of base) : 229804.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
          84 (3.25 % of base) : 69058.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
          76 (14.07 % of base) : 149299.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
          48 (92.31 % of base) : 96647.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          44 (2.36 % of base) : 187263.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          40 (43.48 % of base) : 96259.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          40 (43.48 % of base) : 91249.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          16 (0.30 % of base) : 93756.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)
          12 (2.70 % of base) : 37921.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37896.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37891.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (1.71 % of base) : 38356.dasm - FluentAssertions.Primitives.ReferenceTypeAssertions`2[System.__Canon,System.__Canon]:BeOfType(System.Type,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (4.17 % of base) : 38092.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.10 % of base) : 191040.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
          12 (2.10 % of base) : 187348.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
           8 (1.80 % of base) : 38125.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.40 % of base) : 38128.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEquivalentTo[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.49 % of base) : 37917.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:ContainSingle(System.String,System.Object[]):FluentAssertions.AndWhichConstraint`2[System.__Canon,System.__Canon]:this (FullOpts)
           4 (2.63 % of base) : 97815.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

Top method improvements (bytes):
        -600 (-25.17 % of base) : 64486.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -384 (-15.79 % of base) : 173042.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -352 (-12.59 % of base) : 171926.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -304 (-12.38 % of base) : 173036.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
        -296 (-17.05 % of base) : 221200.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -296 (-17.05 % of base) : 199653.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -244 (-17.04 % of base) : 14376.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (FullOpts)
        -224 (-12.25 % of base) : 173038.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
        -176 (-6.89 % of base) : 173034.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)
        -160 (-7.53 % of base) : 205065.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -160 (-7.53 % of base) : 203708.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -160 (-8.97 % of base) : 173039.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (FullOpts)
        -160 (-8.97 % of base) : 207887.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (FullOpts)
        -144 (-12.04 % of base) : 64268.dasm - System.CodeDom.Compiler.Tests.CodeGenerationTests:GenerateCode(System.CodeDom.CodeObject,System.CodeDom.Compiler.CodeDomProvider):System.String (FullOpts)
        -140 (-2.60 % of base) : 314665.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -128 (-3.03 % of base) : 216092.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
        -128 (-3.77 % of base) : 243112.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
        -124 (-7.93 % of base) : 228196.dasm - Internal.Cryptography.Pal.Windows.PkcsPalWindows:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,ubyte,ubyte):System.__Canon (FullOpts)
        -124 (-6.83 % of base) : 172607.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (FullOpts)
        -120 (-8.96 % of base) : 173041.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (FullOpts)

Top method regressions (percentages):
          48 (92.31 % of base) : 96647.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          40 (43.48 % of base) : 96259.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          40 (43.48 % of base) : 91249.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          76 (14.07 % of base) : 149299.dasm - System.SpanTests.MemoryMarshalTests:CreateFromPinnedArrayString() (FullOpts)
         132 (6.21 % of base) : 229804.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
          12 (4.17 % of base) : 38092.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          84 (3.25 % of base) : 69058.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
          12 (2.97 % of base) : 37896.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeFalse(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.97 % of base) : 37891.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:BeTrue(System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (2.70 % of base) : 37921.dasm - FluentAssertions.Primitives.BooleanAssertions`1[System.__Canon]:Be(ubyte,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (2.63 % of base) : 97815.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
          44 (2.36 % of base) : 187263.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          12 (2.10 % of base) : 191040.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
          12 (2.10 % of base) : 187348.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
           8 (1.80 % of base) : 38125.dasm - FluentAssertions.Primitives.NullableBooleanAssertions`1[System.__Canon]:Be(System.Nullable`1[ubyte],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          12 (1.71 % of base) : 38356.dasm - FluentAssertions.Primitives.ReferenceTypeAssertions`2[System.__Canon,System.__Canon]:BeOfType(System.Type,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           4 (0.49 % of base) : 37917.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:ContainSingle(System.String,System.Object[]):FluentAssertions.AndWhichConstraint`2[System.__Canon,System.__Canon]:this (FullOpts)
           4 (0.40 % of base) : 38128.dasm - FluentAssertions.Collections.GenericCollectionAssertions`3[System.__Canon,System.__Canon,System.__Canon]:BeEquivalentTo[System.__Canon](System.Collections.Generic.IEnumerable`1[System.__Canon],System.Func`2[System.__Canon,System.__Canon],System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
          16 (0.30 % of base) : 93756.dasm - System.Data.DataTable:ReadXml(System.Xml.XmlReader,ubyte):int:this (FullOpts)

Top method improvements (percentages):
         -28 (-46.67 % of base) : 36780.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-46.67 % of base) : 146388.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -24 (-40.00 % of base) : 30922.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
         -56 (-35.00 % of base) : 171078.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
         -72 (-34.62 % of base) : 172422.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -40 (-33.33 % of base) : 68789.dasm - System.Collections.Immutable.ImmutableSortedDictionary`2+Builder[System.__Canon,int]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
         -44 (-33.33 % of base) : 173071.dasm - System.Xml.Schema.XmlSchemaSimpleType:get_DerivedFrom():System.Xml.XmlQualifiedName:this (FullOpts)
         -24 (-31.58 % of base) : 88831.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -24 (-31.58 % of base) : 137598.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 42867.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -24 (-30.00 % of base) : 48503.dasm - Microsoft.CodeAnalysis.Options.Option`1[System.__Canon]:Microsoft.CodeAnalysis.Options.IOption.get_DefaultValue():System.Object:this (FullOpts)
         -24 (-30.00 % of base) : 42861.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 48497.dasm - Microsoft.CodeAnalysis.Options.Option2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 42863.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -24 (-30.00 % of base) : 48500.dasm - Microsoft.CodeAnalysis.Options.PerLanguageOption2`1[System.__Canon]:get_DefaultValue():System.__Canon:this (FullOpts)
         -32 (-28.57 % of base) : 41487.dasm - Microsoft.Extensions.Logging.Testing.TestLogger+<>c__DisplayClass15_0`1[System.__Canon]:<Log>b__0(System.Object,System.Exception):System.String:this (FullOpts)
         -32 (-28.57 % of base) : 192660.dasm - System.Resources.ResourceReader+<>c__DisplayClass7_0`1[System.__Canon]:<CreateUntypedDelegate>b__0(System.Object,System.IO.Stream):System.Object:this (FullOpts)
         -32 (-28.57 % of base) : 74514.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -32 (-28.57 % of base) : 130456.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-28.00 % of base) : 98485.dasm - System.Diagnostics.DiagnosticSourceEventSource+TransformSpec+PropertySpec+PropertyFetch+RefTypedFetchProperty`2[System.__Canon,System.__Canon]:Fetch(System.Object):System.Object:this (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: 11178536 (overridden on cmd)
Total bytes of diff: 11174452 (overridden on cmd)
Total bytes of delta: -4084 (-0.04 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          44 : 4735.dasm (8.59 % of base)
          16 : 4651.dasm (4.35 % of base)
           4 : 14502.dasm (0.40 % of base)

Top file improvements (bytes):
        -192 : 31361.dasm (-34.29 % of base)
        -136 : 32112.dasm (-34.69 % of base)
        -120 : 32773.dasm (-28.30 % of base)
         -68 : 32332.dasm (-6.91 % of base)
         -68 : 32794.dasm (-20.24 % of base)
         -64 : 27171.dasm (-6.81 % of base)
         -64 : 31345.dasm (-25.81 % of base)
         -60 : 31989.dasm (-20.55 % of base)
         -60 : 8461.dasm (-32.61 % of base)
         -60 : 31357.dasm (-16.48 % of base)
         -56 : 31319.dasm (-2.52 % of base)
         -56 : 4766.dasm (-22.22 % of base)
         -56 : 6860.dasm (-4.09 % of base)
         -56 : 7370.dasm (-8.70 % of base)
         -52 : 29624.dasm (-8.28 % of base)
         -44 : 17456.dasm (-16.18 % of base)
         -44 : 29364.dasm (-2.68 % of base)
         -44 : 19918.dasm (-3.20 % of base)
         -40 : 27742.dasm (-8.06 % of base)
         -40 : 31314.dasm (-17.86 % of base)

62 total files with Code Size differences (59 improved, 3 regressed), 6 unchanged.

Top method regressions (bytes):
          44 (8.59 % of base) : 4735.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)
          16 (4.35 % of base) : 4651.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
           4 (0.40 % of base) : 14502.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)

Top method improvements (bytes):
        -192 (-34.29 % of base) : 31361.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`6[System.__Canon,ubyte,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
        -136 (-34.69 % of base) : 32112.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
        -120 (-28.30 % of base) : 32773.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -68 (-6.91 % of base) : 32332.dasm - System.Management.Automation.Internal.PSDataCollectionStream`1[System.__Canon]:Write(System.Object,ubyte):int:this (FullOpts)
         -68 (-20.24 % of base) : 32794.dasm - System.Runtime.InteropServices.CustomMarshalers.ComDataHelpers:GetOrCreateManagedViewFromComData[System.__Canon,System.__Canon](System.Object,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
         -64 (-6.81 % of base) : 27171.dasm - Microsoft.CodeAnalysis.CSharp.AsyncMethodBuilderMemberCollection:TryGetBuilderMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.SyntheticBoundNodeFactory,System.Nullable`1[int],Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol,ubyte,byref):ubyte (FullOpts)
         -64 (-25.81 % of base) : 31345.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -60 (-32.61 % of base) : 8461.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -60 (-20.55 % of base) : 31989.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -60 (-16.48 % of base) : 31357.dasm - System.Management.Automation.Interpreter.FuncCallInstruction`4[System.__Canon,System.__Canon,ubyte,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -56 (-8.70 % of base) : 7370.dasm - FSharp.Compiler.CheckDeclarations+TcDeclarations:SplitTyconDefn(FSharp.Compiler.Syntax.SynTypeDefn):System.Tuple`2[FSharp.Compiler.CheckDeclarations+MutRecDefnsPhase1DataForTycon,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] (FullOpts)
         -56 (-4.09 % of base) : 6860.dasm - FSharp.Compiler.Lexer:endline(FSharp.Compiler.ParseHelpers+LexerEndlineContinuation,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort]):FSharp.Compiler.Parser+token (FullOpts)
         -56 (-2.52 % of base) : 31319.dasm - System.Management.Automation.ScriptBlock:BindArgumentsForScriptblockInvoke(System.Management.Automation.RuntimeDefinedParameter[],System.Object[],System.Management.Automation.ExecutionContext,ubyte,System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable],System.Management.Automation.MutableTuple):System.Object[] (FullOpts)
         -56 (-22.22 % of base) : 4766.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -52 (-8.28 % of base) : 29624.dasm - System.Management.Automation.SessionStateScope:CreateFunction(System.String,System.Management.Automation.ScriptBlock,System.Management.Automation.FunctionInfo,int,System.Management.Automation.ExecutionContext,System.String):System.Management.Automation.FunctionInfo (FullOpts)
         -44 (-3.20 % of base) : 19918.dasm - Microsoft.CodeAnalysis.MetadataDecoder`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:GetExplicitlyOverriddenMethods(System.Reflection.Metadata.TypeDefinitionHandle,System.Reflection.Metadata.MethodDefinitionHandle,System.__Canon):System.Collections.Immutable.ImmutableArray`1[System.__Canon]:this (FullOpts)
         -44 (-16.18 % of base) : 17456.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -44 (-2.68 % of base) : 29364.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)
         -40 (-8.06 % of base) : 27742.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -40 (-17.86 % of base) : 31314.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)

Top method regressions (percentages):
          44 (8.59 % of base) : 4735.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)
          16 (4.35 % of base) : 4651.dasm - Microsoft.FSharp.Control.AsyncResult`1[System.__Canon]:Commit():System.__Canon:this (FullOpts)
           4 (0.40 % of base) : 14502.dasm - System.Threading.Overlapped:AllocateNativeOverlapped(System.Object):ulong:this (FullOpts)

Top method improvements (percentages):
        -136 (-34.69 % of base) : 32112.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
        -192 (-34.29 % of base) : 31361.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`6[System.__Canon,ubyte,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -60 (-32.61 % of base) : 8461.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -24 (-31.58 % of base) : 31440.dasm - System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
        -120 (-28.30 % of base) : 32773.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -28 (-28.00 % of base) : 684.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -28 (-25.93 % of base) : 18096.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -64 (-25.81 % of base) : 31345.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -20 (-23.81 % of base) : 31524.dasm - System.Management.Automation.Language.GetSafeValueVisitor:VisitArrayExpression(System.Management.Automation.Language.ArrayExpressionAst):System.Object:this (FullOpts)
         -28 (-23.33 % of base) : 9429.dasm - FSharp.Compiler.TypedTree+ValFlags:WithRecursiveValInfo(FSharp.Compiler.TypedTree+ValRecursiveScopeInfo):FSharp.Compiler.TypedTree+ValFlags:this (FullOpts)
         -56 (-22.22 % of base) : 4766.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -28 (-21.21 % of base) : 4537.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -20 (-20.83 % of base) : 16365.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -60 (-20.55 % of base) : 31989.dasm - System.Collections.Generic.EqualityComparer`1[System.__Canon]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
         -68 (-20.24 % of base) : 32794.dasm - System.Runtime.InteropServices.CustomMarshalers.ComDataHelpers:GetOrCreateManagedViewFromComData[System.__Canon,System.__Canon](System.Object,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
         -32 (-19.05 % of base) : 32121.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`1[System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -28 (-18.42 % of base) : 9538.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -20 (-17.86 % of base) : 16035.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -40 (-17.86 % of base) : 31314.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -28 (-17.50 % of base) : 10621.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)


smoke_tests.nativeaot.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: 3956 (overridden on cmd)
Total bytes of diff: 3940 (overridden on cmd)
Total bytes of delta: -16 (-0.40 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -16 : 56.dasm (-11.43 % of base)

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

Top method improvements (bytes):
         -16 (-11.43 % of base) : 56.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)

Top method improvements (percentages):
         -16 (-11.43 % of base) : 56.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)

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



windows x64

Diffs are based on 1,978,094 contexts (931,440 MinOpts, 1,046,654 FullOpts).

MISSED contexts: base: 0 (0.00%), diff: 123,356 (5.87%)

Overall (-57,848 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x64.checked.mch 7,337,049 -1,310
benchmarks.run_pgo.windows.x64.checked.mch 29,905,100 -5,257
benchmarks.run_tiered.windows.x64.checked.mch 12,164,630 -427
coreclr_tests.run.windows.x64.checked.mch 369,258,614 -2,105
libraries.pmi.windows.x64.checked.mch 45,357,899 -11,287
libraries_tests.run.windows.x64.Release.mch 241,741,299 -19,639
librariestestsnotieredcompilation.run.windows.x64.Release.mch 108,673,850 -14,824
realworld.run.windows.x64.checked.mch 9,879,513 -2,984
smoke_tests.nativeaot.windows.x64.checked.mch 3,864 -15

FullOpts (-57,848 bytes)

Collection Base size (bytes) Diff size (bytes)
benchmarks.run.windows.x64.checked.mch 7,336,686 -1,310
benchmarks.run_pgo.windows.x64.checked.mch 16,116,230 -5,257
benchmarks.run_tiered.windows.x64.checked.mch 3,061,544 -427
coreclr_tests.run.windows.x64.checked.mch 96,504,415 -2,105
libraries.pmi.windows.x64.checked.mch 45,244,378 -11,287
libraries_tests.run.windows.x64.Release.mch 66,710,570 -19,639
librariestestsnotieredcompilation.run.windows.x64.Release.mch 97,833,239 -14,824
realworld.run.windows.x64.checked.mch 9,492,904 -2,984
smoke_tests.nativeaot.windows.x64.checked.mch 3,864 -15

Example diffs

benchmarks.run.windows.x64.checked.mch

-25 (-33.78%) : 677.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -19,11 +18,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rcx
- mov rbx, rcx - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rcx+0x38] + mov rcx, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 @@ -32,39 +30,21 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, call [<unknown method>] ; gcrRegs -[rcx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 74, prolog size 10, PerfScore 16.44, instruction count 23, allocated bytes for code 74 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info:

-13 (-32.50%) : 1241.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rcx single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rdx class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rdx class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 40 @@ -20,34 +18,21 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub rsp, 40 mov qword ptr [rsp+0x20], rcx ;; size=9 bbWeight=1 PerfScore 1.25
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rcx, qword ptr [rcx+0x38] mov rcx, qword ptr [rcx]
- cmp qword ptr [rax], rcx - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 ret ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 40, prolog size 9, PerfScore 6.38, instruction count 13, allocated bytes for code 40 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 27, prolog size 9, PerfScore 7.75, instruction count 8, allocated bytes for code 27 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info:

-25 (-29.07%) : 4722.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (FullOpts)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> rsi this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> rbx single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> rdx single-def
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> rdx single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> rsi "CSE - aggressive"
; ; Lcl frame size = 40 @@ -22,60 +21,41 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 40 mov qword ptr [rsp+0x20], rdx
- mov rsi, rcx - ; gcrRegs +[rsi] - mov rbx, rdx - ;; size=17 bbWeight=1 PerfScore 3.75 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ mov rbx, rcx + ; gcrRegs +[rbx] + ;; size=14 bbWeight=1 PerfScore 3.50 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov rsi, qword ptr [rdx+0x38] + mov rcx, qword ptr [rsi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 mov rdx, rax ; gcrRegs +[rdx]
- mov rcx, rsi
+ mov rcx, rbx
; gcrRegs +[rcx]
- mov rax, qword ptr [rsi]
+ mov rax, qword ptr [rbx]
; gcrRegs -[rax] mov rax, qword ptr [rax+0x70] call [rax+0x10]<unknown method>
- ; gcrRegs -[rcx rdx rsi] +[rax]
+ ; gcrRegs -[rcx rdx rbx] +[rax]
; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M60617_IG05 - ;; size=36 bbWeight=1 PerfScore 14.00 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M60617_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rsi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M60617_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=40 bbWeight=1 PerfScore 16.00 +G_M60617_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi ret ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 86, prolog size 11, PerfScore 22.44, instruction count 29, allocated bytes for code 86 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
+; Total bytes of code 61, prolog size 11, PerfScore 21.75, instruction count 21, allocated bytes for code 61 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info:

+5 (+5.00%) : 9703.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)

@@ -8,14 +8,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rdx "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> rsi "CSE - aggressive" -; V07 cse1 [V07,T05] ( 2, 5 ) ref -> rdi hoist "CSE - aggressive" -; V08 cse2 [V08,T06] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> rsi "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> rdi "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
; ; Lcl frame size = 40 @@ -30,42 +27,36 @@ G_M34178_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, xor ebx, ebx mov esi, dword ptr [(reloc)] test esi, esi
- jle SHORT G_M34178_IG07 - mov rcx, 0xD1FFAB1E ; static handle - mov rdi, gword ptr [rcx]
+ jle SHORT G_M34178_IG04 + mov rdx, 0xD1FFAB1E ; static handle + mov rdi, gword ptr [rdx]
; gcrRegs +[rdi]
- mov rbp, 0xD1FFAB1E ; static handle - ;; size=35 bbWeight=1 PerfScore 6.00 -G_M34178_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz
mov rdx, rdi ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M34178_IG06 - ;; size=11 bbWeight=4 PerfScore 7.00 -G_M34178_IG04: ; bbWeight=1, gcrefRegs=0085 {rax rdx rdi}, byrefRegs=0000 {}, byref, isz
mov rcx, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rcx - je SHORT G_M34178_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M34178_IG05: ; bbWeight=0.50, gcrefRegs=0084 {rdx rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M34178_IG06: ; bbWeight=4, gcrefRegs=0081 {rax rdi}, byrefRegs=0000 {}, byref, isz - mov rcx, rbp
+ mov rbp, 0xD1FFAB1E ; static handle + ;; size=53 bbWeight=1 PerfScore 7.50 +G_M34178_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rdx, rdi + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[rdx] +[rax] + ; gcr arg pop 0
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, rbp
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rdx] inc ebx cmp ebx, esi jl SHORT G_M34178_IG03
- ;; size=17 bbWeight=4 PerfScore 12.00 -G_M34178_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=35 bbWeight=4 PerfScore 18.00 +G_M34178_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rdi] add rsp, 40 pop rbx @@ -75,7 +66,7 @@ G_M34178_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 100, prolog size 8, PerfScore 37.25, instruction count 32, allocated bytes for code 100 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
+; Total bytes of code 105, prolog size 8, PerfScore 33.00, instruction count 30, allocated bytes for code 105 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
; ============================================================ Unwind Info:

+5 (+5.00%) : 27692.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)

@@ -8,14 +8,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rdx "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> rsi "CSE - aggressive" -; V07 cse1 [V07,T05] ( 2, 5 ) ref -> rdi hoist "CSE - aggressive" -; V08 cse2 [V08,T06] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> rsi "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> rdi "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
; ; Lcl frame size = 40 @@ -30,42 +27,36 @@ G_M40467_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, xor ebx, ebx mov esi, dword ptr [(reloc)] test esi, esi
- jle SHORT G_M40467_IG07 - mov rcx, 0xD1FFAB1E ; static handle - mov rdi, gword ptr [rcx]
+ jle SHORT G_M40467_IG04 + mov rdx, 0xD1FFAB1E ; static handle + mov rdi, gword ptr [rdx]
; gcrRegs +[rdi]
- mov rbp, 0xD1FFAB1E ; static handle - ;; size=35 bbWeight=1 PerfScore 6.00 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz
mov rdx, rdi ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M40467_IG06 - ;; size=11 bbWeight=4 PerfScore 7.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=0085 {rax rdx rdi}, byrefRegs=0000 {}, byref, isz
mov rcx, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rcx - je SHORT G_M40467_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=0084 {rdx rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=0081 {rax rdi}, byrefRegs=0000 {}, byref, isz - mov rcx, rbp
+ mov rbp, 0xD1FFAB1E ; static handle + ;; size=53 bbWeight=1 PerfScore 7.50 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rdx, rdi + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; <unknown class> + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[rdx] +[rax] + ; gcr arg pop 0
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, rbp
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rdx] inc ebx cmp ebx, esi jl SHORT G_M40467_IG03
- ;; size=17 bbWeight=4 PerfScore 12.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=35 bbWeight=4 PerfScore 18.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rdi] add rsp, 40 pop rbx @@ -75,7 +66,7 @@ G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 100, prolog size 8, PerfScore 37.25, instruction count 32, allocated bytes for code 100 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
+; Total bytes of code 105, prolog size 8, PerfScore 33.00, instruction count 30, allocated bytes for code 105 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
; ============================================================ Unwind Info:

+22 (+6.09%) : 5451.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)

@@ -8,28 +8,27 @@ ; 0 inlinees with PGO data; 9 single block inlinees; 7 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 3, 3 ) ref -> [rbp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> -; V01 arg1 [V01,T00] ( 13, 13 ) ref -> rbx class-hnd single-def <System.Threading.Tasks.Task> -; V02 arg2 [V02,T01] ( 4, 4 ) ubyte -> [rbp+0x20] EH-live single-def
+; V00 this [V00,T02] ( 4, 2.50) ref -> [rbp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> +; V01 arg1 [V01,T00] ( 13, 7.50) ref -> rbx class-hnd single-def <System.Threading.Tasks.Task> +; V02 arg2 [V02,T01] ( 5, 3.50) ubyte -> [rbp+0x20] EH-live single-def
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
-; V05 tmp2 [V05,T06] ( 4, 4 ) ubyte -> rdx "Inline return value spill temp" -; V06 tmp3 [V06,T05] ( 4, 4 ) ref -> rdx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V07 tmp4 [V07,T11] ( 3, 3 ) ubyte -> rdx "Inline return value spill temp" -; V08 tmp5 [V08,T08] ( 2, 4 ) byref -> rdx single-def "Inlining Arg"
+; V05 tmp2 [V05,T06] ( 4, 2 ) ubyte -> rdx "Inline return value spill temp" +; V06 tmp3 [V06,T05] ( 4, 2 ) ref -> rdx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V07 tmp4 [V07,T11] ( 3, 1.50) ubyte -> rdx "Inline return value spill temp" +; V08 tmp5 [V08,T08] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource>
-; V10 tmp7 [V10,T12] ( 2, 2 ) int -> rdx "Inline stloc first use temp"
+; V10 tmp7 [V10,T12] ( 2, 1 ) int -> rdx "Inline stloc first use temp"
;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "dup spill" <System.Object> ;* V12 tmp9 [V12 ] ( 0, 0 ) ref -> zero-ref
-;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V15 tmp12 [V15 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V16 tmp13 [V16,T09] ( 2, 4 ) byref -> rdx single-def "argument with side effect" -; V17 PSPSym [V17,T13] ( 1, 1 ) long -> [rbp-0x10] do-not-enreg[V] "PSPSym" -; V18 cse0 [V18,T10] ( 3, 3 ) ref -> rdx "CSE - aggressive" -; V19 rat0 [V19,T07] ( 3, 4 ) byref -> rdx "TLS field access" -; V20 rat1 [V20,T02] ( 3, 6 ) long -> rdx "TLS access" -; V21 rat2 [V21,T03] ( 3, 6 ) long -> rdx "ThreadStaticBlockBase access"
+;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> +;* V14 tmp11 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V15 tmp12 [V15,T09] ( 2, 2 ) byref -> rdx single-def "argument with side effect" +; V16 PSPSym [V16,T13] ( 1, 1 ) long -> [rbp-0x10] do-not-enreg[V] "PSPSym" +; V17 cse0 [V17,T10] ( 3, 1.50) ref -> rdx "CSE - moderate" +; V18 rat0 [V18,T07] ( 3, 2 ) byref -> rdx "TLS field access" +; V19 rat1 [V19,T03] ( 3, 3 ) long -> rdx "TLS access" +; V20 rat2 [V20,T04] ( 3, 3 ) long -> rdx "ThreadStaticBlockBase access"
; ; Lcl frame size = 40 @@ -45,9 +44,11 @@ G_M14922_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov rbx, rdx ; gcrRegs +[rbx] ;; size=26 bbWeight=1 PerfScore 6.00
-G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000004 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
test r8b, r8b
- je SHORT G_M14922_IG04
+ je SHORT G_M14922_IG05 + ;; size=5 bbWeight=1 PerfScore 1.25 +G_M14922_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
xor ecx, ecx test rbx, rbx setne cl @@ -59,23 +60,23 @@ G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=000 ; gcrRegs -[rcx] ; gcr arg pop 0 test eax, eax
- jne SHORT G_M14922_IG04
+ jne SHORT G_M14922_IG05
xor eax, eax
- ;; size=34 bbWeight=1 PerfScore 10.50 -G_M14922_IG03: ; bbWeight=1, epilog, nogc, extend
+ ;; size=29 bbWeight=0.50 PerfScore 4.62 +G_M14922_IG04: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 40 pop rbx pop rbp ret
- ;; size=7 bbWeight=1 PerfScore 2.25 -G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=7 bbWeight=0.50 PerfScore 1.12 +G_M14922_IG05: ; bbWeight=0.50, gcVars=0000000000000004 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
or dword ptr [rbx+0x34], 0x20000 mov rdx, gword ptr [rbx+0x28] ; gcrRegs +[rdx] test rdx, rdx
- je SHORT G_M14922_IG08
+ je SHORT G_M14922_IG09
cmp dword ptr [rdx+0x38], 1
- je SHORT G_M14922_IG07
+ je SHORT G_M14922_IG08
add rdx, 64 ; gcrRegs -[rdx] ; byrRegs +[rdx] @@ -83,27 +84,27 @@ G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=000 ; gcrRegs +[rdx] ; byrRegs -[rdx] test rdx, rdx
- je SHORT G_M14922_IG05
+ je SHORT G_M14922_IG06
cmp dword ptr [rdx+0x20], 0 setne dl ; gcrRegs -[rdx] movzx rdx, dl
- jmp SHORT G_M14922_IG06 - ;; size=46 bbWeight=1 PerfScore 20.00 -G_M14922_IG05: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ jmp SHORT G_M14922_IG07 + ;; size=46 bbWeight=0.50 PerfScore 10.00 +G_M14922_IG06: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
xor edx, edx
- ;; size=2 bbWeight=1 PerfScore 0.25 -G_M14922_IG06: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - jmp SHORT G_M14922_IG09 - ;; size=2 bbWeight=1 PerfScore 2.00 -G_M14922_IG07: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M14922_IG07: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M14922_IG10 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M14922_IG08: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
mov edx, 1
- jmp SHORT G_M14922_IG09 - ;; size=7 bbWeight=1 PerfScore 2.25 -G_M14922_IG08: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ jmp SHORT G_M14922_IG10 + ;; size=7 bbWeight=0.50 PerfScore 1.12 +G_M14922_IG09: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
xor edx, edx
- ;; size=2 bbWeight=1 PerfScore 0.25 -G_M14922_IG09: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M14922_IG10: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
test edx, edx sete dl movzx rdx, dl @@ -113,20 +114,20 @@ G_M14922_IG09: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr setne al movzx rax, al test edx, eax
- je SHORT G_M14922_IG12
+ je SHORT G_M14922_IG13
mov rdx, qword ptr GS:[0x0058] mov rdx, qword ptr [rdx] cmp dword ptr [rdx+0xD8], 9
- jl SHORT G_M14922_IG11
+ jl SHORT G_M14922_IG12
mov rdx, qword ptr [rdx+0xE0] mov rdx, qword ptr [rdx+0x48] test rdx, rdx
- je SHORT G_M14922_IG11
+ je SHORT G_M14922_IG12
mov rdx, bword ptr [rdx] ; byrRegs +[rdx] add rdx, 16
- ;; size=75 bbWeight=1 PerfScore 21.00 -G_M14922_IG10: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0004 {rdx}, byref, isz
+ ;; size=75 bbWeight=0.50 PerfScore 10.50 +G_M14922_IG11: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0004 {rdx}, byref, isz
add rdx, 104 mov rcx, rbx ; gcrRegs +[rcx] @@ -136,9 +137,9 @@ G_M14922_IG10: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0004 {rdx}, ; gcrRegs -[rcx rbx r8] ; byrRegs -[rdx] ; gcr arg pop 0
- jmp SHORT G_M14922_IG13 - ;; size=18 bbWeight=1 PerfScore 5.75 -G_M14922_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ jmp SHORT G_M14922_IG14 + ;; size=18 bbWeight=0.50 PerfScore 2.88 +G_M14922_IG12: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[rbx] mov ecx, 9 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED @@ -146,21 +147,21 @@ G_M14922_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcr arg pop 0 mov rdx, rax ; byrRegs +[rdx]
- jmp SHORT G_M14922_IG10
+ jmp SHORT G_M14922_IG11
;; size=15 bbWeight=0 PerfScore 0.00
-G_M14922_IG12: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M14922_IG13: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
; byrRegs -[rax rdx] mov eax, dword ptr [rbx+0x34] and eax, 0xD1FFAB1E cmp eax, 0xD1FFAB1E
- je SHORT G_M14922_IG13
+ je SHORT G_M14922_IG14
lea rax, bword ptr [rbx+0x34] ; byrRegs +[rax] mov edx, dword ptr [rbx+0x34] or edx, 0xD1FFAB1E xchg dword ptr [rax], edx test edx, 0xD1FFAB1E
- jne SHORT G_M14922_IG13
+ jne SHORT G_M14922_IG14
mov rcx, rbx ; gcrRegs +[rcx] call [<unknown method>] @@ -168,36 +169,10 @@ G_M14922_IG12: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; byrRegs -[rax] ; gcr arg pop 0 nop
- ;; size=48 bbWeight=1 PerfScore 31.00 -G_M14922_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - mov rcx, rsp - call G_M14922_IG17 - ;; size=8 bbWeight=1 PerfScore 1.25 -G_M14922_IG14: ; bbWeight=1, nogc, extend - nop - ;; size=1 bbWeight=1 PerfScore 0.25 -G_M14922_IG15: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; GC ptr vars -{V00} - mov eax, 1 - ;; size=5 bbWeight=1 PerfScore 0.25 -G_M14922_IG16: ; bbWeight=1, epilog, nogc, extend - add rsp, 40 - pop rbx - pop rbp - ret - ;; size=7 bbWeight=1 PerfScore 2.25 -G_M14922_IG17: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc - push rbp - push rbx - sub rsp, 40 - mov rbp, qword ptr [rcx+0x20] - mov qword ptr [rsp+0x20], rbp - lea rbp, [rbp+0x30] - ;; size=19 bbWeight=1 PerfScore 5.75 -G_M14922_IG18: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz - ; GC ptr vars +{V00}
+ ;; size=48 bbWeight=0.50 PerfScore 15.50 +G_M14922_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp byte ptr [rbp+0x20], 0
- je SHORT G_M14922_IG19
+ je SHORT G_M14922_IG15
mov rcx, gword ptr [rbp+0x10] ; gcrRegs +[rcx] cmp byte ptr [rcx], cl @@ -209,18 +184,51 @@ G_M14922_IG18: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=000 call [System.Threading.PortableThreadPool:NotifyWorkItemProgress():this] ; gcrRegs -[rcx] ; gcr arg pop 0
- ;; size=31 bbWeight=1 PerfScore 12.25 -G_M14922_IG19: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - nop - ;; size=1 bbWeight=1 PerfScore 0.25 -G_M14922_IG20: ; bbWeight=1, funclet epilog, nogc, extend
+ ;; size=31 bbWeight=0.50 PerfScore 6.12 +G_M14922_IG15: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov eax, 1 + ;; size=5 bbWeight=0.50 PerfScore 0.12
...

benchmarks.run_pgo.windows.x64.checked.mch

-25 (-33.78%) : 3863.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -19,11 +18,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rcx
- mov rbx, rcx - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rcx+0x38] + mov rcx, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 @@ -32,39 +30,21 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, call [<unknown method>] ; gcrRegs -[rcx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 74, prolog size 10, PerfScore 16.44, instruction count 23, allocated bytes for code 74 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info:

-18 (-17.82%) : 66750.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.Canon]:get_Current():System.Canon:this (Tier1)

@@ -8,22 +8,19 @@ ; 1 inlinees with PGO data; 4 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 4, 4 ) byref -> rcx this single-def -; V01 TypeCtx [V01,T02] ( 4, 3.25) long -> rbx single-def
+; V00 this [V00,T00] ( 4, 4 ) byref -> rcx this single-def +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> rbx single-def
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V04 tmp2 [V04 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T10] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T08] ( 4, 2.12) ref -> rax class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> -; V08 tmp6 [V08,T04] ( 2, 4 ) byref -> rdx single-def "Inlining Arg" -; V09 tmp7 [V09,T03] ( 3, 5 ) ref -> rdx class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> -;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref single-def -;* V11 tmp9 [V11,T11] ( 0, 0 ) int -> zero-ref -; V12 tmp10 [V12,T07] ( 2, 3 ) int -> rax "Inlining Arg" -; V13 tmp11 [V13,T09] ( 2, 2 ) ref -> rdx class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> -; V14 tmp12 [V14,T06] ( 3, 3 ) ref -> rcx single-def "argument with side effect" -; V15 cse0 [V15,T05] ( 4, 3 ) ref -> rcx "CSE - aggressive"
+; V04 tmp2 [V04,T07] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <Microsoft.CodeAnalysis.SyntaxNode> +; V05 tmp3 [V05,T03] ( 2, 4 ) byref -> rdx single-def "Inlining Arg" +; V06 tmp4 [V06,T02] ( 3, 5 ) ref -> rdx class-hnd single-def "dup spill" <Microsoft.CodeAnalysis.SyntaxNode> +;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref single-def +;* V08 tmp6 [V08,T09] ( 0, 0 ) int -> zero-ref +; V09 tmp7 [V09,T06] ( 2, 3 ) int -> rax "Inlining Arg" +; V10 tmp8 [V10,T08] ( 2, 2 ) ref -> rdx class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.GreenNode> +; V11 tmp9 [V11,T05] ( 3, 3 ) ref -> rcx single-def "argument with side effect" +; V12 cse0 [V12,T04] ( 4, 3 ) ref -> rcx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -65,42 +62,25 @@ G_M44215_IG04: ; bbWeight=0.50, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, mov rax, rcx ; gcrRegs +[rax] ;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M44215_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz
+G_M44215_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
; gcrRegs -[rcx]
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M44215_IG08 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M44215_IG06: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz
mov rcx, qword ptr [rbx+0x38] mov rcx, qword ptr [rcx] mov rcx, qword ptr [rcx]
- cmp qword ptr [r8], rcx - je SHORT G_M44215_IG08 - ;; size=15 bbWeight=0.25 PerfScore 2.50 -G_M44215_IG07: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M44215_IG08: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M44215_IG09: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=19 bbWeight=1 PerfScore 7.50 +G_M44215_IG06: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 101, prolog size 10, PerfScore 22.44, instruction count 34, allocated bytes for code 101 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
+; Total bytes of code 83, prolog size 10, PerfScore 25.50, instruction count 28, allocated bytes for code 83 (MethodHash=83ca5348) for method Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
; ============================================================ Unwind Info:

-13 (-10.83%) : 70304.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbolSystem.__Canon:System.__Canon (Tier1)

@@ -9,14 +9,12 @@ ; 1 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T02] ( 4, 3.50) long -> rsi single-def -; V01 arg0 [V01,T01] ( 8, 5 ) ref -> rbx class-hnd single-def <Microsoft.CodeAnalysis.CSharp.Symbol>
+; V00 TypeCtx [V00,T01] ( 4, 4 ) long -> rsi single-def +; V01 arg0 [V01,T00] ( 8, 5 ) ref -> rbx class-hnd single-def <Microsoft.CodeAnalysis.CSharp.Symbol>
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T04] ( 4, 2.25) ref -> rdx -; V04 tmp2 [V04,T03] ( 3, 2.50) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 7.50) ref -> rax class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp4 [V06,T05] ( 3, 0 ) byref -> rdi single-def "non-inline candidate call" -; V07 tmp5 [V07,T06] ( 2, 0 ) ref -> rax class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.ISymbol>
+; V03 tmp1 [V03,T02] ( 3, 2 ) ref -> rdx +; V04 tmp2 [V04,T03] ( 3, 0 ) byref -> rdi single-def "non-inline candidate call" +; V05 tmp3 [V05,T04] ( 2, 0 ) ref -> rax class-hnd single-def "Inlining Arg" <Microsoft.CodeAnalysis.ISymbol>
; ; Lcl frame size = 48 @@ -32,50 +30,37 @@ G_M28349_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ;; size=18 bbWeight=1 PerfScore 4.75 G_M28349_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz test rbx, rbx
- je SHORT G_M28349_IG09
+ je SHORT G_M28349_IG06
cmp gword ptr [rbx+0x08], 0
- je SHORT G_M28349_IG10
+ je SHORT G_M28349_IG07
;; size=12 bbWeight=1 PerfScore 5.25 G_M28349_IG03: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref mov rdx, gword ptr [rbx+0x08] ; gcrRegs +[rdx] ;; size=4 bbWeight=1 PerfScore 2.00
-G_M28349_IG04: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M28349_IG04: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs -[rbx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M28349_IG07 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M28349_IG05: ; bbWeight=0.50, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rcx, qword ptr [rsi+0x38] mov rcx, qword ptr [rcx]
- cmp qword ptr [rax], rcx - je SHORT G_M28349_IG07 - ;; size=12 bbWeight=0.50 PerfScore 4.00 -G_M28349_IG06: ; bbWeight=0.25, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.25 PerfScore 0.25 -G_M28349_IG07: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M28349_IG08: ; bbWeight=1, epilog, nogc, extend
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M28349_IG05: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx pop rsi pop rdi ret ;; size=8 bbWeight=1 PerfScore 2.75
-G_M28349_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M28349_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rax] xor rdx, rdx ; gcrRegs +[rdx] jmp SHORT G_M28349_IG04 ;; size=4 bbWeight=0 PerfScore 0.00
-G_M28349_IG10: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M28349_IG07: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rdx] +[rbx] lea rdi, bword ptr [rbx+0x08] ; byrRegs +[rdi] @@ -87,14 +72,14 @@ G_M28349_IG10: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcrRegs -[rcx] +[rax] ; gcr arg pop 0 test rdi, rdi
- jne SHORT G_M28349_IG11
+ jne SHORT G_M28349_IG08
call [System.ThrowHelper:ThrowNullReferenceException()] ; gcrRegs -[rax rbx] ; byrRegs -[rdi] ; gcr arg pop 0 int3 ;; size=32 bbWeight=0 PerfScore 0.00
-G_M28349_IG11: ; bbWeight=0, gcrefRegs=0009 {rax rbx}, byrefRegs=0080 {rdi}, byref, isz
+G_M28349_IG08: ; bbWeight=0, gcrefRegs=0009 {rax rbx}, byrefRegs=0080 {rdi}, byref, isz
; gcrRegs +[rax rbx] ; byrRegs +[rdi] mov rcx, rdi @@ -110,7 +95,7 @@ G_M28349_IG11: ; bbWeight=0, gcrefRegs=0009 {rax rbx}, byrefRegs=0080 {rd jmp SHORT G_M28349_IG03 ;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 120, prolog size 12, PerfScore 20.75, instruction count 42, allocated bytes for code 120 (MethodHash=bb679142) for method Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
+; Total bytes of code 107, prolog size 12, PerfScore 20.00, instruction count 37, allocated bytes for code 107 (MethodHash=bb679142) for method Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
; ============================================================ Unwind Info:

+30 (+1.96%) : 29488.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)

@@ -11,43 +11,43 @@ ; ; V00 this [V00,T00] ( 19, 15.99) ref -> rbx this class-hnd single-def <System.Reflection.Emit.DynamicMethod> ; V01 arg1 [V01,T10] ( 4, 4 ) ref -> rsi class-hnd single-def <System.String>
-; V02 arg2 [V02,T15] ( 3, 3 ) int -> r8 single-def -; V03 arg3 [V03,T16] ( 3, 3 ) int -> r9 single-def -; V04 arg4 [V04,T31] ( 5, 2.33) ref -> r14 class-hnd single-def <System.Type> -; V05 arg5 [V05,T24] ( 3, 4.00) ref -> rbp class-hnd single-def <System.Type[]> -; V06 arg6 [V06,T20] ( 8, 4 ) ref -> rdi class-hnd single-def <System.Type> -; V07 arg7 [V07,T38] ( 5, 1 ) ref -> [rsp+0xB8] class-hnd single-def <System.Reflection.Module> -; V08 arg8 [V08,T41] ( 2, 1 ) ubyte -> [rsp+0xC0] single-def -; V09 arg9 [V09,T42] ( 1, 1 ) ubyte -> [rsp+0xC8] single-def
+; V02 arg2 [V02,T16] ( 3, 3 ) int -> r8 single-def +; V03 arg3 [V03,T17] ( 3, 3 ) int -> r9 single-def +; V04 arg4 [V04,T33] ( 5, 2.33) ref -> r14 class-hnd single-def <System.Type> +; V05 arg5 [V05,T25] ( 3, 4.00) ref -> rbp class-hnd single-def <System.Type[]> +; V06 arg6 [V06,T21] ( 8, 4 ) ref -> rdi class-hnd single-def <System.Type> +; V07 arg7 [V07,T40] ( 5, 1 ) ref -> [rsp+0xA8] class-hnd single-def <System.Reflection.Module> +; V08 arg8 [V08,T43] ( 2, 1 ) ubyte -> [rsp+0xB0] single-def +; V09 arg9 [V09,T44] ( 1, 1 ) ubyte -> [rsp+0xB8] single-def
; V10 loc0 [V10,T02] ( 7, 12.98) int -> r13
-; V11 loc1 [V11,T07] ( 10, 9.50) ref -> rdi class-hnd exact <System.RuntimeType>
+; V11 loc1 [V11,T06] ( 9, 9 ) ref -> rdi class-hnd exact single-def <System.RuntimeType>
; V12 OutArgs [V12 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V13 tmp1 [V13,T44] ( 3, 0 ) ref -> rsi class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
+; V13 tmp1 [V13,T46] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
;* V14 tmp2 [V14 ] ( 0, 0 ) ref -> zero-ref single-def ;* V15 tmp3 [V15 ] ( 0, 0 ) ref -> zero-ref
-; V16 tmp4 [V16,T30] ( 4, 2.67) ref -> rdx -; V17 tmp5 [V17,T28] ( 2, 2 ) int -> rcx -; V18 tmp6 [V18,T39] ( 2, 0 ) int -> rcx -; V19 tmp7 [V19,T40] ( 2, 0 ) int -> rcx -; V20 tmp8 [V20,T32] ( 3, 2 ) ref -> rdi -;* V21 tmp9 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -; V22 tmp10 [V22,T45] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V23 tmp11 [V23,T50] ( 3, 0 ) int -> rcx -;* V24 tmp12 [V24 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V25 tmp13 [V25,T09] ( 6, 6.00) ref -> r14 class-hnd "spilling QMark2" <System.RuntimeType> -; V26 tmp14 [V26,T46] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V27 tmp15 [V27,T04] ( 3, 11.98) ref -> [rsp+0x28] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> -;* V28 tmp16 [V28 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -; V29 tmp17 [V29,T01] ( 5, 14.97) ref -> rdx class-hnd "spilling QMark2" <System.RuntimeType> -; V30 tmp18 [V30,T47] ( 3, 0 ) ref -> r14 class-hnd exact "NewObj constructor temp" <<unknown class>> -; V31 tmp19 [V31,T48] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <<unknown class>> -; V32 tmp20 [V32,T25] ( 3, 3.99) ref -> rdx "guarded devirt return temp" -; V33 tmp21 [V33,T03] ( 5, 11.98) ref -> rcx "guarded devirt arg temp" -;* V34 tmp22 [V34 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V35 tmp23 [V35,T37] ( 3, 1.33) ref -> r14 "guarded devirt return temp" -;* V36 tmp24 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -; V37 tmp25 [V37,T33] ( 3, 2 ) ref -> rdi "guarded devirt return temp" -;* V38 tmp26 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
+; V16 tmp4 [V16,T32] ( 4, 2.67) ref -> rdx +; V17 tmp5 [V17,T29] ( 2, 2 ) int -> rcx +; V18 tmp6 [V18,T41] ( 2, 0 ) int -> rcx +; V19 tmp7 [V19,T42] ( 2, 0 ) int -> rcx +; V20 tmp8 [V20,T34] ( 3, 2 ) ref -> rdi +; V21 tmp9 [V21,T47] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V22 tmp10 [V22,T52] ( 3, 0 ) int -> rcx +; V23 tmp11 [V23,T31] ( 2, 2.67) ref -> rdx class-hnd exact single-def "dup spill" <System.RuntimeType> +; V24 tmp12 [V24,T48] ( 3, 0 ) ref -> rdi class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V25 tmp13 [V25,T04] ( 3, 11.98) ref -> [rsp+0x20] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> +; V26 tmp14 [V26,T08] ( 2, 7.98) ref -> rdx class-hnd exact "Strict ordering of exceptions for Array store" <System.RuntimeType> +; V27 tmp15 [V27,T49] ( 3, 0 ) ref -> r14 class-hnd exact "NewObj constructor temp" <<unknown class>> +; V28 tmp16 [V28,T50] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <<unknown class>> +; V29 tmp17 [V29,T26] ( 3, 3.99) ref -> rcx "guarded devirt return temp" +; V30 tmp18 [V30,T03] ( 5, 11.98) ref -> rcx "guarded devirt arg temp" +;* V31 tmp19 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V32 tmp20 [V32,T39] ( 3, 1.33) ref -> r14 "guarded devirt return temp" +;* V33 tmp21 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +; V34 tmp22 [V34,T35] ( 3, 2 ) ref -> rdi "guarded devirt return temp" +;* V35 tmp23 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V36 tmp24 [V36 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V37 tmp25 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +;* V38 tmp26 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V39 tmp27 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V40 tmp28 [V40 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V41 tmp29 [V41 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" @@ -58,54 +58,53 @@ ;* V46 tmp34 [V46 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V47 tmp35 [V47 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V48 tmp36 [V48 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-;* V49 tmp37 [V49 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V50 tmp38 [V50 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V51 tmp39 [V51 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V52 tmp40 [V52,T43] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V53 tmp41 [V53,T21] ( 4, 4 ) ubyte -> rax "Inline stloc first use temp" -;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> -;* V55 tmp43 [V55 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> -;* V56 tmp44 [V56 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> -;* V57 tmp45 [V57 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> -;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> -; V59 tmp47 [V59,T14] ( 12, 5 ) ref -> r14 class-hnd "Inline stloc first use temp" <System.Type> -; V60 tmp48 [V60,T17] ( 3, 5 ) int -> rax "guarded devirt return temp" -;* V61 tmp49 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> -; V62 tmp50 [V62,T18] ( 3, 5 ) ubyte -> rax "Inline return value spill temp" -; V63 tmp51 [V63,T22] ( 4, 4 ) ubyte -> rax "Inline stloc first use temp" -;* V64 tmp52 [V64 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> -;* V65 tmp53 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V66 tmp54 [V66 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> -; V67 tmp55 [V67,T49] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> -;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V69 tmp57 [V69,T34] ( 3, 2 ) int -> rax -; V70 tmp58 [V70,T36] ( 2, 2 ) ubyte -> rcx "Inline stloc first use temp" -;* V71 tmp59 [V71 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V72 tmp60 [V72 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -;* V73 tmp61 [V73 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V74 tmp62 [V74,T23] ( 2, 4 ) byref -> rcx single-def "Inlining Arg" -;* V75 tmp63 [V75 ] ( 0, 0 ) ref -> zero-ref single-def "field V55.m_type (fldOffset=0x0)" P-INDEP -; V76 tmp64 [V76,T27] ( 4, 3 ) ref -> rcx single-def "field V56.m_type (fldOffset=0x0)" P-INDEP -; V77 tmp65 [V77,T35] ( 2, 2 ) ref -> rcx single-def "field V64.m_type (fldOffset=0x0)" P-INDEP -;* V78 tmp66 [V78 ] ( 0, 0 ) long -> zero-ref "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP -; V79 tmp67 [V79,T29] ( 3, 3 ) long -> rcx "field V71.m_asTAddr (fldOffset=0x0)" P-INDEP -; V80 tmp68 [V80,T05] ( 3, 11.98) ref -> rcx "arr expr" -;* V81 tmp69 [V81,T26] ( 0, 0 ) ref -> zero-ref "arr expr" -; V82 tmp70 [V82,T51] ( 2, 0 ) ref -> rdx "argument with side effect" -; V83 tmp71 [V83,T52] ( 2, 0 ) ref -> rdx "argument with side effect" -; V84 tmp72 [V84,T53] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V85 tmp73 [V85,T54] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V86 tmp74 [V86,T55] ( 2, 0 ) ref -> r8 single-def "argument with side effect" -; V87 tmp75 [V87,T56] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V88 tmp76 [V88,T57] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V89 cse0 [V89,T11] ( 3, 5.99) ref -> rcx "CSE - aggressive" -; V90 cse1 [V90,T12] ( 3, 5.99) ref -> rcx "CSE - aggressive" -; V91 cse2 [V91,T13] ( 2, 3.99) ref -> rcx "CSE - aggressive" -; V92 cse3 [V92,T06] ( 12, 11.66) long -> [rsp+0x30] multi-def "CSE - aggressive" -; V93 cse4 [V93,T19] ( 4, 5.00) int -> r15 "CSE - moderate" -; V94 cse5 [V94,T08] ( 4, 7.98) long -> r12 "CSE - aggressive"
+;* V49 tmp37 [V49,T45] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V50 tmp38 [V50,T22] ( 4, 4 ) ubyte -> rax "Inline stloc first use temp" +;* V51 tmp39 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling ret_expr" <System.Type> +;* V52 tmp40 [V52 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.RuntimeTypeHandle> +;* V53 tmp41 [V53 ] ( 0, 0 ) struct ( 8) zero-ref single-def "guarded devirt return temp" <System.RuntimeTypeHandle> +;* V54 tmp42 [V54 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType> +;* V55 tmp43 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.Type> +; V56 tmp44 [V56,T15] ( 12, 5 ) ref -> rbp class-hnd "Inline stloc first use temp" <System.Type> +; V57 tmp45 [V57,T18] ( 3, 5 ) int -> r14 "guarded devirt return temp" +;* V58 tmp46 [V58 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <System.RuntimeType> +; V59 tmp47 [V59,T19] ( 3, 5 ) ubyte -> r14 "Inline return value spill temp" +; V60 tmp48 [V60,T23] ( 4, 4 ) ubyte -> rax "Inline stloc first use temp" +;* V61 tmp49 [V61 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.RuntimeTypeHandle> +;* V62 tmp50 [V62 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V63 tmp51 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +; V64 tmp52 [V64,T51] ( 3, 0 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentNullException> +;* V65 tmp53 [V65 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V66 tmp54 [V66,T36] ( 3, 2 ) int -> r15 +; V67 tmp55 [V67,T38] ( 2, 2 ) ubyte -> rcx "Inline stloc first use temp" +;* V68 tmp56 [V68 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V69 tmp57 [V69 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +;* V70 tmp58 [V70 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V71 tmp59 [V71,T24] ( 2, 4 ) byref -> rcx single-def "Inlining Arg" +;* V72 tmp60 [V72 ] ( 0, 0 ) ref -> zero-ref single-def "field V52.m_type (fldOffset=0x0)" P-INDEP +; V73 tmp61 [V73,T28] ( 4, 3 ) ref -> rcx single-def "field V53.m_type (fldOffset=0x0)" P-INDEP +; V74 tmp62 [V74,T37] ( 2, 2 ) ref -> rcx single-def "field V61.m_type (fldOffset=0x0)" P-INDEP +;* V75 tmp63 [V75 ] ( 0, 0 ) long -> zero-ref "field V65.m_asTAddr (fldOffset=0x0)" P-INDEP +; V76 tmp64 [V76,T30] ( 3, 3 ) long -> rcx "field V68.m_asTAddr (fldOffset=0x0)" P-INDEP +; V77 tmp65 [V77,T05] ( 3, 11.98) ref -> rcx "arr expr" +;* V78 tmp66 [V78,T27] ( 0, 0 ) ref -> zero-ref "arr expr" +; V79 tmp67 [V79,T53] ( 2, 0 ) ref -> rdx "argument with side effect" +; V80 tmp68 [V80,T54] ( 2, 0 ) ref -> rdx "argument with side effect" +; V81 tmp69 [V81,T55] ( 2, 0 ) ref -> rdx single-def "argument with side effect" +; V82 tmp70 [V82,T56] ( 2, 0 ) ref -> rdx single-def "argument with side effect" +; V83 tmp71 [V83,T57] ( 2, 0 ) ref -> r8 single-def "argument with side effect" +; V84 tmp72 [V84,T58] ( 2, 0 ) ref -> rdx single-def "argument with side effect" +; V85 tmp73 [V85,T59] ( 2, 0 ) ref -> rdx single-def "argument with side effect" +; V86 cse0 [V86,T11] ( 3, 5.99) ref -> rcx "CSE - aggressive" +; V87 cse1 [V87,T12] ( 3, 5.99) ref -> rcx "CSE - aggressive" +; V88 cse2 [V88,T13] ( 2, 3.99) ref -> rcx "CSE - aggressive" +; V89 cse3 [V89,T20] ( 4, 5.00) int -> r15 "CSE - moderate" +; V90 cse4 [V90,T07] ( 4, 7.98) long -> r12 "CSE - aggressive" +; V91 rat0 [V91,T01] ( 5, 14.97) ref -> rdx class-hnd "replacement local" <System.RuntimeType> +; V92 rat1 [V92,T14] ( 5, 5.00) ref -> r14 class-hnd "replacement local" <System.RuntimeType> +; V93 rat2 [V93,T09] ( 5, 7.50) ref -> rdi class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 56
+; Lcl frame size = 40
G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push r15 @@ -116,27 +115,27 @@ G_M32743_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rsi push rbp push rbx
- sub rsp, 56
+ sub rsp, 40
mov rbx, rcx ; gcrRegs +[rbx] mov rsi, rdx ; gcrRegs +[rsi]
- mov r14, gword ptr [rsp+0xA0]
+ mov r14, gword ptr [rsp+0x90]
; gcrRegs +[r14]
- mov rbp, gword ptr [rsp+0xA8]
+ mov rbp, gword ptr [rsp+0x98]
; gcrRegs +[rbp]
- mov rdi, gword ptr [rsp+0xB0]
+ mov rdi, gword ptr [rsp+0xA0]
; gcrRegs +[rdi] ;; size=46 bbWeight=1 PerfScore 11.75 G_M32743_IG02: ; bbWeight=1, gcrefRegs=40E8 {rbx rbp rsi rdi r14}, byrefRegs=0000 {}, byref test rsi, rsi
- je G_M32743_IG32
+ je G_M32743_IG40
cmp r8d, 22
- jne G_M32743_IG33
+ jne G_M32743_IG41
cmp r9d, 1
- jne G_M32743_IG33
+ jne G_M32743_IG41
test rbp, rbp
- je G_M32743_IG37
+ je G_M32743_IG45
mov r15d, dword ptr [rbp+0x08] mov edx, r15d mov rcx, 0xD1FFAB1E ; <unknown class> @@ -159,26 +158,27 @@ G_M32743_IG03: ; bbWeight=2.00, gcrefRegs=40E8 {rbx rbp rsi rdi r14}, byr mov rcx, gword ptr [rbp+8*r12+0x10] ; gcrRegs +[rcx] test rcx, rcx
- je G_M32743_IG35
+ je G_M32743_IG43
mov rax, gword ptr [rbx+0x08] ; gcrRegs +[rax]
- mov gword ptr [rsp+0x28], rax - ; GC ptr vars +{V27} - mov r8, 0xD1FFAB1E ; System.RuntimeType - cmp qword ptr [rcx], r8 - jne G_M32743_IG34
+ mov gword ptr [rsp+0x20], rax + ; GC ptr vars +{V25} + mov rdx, 0xD1FFAB1E ; System.RuntimeType + cmp qword ptr [rcx], rdx + jne G_M32743_IG42 + ;; size=45 bbWeight=2.00 PerfScore 21.46 +G_M32743_IG04: ; bbWeight=2.00, gcVars=0000000000000010 {V25}, gcrefRegs=40EB {rax rcx rbx rbp rsi rdi r14}, byrefRegs=0000 {}, gcvars, byref, isz
mov rdx, rcx ; gcrRegs +[rdx]
- ;; size=48 bbWeight=2.00 PerfScore 21.96 -G_M32743_IG04: ; bbWeight=2.00, gcVars=0000000000000010 {V27}, gcrefRegs=40ED {rax rdx rbx rbp rsi rdi r14}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[rcx]
test rdx, rdx je SHORT G_M32743_IG07
- ;; size=5 bbWeight=2.00 PerfScore 2.50
+ ;; size=8 bbWeight=2.00 PerfScore 2.99
G_M32743_IG05: ; bbWeight=1.00, gcrefRegs=40ED {rax rdx rbx rbp rsi rdi r14}, byrefRegs=0000 {}, byref, isz
- cmp qword ptr [rdx], r8
+ ; gcrRegs -[rcx] + mov rcx, 0xD1FFAB1E ; System.RuntimeType + cmp qword ptr [rdx], rcx
je SHORT G_M32743_IG07
- ;; size=5 bbWeight=1.00 PerfScore 3.99
...

+18 (+10.17%) : 68701.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,16 +10,14 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,300.01) int -> rbx
+; V01 loc0 [V01,T01] ( 4,300.01) int -> rbx
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,456.39) ref -> rdx "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,253.55) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,760.64) ref -> rax class-hnd "spilling QMark2" <PerfLabTests.Foo[]> -; V06 cse0 [V06,T04] ( 2,101.53) ref -> rbp hoist "CSE - aggressive" -; V07 cse1 [V07,T05] ( 3,101.44) ref -> rdi "CSE - aggressive" -; V08 cse2 [V08,T06] ( 3,100.02) int -> rsi "CSE - aggressive" -; V09 rat0 [V09,T08] ( 3, 0.04) ref -> rdx "Spilling to split statement for tree" -; V10 rat1 [V10,T07] ( 5, 0.07) ref -> rbp class-hnd "replacement local" <PerfLabTests.Foo[]>
+; V03 cse0 [V03,T02] ( 2,101.53) ref -> rbp hoist "CSE - aggressive" +; V04 cse1 [V04,T03] ( 4,101.44) ref -> rdi "CSE - aggressive" +; V05 cse2 [V05,T04] ( 3,100.02) int -> rsi "CSE - aggressive" +; V06 rat0 [V06,T06] ( 3, 0.04) ref -> rdx "Spilling to split statement for tree" +; V07 rat1 [V07,T05] ( 5, 0.07) ref -> rbp class-hnd "replacement local" <PerfLabTests.Foo[]> +; V08 rat2 [V08,T00] ( 5,709.93) ref -> rdx class-hnd "replacement local" <PerfLabTests.Foo[]>
; ; Lcl frame size = 40 @@ -33,7 +31,7 @@ G_M13964_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov esi, dword ptr [(reloc)] cmp ebx, esi
- jge SHORT G_M13964_IG11
+ jge G_M13964_IG12
mov rcx, 0xD1FFAB1E ; static handle mov rdi, gword ptr [rcx] ; gcrRegs +[rdi] @@ -43,7 +41,7 @@ G_M13964_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs +[rbp] test rbp, rbp je SHORT G_M13964_IG05
- ;; size=34 bbWeight=0.01 PerfScore 0.07
+ ;; size=38 bbWeight=0.01 PerfScore 0.07
G_M13964_IG03: ; bbWeight=0.01, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref, isz mov rcx, 0xD1FFAB1E ; PerfLabTests.Foo[] cmp qword ptr [rbp], rcx @@ -61,41 +59,47 @@ G_M13964_IG04: ; bbWeight=0, gcrefRegs=0084 {rdx rdi}, byrefRegs=0000 {}, G_M13964_IG05: ; bbWeight=101.52, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] test rbp, rbp
- je SHORT G_M13964_IG10
+ je SHORT G_M13964_IG08
;; size=5 bbWeight=101.52 PerfScore 126.90 G_M13964_IG06: ; bbWeight=101.42, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz mov rdx, rdi ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M13964_IG09 - ;; size=11 bbWeight=101.42 PerfScore 177.48 -G_M13964_IG07: ; bbWeight=50.71, gcrefRegs=00A5 {rax rdx rbp rdi}, byrefRegs=0000 {}, byref, isz
+ test rdx, rdx + jne SHORT G_M13964_IG10 + ;; size=8 bbWeight=101.42 PerfScore 152.13 +G_M13964_IG07: ; bbWeight=101.42, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref + mov rcx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> + call CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[rdx] + ;; size=15 bbWeight=101.42 PerfScore 126.77 +G_M13964_IG08: ; bbWeight=100, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz + inc ebx + cmp ebx, esi + jge SHORT G_M13964_IG12 + ;; size=6 bbWeight=100 PerfScore 150.00 +G_M13964_IG09: ; bbWeight=100.76, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M13964_IG05 + ;; size=2 bbWeight=100.76 PerfScore 201.52 +G_M13964_IG10: ; bbWeight=50.71, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[rdx]
mov rcx, 0xD1FFAB1E ; PerfLabTests.Foo[]
- cmp qword ptr [rax], rcx - je SHORT G_M13964_IG09
+ cmp qword ptr [rdx], rcx + je SHORT G_M13964_IG07
;; size=15 bbWeight=50.71 PerfScore 215.52
-G_M13964_IG08: ; bbWeight=25.35, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
+G_M13964_IG11: ; bbWeight=0, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rdx] + mov rdx, rdi + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; PerfLabTests.Foo[]
call [CORINFO_HELP_CHKCASTARRAY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=25.35 PerfScore 76.06 -G_M13964_IG09: ; bbWeight=101.42, gcrefRegs=00A1 {rax rbp rdi}, byrefRegs=0000 {}, byref - mov rcx, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rdx, rax ; gcrRegs +[rdx]
- call CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[rax rdx] - ;; size=18 bbWeight=101.42 PerfScore 152.13 -G_M13964_IG10: ; bbWeight=100, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz - inc ebx - cmp ebx, esi - jl SHORT G_M13964_IG05 - ;; size=6 bbWeight=100 PerfScore 150.00 -G_M13964_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc - ; gcrRegs -[rbp rdi]
+ jmp SHORT G_M13964_IG07 + ;; size=24 bbWeight=0 PerfScore 0.00 +G_M13964_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc + ; gcrRegs -[rax rdx rbp rdi]
add rsp, 200 pop rbx pop rsi @@ -104,7 +108,7 @@ G_M13964_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 177, prolog size 35, PerfScore 898.24, instruction count 42, allocated bytes for code 177 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 195, prolog size 35, PerfScore 972.98, instruction count 45, allocated bytes for code 195 (MethodHash=acbac973) for method PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info:

+18 (+10.23%) : 90618.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)

@@ -10,16 +10,14 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf2.CastingPerf>
-; V01 loc0 [V01,T02] ( 4,301.42) int -> rbx
+; V01 loc0 [V01,T01] ( 4,301.42) int -> rbx
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3,451.67) ref -> rdx "CASTCLASS eval op1" -; V04 tmp2 [V04,T03] ( 3,250.93) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5,752.78) ref -> rax class-hnd "spilling QMark2" <PerfLabTests.CastingPerf2.Foo> -; V06 cse0 [V06,T05] ( 2,100.48) ref -> rbp hoist "CSE - aggressive" -; V07 cse1 [V07,T06] ( 3,100.39) ref -> rdi "CSE - aggressive" -; V08 cse2 [V08,T04] ( 3,100.49) int -> rsi "CSE - aggressive" -; V09 rat0 [V09,T08] ( 3, 0.04) ref -> rdx "Spilling to split statement for tree" -; V10 rat1 [V10,T07] ( 5, 0.07) ref -> rbp class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
+; V03 cse0 [V03,T03] ( 2,100.48) ref -> rbp hoist "CSE - aggressive" +; V04 cse1 [V04,T04] ( 4,100.39) ref -> rdi "CSE - aggressive" +; V05 cse2 [V05,T02] ( 3,100.49) int -> rsi "CSE - aggressive" +; V06 rat0 [V06,T06] ( 3, 0.04) ref -> rdx "Spilling to split statement for tree" +; V07 rat1 [V07,T05] ( 5, 0.07) ref -> rbp class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo> +; V08 rat2 [V08,T00] ( 5,702.60) ref -> rdx class-hnd "replacement local" <PerfLabTests.CastingPerf2.Foo>
; ; Lcl frame size = 40 @@ -33,7 +31,7 @@ G_M59156_IG01: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov esi, dword ptr [(reloc)] cmp ebx, esi
- jge SHORT G_M59156_IG11
+ jge G_M59156_IG11
mov rcx, 0xD1FFAB1E ; static handle mov rdi, gword ptr [rcx] ; gcrRegs +[rdi] @@ -43,7 +41,7 @@ G_M59156_IG02: ; bbWeight=0.01, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr ; gcrRegs +[rbp] test rbp, rbp je SHORT G_M59156_IG05
- ;; size=34 bbWeight=0.01 PerfScore 0.07
+ ;; size=38 bbWeight=0.01 PerfScore 0.07
G_M59156_IG03: ; bbWeight=0.01, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref, isz mov rcx, 0xD1FFAB1E ; PerfLabTests.CastingPerf2.Foo cmp qword ptr [rbp], rcx @@ -61,41 +59,45 @@ G_M59156_IG04: ; bbWeight=0, gcrefRegs=0084 {rdx rdi}, byrefRegs=0000 {}, G_M59156_IG05: ; bbWeight=100.47, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] test rbp, rbp
- je SHORT G_M59156_IG10
+ je SHORT G_M59156_IG08
;; size=5 bbWeight=100.47 PerfScore 125.59 G_M59156_IG06: ; bbWeight=100.37, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz mov rdx, rdi ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M59156_IG09 - ;; size=11 bbWeight=100.37 PerfScore 175.65 -G_M59156_IG07: ; bbWeight=50.19, gcrefRegs=00A5 {rax rdx rbp rdi}, byrefRegs=0000 {}, byref, isz
+ test rdx, rdx + jne SHORT G_M59156_IG09 + ;; size=8 bbWeight=100.37 PerfScore 150.56 +G_M59156_IG07: ; bbWeight=100.37, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref + mov rcx, 0xD1FFAB1E ; data for <unknown class>:<unknown field> + call CORINFO_HELP_ASSIGN_REF + ; gcrRegs -[rdx] + ;; size=15 bbWeight=100.37 PerfScore 125.46 +G_M59156_IG08: ; bbWeight=100.47, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz + inc ebx + cmp ebx, esi + jge SHORT G_M59156_IG11 + jmp SHORT G_M59156_IG05 + ;; size=8 bbWeight=100.47 PerfScore 351.65 +G_M59156_IG09: ; bbWeight=50.19, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs +[rdx]
mov rcx, 0xD1FFAB1E ; PerfLabTests.CastingPerf2.Foo
- cmp qword ptr [rax], rcx - je SHORT G_M59156_IG09
+ cmp qword ptr [rdx], rcx + je SHORT G_M59156_IG07
;; size=15 bbWeight=50.19 PerfScore 213.29
-G_M59156_IG08: ; bbWeight=25.09, gcrefRegs=00A4 {rdx rbp rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
+G_M59156_IG10: ; bbWeight=0, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rdx] + mov rdx, rdi + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; PerfLabTests.CastingPerf2.Foo
call [CORINFO_HELP_CHKCASTCLASS_SPECIAL] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=25.09 PerfScore 75.28 -G_M59156_IG09: ; bbWeight=100.37, gcrefRegs=00A1 {rax rbp rdi}, byrefRegs=0000 {}, byref - mov rcx, 0xD1FFAB1E ; data for <unknown class>:<unknown field>
mov rdx, rax ; gcrRegs +[rdx]
- call CORINFO_HELP_ASSIGN_REF - ; gcrRegs -[rax rdx] - ;; size=18 bbWeight=100.37 PerfScore 150.56 -G_M59156_IG10: ; bbWeight=100.47, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0000 {}, byref, isz - inc ebx - cmp ebx, esi - jl SHORT G_M59156_IG05 - ;; size=6 bbWeight=100.47 PerfScore 150.71
+ jmp SHORT G_M59156_IG07 + ;; size=24 bbWeight=0 PerfScore 0.00
G_M59156_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
- ; gcrRegs -[rbp rdi]
+ ; gcrRegs -[rax rdx rbp rdi]
add rsp, 200 pop rbx pop rsi @@ -104,7 +106,7 @@ G_M59156_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=12 bbWeight=0 PerfScore 0.00
-; Total bytes of code 176, prolog size 35, PerfScore 891.22, instruction count 42, allocated bytes for code 176 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
+; Total bytes of code 194, prolog size 35, PerfScore 966.69, instruction count 45, allocated bytes for code 194 (MethodHash=3ff118eb) for method PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
; ============================================================ Unwind Info:

benchmarks.run_tiered.windows.x64.checked.mch

-25 (-33.78%) : 4029.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -19,11 +18,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rcx
- mov rbx, rcx - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rcx+0x38] + mov rcx, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 @@ -32,39 +30,21 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, call [<unknown method>] ; gcrRegs -[rcx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 74, prolog size 10, PerfScore 16.44, instruction count 23, allocated bytes for code 74 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info:

-25 (-29.07%) : 20789.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (Tier1)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> rsi this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> rbx single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> rdx single-def
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> rdx single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> rsi "CSE - aggressive"
; ; Lcl frame size = 40 @@ -22,60 +21,41 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 40 mov qword ptr [rsp+0x20], rdx
- mov rsi, rcx - ; gcrRegs +[rsi] - mov rbx, rdx - ;; size=17 bbWeight=1 PerfScore 3.75 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ mov rbx, rcx + ; gcrRegs +[rbx] + ;; size=14 bbWeight=1 PerfScore 3.50 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov rsi, qword ptr [rdx+0x38] + mov rcx, qword ptr [rsi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 mov rdx, rax ; gcrRegs +[rdx]
- mov rcx, rsi
+ mov rcx, rbx
; gcrRegs +[rcx]
- mov rax, qword ptr [rsi]
+ mov rax, qword ptr [rbx]
; gcrRegs -[rax] mov rax, qword ptr [rax+0x70] call [rax+0x10]<unknown method>
- ; gcrRegs -[rcx rdx rsi] +[rax]
+ ; gcrRegs -[rcx rdx rbx] +[rax]
; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M60617_IG05 - ;; size=36 bbWeight=1 PerfScore 14.00 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M60617_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rsi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M60617_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=40 bbWeight=1 PerfScore 16.00 +G_M60617_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi ret ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 86, prolog size 11, PerfScore 22.44, instruction count 29, allocated bytes for code 86 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
+; Total bytes of code 61, prolog size 11, PerfScore 21.75, instruction count 21, allocated bytes for code 61 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
; ============================================================ Unwind Info:

-25 (-27.47%) : 19101.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttributeSystem.__Canon:System.__Canon (Tier1)

@@ -8,14 +8,13 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def -; V01 arg0 [V01,T02] ( 3, 3 ) ref -> rsi class-hnd single-def <System.Reflection.MemberInfo> -; V02 arg1 [V02,T03] ( 3, 3 ) ubyte -> rdi single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rbx class-hnd single-def <System.Reflection.MemberInfo> +; V02 arg1 [V02,T02] ( 3, 3 ) ubyte -> rsi single-def
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T04] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T06] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp4 [V07,T05] ( 2, 4 ) ref -> rdx single-def "argument with side effect"
+; V04 tmp1 [V04,T03] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V05 tmp2 [V05,T04] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V06 cse0 [V06,T05] ( 3, 3 ) long -> rdi "CSE - aggressive"
; ; Lcl frame size = 48 @@ -25,52 +24,33 @@ G_M29548_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rcx
- mov rbx, rcx - mov rsi, rdx - ; gcrRegs +[rsi] - mov edi, r8d - ;; size=21 bbWeight=1 PerfScore 5.00 -G_M29548_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ mov rbx, rdx + ; gcrRegs +[rbx] + mov esi, r8d + ;; size=18 bbWeight=1 PerfScore 4.75 +G_M29548_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov rdi, qword ptr [rcx+0x38] + mov rcx, qword ptr [rdi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 mov rdx, rax ; gcrRegs +[rdx]
- movzx r8, dil - mov rcx, rsi
+ movzx r8, sil + mov rcx, rbx
; gcrRegs +[rcx] call [System.Attribute:GetCustomAttribute(System.Reflection.MemberInfo,System.Type,ubyte):System.Attribute]
- ; gcrRegs -[rcx rdx rsi]
+ ; gcrRegs -[rcx rdx rbx]
; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M29548_IG05 - ;; size=36 bbWeight=1 PerfScore 10.25 -G_M29548_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M29548_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M29548_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rdi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M29548_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M29548_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=40 bbWeight=1 PerfScore 12.25 +G_M29548_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx pop rsi @@ -78,7 +58,7 @@ G_M29548_IG06: ; bbWeight=1, epilog, nogc, extend ret ;; size=8 bbWeight=1 PerfScore 2.75
-; Total bytes of code 91, prolog size 12, PerfScore 20.44, instruction count 31, allocated bytes for code 91 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
+; Total bytes of code 66, prolog size 12, PerfScore 19.75, instruction count 23, allocated bytes for code 66 (MethodHash=c5378c93) for method System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
; ============================================================ Unwind Info:

+6 (+4.65%) : 53538.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rdx "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> rsi "CSE - aggressive" -; V07 cse1 [V07,T05] ( 2, 5 ) ref -> rdi hoist "CSE - aggressive" -; V08 cse2 [V08,T06] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> rsi "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> rdi "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
; ; Lcl frame size = 40 @@ -30,42 +27,36 @@ G_M40467_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M40467_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov esi, dword ptr [(reloc)] cmp ebx, esi
- jge SHORT G_M40467_IG07 - mov rcx, 0xD1FFAB1E ; static handle - mov rdi, gword ptr [rcx]
+ jge SHORT G_M40467_IG04 + mov rdx, 0xD1FFAB1E ; static handle + mov rdi, gword ptr [rdx]
; gcrRegs +[rdi]
- mov rbp, 0xD1FFAB1E ; static handle - ;; size=33 bbWeight=1 PerfScore 5.75 -G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz
mov rdx, rdi ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M40467_IG06 - ;; size=11 bbWeight=4 PerfScore 7.00 -G_M40467_IG04: ; bbWeight=1, gcrefRegs=0085 {rax rdx rdi}, byrefRegs=0000 {}, byref, isz
mov rcx, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rcx - je SHORT G_M40467_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M40467_IG05: ; bbWeight=0.50, gcrefRegs=0084 {rdx rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call [CORINFO_HELP_CHKCASTARRAY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M40467_IG06: ; bbWeight=4, gcrefRegs=0081 {rax rdi}, byrefRegs=0000 {}, byref, isz - mov rcx, rbp
+ mov rbp, 0xD1FFAB1E ; static handle + ;; size=52 bbWeight=1 PerfScore 9.25 +G_M40467_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rdx, rdi + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; <unknown class> + call [CORINFO_HELP_CHKCASTARRAY] + ; gcrRegs -[rdx] +[rax] + ; gcr arg pop 0
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, rbp
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rdx] inc ebx cmp ebx, esi jl SHORT G_M40467_IG03
- ;; size=17 bbWeight=4 PerfScore 12.00 -G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=36 bbWeight=4 PerfScore 26.00 +G_M40467_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rdi] add rsp, 168 pop rbx @@ -75,7 +66,7 @@ G_M40467_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=12 bbWeight=1 PerfScore 3.25
-; Total bytes of code 129, prolog size 35, PerfScore 39.00, instruction count 31, allocated bytes for code 129 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
+; Total bytes of code 135, prolog size 35, PerfScore 43.75, instruction count 29, allocated bytes for code 135 (MethodHash=dc5f61ec) for method PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
; ============================================================ Unwind Info:

+6 (+4.65%) : 22771.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rdx "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> rsi "CSE - aggressive" -; V07 cse1 [V07,T05] ( 2, 5 ) ref -> rdi hoist "CSE - aggressive" -; V08 cse2 [V08,T06] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> rsi "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> rdi "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
; ; Lcl frame size = 40 @@ -30,42 +27,36 @@ G_M34178_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M34178_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov esi, dword ptr [(reloc)] cmp ebx, esi
- jge SHORT G_M34178_IG07 - mov rcx, 0xD1FFAB1E ; static handle - mov rdi, gword ptr [rcx]
+ jge SHORT G_M34178_IG04 + mov rdx, 0xD1FFAB1E ; static handle + mov rdi, gword ptr [rdx]
; gcrRegs +[rdi]
- mov rbp, 0xD1FFAB1E ; static handle - ;; size=33 bbWeight=1 PerfScore 5.75 -G_M34178_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz
mov rdx, rdi ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M34178_IG06 - ;; size=11 bbWeight=4 PerfScore 7.00 -G_M34178_IG04: ; bbWeight=1, gcrefRegs=0085 {rax rdx rdi}, byrefRegs=0000 {}, byref, isz
mov rcx, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rcx - je SHORT G_M34178_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M34178_IG05: ; bbWeight=0.50, gcrefRegs=0084 {rdx rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call [CORINFO_HELP_CHKCASTARRAY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M34178_IG06: ; bbWeight=4, gcrefRegs=0081 {rax rdi}, byrefRegs=0000 {}, byref, isz - mov rcx, rbp
+ mov rbp, 0xD1FFAB1E ; static handle + ;; size=52 bbWeight=1 PerfScore 9.25 +G_M34178_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rdx, rdi + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; <unknown class> + call [CORINFO_HELP_CHKCASTARRAY] + ; gcrRegs -[rdx] +[rax] + ; gcr arg pop 0
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, rbp
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rdx] inc ebx cmp ebx, esi jl SHORT G_M34178_IG03
- ;; size=17 bbWeight=4 PerfScore 12.00 -G_M34178_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=36 bbWeight=4 PerfScore 26.00 +G_M34178_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rdi] add rsp, 168 pop rbx @@ -75,7 +66,7 @@ G_M34178_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=12 bbWeight=1 PerfScore 3.25
-; Total bytes of code 129, prolog size 35, PerfScore 39.00, instruction count 31, allocated bytes for code 129 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier1-OSR)
+; Total bytes of code 135, prolog size 35, PerfScore 43.75, instruction count 29, allocated bytes for code 135 (MethodHash=1eb67a7d) for method PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier1-OSR)
; ============================================================ Unwind Info:

+6 (+4.65%) : 27399.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)

@@ -9,14 +9,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <PerfLabTests.CastingPerf>
-; V01 loc0 [V01,T02] ( 4, 13 ) int -> rbx
+; V01 loc0 [V01,T00] ( 4, 13 ) int -> rbx
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 17 ) ref -> rdx "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 5 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V06 cse0 [V06,T03] ( 3, 6 ) int -> rsi "CSE - aggressive" -; V07 cse1 [V07,T05] ( 2, 5 ) ref -> rdi hoist "CSE - aggressive" -; V08 cse2 [V08,T06] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
+; V03 cse0 [V03,T02] ( 3, 6 ) int -> rsi "CSE - aggressive" +; V04 cse1 [V04,T01] ( 3, 6 ) ref -> rdi "CSE - aggressive" +; V05 cse2 [V05,T03] ( 2, 5 ) long -> rbp hoist "CSE - aggressive"
; ; Lcl frame size = 40 @@ -30,42 +27,36 @@ G_M56449_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M56449_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz mov esi, dword ptr [(reloc)] cmp ebx, esi
- jge SHORT G_M56449_IG07 - mov rcx, 0xD1FFAB1E ; static handle - mov rdi, gword ptr [rcx]
+ jge SHORT G_M56449_IG04 + mov rdx, 0xD1FFAB1E ; static handle + mov rdi, gword ptr [rdx]
; gcrRegs +[rdi]
- mov rbp, 0xD1FFAB1E ; static handle - ;; size=33 bbWeight=1 PerfScore 5.75 -G_M56449_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz
mov rdx, rdi ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M56449_IG06 - ;; size=11 bbWeight=4 PerfScore 7.00 -G_M56449_IG04: ; bbWeight=1, gcrefRegs=0085 {rax rdx rdi}, byrefRegs=0000 {}, byref, isz
mov rcx, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rcx - je SHORT G_M56449_IG06 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M56449_IG05: ; bbWeight=0.50, gcrefRegs=0084 {rdx rdi}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call [CORINFO_HELP_CHKCASTARRAY] ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=6 bbWeight=0.50 PerfScore 1.50 -G_M56449_IG06: ; bbWeight=4, gcrefRegs=0081 {rax rdi}, byrefRegs=0000 {}, byref, isz - mov rcx, rbp
+ mov rbp, 0xD1FFAB1E ; static handle + ;; size=52 bbWeight=1 PerfScore 9.25 +G_M56449_IG03: ; bbWeight=4, gcrefRegs=0080 {rdi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + mov rdx, rdi + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; <unknown class> + call [CORINFO_HELP_CHKCASTARRAY] + ; gcrRegs -[rdx] +[rax] + ; gcr arg pop 0
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, rbp
call CORINFO_HELP_ASSIGN_REF ; gcrRegs -[rax rdx] inc ebx cmp ebx, esi jl SHORT G_M56449_IG03
- ;; size=17 bbWeight=4 PerfScore 12.00 -G_M56449_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=36 bbWeight=4 PerfScore 26.00 +G_M56449_IG04: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rdi] add rsp, 168 pop rbx @@ -75,7 +66,7 @@ G_M56449_IG07: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, ret ;; size=12 bbWeight=1 PerfScore 3.25
-; Total bytes of code 129, prolog size 35, PerfScore 39.00, instruction count 31, allocated bytes for code 129 (MethodHash=290d237e) for method PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
+; Total bytes of code 135, prolog size 35, PerfScore 43.75, instruction count 29, allocated bytes for code 135 (MethodHash=290d237e) for method PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
; ============================================================ Unwind Info:

coreclr_tests.run.windows.x64.checked.mch

-13 (-34.21%) : 204739.dasm - CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)

@@ -7,43 +7,28 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <CastExpansionTests>
-; V01 arg1 [V01,T01] ( 4, 3.12) ref -> rdx class-hnd single-def <System.Object>
+; V01 arg1 [V01,T00] ( 3, 3 ) ref -> rdx class-hnd single-def <System.Object>
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T02] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <<unknown class>>
; ; Lcl frame size = 40 G_M3705_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG sub rsp, 40 ;; size=4 bbWeight=1 PerfScore 0.25
-G_M3705_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M3705_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M3705_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M3705_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rcx, 0xD1FFAB1E ; <unknown class>
- cmp qword ptr [rax], rcx - je SHORT G_M3705_IG05 - ;; size=15 bbWeight=0.25 PerfScore 1.06 -G_M3705_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M3705_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M3705_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=16 bbWeight=1 PerfScore 1.50 +G_M3705_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 ret ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 38, prolog size 4, PerfScore 4.44, instruction count 11, allocated bytes for code 38 (MethodHash=192ff186) for method CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
+; Total bytes of code 25, prolog size 4, PerfScore 3.00, instruction count 6, allocated bytes for code 25 (MethodHash=192ff186) for method CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
; ============================================================ Unwind Info:

-25 (-33.78%) : 306969.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -19,11 +18,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rcx
- mov rbx, rcx - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rcx+0x38] + mov rcx, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 @@ -32,39 +30,21 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, call [<unknown method>] ; gcrRegs -[rcx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 74, prolog size 10, PerfScore 16.44, instruction count 23, allocated bytes for code 74 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info:

-22 (-32.35%) : 301130.dasm - Program+TestDelegateFatFunctionPointers:OtherGenericSystem.__Canon:System.__Canon:this (FullOpts)

@@ -8,12 +8,11 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <Program+TestDelegateFatFunctionPointers>
-; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> rbx single-def -; V02 arg1 [V02,T02] ( 3, 3 ) ref -> r8 class-hnd single-def <System.Object>
+; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> rdx single-def +; V02 arg1 [V02,T01] ( 3, 3 ) ref -> r8 class-hnd single-def <System.Object>
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V05 tmp2 [V05,T04] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V06 tmp3 [V06,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V04 tmp1 [V04,T02] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V05 cse0 [V05,T03] ( 3, 3 ) long -> rbx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -21,50 +20,32 @@ G_M51557_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rdx
- mov rbx, rdx - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M51557_IG02: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref, isz
+ ;; size=10 bbWeight=1 PerfScore 2.25 +G_M51557_IG02: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref
; gcrRegs +[r8]
- mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ mov rcx, qword ptr [rdx+0x38] + mov rbx, qword ptr [rcx] + mov rcx, rbx
mov rdx, r8 ; gcrRegs +[rdx] call CORINFO_HELP_ISINSTANCEOFANY ; gcrRegs -[rdx r8] +[rax] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M51557_IG05 - ;; size=23 bbWeight=1 PerfScore 6.75 -G_M51557_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M51557_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M51557_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, rbx
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M51557_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M51557_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=30 bbWeight=1 PerfScore 7.25 +G_M51557_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 68, prolog size 10, PerfScore 13.44, instruction count 22, allocated bytes for code 68 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
+; Total bytes of code 46, prolog size 10, PerfScore 11.25, instruction count 15, allocated bytes for code 46 (MethodHash=2a46369a) for method Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info:

+23 (+2.68%) : 242966.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort

@@ -13,49 +13,48 @@ ; V02 arg2 [V02,T08] ( 7, 42 ) byref -> [rbp+0x20] EH-live single-def ; V03 arg3 [V03,T15] ( 5, 26 ) byref -> [rbp+0x28] EH-live single-def ;* V04 loc0 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>>
-;* V05 loc1 [V05,T31] ( 0, 0 ) ushort -> zero-ref EH-live single-def -; V06 loc2 [V06,T29] ( 5, 17 ) double -> [rbp-0x28] do-not-enreg[Z] EH-live
+;* V05 loc1 [V05,T29] ( 0, 0 ) ushort -> zero-ref EH-live single-def +; V06 loc2 [V06,T27] ( 5, 17 ) double -> [rbp-0x28] do-not-enreg[Z] EH-live
; V07 loc3 [V07,T20] ( 7, 7 ) ref -> rsi class-hnd single-def <<unknown class>> ;* V08 loc4 [V08 ] ( 0, 0 ) int -> zero-ref ; V09 loc5 [V09,T17] ( 3, 24 ) byte -> rcx ; V10 OutArgs [V10 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V11 tmp1 [V11 ] ( 9, 9 ) struct (24) [rbp-0x40] do-not-enreg[XSF] must-init addr-exposed "NewObjArrayArgs"
-; V12 tmp2 [V12,T21] ( 2, 4 ) ref -> rdx class-hnd exact single-def "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> -; V13 tmp3 [V13,T25] ( 2, 4 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V14 tmp4 [V14,T22] ( 2, 4 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V15 tmp5 [V15,T00] ( 3,192 ) ref -> rdi class-hnd exact "Single-def Box Helper" <<unknown class>> -; V16 tmp6 [V16,T01] ( 3,192 ) ref -> rdi "inline UNBOX clone1" -; V17 tmp7 [V17,T02] ( 3,192 ) ref -> rdi class-hnd exact "Single-def Box Helper" <System.Char> -; V18 tmp8 [V18,T03] ( 3,192 ) ref -> rdi "inline UNBOX clone1" -; V19 tmp9 [V19,T07] ( 3, 48 ) int -> rcx "dup spill" -; V20 tmp10 [V20,T13] ( 2, 32 ) int -> r10 "impSpillLclRefs" -; V21 tmp11 [V21,T14] ( 2, 32 ) int -> rcx "dup spill" -;* V22 tmp12 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> -;* V23 tmp13 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]>
+; V12 tmp2 [V12,T23] ( 2, 4 ) ref -> rdx class-hnd exact single-def "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> +; V13 tmp3 [V13,T00] ( 3,192 ) ref -> rdi class-hnd exact "Single-def Box Helper" <<unknown class>> +; V14 tmp4 [V14,T01] ( 3,192 ) ref -> rdi "inline UNBOX clone1" +; V15 tmp5 [V15,T02] ( 3,192 ) ref -> rdi class-hnd exact "Single-def Box Helper" <System.Char> +; V16 tmp6 [V16,T03] ( 3,192 ) ref -> rdi "inline UNBOX clone1" +; V17 tmp7 [V17,T07] ( 3, 48 ) int -> rcx "dup spill" +; V18 tmp8 [V18,T13] ( 2, 32 ) int -> r10 "impSpillLclRefs" +; V19 tmp9 [V19,T14] ( 2, 32 ) int -> rcx "dup spill" +;* V20 tmp10 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> +;* V21 tmp11 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <AA`6[byte,ubyte,uint,uint,long,ubyte]> +;* V22 tmp12 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> +;* V23 tmp13 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>>
;* V24 tmp14 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> ;* V25 tmp15 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>>
-;* V26 tmp16 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> -;* V27 tmp17 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" <<unknown class>> -; V28 tmp18 [V28,T30] ( 3, 0 ) ref -> rax class-hnd exact single-def "dup spill" <ushort[]> -;* V29 tmp19 [V29 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" -;* V30 tmp20 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> -; V31 tmp21 [V31,T16] ( 4, 26 ) ref -> rax class-hnd exact "Inline stloc first use temp" <System.String> -;* V32 tmp22 [V32 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" -;* V33 tmp23 [V33,T19] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" -; V34 tmp24 [V34,T26] ( 2, 4 ) long -> rcx "argument with side effect" -; V35 tmp25 [V35,T27] ( 2, 4 ) long -> r8 "argument with side effect" -; V36 tmp26 [V36,T23] ( 3, 6 ) int -> rcx "MD array shared temp" -; V37 tmp27 [V37,T24] ( 3, 6 ) int -> rdx "MD array shared temp" -; V38 PSPSym [V38,T28] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym" -; V39 cse0 [V39,T05] ( 4, 72 ) long -> rsi hoist multi-def "CSE - aggressive" -; V40 cse1 [V40,T06] ( 5, 70 ) long -> rdi hoist multi-def "CSE - aggressive" -; V41 cse2 [V41,T09] ( 5, 44 ) long -> rsi "CSE - aggressive" -; V42 cse3 [V42,T10] ( 2, 36 ) long -> rbx hoist "CSE - aggressive" -; V43 cse4 [V43,T11] ( 2, 36 ) long -> rbx hoist "CSE - aggressive" -; V44 cse5 [V44,T12] ( 4, 32 ) int -> rcx "CSE - aggressive"
+; V26 tmp16 [V26,T28] ( 3, 0 ) ref -> rax class-hnd exact single-def "dup spill" <ushort[]> +;* V27 tmp17 [V27 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" +;* V28 tmp18 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.String> +; V29 tmp19 [V29,T16] ( 4, 26 ) ref -> rax class-hnd exact "Inline stloc first use temp" <System.String> +;* V30 tmp20 [V30 ] ( 0, 0 ) ref -> zero-ref "spilling varStr" +;* V31 tmp21 [V31,T19] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" +; V32 tmp22 [V32,T24] ( 2, 4 ) long -> rcx "argument with side effect" +; V33 tmp23 [V33,T25] ( 2, 4 ) long -> r8 "argument with side effect" +; V34 tmp24 [V34,T21] ( 3, 6 ) int -> rcx "MD array shared temp" +; V35 tmp25 [V35,T22] ( 3, 6 ) int -> rax "MD array shared temp" +; V36 PSPSym [V36,T26] ( 1, 1 ) long -> [rbp-0x60] do-not-enreg[V] "PSPSym" +; V37 cse0 [V37,T05] ( 4, 72 ) long -> rsi hoist multi-def "CSE - aggressive" +; V38 cse1 [V38,T06] ( 5, 70 ) long -> rdi hoist multi-def "CSE - aggressive" +; V39 cse2 [V39,T09] ( 5, 44 ) long -> rsi "CSE - aggressive" +; V40 cse3 [V40,T10] ( 2, 36 ) long -> rbx hoist "CSE - aggressive" +; V41 cse4 [V41,T11] ( 2, 36 ) long -> rbx hoist "CSE - aggressive" +; V42 cse5 [V42,T12] ( 4, 32 ) int -> rcx "CSE - aggressive"
; TEMP_01 int -> [rbp-0x44]
+; TEMP_02 byref -> [rbp-0x50]
;
-; Lcl frame size = 80
+; Lcl frame size = 96
G_M19405_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG push rbp @@ -63,14 +62,14 @@ G_M19405_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 { push rdi push rsi push rbx
- sub rsp, 80
+ sub rsp, 96
vzeroupper
- lea rbp, [rsp+0x70]
+ lea rbp, [rsp+0x80]
vxorps xmm4, xmm4, xmm4
- vmovdqa xmmword ptr [rbp-0x40], xmm4
+ vmovdqu ymmword ptr [rbp-0x50], ymm4
xor eax, eax mov qword ptr [rbp-0x30], rax
- mov qword ptr [rbp-0x50], rsp
+ mov qword ptr [rbp-0x60], rsp
mov qword ptr [rbp+0x10], rcx mov dword ptr [rbp+0x18], edx mov bword ptr [rbp+0x20], r8 @@ -78,7 +77,7 @@ G_M19405_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 { mov bword ptr [rbp+0x28], r9 ; GC ptr vars +{V03} mov ebx, edx
- ;; size=54 bbWeight=1 PerfScore 15.58
+ ;; size=57 bbWeight=1 PerfScore 15.58
G_M19405_IG02: ; bbWeight=1, gcVars=0000000000008100 {V02 V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref mov dword ptr [rbp-0x40], 5 mov dword ptr [rbp-0x3C], 24 @@ -113,29 +112,34 @@ G_M19405_IG03: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byr ; gcr arg pop 0 mov rdx, rax ; gcrRegs +[rdx]
- mov rcx, 0xD1FFAB1E ; <unknown class> - call CORINFO_HELP_CHKCASTARRAY - ; gcrRegs -[rdx] - ; gcr arg pop 0
mov ecx, 26 sub ecx, dword ptr [rsi+0x18] cmp ecx, dword ptr [rsi+0x10] jae G_M19405_IG16 imul ecx, dword ptr [rsi+0x14]
- mov edx, 65 - sub edx, dword ptr [rsi+0x1C] - cmp edx, dword ptr [rsi+0x14]
+ mov eax, 65 + ; gcrRegs -[rax] + sub eax, dword ptr [rsi+0x1C] + cmp eax, dword ptr [rsi+0x14]
jae G_M19405_IG16
- add ecx, edx
+ add ecx, eax
lea rcx, bword ptr [rsi+8*rcx+0x20] ; byrRegs +[rcx]
+ mov bword ptr [rbp-0x50], rcx + mov rcx, 0xD1FFAB1E ; <unknown class> + ; byrRegs -[rcx] + call CORINFO_HELP_CHKCASTARRAY + ; gcrRegs -[rdx rsi] +[rax] + ; gcr arg pop 0 + mov rcx, bword ptr [rbp-0x50] + ; byrRegs +[rcx]
mov rdx, rax ; gcrRegs +[rdx] call CORINFO_HELP_ASSIGN_REF
- ; gcrRegs -[rax rdx rsi]
+ ; gcrRegs -[rax rdx]
; byrRegs -[rcx] nop
- ;; size=90 bbWeight=1 PerfScore 25.25
+ ;; size=98 bbWeight=1 PerfScore 27.25
G_M19405_IG04: ; bbWeight=8, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref movsx rbx, word ptr [rbp+0x18] ;; size=5 bbWeight=8 PerfScore 24.00 @@ -290,7 +294,7 @@ G_M19405_IG17: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref mov qword ptr [rax+0x10], rcx ;; size=34 bbWeight=0 PerfScore 0.00 G_M19405_IG18: ; bbWeight=0, epilog, nogc, extend
- add rsp, 80
+ add rsp, 96
pop rbx pop rsi pop rdi @@ -310,8 +314,8 @@ G_M19405_IG19: ; bbWeight=0, gcVars=0000000000008100 {V02 V03}, gcrefRegs vzeroupper mov rbp, qword ptr [rcx+0x20] mov qword ptr [rsp+0x20], rbp
- lea rbp, [rbp+0x70] - ;; size=26 bbWeight=0 PerfScore 0.00
+ lea rbp, [rbp+0x80] + ;; size=29 bbWeight=0 PerfScore 0.00
G_M19405_IG20: ; bbWeight=0, gcVars=0000000000008100 {V02 V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref lea rax, G_M19405_IG09 ;; size=7 bbWeight=0 PerfScore 0.00 @@ -334,8 +338,8 @@ G_M19405_IG22: ; bbWeight=0, gcVars=0000000000008100 {V02 V03}, gcrefRegs vzeroupper mov rbp, qword ptr [rcx+0x20] mov qword ptr [rsp+0x20], rbp
- lea rbp, [rbp+0x70] - ;; size=26 bbWeight=0 PerfScore 0.00
+ lea rbp, [rbp+0x80] + ;; size=29 bbWeight=0 PerfScore 0.00
G_M19405_IG23: ; bbWeight=0, gcVars=0000000000008100 {V02 V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref lea rax, G_M19405_IG11 ;; size=7 bbWeight=0 PerfScore 0.00 @@ -358,8 +362,8 @@ G_M19405_IG25: ; bbWeight=0, gcVars=0000000000008100 {V02 V03}, gcrefRegs vzeroupper mov rbp, qword ptr [rcx+0x20] mov qword ptr [rsp+0x20], rbp
- lea rbp, [rbp+0x70] - ;; size=26 bbWeight=0 PerfScore 0.00
+ lea rbp, [rbp+0x80] + ;; size=29 bbWeight=0 PerfScore 0.00
G_M19405_IG26: ; bbWeight=0, gcVars=0000000000008100 {V02 V03}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref lea rax, G_M19405_IG15 ;; size=7 bbWeight=0 PerfScore 0.00 @@ -382,8 +386,8 @@ G_M19405_IG28: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, vzeroupper mov rbp, qword ptr [rcx+0x20] mov qword ptr [rsp+0x20], rbp
- lea rbp, [rbp+0x70] - ;; size=26 bbWeight=0 PerfScore 0.00
+ lea rbp, [rbp+0x80] + ;; size=29 bbWeight=0 PerfScore 0.00
G_M19405_IG29: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref ; GC ptr vars -{V02 V03 V15} lea rax, G_M19405_IG17 @@ -401,7 +405,7 @@ RWD00 dq 403B000000000000h ; 27 RWD08 dq 403E000000000000h ; 30
-; Total bytes of code 858, prolog size 54, PerfScore 1887.58, instruction count 232, allocated bytes for code 858 (MethodHash=5e5eb432) for method AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
+; Total bytes of code 881, prolog size 57, PerfScore 1889.58, instruction count 234, allocated bytes for code 881 (MethodHash=5e5eb432) for method AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
; ============================================================ Unwind Info: @@ -414,7 +418,7 @@ Unwind Info: FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x0A UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 9 * 8 + 8 = 80 = 0x50
+ CodeOffset: 0x0A UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 11 * 8 + 8 = 96 = 0x60
CodeOffset: 0x06 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6) CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rdi (7)

+26 (+7.32%) : 456146.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b_100(System.Object):this (Tier1)

@@ -8,24 +8,24 @@ ; Final local variable assignments ; ;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def <System.Threading.Tasks.ThreadPoolTaskScheduler+<>c>
-; V01 arg1 [V01,T02] ( 6, 4.12) ref -> rbx class-hnd single-def <System.Object>
+; V01 arg1 [V01,T03] ( 6, 4 ) ref -> rbx class-hnd single-def <System.Object>
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T11] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 13, 17.75) ref -> rsi class-hnd "spilling QMark2" <System.Threading.Tasks.Task> -;* V05 tmp3 [V05 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V07 tmp5 [V07,T06] ( 4, 2.50) ubyte -> rdx "Inline return value spill temp" -; V08 tmp6 [V08,T03] ( 4, 3 ) ref -> rdx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V09 tmp7 [V09,T12] ( 3, 1 ) ubyte -> rdx "Inline return value spill temp" -; V10 tmp8 [V10,T07] ( 3, 2.34) byref -> rdx single-def "Inlining Arg" -;* V11 tmp9 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> -; V12 tmp10 [V12,T13] ( 2, 1 ) int -> rax "Inline stloc first use temp" -; V13 tmp11 [V13,T09] ( 2, 2 ) byref -> rdx single-def "argument with side effect" -; V14 cse0 [V14,T10] ( 3, 1.50) ref -> rdx "CSE - moderate" -; V15 rat0 [V15,T08] ( 3, 2 ) byref -> rdx "TLS field access" -; V16 rat1 [V16,T04] ( 3, 3 ) long -> rdx "TLS access" -; V17 rat2 [V17,T05] ( 3, 3 ) long -> rdx "ThreadStaticBlockBase access" -; V18 rat3 [V18,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <System.Threading.Tasks.Task>
+;* V03 tmp1 [V03 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V04 tmp2 [V04,T00] ( 10, 15 ) ref -> rsi class-hnd single-def "Inlining Arg" <System.Threading.Tasks.Task> +;* V05 tmp3 [V05 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" +; V06 tmp4 [V06,T07] ( 4, 2.50) ubyte -> rdx "Inline return value spill temp" +; V07 tmp5 [V07,T04] ( 4, 3 ) ref -> rdx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V08 tmp6 [V08,T12] ( 3, 1 ) ubyte -> rdx "Inline return value spill temp" +; V09 tmp7 [V09,T08] ( 3, 2.34) byref -> rdx single-def "Inlining Arg" +;* V10 tmp8 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource> +; V11 tmp9 [V11,T13] ( 2, 1 ) int -> rax "Inline stloc first use temp" +; V12 tmp10 [V12,T10] ( 2, 2 ) byref -> rdx single-def "argument with side effect" +; V13 cse0 [V13,T11] ( 3, 1.50) ref -> rdx "CSE - moderate" +; V14 rat0 [V14,T09] ( 3, 2 ) byref -> rdx "TLS field access" +; V15 rat1 [V15,T05] ( 3, 3 ) long -> rdx "TLS access" +; V16 rat2 [V16,T06] ( 3, 3 ) long -> rdx "ThreadStaticBlockBase access" +; V17 rat3 [V17,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <System.Threading.Tasks.Task> +; V18 rat4 [V18,T02] ( 5, 7 ) ref -> rsi class-hnd "replacement local" <System.Threading.Tasks.Task>
; ; Lcl frame size = 40 @@ -45,7 +45,7 @@ G_M60851_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr G_M60851_IG03: ; bbWeight=0.50, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref mov rcx, 0xD1FFAB1E ; System.Threading.Tasks.Task cmp qword ptr [rax], rcx
- jne G_M60851_IG23
+ jne G_M60851_IG22
;; size=19 bbWeight=0.50 PerfScore 2.12 G_M60851_IG04: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref, isz test rax, rax @@ -65,41 +65,31 @@ G_M60851_IG06: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr mov rsi, rbx ; gcrRegs +[rsi] test rsi, rsi
- je SHORT G_M60851_IG09
+ je SHORT G_M60851_IG08
;; size=8 bbWeight=1 PerfScore 1.50
-G_M60851_IG07: ; bbWeight=0.25, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz - mov rcx, 0xD1FFAB1E ; System.Threading.Tasks.Task - cmp qword ptr [rsi], rcx - je SHORT G_M60851_IG09 - ;; size=15 bbWeight=0.25 PerfScore 1.06 -G_M60851_IG08: ; bbWeight=0.12, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rsi] - mov rdx, rbx - ; gcrRegs +[rdx] - call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[rdx rbx] +[rax] - ; gcr arg pop 0 - mov rsi, rax - ; gcrRegs +[rsi] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M60851_IG09: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax]
+G_M60851_IG07: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref + mov rdx, 0xD1FFAB1E ; System.Threading.Tasks.Task + cmp qword ptr [rsi], rdx + jne G_M60851_IG23 + ;; size=19 bbWeight=0.50 PerfScore 2.12 +G_M60851_IG08: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rbx]
or dword ptr [rsi+0x34], 0x20000 mov rdx, gword ptr [rsi+0x28] ; gcrRegs +[rdx] test rdx, rdx
- je SHORT G_M60851_IG15 - ;; size=16 bbWeight=1 PerfScore 6.25 -G_M60851_IG10: ; bbWeight=0.50, gcrefRegs=0044 {rdx rsi}, byrefRegs=0000 {}, byref, isz - cmp dword ptr [rdx+0x38], 1
je SHORT G_M60851_IG14
+ ;; size=16 bbWeight=1 PerfScore 6.25 +G_M60851_IG09: ; bbWeight=0.50, gcrefRegs=0044 {rdx rsi}, byrefRegs=0000 {}, byref, isz + cmp dword ptr [rdx+0x38], 1 + je SHORT G_M60851_IG13
add rdx, 64 ; gcrRegs -[rdx] ; byrRegs +[rdx] cmp gword ptr [rdx], 0
- je SHORT G_M60851_IG12
+ je SHORT G_M60851_IG11
;; size=16 bbWeight=0.50 PerfScore 4.12
-G_M60851_IG11: ; bbWeight=0.17, gcrefRegs=0040 {rsi}, byrefRegs=0004 {rdx}, byref, isz
+G_M60851_IG10: ; bbWeight=0.17, gcrefRegs=0040 {rsi}, byrefRegs=0004 {rdx}, byref, isz
mov rdx, gword ptr [rdx] ; gcrRegs +[rdx] ; byrRegs -[rdx] @@ -107,22 +97,22 @@ G_M60851_IG11: ; bbWeight=0.17, gcrefRegs=0040 {rsi}, byrefRegs=0004 {rdx setne dl ; gcrRegs -[rdx] movzx rdx, dl
- jmp SHORT G_M60851_IG13
+ jmp SHORT G_M60851_IG12
;; size=15 bbWeight=0.17 PerfScore 1.41
-G_M60851_IG12: ; bbWeight=0.33, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
+G_M60851_IG11: ; bbWeight=0.33, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
xor edx, edx ;; size=2 bbWeight=0.33 PerfScore 0.08
-G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - jmp SHORT G_M60851_IG16
+G_M60851_IG12: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M60851_IG15
;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG13: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
mov edx, 1
- jmp SHORT G_M60851_IG16
+ jmp SHORT G_M60851_IG15
;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M60851_IG15: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
+G_M60851_IG14: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
xor edx, edx ;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M60851_IG16: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG15: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
test edx, edx sete dl movzx rdx, dl @@ -132,9 +122,9 @@ G_M60851_IG16: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byr setne cl movzx rcx, cl test edx, ecx
- je SHORT G_M60851_IG20
+ je SHORT G_M60851_IG19
;; size=33 bbWeight=1 PerfScore 6.50
-G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz
+G_M60851_IG16: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref
mov rdx, qword ptr GS:[0x0058] mov rdx, qword ptr [rdx] cmp dword ptr [rdx+0xD8], 4 @@ -142,58 +132,58 @@ G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, mov rdx, qword ptr [rdx+0xE0] mov rdx, qword ptr [rdx+0x20] test rdx, rdx
- je SHORT G_M60851_IG24
+ je G_M60851_IG24
mov rdx, bword ptr [rdx] ; byrRegs +[rdx] add rdx, 16
- ;; size=48 bbWeight=0.50 PerfScore 7.25 -G_M60851_IG18: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0004 {rdx}, byref
+ ;; size=52 bbWeight=0.50 PerfScore 7.25 +G_M60851_IG17: ; bbWeight=0.50, gcrefRegs=0040 {rsi}, byrefRegs=0004 {rdx}, byref
add rdx, 104 mov rcx, rsi ; gcrRegs +[rcx] xor r8, r8 ; gcrRegs +[r8] ;; size=10 bbWeight=0.50 PerfScore 0.38
-G_M60851_IG19: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG18: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi tail.jmp [<unknown method>] ; gcr arg pop 0 ;; size=12 bbWeight=0.50 PerfScore 1.62
-G_M60851_IG20: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M60851_IG19: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rcx r8] ; byrRegs -[rdx] mov ecx, dword ptr [rsi+0x34] and ecx, 0xD1FFAB1E cmp ecx, 0xD1FFAB1E
- je SHORT G_M60851_IG22
+ je SHORT G_M60851_IG21
lea rcx, bword ptr [rsi+0x34] ; byrRegs +[rcx] mov eax, dword ptr [rsi+0x34] or eax, 0xD1FFAB1E xchg dword ptr [rcx], eax test eax, 0xD1FFAB1E
- jne SHORT G_M60851_IG22
+ jne SHORT G_M60851_IG21
mov rcx, rsi ; gcrRegs +[rcx] ; byrRegs -[rcx] ;; size=41 bbWeight=0.50 PerfScore 13.88
-G_M60851_IG21: ; bbWeight=0.50, epilog, nogc, extend
+G_M60851_IG20: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi tail.jmp [<unknown method>] ; gcr arg pop 0 ;; size=12 bbWeight=0.50 PerfScore 1.62
-G_M60851_IG22: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M60851_IG21: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rcx rsi] add rsp, 40 pop rbx pop rsi ret ;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M60851_IG23: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref
+G_M60851_IG22: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs +[rbx] mov rdx, rbx ; gcrRegs +[rdx] @@ -203,18 +193,30 @@ G_M60851_IG23: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 { ; gcr arg pop 0 jmp G_M60851_IG04 ;; size=23 bbWeight=0 PerfScore 0.00
-G_M60851_IG24: ; bbWeight=0, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax rbx] +[rsi]
+G_M60851_IG23: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax] + mov rdx, rbx + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; System.Threading.Tasks.Task + call CORINFO_HELP_CHKCASTCLASS_SPECIAL + ; gcrRegs -[rdx rbx] +[rax] + ; gcr arg pop 0 + mov rsi, rax + ; gcrRegs +[rsi] + jmp G_M60851_IG08 + ;; size=26 bbWeight=0 PerfScore 0.00 +G_M60851_IG24: ; bbWeight=0, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax]
mov ecx, 4 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED ; byrRegs +[rax] ; gcr arg pop 0 mov rdx, rax ; byrRegs +[rdx]
- jmp SHORT G_M60851_IG18 - ;; size=15 bbWeight=0 PerfScore 0.00
+ jmp G_M60851_IG17 + ;; size=18 bbWeight=0 PerfScore 0.00
...

+47 (+335.71%) : 183577.dasm - T:TestEntryPoint():int (FullOpts)

@@ -11,24 +11,51 @@ ;* V00 loc0 [V00 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <<unknown class>>
-;* V03 tmp2 [V03,T00] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <<unknown class>> -;* V04 tmp3 [V04,T02] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05,T01] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <<unknown class>>
+;* V03 tmp2 [V03,T01] ( 0, 0 ) ref -> zero-ref single-def "arr expr" +; V04 rat0 [V04,T00] ( 5, 7.50) ref -> rax class-hnd "replacement local" <<unknown class>>
; ; Lcl frame size = 40
-G_M32114_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M32114_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
sub rsp, 40 ;; size=4 bbWeight=1 PerfScore 0.25
-G_M32114_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M32114_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz + mov rax, 0xD1FFAB1E + ; gcrRegs +[rax] + test rax, rax + je SHORT G_M32114_IG05 + ;; size=15 bbWeight=1 PerfScore 1.50 +G_M32114_IG03: ; bbWeight=0.50, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz + mov rcx, 0xD1FFAB1E ; <unknown class> + cmp qword ptr [rax], rcx + je SHORT G_M32114_IG05 + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M32114_IG04: ; bbWeight=0.25, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax] + xor rax, rax + ; gcrRegs +[rax] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M32114_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz + test rax, rax + je SHORT G_M32114_IG08 + ;; size=5 bbWeight=1 PerfScore 1.25 +G_M32114_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax]
mov eax, 100
- ;; size=5 bbWeight=1 PerfScore 0.25 -G_M32114_IG03: ; bbWeight=1, epilog, nogc, extend
+ ;; size=5 bbWeight=0.50 PerfScore 0.12 +G_M32114_IG07: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 40 ret
- ;; size=5 bbWeight=1 PerfScore 1.25
+ ;; size=5 bbWeight=0.50 PerfScore 0.62 +G_M32114_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref + mov eax, -1 + ;; size=5 bbWeight=0.50 PerfScore 0.12 +G_M32114_IG09: ; bbWeight=0.50, epilog, nogc, extend + add rsp, 40 + ret + ;; size=5 bbWeight=0.50 PerfScore 0.62
-; Total bytes of code 14, prolog size 4, PerfScore 1.75, instruction count 4, allocated bytes for code 14 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
+; Total bytes of code 61, prolog size 4, PerfScore 6.69, instruction count 16, allocated bytes for code 61 (MethodHash=d71e828d) for method T:TestEntryPoint():int (FullOpts)
; ============================================================ Unwind Info:

libraries.pmi.windows.x64.checked.mch

-13 (-32.50%) : 15207.dasm - Microsoft.FSharp.Core.Operators+Unchecked:UnboxSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rcx single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rdx class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rdx class-hnd single-def <System.Object>
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 40 @@ -19,34 +17,21 @@ G_M7606_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub rsp, 40 mov qword ptr [rsp+0x20], rcx ;; size=9 bbWeight=1 PerfScore 1.25
-G_M7606_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M7606_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M7606_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M7606_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rcx, qword ptr [rcx+0x38] mov rcx, qword ptr [rcx]
- cmp qword ptr [rax], rcx - je SHORT G_M7606_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M7606_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M7606_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M7606_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M7606_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 ret ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 40, prolog size 9, PerfScore 6.38, instruction count 13, allocated bytes for code 40 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 27, prolog size 9, PerfScore 7.75, instruction count 8, allocated bytes for code 27 (MethodHash=333ae249) for method Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info:

-13 (-32.50%) : 233332.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rcx single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rdx class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rdx class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 40 @@ -20,34 +18,21 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub rsp, 40 mov qword ptr [rsp+0x20], rcx ;; size=9 bbWeight=1 PerfScore 1.25
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rcx, qword ptr [rcx+0x38] mov rcx, qword ptr [rcx]
- cmp qword ptr [rax], rcx - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 ret ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 40, prolog size 9, PerfScore 6.38, instruction count 13, allocated bytes for code 40 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 27, prolog size 9, PerfScore 7.75, instruction count 8, allocated bytes for code 27 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info:

-20 (-31.25%) : 165849.dasm - Roslyn.Utilities.EnumUtilities:GetValuesubyte:ubyte

@@ -9,53 +9,33 @@ ; Final local variable assignments ; ; V00 OutArgs [V00 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V01 tmp1 [V01,T01] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V02 tmp2 [V02,T02] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V03 tmp3 [V03,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <ubyte[]>
+; V01 tmp1 [V01,T00] ( 2, 4 ) ref -> rdx single-def "argument with side effect"
; ; Lcl frame size = 40 G_M58003_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG sub rsp, 40 ;; size=4 bbWeight=1 PerfScore 0.25
-G_M58003_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M58003_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov rcx, 0xD1FFAB1E ; gcrRegs +[rcx] call [System.RuntimeType:GetEnumValues():System.Array:this] ; gcrRegs -[rcx] +[rax] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - jne SHORT G_M58003_IG05 - ;; size=24 bbWeight=1 PerfScore 4.75 -G_M58003_IG03: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M58003_IG04: ; bbWeight=1, epilog, nogc, extend - add rsp, 40 - ret - ;; size=5 bbWeight=1 PerfScore 1.25 -G_M58003_IG05: ; bbWeight=0.25, gcVars=0000000000000000 {}, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, gcvars, byref, isz - mov rcx, 0xD1FFAB1E ; ubyte[] - cmp qword ptr [r8], rcx - je SHORT G_M58003_IG03 - ;; size=15 bbWeight=0.25 PerfScore 1.06 -G_M58003_IG06: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, 0xD1FFAB1E ; ubyte[]
call CORINFO_HELP_CHKCASTARRAY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - jmp SHORT G_M58003_IG03 - ;; size=13 bbWeight=0.12 PerfScore 0.44
+ nop + ;; size=35 bbWeight=1 PerfScore 5.00 +G_M58003_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 40 + ret + ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 64, prolog size 4, PerfScore 8.00, instruction count 16, allocated bytes for code 64 (MethodHash=01371d6c) for method Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
+; Total bytes of code 44, prolog size 4, PerfScore 6.50, instruction count 9, allocated bytes for code 44 (MethodHash=01371d6c) for method Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
; ============================================================ Unwind Info:

+11 (+4.68%) : 261097.dasm - System.Collections.Immutable.ImmutableArray1+Builder[System.__Canon]:AddRange[System.__Canon](System.ReadOnlySpan1[System.__Canon]):this (FullOpts)

@@ -8,35 +8,32 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T09] ( 5, 5 ) ref -> rsi this class-hnd single-def <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]> -; V01 TypeCtx [V01,T08] ( 7, 5.56) long -> rbx single-def -; V02 arg1 [V02,T06] ( 4, 8 ) byref -> r8 ld-addr-op single-def -; V03 loc0 [V03,T19] ( 2, 2 ) int -> r14 -; V04 loc1 [V04 ] ( 3, 9 ) struct (16) [rsp+0x28] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[System.__Canon]> -; V05 loc2 [V05,T01] ( 6, 21 ) int -> rsi
+; V00 this [V00,T06] ( 5, 5 ) ref -> rsi this class-hnd single-def <System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]> +; V01 TypeCtx [V01,T05] ( 7, 5.56) long -> rbx single-def +; V02 arg1 [V02,T03] ( 4, 8 ) byref -> r8 ld-addr-op single-def +; V03 loc0 [V03,T16] ( 2, 2 ) int -> r14 +; V04 loc1 [V04 ] ( 3, 9 ) struct (16) [rsp+0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Span`1[System.__Canon]> +; V05 loc2 [V05,T00] ( 6, 21 ) int -> rsi
; V06 OutArgs [V06 ] ( 1, 1 ) struct (40) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V07 tmp1 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V08 tmp2 [V08,T05] ( 3, 11 ) long -> rcx "spilling helperCall" -; V09 tmp3 [V09,T03] ( 2, 16 ) byref -> rbx "bubbling QMark2" -; V10 tmp4 [V10,T02] ( 3, 17 ) ref -> rdx "CASTCLASS eval op1" -;* V11 tmp5 [V11 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -; V12 tmp6 [V12,T00] ( 5, 27 ) ref -> rax class-hnd "spilling QMark2" <System.__Canon> -; V13 tmp7 [V13,T12] ( 2, 5 ) byref -> rdi single-def "field V02._reference (fldOffset=0x0)" P-INDEP -; V14 tmp8 [V14,T07] ( 5, 8 ) int -> rbp "field V02._length (fldOffset=0x8)" P-INDEP -; V15 tmp9 [V15 ] ( 2, 5 ) byref -> [rsp+0x28] do-not-enreg[X] addr-exposed "field V04._reference (fldOffset=0x0)" P-DEP -; V16 tmp10 [V16 ] ( 2, 5 ) int -> [rsp+0x30] do-not-enreg[X] addr-exposed "field V04._length (fldOffset=0x8)" P-DEP -;* V17 tmp11 [V17 ] ( 0, 0 ) struct (16) zero-ref "Promoted implicit byref" <System.ReadOnlySpan`1[System.__Canon]> -; V18 tmp12 [V18,T17] ( 2, 4 ) long -> rdx "argument with side effect" -; V19 cse0 [V19,T13] ( 2, 5 ) long -> r14 hoist "CSE - aggressive" -; V20 cse1 [V20,T18] ( 3, 3 ) int -> rdx "CSE - moderate" -; V21 cse2 [V21,T04] ( 3, 12 ) long -> rax "CSE - aggressive" -; V22 rat0 [V22,T15] ( 3, 4 ) long -> rdx "runtime lookup" -; V23 rat1 [V23,T10] ( 3, 5.60) long -> rdx "fgMakeTemp is creating a new local variable" -; V24 rat2 [V24,T16] ( 3, 4 ) long -> r14 "runtime lookup" -; V25 rat3 [V25,T11] ( 3, 5.60) long -> rcx "spilling expr" -; V26 rat4 [V26,T14] ( 3, 4.48) long -> r14 "fgMakeTemp is creating a new local variable"
+; V08 tmp2 [V08,T01] ( 2, 16 ) long -> [rsp+0x28] spill-single-def "spilling helperCall" +; V09 tmp3 [V09,T09] ( 2, 5 ) byref -> rdi single-def "field V02._reference (fldOffset=0x0)" P-INDEP +; V10 tmp4 [V10,T04] ( 5, 8 ) int -> rbp "field V02._length (fldOffset=0x8)" P-INDEP +; V11 tmp5 [V11 ] ( 2, 5 ) byref -> [rsp+0x30] do-not-enreg[X] addr-exposed "field V04._reference (fldOffset=0x0)" P-DEP +; V12 tmp6 [V12 ] ( 2, 5 ) int -> [rsp+0x38] do-not-enreg[X] addr-exposed "field V04._length (fldOffset=0x8)" P-DEP +;* V13 tmp7 [V13 ] ( 0, 0 ) struct (16) zero-ref "Promoted implicit byref" <System.ReadOnlySpan`1[System.__Canon]> +; V14 tmp8 [V14,T14] ( 2, 4 ) long -> rdx "argument with side effect" +; V15 cse0 [V15,T10] ( 2, 5 ) long -> r14 hoist "CSE - aggressive" +; V16 cse1 [V16,T15] ( 3, 3 ) int -> rdx "CSE - aggressive" +; V17 cse2 [V17,T02] ( 3, 12 ) long -> rax "CSE - aggressive" +; V18 rat0 [V18,T12] ( 3, 4 ) long -> rdx "runtime lookup" +; V19 rat1 [V19,T07] ( 3, 5.60) long -> rdx "fgMakeTemp is creating a new local variable" +; V20 rat2 [V20,T13] ( 3, 4 ) long -> r14 "runtime lookup" +; V21 rat3 [V21,T08] ( 3, 5.60) long -> rcx "spilling expr" +; V22 rat4 [V22,T11] ( 3, 4.48) long -> r14 "fgMakeTemp is creating a new local variable" +; TEMP_01 byref -> [rsp+0x40]
;
-; Lcl frame size = 64
+; Lcl frame size = 80
G_M27839_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push r14 @@ -44,14 +41,16 @@ G_M27839_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rsi push rbp push rbx
- sub rsp, 64
+ sub rsp, 80 + vxorps xmm4, xmm4, xmm4 + vmovdqa xmmword ptr [rsp+0x30], xmm4
xor eax, eax
- mov qword ptr [rsp+0x28], rax - mov qword ptr [rsp+0x38], rdx
+ mov qword ptr [rsp+0x40], rax + mov qword ptr [rsp+0x48], rdx
mov rsi, rcx ; gcrRegs +[rsi] mov rbx, rdx
- ;; size=28 bbWeight=1 PerfScore 8.00
+ ;; size=38 bbWeight=1 PerfScore 10.33
G_M27839_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0100 {r8}, byref, isz ; byrRegs +[r8] mov rdi, bword ptr [r8] @@ -85,14 +84,14 @@ G_M27839_IG05: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0080 {rdi}, mov dword ptr [rsp+0x20], ebp mov r8, gword ptr [rsi+0x08] ; gcrRegs +[r8]
- lea rcx, [rsp+0x28]
+ lea rcx, [rsp+0x30]
mov r9d, r14d call [System.Span`1[System.__Canon]:.ctor(System.__Canon[],int,int):this] ; gcrRegs -[rsi r8] ; gcr arg pop 0 xor esi, esi test ebp, ebp
- jle SHORT G_M27839_IG13
+ jle SHORT G_M27839_IG10
mov rcx, qword ptr [rbx+0x38] cmp qword ptr [rcx+0x08], 24 jle SHORT G_M27839_IG08 @@ -113,47 +112,37 @@ G_M27839_IG08: ; bbWeight=0.36, gcrefRegs=0000 {}, byrefRegs=0080 {rdi}, mov r14, rax ;; size=21 bbWeight=0.36 PerfScore 0.63 G_M27839_IG09: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0080 {rdi}, byref, isz
- mov rcx, r14 - cmp esi, dword ptr [rsp+0x30] - jae SHORT G_M27839_IG14 - mov rdx, bword ptr [rsp+0x28]
+ mov qword ptr [rsp+0x28], r14 + cmp esi, dword ptr [rsp+0x38] + jae SHORT G_M27839_IG11 + mov rdx, bword ptr [rsp+0x30]
; byrRegs +[rdx] mov eax, esi
- lea rbx, bword ptr [rdx+8*rax] - ; byrRegs +[rbx]
+ lea rcx, bword ptr [rdx+8*rax] + ; byrRegs +[rcx] + mov bword ptr [rsp+0x40], rcx
mov rdx, gword ptr [rdi+8*rax] ; gcrRegs +[rdx] ; byrRegs -[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M27839_IG12 - ;; size=32 bbWeight=4 PerfScore 34.00 -G_M27839_IG10: ; bbWeight=1, gcrefRegs=0005 {rax rdx}, byrefRegs=0088 {rbx rdi}, byref, isz - cmp qword ptr [rax], rcx - je SHORT G_M27839_IG12 - ;; size=5 bbWeight=1 PerfScore 4.00 -G_M27839_IG11: ; bbWeight=0.50, gcrefRegs=0004 {rdx}, byrefRegs=0088 {rbx rdi}, byref - ; gcrRegs -[rax]
+ mov rcx, qword ptr [rsp+0x28] + ; byrRegs -[rcx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M27839_IG12: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0088 {rbx rdi}, byref, isz - mov rcx, rbx
+ mov rcx, bword ptr [rsp+0x40]
; byrRegs +[rcx] mov rdx, rax ; gcrRegs +[rdx] call CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[rax rdx]
- ; byrRegs -[rcx rbx]
+ ; byrRegs -[rcx]
inc esi cmp esi, ebp jl SHORT G_M27839_IG09
- ;; size=17 bbWeight=4 PerfScore 12.00 -G_M27839_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ;; size=60 bbWeight=4 PerfScore 58.00 +G_M27839_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; byrRegs -[rdi]
- add rsp, 64
+ add rsp, 80
pop rbx pop rbp pop rsi @@ -161,13 +150,13 @@ G_M27839_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, pop r14 ret ;; size=11 bbWeight=1 PerfScore 3.75
-G_M27839_IG14: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M27839_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
call CORINFO_HELP_RNGCHKFAIL ; gcr arg pop 0 int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 235, prolog size 28, PerfScore 97.96, instruction count 74, allocated bytes for code 235 (MethodHash=475d9340) for method System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 246, prolog size 38, PerfScore 107.79, instruction count 73, allocated bytes for code 246 (MethodHash=475d9340) for method System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):this (FullOpts)
; ============================================================ Unwind Info: @@ -180,7 +169,7 @@ Unwind Info: FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x0A UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 7 * 8 + 8 = 64 = 0x40
+ CodeOffset: 0x0A UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 9 * 8 + 8 = 80 = 0x50
CodeOffset: 0x06 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) CodeOffset: 0x05 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5) CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6)

+5 (+4.95%) : 188261.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,18 +10,17 @@ ; ; V00 this [V00,T02] ( 3, 2.50) ref -> rcx this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> rdx class-hnd single-def <System.Object>
-; V02 loc0 [V02,T06] ( 2, 1 ) ref -> rdx class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T04] ( 3, 1.50) ref -> rdx class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 6, 4.82) ref -> r8 class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T03] ( 5, 4.27) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T05] ( 4, 1.00) ubyte -> rax "Inline return value spill temp" -; V08 tmp5 [V08,T04] ( 2, 1.10) byref -> rcx single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 6, 4.82) ref -> r8 class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T03] ( 5, 4.27) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T06] ( 4, 1.00) ubyte -> rax "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 1.10) byref -> rcx single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; ; Lcl frame size = 40 @@ -48,12 +47,14 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=5 bbWeight=0.50 PerfScore 0.62 G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0006 {rcx rdx}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[rcx rdx]
+ test rdx, rdx + je SHORT G_M57556_IG04
mov r8, gword ptr [rcx+0x08] ; gcrRegs +[r8] mov rdx, gword ptr [rdx+0x08] cmp r8, rdx je SHORT G_M57556_IG14
- ;; size=13 bbWeight=0.50 PerfScore 2.62
+ ;; size=18 bbWeight=0.50 PerfScore 3.25
G_M57556_IG07: ; bbWeight=0.43, gcrefRegs=0104 {rdx r8}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rcx] test r8, r8 @@ -99,7 +100,7 @@ G_M57556_IG14: ; bbWeight=0.07, gcVars=0000000000000000 {}, gcrefRegs=000 jmp SHORT G_M57556_IG12 ;; size=7 bbWeight=0.07 PerfScore 0.15
-; Total bytes of code 101, prolog size 4, PerfScore 13.56, instruction count 32, allocated bytes for code 101 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 106, prolog size 4, PerfScore 14.18, instruction count 34, allocated bytes for code 106 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info:

+5 (+4.95%) : 271592.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

@@ -10,18 +10,17 @@ ; ; V00 this [V00,T02] ( 3, 2.50) ref -> rcx this class-hnd single-def <System.Data.Common.DbConnectionPoolKey> ; V01 arg1 [V01,T00] ( 5, 4 ) ref -> rdx class-hnd single-def <System.Object>
-; V02 loc0 [V02,T06] ( 2, 1 ) ref -> rdx class-hnd exact <System.Data.Common.DbConnectionPoolKey>
+; V02 loc0 [V02,T04] ( 3, 1.50) ref -> rdx class-hnd exact single-def <System.Data.Common.DbConnectionPoolKey>
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Data.Common.DbConnectionPoolKey> -; V05 tmp2 [V05,T01] ( 6, 4.82) ref -> r8 class-hnd exact single-def "Inlining Arg" <System.String> -; V06 tmp3 [V06,T03] ( 5, 4.27) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String> -; V07 tmp4 [V07,T05] ( 4, 1.00) ubyte -> rax "Inline return value spill temp" -; V08 tmp5 [V08,T04] ( 2, 1.10) byref -> rcx single-def "impAppendStmt"
+; V04 tmp1 [V04,T01] ( 6, 4.82) ref -> r8 class-hnd exact single-def "Inlining Arg" <System.String> +; V05 tmp2 [V05,T03] ( 5, 4.27) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.String> +; V06 tmp3 [V06,T06] ( 4, 1.00) ubyte -> rax "Inline return value spill temp" +; V07 tmp4 [V07,T05] ( 2, 1.10) byref -> rcx single-def "impAppendStmt" +;* V08 tmp5 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; ; Lcl frame size = 40 @@ -48,12 +47,14 @@ G_M57556_IG05: ; bbWeight=0.50, epilog, nogc, extend ;; size=5 bbWeight=0.50 PerfScore 0.62 G_M57556_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0006 {rcx rdx}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs +[rcx rdx]
+ test rdx, rdx + je SHORT G_M57556_IG04
mov r8, gword ptr [rcx+0x08] ; gcrRegs +[r8] mov rdx, gword ptr [rdx+0x08] cmp r8, rdx je SHORT G_M57556_IG14
- ;; size=13 bbWeight=0.50 PerfScore 2.62
+ ;; size=18 bbWeight=0.50 PerfScore 3.25
G_M57556_IG07: ; bbWeight=0.43, gcrefRegs=0104 {rdx r8}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rcx] test r8, r8 @@ -99,7 +100,7 @@ G_M57556_IG14: ; bbWeight=0.07, gcVars=0000000000000000 {}, gcrefRegs=000 jmp SHORT G_M57556_IG12 ;; size=7 bbWeight=0.07 PerfScore 0.15
-; Total bytes of code 101, prolog size 4, PerfScore 13.56, instruction count 32, allocated bytes for code 101 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
+; Total bytes of code 106, prolog size 4, PerfScore 14.18, instruction count 34, allocated bytes for code 106 (MethodHash=7a9f1f2b) for method System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
; ============================================================ Unwind Info:

libraries_tests.run.windows.x64.Release.mch

-35 (-36.08%) : 536946.dasm - Moq.Mock`1[System.Canon]:get_Object():System.Canon:this (Tier1)

@@ -8,82 +8,56 @@ ; 1 inlinees with PGO data; 0 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T01] ( 7, 3.75) ref -> rbx this class-hnd single-def <Moq.Mock`1[System.__Canon]>
+; V00 this [V00,T00] ( 5, 3.50) ref -> rcx this class-hnd single-def <Moq.Mock`1[System.__Canon]>
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V05 tmp4 [V05,T02] ( 4, 1.62) ref -> rax "guarded devirt return temp" -;* V06 tmp5 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Moq.Mock`1[System.IO.Stream]>
+; V02 tmp1 [V02,T02] ( 3, 1.50) ref -> rax "guarded devirt return temp" +;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "guarded devirt this exact temp" <Moq.Mock`1[System.IO.Stream]> +; V04 cse0 [V04,T01] ( 4, 3 ) long -> rbx "CSE - aggressive"
;
-; Lcl frame size = 48
+; Lcl frame size = 32
G_M6043_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rbx
- sub rsp, 48 - mov qword ptr [rsp+0x28], rcx - mov rbx, rcx - ; gcrRegs +[rbx] - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M6043_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - mov rcx, 0xD1FFAB1E ; Moq.Mock`1[System.IO.Stream] - cmp qword ptr [rbx], rcx - jne SHORT G_M6043_IG09 - ;; size=15 bbWeight=1 PerfScore 4.25 -G_M6043_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - mov rcx, rbx
+ sub rsp, 32 + ;; size=5 bbWeight=1 PerfScore 1.25 +G_M6043_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[rcx]
+ mov rbx, qword ptr [rcx] + mov rax, 0xD1FFAB1E ; Moq.Mock`1[System.IO.Stream] + cmp rbx, rax + jne SHORT G_M6043_IG06 + ;; size=18 bbWeight=1 PerfScore 3.50 +G_M6043_IG03: ; bbWeight=0.50, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref
call [Moq.Mock`1[System.__Canon]:OnGetObject():System.Object:this] ; gcrRegs -[rcx] +[rax] ; gcr arg pop 0
- ;; size=9 bbWeight=0.50 PerfScore 1.62 -G_M6043_IG04: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref, isz - mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M6043_IG07 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M6043_IG05: ; bbWeight=0.25, gcrefRegs=0109 {rax rbx r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx] - mov rcx, qword ptr [rcx+0x38]
+ ;; size=6 bbWeight=0.50 PerfScore 1.50 +G_M6043_IG04: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref + mov rcx, qword ptr [rbx+0x38]
mov rcx, qword ptr [rcx] mov rcx, qword ptr [rcx]
- cmp qword ptr [r8], rcx - je SHORT G_M6043_IG07 - ;; size=18 bbWeight=0.25 PerfScore 3.00 -G_M6043_IG06: ; bbWeight=0.12, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx] call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M6043_IG07: ; bbWeight=1, gcrefRegs=0108 {rbx r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M6043_IG08: ; bbWeight=1, epilog, nogc, extend - add rsp, 48
+ nop + ;; size=19 bbWeight=1 PerfScore 7.50 +G_M6043_IG05: ; bbWeight=1, epilog, nogc, extend + add rsp, 32
pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-G_M6043_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs -[rax r8] - mov rcx, rbx - ; gcrRegs +[rcx] - mov rax, qword ptr [rbx] - mov rax, qword ptr [rax+0x58]
+G_M6043_IG06: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs -[rax] +[rcx] + mov rax, qword ptr [rbx+0x58]
call [rax]<unknown method> ; gcrRegs -[rcx] +[rax] ; gcr arg pop 0 jmp SHORT G_M6043_IG04
- ;; size=14 bbWeight=0 PerfScore 0.00
+ ;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 97, prolog size 10, PerfScore 15.06, instruction count 30, allocated bytes for code 97 (MethodHash=4a40e864) for method Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
+; Total bytes of code 62, prolog size 5, PerfScore 15.50, instruction count 19, allocated bytes for code 62 (MethodHash=4a40e864) for method Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
; ============================================================ Unwind Info: @@ -96,5 +70,5 @@ Unwind Info: FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 5 * 8 + 8 = 48 = 0x30
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20
CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

-25 (-33.78%) : 3546.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (Tier1)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -19,11 +18,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rcx
- mov rbx, rcx - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rcx+0x38] + mov rcx, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 @@ -32,39 +30,21 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, call [<unknown method>] ; gcrRegs -[rcx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 74, prolog size 10, PerfScore 16.44, instruction count 23, allocated bytes for code 74 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
; ============================================================ Unwind Info:

-18 (-32.73%) : 55333.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.Canon,System.Canon]:Single():System.__Canon:this (Tier1)

@@ -7,57 +7,36 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) byref -> rcx this single-def -; V01 TypeCtx [V01,T01] ( 4, 3.25) long -> rdx single-def
+; V00 this [V00,T01] ( 3, 3 ) byref -> rax this single-def +; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> rdx single-def
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T04] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 40 G_M64707_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG sub rsp, 40 mov qword ptr [rsp+0x20], rdx
- ;; size=9 bbWeight=1 PerfScore 1.25 -G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byref, isz - ; byrRegs +[rcx] - mov rax, gword ptr [rcx] - ; gcrRegs +[rax] - mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M64707_IG05 - ;; size=11 bbWeight=1 PerfScore 3.50 -G_M64707_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - ; byrRegs -[rcx]
+ mov rax, rcx + ; byrRegs +[rax] + ;; size=12 bbWeight=1 PerfScore 1.50 +G_M64707_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {rax}, byref
mov rcx, qword ptr [rdx+0x38] mov rcx, qword ptr [rcx] mov rcx, qword ptr [rcx+0x08]
- cmp qword ptr [r8], rcx - je SHORT G_M64707_IG05 - ;; size=16 bbWeight=0.25 PerfScore 2.50 -G_M64707_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8] - mov rdx, rax
+ mov rdx, gword ptr [rax]
; gcrRegs +[rdx] call CORINFO_HELP_CHKCASTANY
- ; gcrRegs -[rdx]
+ ; gcrRegs -[rdx] +[rax] + ; byrRegs -[rax]
; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M64707_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M64707_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=20 bbWeight=1 PerfScore 9.25 +G_M64707_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 ret ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 55, prolog size 9, PerfScore 8.94, instruction count 17, allocated bytes for code 55 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
+; Total bytes of code 37, prolog size 9, PerfScore 12.00, instruction count 11, allocated bytes for code 37 (MethodHash=fac0033c) for method Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
; ============================================================ Unwind Info:

+22 (+9.48%) : 662672.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)

@@ -9,21 +9,20 @@ ; 2 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 3, 2.00) ref -> [rbp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler>
+; V00 this [V00,T04] ( 4, 2.04) ref -> [rbp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler>
; V01 arg1 [V01,T00] ( 5, 3.96) ref -> rbx class-hnd single-def <System.Threading.Tasks.Task>
-; V02 arg2 [V02,T03] ( 4, 3.04) ubyte -> [rbp+0x20] EH-live single-def
+; V02 arg2 [V02,T03] ( 5, 3.04) ubyte -> [rbp+0x20] EH-live single-def
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T07] ( 2, 1.92) ubyte -> rax "Inline return value spill temp" ; V05 tmp2 [V05,T06] ( 3, 2.88) ref -> rcx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> ;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "dup spill" <System.Object> ;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref
-;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V11 PSPSym [V11,T08] ( 1, 1 ) long -> [rbp-0x10] do-not-enreg[V] "PSPSym" -; V12 rat0 [V12,T05] ( 3, 3.84) byref -> rax "TLS field access" -; V13 rat1 [V13,T01] ( 3, 5.77) long -> rcx "TLS access" -; V14 rat2 [V14,T02] ( 3, 5.77) long -> rcx "ThreadStaticBlockBase access"
+;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> +;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V10 PSPSym [V10,T08] ( 1, 1 ) long -> [rbp-0x10] do-not-enreg[V] "PSPSym" +; V11 rat0 [V11,T05] ( 3, 3.84) byref -> rax "TLS field access" +; V12 rat1 [V12,T01] ( 3, 5.77) long -> rcx "TLS access" +; V13 rat2 [V13,T02] ( 3, 5.77) long -> rcx "ThreadStaticBlockBase access"
; ; Lcl frame size = 40 @@ -52,11 +51,11 @@ G_M14922_IG03: ; bbWeight=0.96, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, mov rcx, qword ptr GS:[0x0058] mov rcx, qword ptr [rcx+0x18] cmp dword ptr [rcx+0xD8], 6
- jl SHORT G_M14922_IG12
+ jl SHORT G_M14922_IG11
mov rcx, qword ptr [rcx+0xE0] mov rcx, qword ptr [rcx+0x30] test rcx, rcx
- je SHORT G_M14922_IG12
+ je SHORT G_M14922_IG11
mov rax, bword ptr [rcx] ; byrRegs +[rax] add rax, 16 @@ -101,47 +100,9 @@ G_M14922_IG07: ; bbWeight=0.04, gcVars=0000000000000010 {V00}, gcrefRegs= ; gcr arg pop 0 nop ;; size=14 bbWeight=0.04 PerfScore 0.28
-G_M14922_IG08: ; bbWeight=0.04, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - mov rcx, rsp - call G_M14922_IG13 - ;; size=8 bbWeight=0.04 PerfScore 0.05 -G_M14922_IG09: ; bbWeight=0.04, nogc, extend - nop - ;; size=1 bbWeight=0.04 PerfScore 0.01 -G_M14922_IG10: ; bbWeight=0.04, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; GC ptr vars -{V00 V04} - mov eax, 1 - ;; size=5 bbWeight=0.04 PerfScore 0.01 -G_M14922_IG11: ; bbWeight=0.04, epilog, nogc, extend - add rsp, 40 - pop rbx - pop rbp - ret - ;; size=7 bbWeight=0.04 PerfScore 0.09 -G_M14922_IG12: ; bbWeight=0, gcVars=0000000000000010 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[rbx] - ; GC ptr vars +{V00 V04} - mov ecx, 6 - call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED - ; byrRegs +[rax] - ; gcr arg pop 0 - jmp SHORT G_M14922_IG04 - ;; size=12 bbWeight=0 PerfScore 0.00 -G_M14922_IG13: ; bbWeight=0.04, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc - ; gcrRegs -[rbx] - ; byrRegs -[rax] - push rbp - push rbx - sub rsp, 40 - mov rbp, qword ptr [rcx+0x20] - mov qword ptr [rsp+0x20], rbp - lea rbp, [rbp+0x30] - ;; size=19 bbWeight=0.04 PerfScore 0.24 -G_M14922_IG14: ; bbWeight=0.04, gcVars=0000000000000010 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M14922_IG08: ; bbWeight=0.04, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp byte ptr [rbp+0x20], 0
- je SHORT G_M14922_IG16 - ;; size=6 bbWeight=0.04 PerfScore 0.12 -G_M14922_IG15: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ je SHORT G_M14922_IG09
mov rcx, gword ptr [rbp+0x10] ; gcrRegs +[rcx] cmp byte ptr [rcx], cl @@ -153,18 +114,61 @@ G_M14922_IG15: ; bbWeight=0.00, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr call [System.Threading.PortableThreadPool:NotifyWorkItemProgress():this] ; gcrRegs -[rcx] ; gcr arg pop 0
- ;; size=25 bbWeight=0.00 PerfScore 0.02 -G_M14922_IG16: ; bbWeight=0.04, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - nop - ;; size=1 bbWeight=0.04 PerfScore 0.01 -G_M14922_IG17: ; bbWeight=0.04, funclet epilog, nogc, extend
+ ;; size=31 bbWeight=0.04 PerfScore 0.50 +G_M14922_IG09: ; bbWeight=0.04, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov eax, 1 + ;; size=5 bbWeight=0.04 PerfScore 0.01 +G_M14922_IG10: ; bbWeight=0.04, epilog, nogc, extend
add rsp, 40 pop rbx pop rbp ret ;; size=7 bbWeight=0.04 PerfScore 0.09
+G_M14922_IG11: ; bbWeight=0, gcVars=0000000000000010 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[rbx] + ; GC ptr vars +{V00 V04} + mov ecx, 6 + call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED + ; byrRegs +[rax] + ; gcr arg pop 0 + jmp SHORT G_M14922_IG04 + ;; size=12 bbWeight=0 PerfScore 0.00 +G_M14922_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc + ; gcrRegs -[rbx] + ; byrRegs -[rax] + push rbp + push rbx + sub rsp, 40 + mov rbp, qword ptr [rcx+0x20] + mov qword ptr [rsp+0x20], rbp + lea rbp, [rbp+0x30] + ;; size=19 bbWeight=0 PerfScore 0.00 +G_M14922_IG13: ; bbWeight=0, gcVars=0000000000000010 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz + cmp byte ptr [rbp+0x20], 0 + je SHORT G_M14922_IG14 + mov rcx, gword ptr [rbp+0x10] + ; gcrRegs +[rcx] + cmp byte ptr [rcx], cl + mov rcx, 0xD1FFAB1E ; const ptr + ; gcrRegs -[rcx] + mov rcx, gword ptr [rcx] + ; gcrRegs +[rcx] + ; GC ptr vars -{V00 V04} + call [System.Threading.PortableThreadPool:NotifyWorkItemProgress():this] + ; gcrRegs -[rcx] + ; gcr arg pop 0 + ;; size=31 bbWeight=0 PerfScore 0.00 +G_M14922_IG14: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + nop + ;; size=1 bbWeight=0 PerfScore 0.00 +G_M14922_IG15: ; bbWeight=0, funclet epilog, nogc, extend + add rsp, 40 + pop rbx + pop rbp + ret + ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 232, prolog size 26, PerfScore 41.08, instruction count 72, allocated bytes for code 232 (MethodHash=bbabc5b5) for method System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
+; Total bytes of code 254, prolog size 26, PerfScore 41.04, instruction count 76, allocated bytes for code 254 (MethodHash=bbabc5b5) for method System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
; ============================================================ Unwind Info: @@ -194,6 +198,5 @@ Unwind Info: CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5) *************** EH table for System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this
-1 EH table entries, 0 duplicate clauses, 1 cloned finallys, 2 total EH entries reported to VM -EH#0: try [G_M14922_IG07..G_M14922_IG08) handled by [G_M14922_IG13..END) (finally) -EH#1: try [G_M14922_IG08..G_M14922_IG08) handled by [G_M14922_IG08..G_M14922_IG10) (finally) cloned finally
+1 EH table entries, 0 duplicate clauses, 0 cloned finallys, 1 total EH entries reported to VM +EH#0: try [G_M14922_IG07..G_M14922_IG08) handled by [G_M14922_IG12..END) (fault)

+19 (+9.50%) : 249972.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)

@@ -11,99 +11,110 @@ ; ; V00 arg0 [V00,T00] ( 11, 7 ) ref -> rbx class-hnd single-def <System.Type> ; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T08] ( 3, 2 ) ref -> rax "guarded devirt return temp"
+; V02 tmp1 [V02,T07] ( 3, 2 ) ref -> rax "guarded devirt return temp"
;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "guarded devirt this exact temp" <System.RuntimeType>
-; V04 tmp3 [V04,T07] ( 4, 2 ) ubyte -> rdx "Inline return value spill temp" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V06 tmp5 [V06,T12] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -;* V07 tmp6 [V07 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> -; V08 tmp7 [V08,T09] ( 3, 2 ) int -> rbp -; V09 tmp8 [V09,T10] ( 2, 2 ) ubyte -> rdx "Inline stloc first use temp" -;* V10 tmp9 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> -;* V11 tmp10 [V11 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V12 tmp11 [V12,T03] ( 2, 4 ) byref -> rbp single-def "Inlining Arg" -;* V13 tmp12 [V13,T11] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V14 tmp13 [V14,T04] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V15 tmp14 [V15 ] ( 0, 0 ) long -> zero-ref "field V07.m_asTAddr (fldOffset=0x0)" P-INDEP -; V16 tmp15 [V16,T05] ( 3, 3 ) long -> rbp "field V10.m_asTAddr (fldOffset=0x0)" P-INDEP -; V17 cse0 [V17,T01] ( 3, 3 ) long -> rsi "CSE - aggressive" -; V18 cse1 [V18,T02] ( 3, 3 ) long -> rdi "CSE - aggressive" -; V19 cse2 [V19,T06] ( 3, 3 ) int -> rcx "CSE - moderate"
+; V04 tmp3 [V04,T06] ( 4, 2 ) ubyte -> rdx "Inline return value spill temp" +; V05 tmp4 [V05,T02] ( 4, 4 ) ref -> rsi class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType> +;* V06 tmp5 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline stloc first use temp" <System.Runtime.CompilerServices.TypeHandle> +; V07 tmp6 [V07,T08] ( 3, 2 ) int -> rdi +; V08 tmp7 [V08,T09] ( 2, 2 ) ubyte -> rdx "Inline stloc first use temp" +;* V09 tmp8 [V09 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.CompilerServices.TypeHandle> +;* V10 tmp9 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" +; V11 tmp10 [V11,T03] ( 2, 4 ) byref -> rdi single-def "Inlining Arg" +;* V12 tmp11 [V12,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V13 tmp12 [V13 ] ( 0, 0 ) long -> zero-ref "field V06.m_asTAddr (fldOffset=0x0)" P-INDEP +; V14 tmp13 [V14,T04] ( 3, 3 ) long -> rdi "field V09.m_asTAddr (fldOffset=0x0)" P-INDEP +; V15 cse0 [V15,T05] ( 3, 3 ) int -> rcx "CSE - aggressive" +; V16 rat0 [V16,T01] ( 5, 7.50) ref -> rsi class-hnd "replacement local" <System.RuntimeType>
;
-; Lcl frame size = 40
+; Lcl frame size = 32
G_M8853_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG push rdi push rsi
- push rbp
push rbx
- sub rsp, 40
+ sub rsp, 32
mov rbx, rcx ; gcrRegs +[rbx]
- ;; size=11 bbWeight=1 PerfScore 4.50
+ ;; size=10 bbWeight=1 PerfScore 3.50
G_M8853_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
- mov rsi, qword ptr [rbx] - mov rdi, 0xD1FFAB1E ; System.RuntimeType - cmp rsi, rdi - jne G_M8853_IG11 - mov rbp, qword ptr [rbx+0x18] - mov ecx, ebp
+ cmp byte ptr [rbx], bl + mov rsi, rbx + ; gcrRegs +[rsi] + test rsi, rsi + je SHORT G_M8853_IG05 + ;; size=10 bbWeight=1 PerfScore 4.50 +G_M8853_IG03: ; bbWeight=0.50, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz + mov rcx, 0xD1FFAB1E ; System.RuntimeType + cmp qword ptr [rsi], rcx + je SHORT G_M8853_IG05 + ;; size=15 bbWeight=0.50 PerfScore 2.12 +G_M8853_IG04: ; bbWeight=0.25, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + ; gcrRegs -[rsi] + xor rsi, rsi + ; gcrRegs +[rsi] + ;; size=2 bbWeight=0.25 PerfScore 0.06 +G_M8853_IG05: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz + test rsi, rsi + je G_M8853_IG14 + mov rdi, qword ptr [rsi+0x18] + mov ecx, edi
and ecx, 2
- jne SHORT G_M8853_IG10
+ jne SHORT G_M8853_IG13
test ecx, ecx sete cl movzx rcx, cl call [<unknown method>] ; gcr arg pop 0
- mov eax, dword ptr [rbp]
+ mov eax, dword ptr [rdi]
and eax, 0xD1FFAB1E
- xor ebp, ebp
+ xor edi, edi
cmp eax, 0xD1FFAB1E
- sete bpl - ;; size=66 bbWeight=1 PerfScore 15.25 -G_M8853_IG03: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - movzx rdx, bpl
+ sete dil + ;; size=52 bbWeight=1 PerfScore 13.00 +G_M8853_IG06: ; bbWeight=1, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz + movzx rdx, dil
test edx, edx
- jne SHORT G_M8853_IG12
+ jne SHORT G_M8853_IG15
;; size=8 bbWeight=1 PerfScore 1.50
-G_M8853_IG04: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG07: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rsi]
mov rax, 0xD1FFAB1E ; gcrRegs +[rax] cmp rbx, rax
- je SHORT G_M8853_IG07 - cmp rsi, rdi - jne SHORT G_M8853_IG09
+ je SHORT G_M8853_IG10 + mov rcx, 0xD1FFAB1E ; System.RuntimeType + cmp qword ptr [rbx], rcx + jne SHORT G_M8853_IG12
mov rcx, rbx ; gcrRegs +[rcx] call [<unknown method>] ; gcrRegs -[rcx rbx] ; gcr arg pop 0
- ;; size=29 bbWeight=1 PerfScore 6.00 -G_M8853_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
+ ;; size=39 bbWeight=1 PerfScore 9.00 +G_M8853_IG08: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop ;; size=1 bbWeight=1 PerfScore 0.25
-G_M8853_IG06: ; bbWeight=1, epilog, nogc, extend - add rsp, 40
+G_M8853_IG09: ; bbWeight=1, epilog, nogc, extend + add rsp, 32
pop rbx
- pop rbp
pop rsi pop rdi ret
- ;; size=9 bbWeight=1 PerfScore 3.25 -G_M8853_IG07: ; bbWeight=0.94, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=8 bbWeight=1 PerfScore 2.75 +G_M8853_IG10: ; bbWeight=0.94, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[rax] xor rax, rax ; gcrRegs +[rax] ;; size=2 bbWeight=0.94 PerfScore 0.23
-G_M8853_IG08: ; bbWeight=0.94, epilog, nogc, extend - add rsp, 40
+G_M8853_IG11: ; bbWeight=0.94, epilog, nogc, extend + add rsp, 32
pop rbx
- pop rbp
pop rsi pop rdi ret
- ;; size=9 bbWeight=0.94 PerfScore 3.05 -G_M8853_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=8 bbWeight=0.94 PerfScore 2.58 +G_M8853_IG12: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rax] +[rbx] mov rcx, rbx ; gcrRegs +[rcx] @@ -112,14 +123,15 @@ G_M8853_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {r call [rax+0x20]<unknown method> ; gcrRegs -[rcx rbx] +[rax] ; gcr arg pop 0
- jmp SHORT G_M8853_IG05
+ jmp SHORT G_M8853_IG08
;; size=18 bbWeight=0 PerfScore 0.00
-G_M8853_IG10: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax] +[rbx] - xor ebp, ebp - jmp SHORT G_M8853_IG03
+G_M8853_IG13: ; bbWeight=0, gcrefRegs=0048 {rbx rsi}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] +[rbx rsi] + xor edi, edi + jmp SHORT G_M8853_IG06
;; size=4 bbWeight=0 PerfScore 0.00
-G_M8853_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M8853_IG14: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rsi]
mov rcx, rbx ; gcrRegs +[rcx] mov rax, qword ptr [rbx] @@ -131,23 +143,22 @@ G_M8853_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byre test al, 32 setne dl test edx, edx
- je SHORT G_M8853_IG04
+ je SHORT G_M8853_IG07
;; size=24 bbWeight=0 PerfScore 0.00
-G_M8853_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M8853_IG15: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[rbx] mov rax, 0xD1FFAB1E ; gcrRegs +[rax] ;; size=10 bbWeight=0 PerfScore 0.00
-G_M8853_IG13: ; bbWeight=0, epilog, nogc, extend - add rsp, 40
+G_M8853_IG16: ; bbWeight=0, epilog, nogc, extend + add rsp, 32
pop rbx
- pop rbp
pop rsi pop rdi ret
- ;; size=9 bbWeight=0 PerfScore 0.00
+ ;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 200, prolog size 8, PerfScore 34.03, instruction count 70, allocated bytes for code 200 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
+; Total bytes of code 219, prolog size 7, PerfScore 39.50, instruction count 73, allocated bytes for code 219 (MethodHash=a7e7dd6a) for method System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
; ============================================================ Unwind Info: @@ -155,13 +166,12 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x08 - CountOfUnwindCodes: 5
+ SizeOfProlog : 0x07 + CountOfUnwindCodes: 4
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x08 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 4 * 8 + 8 = 40 = 0x28 - CodeOffset: 0x04 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3) - CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbp (5)
+ CodeOffset: 0x07 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20 + CodeOffset: 0x03 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
CodeOffset: 0x02 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6) CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rdi (7)

+13 (+11.21%) : 437670.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)

@@ -11,13 +11,11 @@ ; ; V00 this [V00,T02] ( 4, 3 ) ref -> rcx this class-hnd <OLEDB.Test.ModuleCore.CTestCase> ; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T03] ( 3, 4.50) ref -> rdx single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T06] ( 3, 2.50) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 7.50) ref -> rax class-hnd "spilling QMark2" <OLEDB.Test.ModuleCore.CTestModule> -; V05 tmp4 [V05,T07] ( 2, 0 ) ref -> rcx single-def "arg temp" -; V06 cse0 [V06,T05] ( 4, 3 ) ref -> rbx "CSE - aggressive" -; V07 rat0 [V07,T04] ( 3, 4 ) ref -> rdx "Spilling to split statement for tree" -; V08 rat1 [V08,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
+; V02 tmp1 [V02,T05] ( 2, 0 ) ref -> rcx single-def "arg temp" +; V03 cse0 [V03,T04] ( 5, 3 ) ref -> rbx "CSE - aggressive" +; V04 rat0 [V04,T03] ( 3, 4 ) ref -> rdx "Spilling to split statement for tree" +; V05 rat1 [V05,T00] ( 5, 7 ) ref -> r8 class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule> +; V06 rat2 [V06,T01] ( 5, 7 ) ref -> rax class-hnd "replacement local" <OLEDB.Test.ModuleCore.CTestModule>
; ; Lcl frame size = 32 @@ -31,45 +29,50 @@ G_M5100_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byre ; gcrRegs +[rbx] mov rdx, rbx ; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax
+ mov r8, rdx + ; gcrRegs +[r8] + test r8, r8
je SHORT G_M5100_IG05 ;; size=15 bbWeight=1 PerfScore 3.75
-G_M5100_IG03: ; bbWeight=0.50, gcrefRegs=000D {rax rdx rbx}, byrefRegs=0000 {}, byref, isz
+G_M5100_IG03: ; bbWeight=0.50, gcrefRegs=010C {rdx rbx r8}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rcx]
- mov rcx, 0xD1FFAB1E ; System.Xml.WrappedReaderTests.WrappedReaderTest - cmp qword ptr [rax], rcx
+ mov rax, 0xD1FFAB1E ; System.Xml.WrappedReaderTests.WrappedReaderTest + cmp qword ptr [r8], rax
je SHORT G_M5100_IG05 ;; size=15 bbWeight=0.50 PerfScore 2.12 G_M5100_IG04: ; bbWeight=0, gcrefRegs=000C {rdx rbx}, byrefRegs=0000 {}, byref
- ; gcrRegs -[rax]
+ ; gcrRegs -[r8]
mov rcx, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule call CORINFO_HELP_ISINSTANCEOFCLASS ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=15 bbWeight=0 PerfScore 0.00 -G_M5100_IG05: ; bbWeight=1, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref, isz - test rax, rax
+ mov r8, rax + ; gcrRegs +[r8] + ;; size=18 bbWeight=0 PerfScore 0.00 +G_M5100_IG05: ; bbWeight=1, gcrefRegs=0108 {rbx r8}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[rax] + test r8, r8
je SHORT G_M5100_IG10
- mov rdx, rbx - ; gcrRegs +[rdx] - mov rax, rdx
+ mov rax, rbx + ; gcrRegs +[rax]
test rax, rax je SHORT G_M5100_IG08
- ;; size=16 bbWeight=1 PerfScore 3.00 -G_M5100_IG06: ; bbWeight=0.50, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rbx] - mov rcx, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule - cmp qword ptr [rax], rcx
+ ;; size=13 bbWeight=1 PerfScore 2.75 +G_M5100_IG06: ; bbWeight=0.50, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref, isz + ; gcrRegs -[r8] + mov rdx, 0xD1FFAB1E ; System.Xml.WrappedReaderTests.WrappedReaderTest + cmp qword ptr [rax], rdx
je SHORT G_M5100_IG08 ;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M5100_IG07: ; bbWeight=0.25, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
+G_M5100_IG07: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
; gcrRegs -[rax]
- call CORINFO_HELP_CHKCASTCLASS_SPECIAL - ; gcrRegs -[rdx] +[rax]
+ mov rdx, rbx + ; gcrRegs +[rdx] + mov rcx, 0xD1FFAB1E ; OLEDB.Test.ModuleCore.CTestModule + call CORINFO_HELP_CHKCASTCLASS + ; gcrRegs -[rdx rbx] +[rax]
; gcr arg pop 0
- ;; size=5 bbWeight=0.25 PerfScore 0.25
+ ;; size=18 bbWeight=0 PerfScore 0.00
G_M5100_IG08: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref nop ;; size=1 bbWeight=1 PerfScore 0.25 @@ -91,7 +94,7 @@ G_M5100_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0008 {r jmp SHORT G_M5100_IG02 ;; size=23 bbWeight=0 PerfScore 0.00
-; Total bytes of code 116, prolog size 5, PerfScore 14.50, instruction count 31, allocated bytes for code 116 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
+; Total bytes of code 129, prolog size 5, PerfScore 14.00, instruction count 33, allocated bytes for code 129 (MethodHash=2222ec13) for method OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
; ============================================================ Unwind Info:

librariestestsnotieredcompilation.run.windows.x64.Release.mch

-13 (-32.50%) : 36946.dasm - LamarCodeGeneration.Util.TypeExtensions:AsSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,9 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rcx single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rdx class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rdx class-hnd single-def <System.Object>
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp2 [V04,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 40 @@ -19,34 +17,21 @@ G_M24927_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub rsp, 40 mov qword ptr [rsp+0x20], rcx ;; size=9 bbWeight=1 PerfScore 1.25
-G_M24927_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M24927_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M24927_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M24927_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rcx, qword ptr [rcx+0x38] mov rcx, qword ptr [rcx]
- cmp qword ptr [rax], rcx - je SHORT G_M24927_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M24927_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M24927_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M24927_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M24927_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 ret ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 40, prolog size 9, PerfScore 6.38, instruction count 13, allocated bytes for code 40 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 27, prolog size 9, PerfScore 7.75, instruction count 8, allocated bytes for code 27 (MethodHash=d8aa9ea0) for method LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info:

-13 (-32.50%) : 149770.dasm - System.Text.Json.JsonSerializer:UnboxOnWriteSystem.__Canon:System.__Canon (FullOpts)

@@ -7,12 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 4, 3.25) long -> rcx single-def -; V01 arg0 [V01,T02] ( 4, 3.12) ref -> rdx class-hnd single-def <System.Object>
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def +; V01 arg0 [V01,T01] ( 3, 3 ) ref -> rdx class-hnd single-def <System.Object>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.__Canon> ; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V04 tmp1 [V04,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp2 [V05,T00] ( 5, 6.75) ref -> rax class-hnd "spilling QMark2" <System.__Canon>
; ; Lcl frame size = 40 @@ -20,34 +18,21 @@ G_M8451_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, sub rsp, 40 mov qword ptr [rsp+0x20], rcx ;; size=9 bbWeight=1 PerfScore 1.25
-G_M8451_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M8451_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
; gcrRegs +[rdx]
- mov rax, rdx - ; gcrRegs +[rax] - test rax, rax - je SHORT G_M8451_IG05 - ;; size=8 bbWeight=1 PerfScore 1.50 -G_M8451_IG03: ; bbWeight=0.25, gcrefRegs=0005 {rax rdx}, byrefRegs=0000 {}, byref, isz
mov rcx, qword ptr [rcx+0x38] mov rcx, qword ptr [rcx]
- cmp qword ptr [rax], rcx - je SHORT G_M8451_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M8451_IG04: ; bbWeight=0.12, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0
- ;; size=5 bbWeight=0.12 PerfScore 0.12 -G_M8451_IG05: ; bbWeight=1, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref
nop
- ;; size=1 bbWeight=1 PerfScore 0.25 -G_M8451_IG06: ; bbWeight=1, epilog, nogc, extend
+ ;; size=13 bbWeight=1 PerfScore 5.25 +G_M8451_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 ret ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 40, prolog size 9, PerfScore 6.38, instruction count 13, allocated bytes for code 40 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
+; Total bytes of code 27, prolog size 9, PerfScore 7.75, instruction count 8, allocated bytes for code 27 (MethodHash=553cdefc) for method System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
; ============================================================ Unwind Info:

-25 (-30.49%) : 21731.dasm - Newtonsoft.Json.Linq.JToken:ToObjectSystem.__Canon:System.__Canon:this (FullOpts)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 3, 3 ) ref -> rsi this class-hnd single-def <Newtonsoft.Json.Linq.JToken> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> rbx single-def
+; V00 this [V00,T01] ( 3, 3 ) ref -> rbx this class-hnd single-def <Newtonsoft.Json.Linq.JToken> +; V01 TypeCtx [V01,T00] ( 4, 4 ) long -> rdx single-def
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> rdx single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> rsi "CSE - aggressive"
; ; Lcl frame size = 40 @@ -22,57 +21,38 @@ G_M31157_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 40 mov qword ptr [rsp+0x20], rdx
- mov rsi, rcx - ; gcrRegs +[rsi] - mov rbx, rdx - ;; size=17 bbWeight=1 PerfScore 3.75 -G_M31157_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ mov rbx, rcx + ; gcrRegs +[rbx] + ;; size=14 bbWeight=1 PerfScore 3.50 +G_M31157_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov rsi, qword ptr [rdx+0x38] + mov rcx, qword ptr [rsi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 mov rdx, rax ; gcrRegs +[rdx]
- mov rcx, rsi
+ mov rcx, rbx
; gcrRegs +[rcx] call [<unknown method>]
- ; gcrRegs -[rcx rdx rsi]
+ ; gcrRegs -[rcx rdx rbx]
; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M31157_IG05 - ;; size=32 bbWeight=1 PerfScore 10.00 -G_M31157_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M31157_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M31157_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rsi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M31157_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M31157_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=36 bbWeight=1 PerfScore 12.00 +G_M31157_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi ret ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 82, prolog size 11, PerfScore 18.44, instruction count 27, allocated bytes for code 82 (MethodHash=76ef864a) for method Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
+; Total bytes of code 57, prolog size 11, PerfScore 17.75, instruction count 19, allocated bytes for code 57 (MethodHash=76ef864a) for method Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info:

+30 (+60.00%) : 96476.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:b_220():this (FullOpts)

@@ -8,25 +8,24 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataColumnMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> rcx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> rcx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataColumnMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> rcx "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> rcx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataColumnMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> rcx "CSE - aggressive"
; ; Lcl frame size = 32
-G_M18245_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M18245_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbx sub rsp, 32 mov rbx, rcx ; gcrRegs +[rbx]
- ;; size=8 bbWeight=0 PerfScore 0.00 -G_M18245_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M18245_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
mov rcx, gword ptr [rbx+0x08] ; gcrRegs +[rcx] mov rdx, gword ptr [rbx+0x10] @@ -36,17 +35,25 @@ G_M18245_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr call [<unknown method>] ; gcrRegs -[rcx rdx] ; gcr arg pop 0
- mov rcx, gword ptr [rbx+0x08] - ; gcrRegs +[rcx] - cmp byte ptr [rcx], cl
+ mov rbx, gword ptr [rbx+0x08] + cmp byte ptr [rbx], bl
mov rcx, 0xD1FFAB1E
+ ; gcrRegs +[rcx]
call [System.Data.Common.DataColumnMappingCollection:ValidateType(System.Object)]
- ; gcrRegs -[rcx rbx]
+ ; gcrRegs -[rcx]
; gcr arg pop 0
- int3 - ;; size=42 bbWeight=0 PerfScore 0.00
+ mov rdx, 0xD1FFAB1E + mov rcx, rbx + ; gcrRegs +[rcx] + mov rax, 0xD1FFAB1E ; code for System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + ;; size=64 bbWeight=1 PerfScore 19.25 +G_M18245_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 32 + pop rbx + tail.jmp [rax]System.Data.Common.DataColumnMappingCollection:Remove(System.Data.Common.DataColumnMapping):this + ;; size=8 bbWeight=1 PerfScore 2.75
-; Total bytes of code 50, prolog size 5, PerfScore 0.00, instruction count 13, allocated bytes for code 50 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
+; Total bytes of code 80, prolog size 5, PerfScore 23.50, instruction count 18, allocated bytes for code 80 (MethodHash=013fb8ba) for method System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
; ============================================================ Unwind Info:

+30 (+60.00%) : 98068.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:b_160():this (FullOpts)

@@ -8,25 +8,24 @@ ; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 2 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
+; V00 this [V00,T00] ( 5, 5 ) ref -> rbx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <<unknown class>> ; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 3, 0 ) ref -> rcx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -; V04 tmp2 [V04,T02] ( 2, 0 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> -; V05 tmp3 [V05,T03] ( 2, 0 ) ref -> rcx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V06 tmp4 [V06,T05] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V07 tmp5 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V08 cse0 [V08,T04] ( 2, 0 ) ref -> rcx "CSE - aggressive"
+; V03 tmp1 [V03,T01] ( 3, 6 ) ref -> rcx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMapping[]> +; V05 tmp3 [V05,T02] ( 3, 6 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V06 tmp4 [V06,T05] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V07 cse0 [V07,T04] ( 2, 2 ) ref -> rcx "CSE - aggressive"
; ; Lcl frame size = 32
-G_M51850_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M51850_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbx sub rsp, 32 mov rbx, rcx ; gcrRegs +[rbx]
- ;; size=8 bbWeight=0 PerfScore 0.00 -G_M51850_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M51850_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
mov rcx, gword ptr [rbx+0x08] ; gcrRegs +[rcx] mov rdx, gword ptr [rbx+0x10] @@ -36,17 +35,25 @@ G_M51850_IG02: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr call [<unknown method>] ; gcrRegs -[rcx rdx] ; gcr arg pop 0
- mov rcx, gword ptr [rbx+0x08] - ; gcrRegs +[rcx] - cmp byte ptr [rcx], cl
+ mov rbx, gword ptr [rbx+0x08] + cmp byte ptr [rbx], bl
mov rcx, 0xD1FFAB1E
+ ; gcrRegs +[rcx]
call [System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)]
- ; gcrRegs -[rcx rbx]
+ ; gcrRegs -[rcx]
; gcr arg pop 0
- int3 - ;; size=42 bbWeight=0 PerfScore 0.00
+ mov rdx, 0xD1FFAB1E + mov rcx, rbx + ; gcrRegs +[rcx] + mov rax, 0xD1FFAB1E ; code for System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + ;; size=64 bbWeight=1 PerfScore 19.25 +G_M51850_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 32 + pop rbx + tail.jmp [rax]System.Data.Common.DataTableMappingCollection:Remove(System.Data.Common.DataTableMapping):this + ;; size=8 bbWeight=1 PerfScore 2.75
-; Total bytes of code 50, prolog size 5, PerfScore 0.00, instruction count 13, allocated bytes for code 50 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
+; Total bytes of code 80, prolog size 5, PerfScore 23.50, instruction count 18, allocated bytes for code 80 (MethodHash=872f3575) for method System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
; ============================================================ Unwind Info:

+33 (+122.22%) : 98181.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>cDisplayClass7_0:b2():this (FullOpts)

@@ -8,31 +8,40 @@ ; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 3, 2 ) ref -> rcx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
+; V00 this [V00,T01] ( 3, 3 ) ref -> rcx this class-hnd single-def <System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0>
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T01] ( 2, 0 ) ref -> rcx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> -;* V03 tmp2 [V03 ] ( 0, 0 ) ref -> zero-ref single-def "CASTCLASS eval op1" -;* V04 tmp3 [V04,T03] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V05 tmp4 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "spilling QMark2" <System.Data.Common.DataTableMapping> -; V06 cse0 [V06,T02] ( 2, 0 ) ref -> rcx "CSE - aggressive"
+; V02 tmp1 [V02,T00] ( 3, 6 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Data.Common.DataTableMappingCollection> +;* V03 tmp2 [V03,T03] ( 0, 0 ) ref -> zero-ref single-def "argument with side effect" +; V04 cse0 [V04,T02] ( 2, 2 ) ref -> rcx "CSE - aggressive"
;
-; Lcl frame size = 40
+; Lcl frame size = 32
-G_M51219_IG01: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG - sub rsp, 40 - ;; size=4 bbWeight=0 PerfScore 0.00 -G_M51219_IG02: ; bbWeight=0, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref
+G_M51219_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG + push rbx + sub rsp, 32 + ;; size=5 bbWeight=1 PerfScore 1.25 +G_M51219_IG02: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref
; gcrRegs +[rcx]
- mov rcx, gword ptr [rcx+0x08] - cmp byte ptr [rcx], cl
+ mov rbx, gword ptr [rcx+0x08] + ; gcrRegs +[rbx] + cmp byte ptr [rbx], bl
mov rcx, 0xD1FFAB1E call [System.Data.Common.DataTableMappingCollection:ValidateType(System.Object)] ; gcrRegs -[rcx] ; gcr arg pop 0
- int3 - ;; size=23 bbWeight=0 PerfScore 0.00
+ mov r8, 0xD1FFAB1E + mov rcx, rbx + ; gcrRegs +[rcx] + xor edx, edx + mov rax, 0xD1FFAB1E ; code for System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + ;; size=47 bbWeight=1 PerfScore 9.25 +G_M51219_IG03: ; bbWeight=1, epilog, nogc, extend + add rsp, 32 + pop rbx + tail.jmp [rax]System.Data.Common.DataTableMappingCollection:Insert(int,System.Data.Common.DataTableMapping):this + ;; size=8 bbWeight=1 PerfScore 2.75
-; Total bytes of code 27, prolog size 4, PerfScore 0.00, instruction count 6, allocated bytes for code 27 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
+; Total bytes of code 60, prolog size 5, PerfScore 13.25, instruction count 13, allocated bytes for code 60 (MethodHash=20ef37ec) for method System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
; ============================================================ Unwind Info: @@ -40,9 +49,10 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x04 - CountOfUnwindCodes: 1
+ SizeOfProlog : 0x05 + CountOfUnwindCodes: 2
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x04 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 4 * 8 + 8 = 40 = 0x28
+ CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20 + CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)

realworld.run.windows.x64.checked.mch

-25 (-33.78%) : 677.dasm - System.Activator:CreateInstanceSystem.__Canon:System.__Canon (FullOpts)

@@ -7,11 +7,10 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 TypeCtx [V00,T01] ( 5, 4.25) long -> rbx single-def
+; V00 TypeCtx [V00,T00] ( 4, 4 ) long -> rcx single-def
; V01 OutArgs [V01 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 tmp1 [V02,T02] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V03 tmp2 [V03,T03] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V04 tmp3 [V04,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon>
+; V02 tmp1 [V02,T01] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V03 cse0 [V03,T02] ( 3, 3 ) long -> rbx "CSE - aggressive"
; ; Lcl frame size = 48 @@ -19,11 +18,10 @@ G_M13946_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 48 mov qword ptr [rsp+0x28], rcx
- mov rbx, rcx - ;; size=13 bbWeight=1 PerfScore 2.50 -G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ ;; size=10 bbWeight=1 PerfScore 2.25 +G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov rbx, qword ptr [rcx+0x38] + mov rcx, qword ptr [rbx]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 @@ -32,39 +30,21 @@ G_M13946_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, call [<unknown method>] ; gcrRegs -[rcx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M13946_IG05 - ;; size=29 bbWeight=1 PerfScore 9.75 -G_M13946_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M13946_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M13946_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rbx]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M13946_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M13946_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=33 bbWeight=1 PerfScore 11.75 +G_M13946_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 48 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-; Total bytes of code 74, prolog size 10, PerfScore 16.44, instruction count 23, allocated bytes for code 74 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
+; Total bytes of code 49, prolog size 10, PerfScore 15.75, instruction count 15, allocated bytes for code 49 (MethodHash=5c26c985) for method System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
; ============================================================ Unwind Info:

-41 (-30.15%) : 8530.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1int

@@ -8,17 +8,13 @@ ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T00] ( 9, 23.50) ref -> rbx class-hnd <FSharp.Compiler.TypedTree+DecisionTree>
+; V00 arg0 [V00,T00] ( 7, 22.50) ref -> rbx class-hnd <FSharp.Compiler.TypedTree+DecisionTree>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd <FSharp.Compiler.TypedTree+DecisionTree> ;* V02 loc1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ;* V03 loc2 [V03 ] ( 0, 0 ) ref -> zero-ref class-hnd <<unknown class>> ; V04 OutArgs [V04 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T05] ( 2, 2 ) long -> rax "fgMakeTemp is creating a new local variable" -; V06 tmp2 [V06,T03] ( 5, 5 ) ref -> rcx class-hnd "spilling QMark2" <<unknown class>> -; V07 tmp3 [V07,T02] ( 2, 16 ) long -> rcx "fgMakeTemp is creating a new local variable" -; V08 tmp4 [V08,T01] ( 4, 25 ) ref -> rax class-hnd "spilling QMark2" <<unknown class>> -; V09 tmp5 [V09,T06] ( 2, 2 ) int -> rbx "Inlining Arg" -; V10 tmp6 [V10,T04] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[int]>
+; V05 tmp1 [V05,T02] ( 2, 2 ) int -> rbx "Inlining Arg" +; V06 tmp2 [V06,T01] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <Microsoft.FSharp.Core.FSharpOption`1[int]>
; ; Lcl frame size = 32 @@ -36,7 +32,7 @@ G_M51841_IG02: ; bbWeight=8, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 test rax, rax
- jne SHORT G_M51841_IG08
+ jne SHORT G_M51841_IG06
;; size=23 bbWeight=8 PerfScore 22.00 G_M51841_IG03: ; bbWeight=4, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rax] @@ -47,56 +43,37 @@ G_M51841_IG03: ; bbWeight=4, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 test rax, rax
- je SHORT G_M51841_IG06 - mov rax, rbx - mov rcx, 0xD1FFAB1E ; <unknown class> - cmp qword ptr [rax], rcx - je SHORT G_M51841_IG05 - ;; size=41 bbWeight=4 PerfScore 29.00 -G_M51841_IG04: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, rbx - ; gcrRegs +[rax] - ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M51841_IG05: ; bbWeight=4, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rbx] - mov rbx, gword ptr [rax+0x10] - ; gcrRegs +[rbx]
+ je SHORT G_M51841_IG04 + mov rbx, gword ptr [rbx+0x10]
jmp SHORT G_M51841_IG02
- ;; size=6 bbWeight=4 PerfScore 16.00 -G_M51841_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ;; size=29 bbWeight=4 PerfScore 27.00 +G_M51841_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; gcrRegs -[rax rbx] xor rax, rax ; gcrRegs +[rax] ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M51841_IG05: ; bbWeight=0.50, epilog, nogc, extend + add rsp, 32 + pop rbx + ret + ;; size=6 bbWeight=0.50 PerfScore 0.88 +G_M51841_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs -[rax] +[rbx] + mov ebx, dword ptr [rbx+0x10] + ; gcrRegs -[rbx] + mov rcx, 0xD1FFAB1E ; Microsoft.FSharp.Core.FSharpOption`1[int] + call CORINFO_HELP_NEWSFAST + ; gcrRegs +[rax] + ; gcr arg pop 0 + mov dword ptr [rax+0x08], ebx + ;; size=21 bbWeight=0.50 PerfScore 2.12
G_M51841_IG07: ; bbWeight=0.50, epilog, nogc, extend add rsp, 32 pop rbx ret ;; size=6 bbWeight=0.50 PerfScore 0.88
-G_M51841_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[rax] +[rbx] - mov rcx, rbx - ; gcrRegs +[rcx] - mov rax, 0xD1FFAB1E ; <unknown class> - cmp qword ptr [rcx], rax - cmovne rcx, rbx - mov ebx, dword ptr [rcx+0x10] - ; gcrRegs -[rbx] - mov rcx, 0xD1FFAB1E ; Microsoft.FSharp.Core.FSharpOption`1[int] - ; gcrRegs -[rcx] - call CORINFO_HELP_NEWSFAST - ; gcrRegs +[rax] - ; gcr arg pop 0 - mov dword ptr [rax+0x08], ebx - ;; size=41 bbWeight=0.50 PerfScore 4.00 -G_M51841_IG09: ; bbWeight=0.50, epilog, nogc, extend - add rsp, 32 - pop rbx - ret - ;; size=6 bbWeight=0.50 PerfScore 0.88
-; Total bytes of code 136, prolog size 8, PerfScore 85.00, instruction count 35, allocated bytes for code 136 (MethodHash=562a357e) for method FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
+; Total bytes of code 95, prolog size 8, PerfScore 65.00, instruction count 26, allocated bytes for code 95 (MethodHash=562a357e) for method FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
; ============================================================ Unwind Info:

-25 (-29.07%) : 21524.dasm - System.Reflection.MethodInfo:CreateDelegateSystem.__Canon:System.__Canon:this (FullOpts)

@@ -7,13 +7,12 @@ ; No matching PGO data ; Final local variable assignments ;
-; V00 this [V00,T02] ( 4, 4 ) ref -> rsi this class-hnd single-def <System.Reflection.MethodInfo> -; V01 TypeCtx [V01,T01] ( 5, 4.25) long -> rbx single-def
+; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Reflection.MethodInfo> +; V01 TypeCtx [V01,T01] ( 4, 4 ) long -> rdx single-def
; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 4.25) ref -> rax single-def "CASTCLASS eval op1" -; V04 tmp2 [V04,T05] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V05 tmp3 [V05,T00] ( 5, 6.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V06 tmp4 [V06,T04] ( 2, 4 ) ref -> rdx single-def "argument with side effect"
+; V03 tmp1 [V03,T02] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V04 tmp2 [V04,T03] ( 2, 4 ) ref -> rdx single-def "argument with side effect" +; V05 cse0 [V05,T04] ( 3, 3 ) long -> rsi "CSE - aggressive"
; ; Lcl frame size = 40 @@ -22,60 +21,41 @@ G_M60617_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbx sub rsp, 40 mov qword ptr [rsp+0x20], rdx
- mov rsi, rcx - ; gcrRegs +[rsi] - mov rbx, rdx - ;; size=17 bbWeight=1 PerfScore 3.75 -G_M60617_IG02: ; bbWeight=1, gcrefRegs=0040 {rsi}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx]
+ mov rbx, rcx + ; gcrRegs +[rbx] + ;; size=14 bbWeight=1 PerfScore 3.50 +G_M60617_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov rsi, qword ptr [rdx+0x38] + mov rcx, qword ptr [rsi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE ; gcrRegs +[rax] ; gcr arg pop 0 mov rdx, rax ; gcrRegs +[rdx]
- mov rcx, rsi
+ mov rcx, rbx
; gcrRegs +[rcx]
- mov rax, qword ptr [rsi]
+ mov rax, qword ptr [rbx]
; gcrRegs -[rax] mov rax, qword ptr [rax+0x70] call [rax+0x10]<unknown method>
- ; gcrRegs -[rcx rdx rsi] +[rax]
+ ; gcrRegs -[rcx rdx rbx] +[rax]
; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M60617_IG05 - ;; size=36 bbWeight=1 PerfScore 14.00 -G_M60617_IG03: ; bbWeight=0.25, gcrefRegs=0101 {rax r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx+0x38] - mov rcx, qword ptr [rcx] - cmp qword ptr [r8], rcx - je SHORT G_M60617_IG05 - ;; size=12 bbWeight=0.25 PerfScore 2.00 -G_M60617_IG04: ; bbWeight=0.12, gcrefRegs=0001 {rax}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, qword ptr [rsi]
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M60617_IG05: ; bbWeight=1, gcrefRegs=0100 {r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=1 PerfScore 0.25 -G_M60617_IG06: ; bbWeight=1, epilog, nogc, extend
+ nop + ;; size=40 bbWeight=1 PerfScore 16.00 +G_M60617_IG03: ; bbWeight=1, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi ret ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 86, prolog size 11, PerfScore 22.44, instruction count 29, allocated bytes for code 86 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
+; Total bytes of code 61, prolog size 11, PerfScore 21.75, instruction count 21, allocated bytes for code 61 (MethodHash=a5831336) for method System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
; ============================================================ Unwind Info:

+0 (0.00%) : 34587.dasm - System.Management.Automation.Interpreter.ScriptingRuntimeHelpers:GetPrimitiveDefaultValue(System.Type):System.Object (FullOpts)

@@ -25,24 +25,19 @@ ; V14 tmp11 [V14,T13] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <<unknown class>> ; V15 tmp12 [V15,T14] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <<unknown class>> ; V16 tmp13 [V16,T16] ( 3, 2 ) int -> rbx "Inline return value spill temp"
-;* V17 tmp14 [V17 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V18 tmp15 [V18 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V19 tmp16 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V20 tmp17 [V20 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V21 tmp18 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V23 tmp20 [V23 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V24 tmp21 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V25 tmp22 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> -;* V26 tmp23 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> -;* V27 tmp24 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> -; V28 tmp25 [V28,T15] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <<unknown class>> -; V29 tmp26 [V29,T00] ( 15, 15 ) ref -> rax "Single return block return value" -;* V30 tmp27 [V30,T17] ( 0, 0 ) long -> zero-ref single-def "field V02._dateData (fldOffset=0x0)" P-INDEP -;* V31 tmp28 [V31 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V32 tmp29 [V32 ] ( 0, 0 ) ref -> zero-ref "arr expr" -;* V33 tmp30 [V33 ] ( 0, 0 ) int -> zero-ref "index expr" -; V34 rat0 [V34,T02] ( 3, 6 ) int -> rbx "ReplaceWithLclVar is creating a new local variable"
+;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V18 tmp15 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V19 tmp16 [V19 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V20 tmp17 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType> +;* V21 tmp18 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <<unknown class>> +;* V22 tmp19 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType> +; V23 tmp20 [V23,T15] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <<unknown class>> +; V24 tmp21 [V24,T00] ( 15, 15 ) ref -> rax "Single return block return value" +;* V25 tmp22 [V25 ] ( 0, 0 ) long -> zero-ref single-def "field V02._dateData (fldOffset=0x0)" P-INDEP +;* V26 tmp23 [V26 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V27 tmp24 [V27 ] ( 0, 0 ) ref -> zero-ref "arr expr" +;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "index expr" +; V29 rat0 [V29,T02] ( 3, 6 ) int -> rbx "ReplaceWithLclVar is creating a new local variable"
; ; Lcl frame size = 32

+0 (0.00%) : 36444.dasm - System.Management.Automation.Language.PSInvokeMemberBinder:InvokeDotNetMethod(System.Dynamic.CallInfo,System.String,System.Management.Automation.PSMethodInvocationConstraints,int,System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],System.Dynamic.BindingRestrictions,System.Management.Automation.MethodInformation[],System.Type):System.Dynamic.DynamicMetaObject (FullOpts)

@@ -13,8 +13,8 @@ ; V02 arg2 [V02,T15] ( 3, 3 ) ref -> r14 class-hnd single-def <System.Management.Automation.PSMethodInvocationConstraints> ; V03 arg3 [V03,T03] ( 8, 7.50) int -> rbx ; V04 arg4 [V04,T72] ( 1, 0.50) ref -> [rbp+0x30] class-hnd single-def <System.Dynamic.DynamicMetaObject>
-; V05 arg5 [V05,T06] ( 8, 7.54) ref -> rsi class-hnd single-def <System.Dynamic.DynamicMetaObject[]> -; V06 arg6 [V06,T38] ( 4, 2 ) ref -> r13 class-hnd single-def <System.Dynamic.BindingRestrictions>
+; V05 arg5 [V05,T05] ( 8, 7.54) ref -> rsi class-hnd single-def <System.Dynamic.DynamicMetaObject[]> +; V06 arg6 [V06,T39] ( 4, 2 ) ref -> r13 class-hnd single-def <System.Dynamic.BindingRestrictions>
; V07 arg7 [V07,T68] ( 1, 1 ) ref -> [rbp+0x48] class-hnd single-def <System.Management.Automation.MethodInformation[]> ; V08 arg8 [V08,T66] ( 2, 1 ) ref -> [rbp+0x50] class-hnd single-def <System.Type> ; V09 loc0 [V09 ] ( 2, 1.50) ubyte -> [rbp-0x40] do-not-enreg[X] must-init addr-exposed ld-addr-op @@ -23,19 +23,19 @@ ; V12 loc3 [V12 ] ( 2, 1.50) ref -> [rbp-0x58] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.String> ; V13 loc4 [V13,T01] ( 9, 11 ) int -> r12 ; V14 loc5 [V14,T10] ( 4, 6 ) ref -> [rbp-0x78] class-hnd exact spill-single-def <System.Object[]>
-; V15 loc6 [V15,T37] ( 3, 2.50) ref -> rax class-hnd single-def <System.Management.Automation.MethodInformation>
+; V15 loc6 [V15,T38] ( 3, 2.50) ref -> rax class-hnd single-def <System.Management.Automation.MethodInformation>
; V16 loc7 [V16,T00] ( 12, 21.04) int -> [rbp-0x5C] ; V17 loc8 [V17,T02] ( 6, 10 ) ref -> r8 class-hnd <System.Object>
-; V18 loc9 [V18,T07] ( 12, 6 ) ref -> r15 class-hnd single-def <<unknown class>> -; V19 loc10 [V19,T04] ( 18, 9 ) ref -> rbx class-hnd <System.Linq.Expressions.Expression>
+; V18 loc9 [V18,T06] ( 12, 6 ) ref -> r15 class-hnd single-def <<unknown class>> +; V19 loc10 [V19,T07] ( 12, 6 ) ref -> rbx class-hnd <System.Linq.Expressions.Expression>
;* V20 loc11 [V20 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.String>
-; V21 loc12 [V21,T62] ( 3, 1.50) ref -> r14 class-hnd single-def <System.Linq.Expressions.ParameterExpression>
+; V21 loc12 [V21,T63] ( 3, 1.50) ref -> r14 class-hnd single-def <System.Linq.Expressions.ParameterExpression>
; V22 OutArgs [V22 ] ( 1, 1 ) struct (64) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V23 tmp1 [V23 ] ( 0, 0 ) ref -> zero-ref ;* V24 tmp2 [V24 ] ( 0, 0 ) int -> zero-ref ;* V25 tmp3 [V25 ] ( 0, 0 ) ref -> zero-ref ;* V26 tmp4 [V26 ] ( 0, 0 ) int -> zero-ref
-; V27 tmp5 [V27,T05] ( 6, 8 ) ref -> r8
+; V27 tmp5 [V27,T04] ( 6, 8 ) ref -> r8
; V28 tmp6 [V28,T08] ( 6, 6 ) ref -> rbx class-hnd exact single-def "dup spill" <System.Type[]> ;* V29 tmp7 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType> ;* V30 tmp8 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType> @@ -44,15 +44,15 @@ ;* V33 tmp11 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.RuntimeType> ; V34 tmp12 [V34,T12] ( 5, 5 ) ref -> rsi class-hnd exact single-def "dup spill" <System.Object[]> ; V35 tmp13 [V35,T17] ( 4, 4 ) ref -> r14 class-hnd exact single-def "dup spill" <System.Object[]>
-; V36 tmp14 [V36,T25] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <<unknown class>> -; V37 tmp15 [V37,T26] ( 3, 3 ) ref -> rdi class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject>
+; V36 tmp14 [V36,T26] ( 3, 3 ) ref -> rax class-hnd exact single-def "Single-def Box Helper" <<unknown class>> +; V37 tmp15 [V37,T27] ( 3, 3 ) ref -> rdi class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject>
; V38 tmp16 [V38,T18] ( 4, 4 ) ref -> rax class-hnd single-def "dup spill" <System.Type> ;* V39 tmp17 [V39 ] ( 0, 0 ) ref -> zero-ref single-def
-; V40 tmp18 [V40,T63] ( 3, 1.50) ref -> r14 -; V41 tmp19 [V41,T36] ( 5, 2.50) ref -> r14 -; V42 tmp20 [V42,T42] ( 2, 2 ) ref -> r12 class-hnd exact single-def "impAppendStmt" <<unknown class>>
+; V40 tmp18 [V40,T64] ( 3, 1.50) ref -> r14 +; V41 tmp19 [V41,T37] ( 5, 2.50) ref -> r14 +; V42 tmp20 [V42,T43] ( 2, 2 ) ref -> r12 class-hnd exact single-def "impAppendStmt" <<unknown class>>
;* V43 tmp21 [V43 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.Linq.Expressions.ConstantExpression>
-; V44 tmp22 [V44,T43] ( 2, 2 ) ref -> r8 class-hnd single-def "dup spill" <<unknown class>>
+; V44 tmp22 [V44,T44] ( 2, 2 ) ref -> r8 class-hnd single-def "dup spill" <<unknown class>>
;* V45 tmp23 [V45 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.Linq.Expressions.ConstantExpression> ;* V46 tmp24 [V46 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType> ;* V47 tmp25 [V47 ] ( 0, 0 ) ref -> zero-ref single-def @@ -60,66 +60,62 @@ ;* V49 tmp27 [V49 ] ( 0, 0 ) ref -> zero-ref single-def ;* V50 tmp28 [V50 ] ( 0, 0 ) ref -> zero-ref single-def ;* V51 tmp29 [V51 ] ( 0, 0 ) ref -> zero-ref single-def
-; V52 tmp30 [V52,T39] ( 4, 2 ) ref -> r8 -; V53 tmp31 [V53,T22] ( 4, 3 ) ref -> rax single-def "spilling varStr"
+; V52 tmp30 [V52,T40] ( 4, 2 ) ref -> r8 +; V53 tmp31 [V53,T23] ( 4, 3 ) ref -> rax single-def "spilling varStr"
;* V54 tmp32 [V54,T69] ( 0, 0 ) int -> zero-ref "spilling unroll qmark"
-; V55 tmp33 [V55,T27] ( 3, 3 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> -; V56 tmp34 [V56,T23] ( 4, 3 ) ref -> rax single-def "spilling varStr"
+; V55 tmp33 [V55,T28] ( 3, 3 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> +; V56 tmp34 [V56,T24] ( 4, 3 ) ref -> rax single-def "spilling varStr"
;* V57 tmp35 [V57,T70] ( 0, 0 ) int -> zero-ref "spilling unroll qmark"
-; V58 tmp36 [V58,T28] ( 3, 3 ) ref -> r12 class-hnd exact single-def "dup spill" <System.Linq.Expressions.CatchBlock[]>
+; V58 tmp36 [V58,T29] ( 3, 3 ) ref -> r12 class-hnd exact single-def "dup spill" <System.Linq.Expressions.CatchBlock[]>
; V59 tmp37 [V59,T19] ( 4, 4 ) ref -> [rbp-0x80] class-hnd exact spill-single-def "dup spill" <System.Linq.Expressions.Expression[]>
-; V60 tmp38 [V60,T44] ( 2, 2 ) ref -> [rbp-0x88] class-hnd spill-single-def "impAppendStmt" <System.Type> -; V61 tmp39 [V61,T45] ( 2, 2 ) ref -> [rbp-0x90] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> -; V62 tmp40 [V62,T46] ( 2, 2 ) ref -> [rbp-0x98] class-hnd spill-single-def "non-inline candidate call" <System.Linq.Expressions.ConstantExpression>
+; V60 tmp38 [V60,T45] ( 2, 2 ) ref -> [rbp-0x88] class-hnd spill-single-def "impAppendStmt" <System.Type> +; V61 tmp39 [V61,T46] ( 2, 2 ) ref -> [rbp-0x90] class-hnd exact spill-single-def "impAppendStmt" <<unknown class>> +; V62 tmp40 [V62,T47] ( 2, 2 ) ref -> [rbp-0x98] class-hnd spill-single-def "non-inline candidate call" <System.Linq.Expressions.ConstantExpression>
;* V63 tmp41 [V63 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.Linq.Expressions.ConstantExpression> ;* V64 tmp42 [V64 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.Linq.Expressions.Expression>
-; V65 tmp43 [V65,T47] ( 2, 2 ) ref -> rax class-hnd single-def "Strict ordering of exceptions for Array store" <<unknown class>> -; V66 tmp44 [V66,T48] ( 2, 2 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.UnaryExpression> -; V67 tmp45 [V67,T49] ( 2, 2 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.CatchBlock> -; V68 tmp46 [V68,T29] ( 3, 3 ) ref -> rsi class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> -; V69 tmp47 [V69,T30] ( 3, 3 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> -; V70 tmp48 [V70,T24] ( 4, 3 ) ref -> rax single-def "spilling varStr"
+; V65 tmp43 [V65,T48] ( 2, 2 ) ref -> rax class-hnd single-def "Strict ordering of exceptions for Array store" <<unknown class>> +; V66 tmp44 [V66,T49] ( 2, 2 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.UnaryExpression> +; V67 tmp45 [V67,T50] ( 2, 2 ) ref -> rax class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Linq.Expressions.CatchBlock> +; V68 tmp46 [V68,T30] ( 3, 3 ) ref -> rsi class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> +; V69 tmp47 [V69,T31] ( 3, 3 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.Dynamic.DynamicMetaObject> +; V70 tmp48 [V70,T25] ( 4, 3 ) ref -> rax single-def "spilling varStr"
;* V71 tmp49 [V71,T71] ( 0, 0 ) int -> zero-ref "spilling unroll qmark" ; V72 tmp50 [V72,T13] ( 5, 5 ) ref -> rdi class-hnd exact single-def "NewObj constructor temp" <<unknown class>>
-; V73 tmp51 [V73,T31] ( 3, 3 ) ref -> [rbp-0xA0] class-hnd exact spill-single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> -; V74 tmp52 [V74,T32] ( 3, 3 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> -; V75 tmp53 [V75,T50] ( 2, 2 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <<unknown class>> -; V76 tmp54 [V76,T64] ( 3, 1.50) ref -> rbx class-hnd "Inline return value spill temp" <System.Linq.Expressions.Expression>
+; V73 tmp51 [V73,T32] ( 3, 3 ) ref -> [rbp-0xA0] class-hnd exact spill-single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> +; V74 tmp52 [V74,T33] ( 3, 3 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> +; V75 tmp53 [V75,T51] ( 2, 2 ) ref -> rdx class-hnd exact single-def "Inlining Arg" <<unknown class>> +; V76 tmp54 [V76,T21] ( 7, 3.50) ref -> rbx class-hnd "Inline return value spill temp" <System.Linq.Expressions.Expression>
; V77 tmp55 [V77,T09] ( 6, 6 ) ref -> r14 class-hnd single-def "Inlining Arg" <System.Linq.Expressions.Expression> ; V78 tmp56 [V78,T20] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <System.Type>
-; V79 tmp57 [V79,T40] ( 4, 2 ) int -> rbx "Inline return value spill temp" -;* V80 tmp58 [V80 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V81 tmp59 [V81 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V82 tmp60 [V82 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V83 tmp61 [V83 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" -;* V84 tmp62 [V84 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> -;* V85 tmp63 [V85 ] ( 0, 0 ) ref -> zero-ref "CASTCLASS eval op1" -;* V86 tmp64 [V86 ] ( 0, 0 ) long -> zero-ref "fgMakeTemp is creating a new local variable" -;* V87 tmp65 [V87 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.RuntimeType> -;* V88 tmp66 [V88 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.Assembly> -; V89 tmp67 [V89,T67] ( 2, 1 ) ubyte -> rax "Inline return value spill temp" -; V90 tmp68 [V90,T33] ( 3, 3 ) ref -> r14 class-hnd single-def "Inlining Arg" <System.Attribute[]> -; V91 tmp69 [V91 ] ( 2, 1 ) int -> [rbp-0x68] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" -;* V92 tmp70 [V92 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -;* V93 tmp71 [V93 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" -; V94 tmp72 [V94,T51] ( 2, 2 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.String> -; V95 tmp73 [V95,T34] ( 3, 3 ) ref -> [rbp-0xA8] class-hnd exact spill-single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> -;* V96 tmp74 [V96 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Type> -; V97 tmp75 [V97,T52] ( 2, 2 ) ref -> rdx single-def "argument with side effect" -; V98 tmp76 [V98,T53] ( 2, 2 ) ref -> rdx single-def "argument with side effect" -; V99 tmp77 [V99,T54] ( 2, 2 ) ref -> r9 single-def "argument with side effect" -; V100 tmp78 [V100,T55] ( 2, 2 ) ref -> rcx single-def "argument with side effect" -; V101 tmp79 [V101,T56] ( 2, 2 ) ref -> rcx single-def "arr expr" -; V102 tmp80 [V102,T35] ( 3, 3 ) ref -> rax single-def "argument with side effect" -; V103 tmp81 [V103,T57] ( 2, 2 ) ref -> rcx single-def "argument with side effect" -; V104 tmp82 [V104,T58] ( 2, 2 ) ref -> rsi single-def "argument with side effect" -; V105 tmp83 [V105,T59] ( 2, 2 ) ref -> rax single-def "argument with side effect" -; V106 tmp84 [V106,T60] ( 2, 2 ) ref -> rdx single-def "argument with side effect" -; V107 tmp85 [V107,T61] ( 2, 2 ) ref -> rdx single-def "argument with side effect" -; V108 cse0 [V108,T21] ( 7, 3.50) long -> rdi "CSE - moderate" -; V109 cse1 [V109,T41] ( 4, 2 ) long -> r12 "CSE - conservative" -; V110 cse2 [V110,T65] ( 3, 1.50) long -> [rbp-0x70] spill-single-def "CSE - conservative" -; V111 cse3 [V111,T11] ( 4, 5.04) ref -> [rbp-0xB0] hoist multi-def "CSE - moderate"
+; V79 tmp57 [V79,T41] ( 4, 2 ) int -> rbx "Inline return value spill temp" +;* V80 tmp58 [V80 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" +;* V81 tmp59 [V81 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.RuntimeType> +;* V82 tmp60 [V82 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.RuntimeType> +;* V83 tmp61 [V83 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Reflection.Assembly> +; V84 tmp62 [V84,T67] ( 2, 1 ) ubyte -> rax "Inline return value spill temp" +; V85 tmp63 [V85,T34] ( 3, 3 ) ref -> r14 class-hnd single-def "Inlining Arg" <System.Attribute[]> +; V86 tmp64 [V86 ] ( 2, 1 ) int -> [rbp-0x68] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" +;* V87 tmp65 [V87 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +;* V88 tmp66 [V88 ] ( 0, 0 ) ubyte -> zero-ref "Inline stloc first use temp" +; V89 tmp67 [V89,T52] ( 2, 2 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.String> +; V90 tmp68 [V90,T35] ( 3, 3 ) ref -> [rbp-0xA8] class-hnd exact spill-single-def "NewObj constructor temp" <System.Linq.Expressions.ConstantExpression> +;* V91 tmp69 [V91 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Type> +; V92 tmp70 [V92,T53] ( 2, 2 ) ref -> rdx single-def "argument with side effect" +; V93 tmp71 [V93,T54] ( 2, 2 ) ref -> rdx single-def "argument with side effect" +; V94 tmp72 [V94,T55] ( 2, 2 ) ref -> r9 single-def "argument with side effect" +; V95 tmp73 [V95,T56] ( 2, 2 ) ref -> rcx single-def "argument with side effect" +;* V96 tmp74 [V96 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" +; V97 tmp75 [V97,T57] ( 2, 2 ) ref -> rcx single-def "arr expr" +; V98 tmp76 [V98,T36] ( 3, 3 ) ref -> rax single-def "argument with side effect" +; V99 tmp77 [V99,T58] ( 2, 2 ) ref -> rcx single-def "argument with side effect" +; V100 tmp78 [V100,T59] ( 2, 2 ) ref -> rsi single-def "argument with side effect" +; V101 tmp79 [V101,T60] ( 2, 2 ) ref -> rax single-def "argument with side effect" +; V102 tmp80 [V102,T61] ( 2, 2 ) ref -> rdx single-def "argument with side effect" +; V103 tmp81 [V103,T62] ( 2, 2 ) ref -> rdx single-def "argument with side effect" +; V104 cse0 [V104,T22] ( 7, 3.50) long -> rdi "CSE - moderate" +; V105 cse1 [V105,T42] ( 4, 2 ) long -> r12 "CSE - conservative" +; V106 cse2 [V106,T65] ( 3, 1.50) long -> [rbp-0x70] spill-single-def "CSE - conservative" +; V107 cse3 [V107,T11] ( 4, 5.04) ref -> [rbp-0xB0] hoist multi-def "CSE - moderate"
; ; Lcl frame size = 184 @@ -171,9 +167,9 @@ G_M1658_IG02: ; bbWeight=1, gcrefRegs=E0C0 {rsi rdi r13 r14 r15}, byrefRe mov r8, gword ptr [rcx] ; gcrRegs +[r8] mov gword ptr [rbp-0xB0], r8
- ; GC ptr vars +{V111}
+ ; GC ptr vars +{V107}
;; size=71 bbWeight=1 PerfScore 14.25
-G_M1658_IG03: ; bbWeight=3.96, gcVars=00000000000000000000000000000C00 {V14 V111}, gcrefRegs=E0C0 {rsi rdi r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M1658_IG03: ; bbWeight=3.96, gcVars=00000000000000000000000000000C00 {V14 V107}, gcrefRegs=E0C0 {rsi rdi r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rax r8] mov dword ptr [rbp-0x5C], edx mov ecx, edx @@ -194,14 +190,14 @@ G_M1658_IG04: ; bbWeight=1.98, gcrefRegs=E1C0 {rsi rdi r8 r13 r14 r15}, b ;; size=2 bbWeight=1.98 PerfScore 3.96 G_M1658_IG05: ; bbWeight=0.50, gcVars=00000000000000000000000000000400 {V14}, gcrefRegs=E0C0 {rsi rdi r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref, isz ; gcrRegs -[r8]
- ; GC ptr vars -{V111}
+ ; GC ptr vars -{V107}
mov rax, gword ptr [rbp-0x78] ; gcrRegs +[rax] jmp SHORT G_M1658_IG14 ;; size=6 bbWeight=0.50 PerfScore 1.50
-G_M1658_IG06: ; bbWeight=1.98, gcVars=00000000000000000000000000000C00 {V14 V111}, gcrefRegs=E0C0 {rsi rdi r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref
+G_M1658_IG06: ; bbWeight=1.98, gcVars=00000000000000000000000000000C00 {V14 V107}, gcrefRegs=E0C0 {rsi rdi r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[rax]
- ; GC ptr vars +{V111}
+ ; GC ptr vars +{V107}
xor r8, r8 ; gcrRegs +[r8] ;; size=3 bbWeight=1.98 PerfScore 0.49 @@ -218,7 +214,7 @@ G_M1658_IG07: ; bbWeight=3.96, gcrefRegs=E1C0 {rsi rdi r8 r13 r14 r15}, b jl SHORT G_M1658_IG03 ;; size=28 bbWeight=3.96 PerfScore 30.69 G_M1658_IG08: ; bbWeight=1, gcVars=00000000000000000000000000000400 {V14}, gcrefRegs=E0C0 {rsi rdi r13 r14 r15}, byrefRegs=0000 {}, gcvars, byref, isz
- ; GC ptr vars -{V111}
+ ; GC ptr vars -{V107}
mov rax, gword ptr [rbp-0x78] ; gcrRegs +[rax] jmp SHORT G_M1658_IG14 @@ -757,7 +753,7 @@ G_M1658_IG38: ; bbWeight=0.50, gcrefRegs=A048 {rbx rsi r13 r15}, byrefReg mov rcx, 0xD1FFAB1E ; System.Linq.Expressions.ConstantExpression call CORINFO_HELP_NEWSFAST mov gword ptr [rbp-0xA8], rax
- ; GC ptr vars +{V95}
+ ; GC ptr vars +{V90}
lea rcx, bword ptr [rax+0x08] ; byrRegs +[rcx] mov rdx, rdi @@ -788,7 +784,7 @@ G_M1658_IG38: ; bbWeight=0.50, gcrefRegs=A048 {rbx rsi r13 r15}, byrefReg ; gcrRegs +[rdx] ;; size=250 bbWeight=0.50 PerfScore 23.75 G_M1658_IG39: ; bbWeight=0.50, extend
- ; GC ptr vars -{V61 V62 V95}
+ ; GC ptr vars -{V61 V62 V90}
call [<unknown method>] ; gcrRegs -[rcx rdx rsi r8-r9] mov rsi, gword ptr [rbp-0x80]

+22 (+6.09%) : 4755.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)

@@ -8,28 +8,27 @@ ; 0 inlinees with PGO data; 9 single block inlinees; 7 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T04] ( 3, 3 ) ref -> [rbp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> -; V01 arg1 [V01,T00] ( 13, 13 ) ref -> rbx class-hnd single-def <System.Threading.Tasks.Task> -; V02 arg2 [V02,T01] ( 4, 4 ) ubyte -> [rbp+0x20] EH-live single-def
+; V00 this [V00,T02] ( 4, 2.50) ref -> [rbp+0x10] this class-hnd EH-live single-def <System.Threading.Tasks.ThreadPoolTaskScheduler> +; V01 arg1 [V01,T00] ( 13, 7.50) ref -> rbx class-hnd single-def <System.Threading.Tasks.Task> +; V02 arg2 [V02,T01] ( 5, 3.50) ubyte -> [rbp+0x20] EH-live single-def
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
-; V05 tmp2 [V05,T06] ( 4, 4 ) ubyte -> rdx "Inline return value spill temp" -; V06 tmp3 [V06,T05] ( 4, 4 ) ref -> rdx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> -; V07 tmp4 [V07,T11] ( 3, 3 ) ubyte -> rdx "Inline return value spill temp" -; V08 tmp5 [V08,T08] ( 2, 4 ) byref -> rdx single-def "Inlining Arg"
+; V05 tmp2 [V05,T06] ( 4, 2 ) ubyte -> rdx "Inline return value spill temp" +; V06 tmp3 [V06,T05] ( 4, 2 ) ref -> rdx class-hnd exact single-def "Inline stloc first use temp" <<unknown class>> +; V07 tmp4 [V07,T11] ( 3, 1.50) ubyte -> rdx "Inline return value spill temp" +; V08 tmp5 [V08,T08] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Threading.CancellationTokenSource>
-; V10 tmp7 [V10,T12] ( 2, 2 ) int -> rdx "Inline stloc first use temp"
+; V10 tmp7 [V10,T12] ( 2, 1 ) int -> rdx "Inline stloc first use temp"
;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "dup spill" <System.Object> ;* V12 tmp9 [V12 ] ( 0, 0 ) ref -> zero-ref
-;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "spilling QMark2" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> -;* V15 tmp12 [V15 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V16 tmp13 [V16,T09] ( 2, 4 ) byref -> rdx single-def "argument with side effect" -; V17 PSPSym [V17,T13] ( 1, 1 ) long -> [rbp-0x10] do-not-enreg[V] "PSPSym" -; V18 cse0 [V18,T10] ( 3, 3 ) ref -> rdx "CSE - aggressive" -; V19 rat0 [V19,T07] ( 3, 4 ) byref -> rdx "TLS field access" -; V20 rat1 [V20,T02] ( 3, 6 ) long -> rdx "TLS access" -; V21 rat2 [V21,T03] ( 3, 6 ) long -> rdx "ThreadStaticBlockBase access"
+;* V13 tmp10 [V13 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Threading.ThreadInt64PersistentCounter+ThreadLocalNode> +;* V14 tmp11 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V15 tmp12 [V15,T09] ( 2, 2 ) byref -> rdx single-def "argument with side effect" +; V16 PSPSym [V16,T13] ( 1, 1 ) long -> [rbp-0x10] do-not-enreg[V] "PSPSym" +; V17 cse0 [V17,T10] ( 3, 1.50) ref -> rdx "CSE - moderate" +; V18 rat0 [V18,T07] ( 3, 2 ) byref -> rdx "TLS field access" +; V19 rat1 [V19,T03] ( 3, 3 ) long -> rdx "TLS access" +; V20 rat2 [V20,T04] ( 3, 3 ) long -> rdx "ThreadStaticBlockBase access"
; ; Lcl frame size = 40 @@ -45,9 +44,11 @@ G_M14922_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, mov rbx, rdx ; gcrRegs +[rbx] ;; size=26 bbWeight=1 PerfScore 6.00
-G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000004 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
test r8b, r8b
- je SHORT G_M14922_IG04
+ je SHORT G_M14922_IG05 + ;; size=5 bbWeight=1 PerfScore 1.25 +G_M14922_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
xor ecx, ecx test rbx, rbx setne cl @@ -59,23 +60,23 @@ G_M14922_IG02: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=000 ; gcrRegs -[rcx] ; gcr arg pop 0 test eax, eax
- jne SHORT G_M14922_IG04
+ jne SHORT G_M14922_IG05
xor eax, eax
- ;; size=34 bbWeight=1 PerfScore 10.50 -G_M14922_IG03: ; bbWeight=1, epilog, nogc, extend
+ ;; size=29 bbWeight=0.50 PerfScore 4.62 +G_M14922_IG04: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 40 pop rbx pop rbp ret
- ;; size=7 bbWeight=1 PerfScore 2.25 -G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=7 bbWeight=0.50 PerfScore 1.12 +G_M14922_IG05: ; bbWeight=0.50, gcVars=0000000000000004 {V00}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
or dword ptr [rbx+0x34], 0x20000 mov rdx, gword ptr [rbx+0x28] ; gcrRegs +[rdx] test rdx, rdx
- je SHORT G_M14922_IG08
+ je SHORT G_M14922_IG09
cmp dword ptr [rdx+0x38], 1
- je SHORT G_M14922_IG07
+ je SHORT G_M14922_IG08
add rdx, 64 ; gcrRegs -[rdx] ; byrRegs +[rdx] @@ -83,27 +84,27 @@ G_M14922_IG04: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=000 ; gcrRegs +[rdx] ; byrRegs -[rdx] test rdx, rdx
- je SHORT G_M14922_IG05
+ je SHORT G_M14922_IG06
cmp dword ptr [rdx+0x20], 0 setne dl ; gcrRegs -[rdx] movzx rdx, dl
- jmp SHORT G_M14922_IG06 - ;; size=46 bbWeight=1 PerfScore 20.00 -G_M14922_IG05: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ jmp SHORT G_M14922_IG07 + ;; size=46 bbWeight=0.50 PerfScore 10.00 +G_M14922_IG06: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
xor edx, edx
- ;; size=2 bbWeight=1 PerfScore 0.25 -G_M14922_IG06: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - jmp SHORT G_M14922_IG09 - ;; size=2 bbWeight=1 PerfScore 2.00 -G_M14922_IG07: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M14922_IG07: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M14922_IG10 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M14922_IG08: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
mov edx, 1
- jmp SHORT G_M14922_IG09 - ;; size=7 bbWeight=1 PerfScore 2.25 -G_M14922_IG08: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ jmp SHORT G_M14922_IG10 + ;; size=7 bbWeight=0.50 PerfScore 1.12 +G_M14922_IG09: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
xor edx, edx
- ;; size=2 bbWeight=1 PerfScore 0.25 -G_M14922_IG09: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M14922_IG10: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
test edx, edx sete dl movzx rdx, dl @@ -113,20 +114,20 @@ G_M14922_IG09: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr setne al movzx rax, al test edx, eax
- je SHORT G_M14922_IG12
+ je SHORT G_M14922_IG13
mov rdx, qword ptr GS:[0x0058] mov rdx, qword ptr [rdx] cmp dword ptr [rdx+0xD8], 11
- jl SHORT G_M14922_IG11
+ jl SHORT G_M14922_IG12
mov rdx, qword ptr [rdx+0xE0] mov rdx, qword ptr [rdx+0x58] test rdx, rdx
- je SHORT G_M14922_IG11
+ je SHORT G_M14922_IG12
mov rdx, bword ptr [rdx] ; byrRegs +[rdx] add rdx, 16
- ;; size=75 bbWeight=1 PerfScore 21.00 -G_M14922_IG10: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0004 {rdx}, byref, isz
+ ;; size=75 bbWeight=0.50 PerfScore 10.50 +G_M14922_IG11: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0004 {rdx}, byref, isz
add rdx, 104 mov rcx, rbx ; gcrRegs +[rcx] @@ -136,9 +137,9 @@ G_M14922_IG10: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0004 {rdx}, ; gcrRegs -[rcx rbx r8] ; byrRegs -[rdx] ; gcr arg pop 0
- jmp SHORT G_M14922_IG13 - ;; size=18 bbWeight=1 PerfScore 5.75 -G_M14922_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ jmp SHORT G_M14922_IG14 + ;; size=18 bbWeight=0.50 PerfScore 2.88 +G_M14922_IG12: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[rbx] mov ecx, 11 call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE_NOCTOR_OPTIMIZED @@ -146,21 +147,21 @@ G_M14922_IG11: ; bbWeight=0, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcr arg pop 0 mov rdx, rax ; byrRegs +[rdx]
- jmp SHORT G_M14922_IG10
+ jmp SHORT G_M14922_IG11
;; size=15 bbWeight=0 PerfScore 0.00
-G_M14922_IG12: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M14922_IG13: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
; byrRegs -[rax rdx] mov eax, dword ptr [rbx+0x34] and eax, 0xD1FFAB1E cmp eax, 0xD1FFAB1E
- je SHORT G_M14922_IG13
+ je SHORT G_M14922_IG14
lea rax, bword ptr [rbx+0x34] ; byrRegs +[rax] mov edx, dword ptr [rbx+0x34] or edx, 0xD1FFAB1E xchg dword ptr [rax], edx test edx, 0xD1FFAB1E
- jne SHORT G_M14922_IG13
+ jne SHORT G_M14922_IG14
mov rcx, rbx ; gcrRegs +[rcx] call [<unknown method>] @@ -168,36 +169,10 @@ G_M14922_IG12: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; byrRegs -[rax] ; gcr arg pop 0 nop
- ;; size=48 bbWeight=1 PerfScore 31.00 -G_M14922_IG13: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - mov rcx, rsp - call G_M14922_IG17 - ;; size=8 bbWeight=1 PerfScore 1.25 -G_M14922_IG14: ; bbWeight=1, nogc, extend - nop - ;; size=1 bbWeight=1 PerfScore 0.25 -G_M14922_IG15: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; GC ptr vars -{V00} - mov eax, 1 - ;; size=5 bbWeight=1 PerfScore 0.25 -G_M14922_IG16: ; bbWeight=1, epilog, nogc, extend - add rsp, 40 - pop rbx - pop rbp - ret - ;; size=7 bbWeight=1 PerfScore 2.25 -G_M14922_IG17: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, funclet prolog, nogc - push rbp - push rbx - sub rsp, 40 - mov rbp, qword ptr [rcx+0x20] - mov qword ptr [rsp+0x20], rbp - lea rbp, [rbp+0x30] - ;; size=19 bbWeight=1 PerfScore 5.75 -G_M14922_IG18: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz - ; GC ptr vars +{V00}
+ ;; size=48 bbWeight=0.50 PerfScore 15.50 +G_M14922_IG14: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp byte ptr [rbp+0x20], 0
- je SHORT G_M14922_IG19
+ je SHORT G_M14922_IG15
mov rcx, gword ptr [rbp+0x10] ; gcrRegs +[rcx] cmp byte ptr [rcx], cl @@ -209,18 +184,51 @@ G_M14922_IG18: ; bbWeight=1, gcVars=0000000000000010 {V00}, gcrefRegs=000 call [System.Threading.PortableThreadPool:NotifyWorkItemProgress():this] ; gcrRegs -[rcx] ; gcr arg pop 0
- ;; size=31 bbWeight=1 PerfScore 12.25 -G_M14922_IG19: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref - nop - ;; size=1 bbWeight=1 PerfScore 0.25 -G_M14922_IG20: ; bbWeight=1, funclet epilog, nogc, extend
+ ;; size=31 bbWeight=0.50 PerfScore 6.12 +G_M14922_IG15: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + mov eax, 1 + ;; size=5 bbWeight=0.50 PerfScore 0.12
...

smoke_tests.nativeaot.windows.x64.checked.mch

-15 (-11.54%) : 69.dasm - System.Linq.Expressions.Expression`1[System.Canon]:Compile(ubyte):System.Canon:this (FullOpts)

@@ -7,14 +7,13 @@ ; fully interruptible ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 3.25) ref -> rbx this class-hnd single-def <System.Linq.Expressions.Expression`1[System.__Canon]>
+; V00 this [V00,T00] ( 5, 3.50) ref -> rbx this class-hnd single-def <System.Linq.Expressions.Expression`1[System.__Canon]>
; V01 arg1 [V01,T01] ( 3, 3 ) ubyte -> rdx single-def ; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 3, 3 ) ref -> rsi class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.Interpreter.LightCompiler> -; V04 tmp2 [V04,T05] ( 3, 2.25) ref -> rax single-def "CASTCLASS eval op1" -; V05 tmp3 [V05,T06] ( 3, 1.25) long -> rcx "fgMakeTemp is creating a new local variable" -; V06 tmp4 [V06,T02] ( 5, 3.75) ref -> registers class-hnd "spilling QMark2" <System.__Canon> -; V07 tmp5 [V07,T04] ( 3, 3 ) ref -> rax class-hnd exact single-def "Inlining Arg" <System.Linq.Expressions.Interpreter.LightDelegateCreator>
+; V03 tmp1 [V03,T02] ( 3, 3 ) ref -> rsi class-hnd exact single-def "NewObj constructor temp" <System.Linq.Expressions.Interpreter.LightCompiler> +; V04 tmp2 [V04,T03] ( 3, 3 ) ref -> rax class-hnd exact single-def "Inlining Arg" <System.Linq.Expressions.Interpreter.LightDelegateCreator> +; V05 tmp3 [V05,T04] ( 2, 2 ) ref -> rdx single-def "argument with side effect" +; V06 tmp4 [V06,T05] ( 2, 2 ) long -> rsi "argument with side effect"
; ; Lcl frame size = 40 @@ -29,9 +28,9 @@ G_M37852_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 { G_M37852_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz movzx rcx, dl test cl, 1
- je SHORT G_M37852_IG08
+ je SHORT G_M37852_IG05
;; size=8 bbWeight=1 PerfScore 1.50
-G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
lea rcx, [(reloc)] ; System.Linq.Expressions.Interpreter.LightCompiler call CORINFO_HELP_NEWSFAST ; gcrRegs +[rax] @@ -51,6 +50,9 @@ G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, ; gcrRegs -[rcx rdx rsi] +[rax] ; gcr arg pop 0 cmp byte ptr [rax], al
+ mov rcx, qword ptr [rbx] + mov rcx, qword ptr [rcx+0x88] + mov rsi, qword ptr [rcx+0x08]
mov rcx, rax ; gcrRegs +[rcx] xor rdx, rdx @@ -58,45 +60,26 @@ G_M37852_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, call System.Linq.Expressions.Interpreter.LightDelegateCreator:CreateDelegate(System.Runtime.CompilerServices.IStrongBox[]):System.Delegate:this ; gcrRegs -[rcx rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - test r8, r8 - je SHORT G_M37852_IG06 - ;; size=54 bbWeight=0.50 PerfScore 5.25 -G_M37852_IG04: ; bbWeight=0.25, gcrefRegs=0109 {rax rbx r8}, byrefRegs=0000 {}, byref, isz - mov rcx, qword ptr [rbx] - mov rcx, qword ptr [rcx+0x88] - mov rcx, qword ptr [rcx+0x08] - cmp qword ptr [r8], rcx - je SHORT G_M37852_IG06 - ;; size=19 bbWeight=0.25 PerfScore 2.50 -G_M37852_IG05: ; bbWeight=0.12, gcrefRegs=0009 {rax rbx}, byrefRegs=0000 {}, byref - ; gcrRegs -[r8]
mov rdx, rax ; gcrRegs +[rdx]
+ mov rcx, rsi
call CORINFO_HELP_CHKCASTANY ; gcrRegs -[rdx] ; gcr arg pop 0
- mov r8, rax - ; gcrRegs +[r8] - ;; size=11 bbWeight=0.12 PerfScore 0.19 -G_M37852_IG06: ; bbWeight=0.50, gcrefRegs=0108 {rbx r8}, byrefRegs=0000 {}, byref - ; gcrRegs -[rax] - mov rax, r8 - ; gcrRegs +[rax] - ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M37852_IG07: ; bbWeight=0.50, epilog, nogc, extend
+ nop + ;; size=72 bbWeight=0.50 PerfScore 8.38 +G_M37852_IG04: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi ret ;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M37852_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[rax r8]
+G_M37852_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref + ; gcrRegs -[rax]
mov rcx, rbx ; gcrRegs +[rcx] ;; size=3 bbWeight=0.50 PerfScore 0.12
-G_M37852_IG09: ; bbWeight=0.50, epilog, nogc, extend
+G_M37852_IG06: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 40 pop rbx pop rsi @@ -104,7 +87,7 @@ G_M37852_IG09: ; bbWeight=0.50, epilog, nogc, extend ; gcr arg pop 0 ;; size=11 bbWeight=0.50 PerfScore 1.62
-; Total bytes of code 130, prolog size 14, PerfScore 15.94, instruction count 41, allocated bytes for code 130 (MethodHash=ab956c23) for method System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)
+; Total bytes of code 115, prolog size 14, PerfScore 16.25, instruction count 36, allocated bytes for code 115 (MethodHash=ab956c23) for method System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)
; ============================================================ Unwind Info:

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
benchmarks.run.windows.x64.checked.mch 92 77 11 4 -1,397 +87
benchmarks.run_pgo.windows.x64.checked.mch 390 384 6 0 -5,381 +124
benchmarks.run_tiered.windows.x64.checked.mch 33 25 7 1 -474 +47
coreclr_tests.run.windows.x64.checked.mch 190 155 17 18 -2,563 +458
libraries.crossgen2.windows.x64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.windows.x64.checked.mch 593 551 22 20 -11,502 +215
libraries_tests.run.windows.x64.Release.mch 1,267 1,151 100 16 -21,282 +1,643
librariestestsnotieredcompilation.run.windows.x64.Release.mch 754 699 32 23 -15,685 +861
realworld.run.windows.x64.checked.mch 155 144 1 10 -3,006 +22
smoke_tests.nativeaot.windows.x64.checked.mch 1 1 0 0 -15 +0
3,475 3,187 196 92 -61,305 +3,457

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
benchmarks.run.windows.x64.checked.mch 26,360 4 26,356 0 (0.00%) 1,723 (6.14%)
benchmarks.run_pgo.windows.x64.checked.mch 95,602 49,362 46,240 0 (0.00%) 4,385 (4.39%)
benchmarks.run_tiered.windows.x64.checked.mch 53,815 36,887 16,928 0 (0.00%) 590 (1.08%)
coreclr_tests.run.windows.x64.checked.mch 565,163 341,373 223,790 0 (0.00%) 9,227 (1.61%)
libraries.crossgen2.windows.x64.checked.mch 2,093 0 2,093 0 (0.00%) 0 (0.00%)
libraries.pmi.windows.x64.checked.mch 279,576 6 279,570 0 (0.00%) 29,393 (9.51%)
libraries_tests.run.windows.x64.Release.mch 645,558 481,881 163,677 0 (0.00%) 30,770 (4.55%)
librariestestsnotieredcompilation.run.windows.x64.Release.mch 277,927 21,924 256,003 0 (0.00%) 42,525 (13.27%)
realworld.run.windows.x64.checked.mch 31,929 3 31,926 0 (0.00%) 4,743 (12.93%)
smoke_tests.nativeaot.windows.x64.checked.mch 71 0 71 0 (0.00%) 0 (0.00%)
1,978,094 931,440 1,046,654 0 (0.00%) 123,356 (5.87%)

jit-analyze output

benchmarks.run.windows.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 7337049 (overridden on cmd)
Total bytes of diff: 7335739 (overridden on cmd)
Total bytes of delta: -1310 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          22 : 5451.dasm (6.09 % of base)
          14 : 9790.dasm (1.74 % of base)
          11 : 6773.dasm (2.66 % of base)
           7 : 7249.dasm (0.63 % of base)
           5 : 14494.dasm (5.00 % of base)
           5 : 15313.dasm (5.00 % of base)
           5 : 26829.dasm (5.00 % of base)
           5 : 9703.dasm (5.00 % of base)
           5 : 17037.dasm (5.00 % of base)
           5 : 27692.dasm (5.00 % of base)
           3 : 4242.dasm (0.43 % of base)

Top file improvements (bytes):
         -64 : 1679.dasm (-1.76 % of base)
         -57 : 9779.dasm (-2.02 % of base)
         -37 : 9403.dasm (-4.95 % of base)
         -36 : 18979.dasm (-5.74 % of base)
         -34 : 10736.dasm (-3.51 % of base)
         -34 : 10842.dasm (-11.56 % of base)
         -34 : 20228.dasm (-14.11 % of base)
         -29 : 17124.dasm (-3.35 % of base)
         -26 : 21429.dasm (-6.99 % of base)
         -26 : 675.dasm (-10.44 % of base)
         -26 : 9432.dasm (-7.85 % of base)
         -26 : 22731.dasm (-14.77 % of base)
         -25 : 4722.dasm (-29.07 % of base)
         -25 : 677.dasm (-33.78 % of base)
         -25 : 18065.dasm (-27.78 % of base)
         -25 : 2881.dasm (-12.44 % of base)
         -23 : 3746.dasm (-23.47 % of base)
         -23 : 10687.dasm (-3.75 % of base)
         -21 : 6397.dasm (-5.68 % of base)
         -21 : 9649.dasm (-2.24 % of base)

54 total files with Code Size differences (43 improved, 11 regressed), 4 unchanged.

Top method regressions (bytes):
          22 (6.09 % of base) : 5451.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)
          14 (1.74 % of base) : 9790.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:.ctor(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (FullOpts)
          11 (2.66 % of base) : 6773.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
           7 (0.63 % of base) : 7249.dasm - ProtoBuf.Internal.TypeHelper`1[System.__Canon]:.cctor() (FullOpts)
           5 (5.00 % of base) : 9703.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
           5 (5.00 % of base) : 27692.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
           5 (5.00 % of base) : 14494.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
           5 (5.00 % of base) : 15313.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
           5 (5.00 % of base) : 17037.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
           5 (5.00 % of base) : 26829.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
           3 (0.43 % of base) : 4242.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)

Top method improvements (bytes):
         -64 (-1.76 % of base) : 1679.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -57 (-2.02 % of base) : 9779.dasm - System.Text.Json.Serialization.JsonDictionaryConverter`3[System.__Canon,System.__Canon,System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -37 (-4.95 % of base) : 9403.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -36 (-5.74 % of base) : 18979.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -34 (-14.11 % of base) : 20228.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -34 (-3.51 % of base) : 10736.dasm - System.Xml.Serialization.FieldModel:.ctor(System.Reflection.MemberInfo,System.Type,System.Xml.Serialization.TypeDesc):this (FullOpts)
         -34 (-11.56 % of base) : 10842.dasm - System.Xml.Serialization.XmlSerializationWriterILGen:GenerateElement(System.Xml.Serialization.XmlMapping):System.String:this (FullOpts)
         -29 (-3.35 % of base) : 17124.dasm - System.Xml.XmlNode:AppendChild(System.Xml.XmlNode):System.Xml.XmlNode:this (FullOpts)
         -26 (-14.77 % of base) : 22731.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-10.44 % of base) : 675.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,System.Type,ubyte):System.Attribute[] (FullOpts)
         -26 (-6.99 % of base) : 21429.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -26 (-7.85 % of base) : 9432.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -25 (-27.78 % of base) : 18065.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -25 (-33.78 % of base) : 677.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -25 (-29.07 % of base) : 4722.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -25 (-12.44 % of base) : 2881.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (FullOpts)
         -23 (-23.47 % of base) : 3746.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -23 (-3.75 % of base) : 10687.dasm - System.Xml.Serialization.ContextAwareTables`1[System.__Canon]:GetOrCreateValue(System.Type,System.Func`2[System.__Canon,System.__Canon]):System.__Canon:this (FullOpts)
         -21 (-2.24 % of base) : 9649.dasm - Newtonsoft.Json.Utilities.ExpressionReflectionDelegateFactory:CreateSet[System.__Canon](System.Reflection.PropertyInfo):System.Action`2[System.__Canon,System.__Canon]:this (FullOpts)
         -21 (-5.68 % of base) : 6397.dasm - System.Collections.Sort`1[System.__Canon]:GenerateValues():System.__Canon[]:this (FullOpts)

Top method regressions (percentages):
          22 (6.09 % of base) : 5451.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)
           5 (5.00 % of base) : 9703.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (FullOpts)
           5 (5.00 % of base) : 27692.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (FullOpts)
           5 (5.00 % of base) : 14494.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (FullOpts)
           5 (5.00 % of base) : 15313.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (FullOpts)
           5 (5.00 % of base) : 17037.dasm - PerfLabTests.CastingPerf:IntObj():this (FullOpts)
           5 (5.00 % of base) : 26829.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (FullOpts)
          11 (2.66 % of base) : 6773.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (FullOpts)
          14 (1.74 % of base) : 9790.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:.ctor(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]],System.Collections.Generic.IComparer`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]):this (FullOpts)
           7 (0.63 % of base) : 7249.dasm - ProtoBuf.Internal.TypeHelper`1[System.__Canon]:.cctor() (FullOpts)
           3 (0.43 % of base) : 4242.dasm - System.Collections.Generic.SortedDictionary`2[System.__Canon,System.__Canon]:.ctor(System.Collections.Generic.IDictionary`2[System.__Canon,System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)

Top method improvements (percentages):
         -25 (-33.78 % of base) : 677.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
         -13 (-32.50 % of base) : 1241.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -25 (-29.07 % of base) : 4722.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -25 (-27.78 % of base) : 18065.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -18 (-26.47 % of base) : 11235.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (FullOpts)
         -13 (-25.00 % of base) : 4214.dasm - System.Collections.ContainsKeyTrue`2+<>c[System.__Canon,System.__Canon]:<Setup>b__10_1(System.__Canon):System.__Canon:this (FullOpts)
         -23 (-23.47 % of base) : 3746.dasm - Sigil.NonGeneric.Emit:CreateDelegate[System.__Canon](byref,int):System.__Canon:this (FullOpts)
         -13 (-19.12 % of base) : 2356.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -13 (-17.33 % of base) : 22131.dasm - System.Xml.Base64Decoder:SetNextOutputBuffer(System.Array,int,int):this (FullOpts)
         -15 (-16.48 % of base) : 19189.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -19 (-15.97 % of base) : 8372.dasm - System.Text.Json.Serialization.Converters.ListOfTConverter`2[System.__Canon,System.__Canon]:Add(byref,byref):this (FullOpts)
         -16 (-15.84 % of base) : 14149.dasm - System.Text.Json.Serialization.Converters.DictionaryOfTKeyTValueConverter`3[System.__Canon,int,System.__Canon]:Add(int,byref,System.Text.Json.JsonSerializerOptions,byref):this (FullOpts)
         -26 (-14.77 % of base) : 22731.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -13 (-14.29 % of base) : 16316.dasm - MicroBenchmarks.Serializers.Json_FromStream`1[System.__Canon]:DataContractJsonSerializer_():System.__Canon:this (FullOpts)
         -13 (-14.29 % of base) : 6008.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:DataContractSerializer_():System.__Canon:this (FullOpts)
         -13 (-14.29 % of base) : 13872.dasm - MicroBenchmarks.Serializers.Xml_FromStream`1[System.__Canon]:XmlSerializer_():System.__Canon:this (FullOpts)
         -34 (-14.11 % of base) : 20228.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -16 (-13.11 % of base) : 14468.dasm - System.Xml.Linq.XDocument:GetFirstNode[System.__Canon]():System.__Canon:this (FullOpts)
         -13 (-12.87 % of base) : 8181.dasm - System.Diagnostics.Tracing.Statics:GetCustomAttribute[System.__Canon](System.Type):System.__Canon (FullOpts)
         -14 (-12.84 % of base) : 9765.dasm - System.Text.Json.Serialization.Converters.IListConverter`1[System.__Canon]:Add(byref,byref):this (FullOpts)


benchmarks.run_pgo.windows.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 29905100 (overridden on cmd)
Total bytes of diff: 29899843 (overridden on cmd)
Total bytes of delta: -5257 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          30 : 29488.dasm (1.96 % of base)
          30 : 98146.dasm (1.86 % of base)
          18 : 68701.dasm (10.17 % of base)
          18 : 90618.dasm (10.23 % of base)
          14 : 66598.dasm (0.62 % of base)
          14 : 66599.dasm (0.65 % of base)

Top file improvements (bytes):
         -88 : 67944.dasm (-2.44 % of base)
         -33 : 71333.dasm (-7.19 % of base)
         -31 : 53787.dasm (-7.91 % of base)
         -31 : 21500.dasm (-7.91 % of base)
         -28 : 55098.dasm (-7.78 % of base)
         -28 : 72821.dasm (-7.78 % of base)
         -25 : 92093.dasm (-7.44 % of base)
         -25 : 3863.dasm (-33.78 % of base)
         -22 : 70005.dasm (-3.11 % of base)
         -20 : 32873.dasm (-3.15 % of base)
         -20 : 48000.dasm (-3.15 % of base)
         -20 : 81034.dasm (-3.15 % of base)
         -20 : 82278.dasm (-3.15 % of base)
         -20 : 92395.dasm (-3.15 % of base)
         -20 : 40397.dasm (-3.15 % of base)
         -20 : 69856.dasm (-10.42 % of base)
         -20 : 78842.dasm (-3.15 % of base)
         -20 : 80394.dasm (-3.15 % of base)
         -20 : 90938.dasm (-3.15 % of base)
         -20 : 63055.dasm (-8.97 % of base)

57 total files with Code Size differences (51 improved, 6 regressed), 0 unchanged.

Top method regressions (bytes):
          30 (1.96 % of base) : 29488.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          30 (1.86 % of base) : 98146.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          18 (10.17 % of base) : 68701.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          18 (10.23 % of base) : 90618.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          14 (0.65 % of base) : 66599.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
          14 (0.62 % of base) : 66598.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxNode,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)

Top method improvements (bytes):
         -88 (-2.44 % of base) : 67944.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -33 (-7.19 % of base) : 71333.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -31 (-7.91 % of base) : 53787.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -31 (-7.91 % of base) : 21500.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-7.78 % of base) : 55098.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-7.78 % of base) : 72821.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -25 (-33.78 % of base) : 3863.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -25 (-7.44 % of base) : 92093.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -22 (-3.11 % of base) : 70005.dasm - Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax:GetNodeSlot(int):Microsoft.CodeAnalysis.SyntaxNode:this (Tier1)
         -20 (-10.42 % of base) : 69856.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -20 (-8.97 % of base) : 63055.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -20 (-3.15 % of base) : 32873.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 48000.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 81034.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 82278.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 92395.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 40397.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 78842.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 80394.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -20 (-3.15 % of base) : 90938.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method regressions (percentages):
          18 (10.23 % of base) : 90618.dasm - PerfLabTests.CastingPerf2.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          18 (10.17 % of base) : 68701.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
          30 (1.96 % of base) : 29488.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          30 (1.86 % of base) : 98146.dasm - System.Reflection.Emit.DynamicMethod:Init(System.String,int,int,System.Type,System.Type[],System.Type,System.Reflection.Module,ubyte,ubyte):this (Tier1)
          14 (0.65 % of base) : 66599.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,byref,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)
          14 (0.62 % of base) : 66598.dasm - Microsoft.CodeAnalysis.CSharp.Binder:GetWellKnownTypeMember(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,Microsoft.CodeAnalysis.SyntaxNode,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol (Tier1)

Top method improvements (percentages):
         -25 (-33.78 % of base) : 3863.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -18 (-17.82 % of base) : 66750.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -13 (-10.83 % of base) : 70304.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -20 (-10.42 % of base) : 69856.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -20 (-8.97 % of base) : 63055.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -31 (-7.91 % of base) : 53787.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -31 (-7.91 % of base) : 21500.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -18 (-7.89 % of base) : 20713.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -28 (-7.78 % of base) : 55098.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -28 (-7.78 % of base) : 72821.dasm - System.Linq.EnumerableSorter`1[System.__Canon]:ComputeMap(System.__Canon[],int):int[]:this (Tier1)
         -25 (-7.44 % of base) : 92093.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -33 (-7.19 % of base) : 71333.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -12 (-6.03 % of base) : 67928.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
          -9 (-5.70 % of base) : 70894.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -19 (-5.07 % of base) : 70040.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -16 (-4.80 % of base) : 21523.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -16 (-4.80 % of base) : 53800.dasm - System.Linq.EnumerableSorter`2[System.__Canon,System.Decimal]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -16 (-4.05 % of base) : 69120.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.05 % of base) : 28821.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)
         -16 (-4.05 % of base) : 74547.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)


benchmarks.run_tiered.windows.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 12164630 (overridden on cmd)
Total bytes of diff: 12164203 (overridden on cmd)
Total bytes of delta: -427 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          11 : 51283.dasm (2.66 % of base)
           6 : 27399.dasm (4.65 % of base)
           6 : 29282.dasm (4.65 % of base)
           6 : 31613.dasm (4.65 % of base)
           6 : 52597.dasm (4.65 % of base)
           6 : 53538.dasm (4.65 % of base)
           6 : 22771.dasm (4.65 % of base)

Top file improvements (bytes):
         -34 : 44662.dasm (-14.11 % of base)
         -29 : 3690.dasm (-10.14 % of base)
         -26 : 3694.dasm (-10.44 % of base)
         -26 : 44241.dasm (-14.77 % of base)
         -25 : 20789.dasm (-29.07 % of base)
         -25 : 4029.dasm (-33.78 % of base)
         -25 : 46696.dasm (-12.44 % of base)
         -25 : 19101.dasm (-27.47 % of base)
         -20 : 44612.dasm (-10.42 % of base)
         -19 : 44231.dasm (-5.18 % of base)
         -18 : 42359.dasm (-17.82 % of base)
         -18 : 53240.dasm (-4.43 % of base)
         -18 : 9851.dasm (-7.93 % of base)
         -16 : 23800.dasm (-4.88 % of base)
         -16 : 44944.dasm (-10.67 % of base)
         -16 : 45366.dasm (-5.00 % of base)
         -14 : 26103.dasm (-2.99 % of base)
         -13 : 36760.dasm (-8.39 % of base)
         -13 : 42244.dasm (-2.52 % of base)
         -13 : 42647.dasm (-10.16 % of base)

32 total files with Code Size differences (25 improved, 7 regressed), 1 unchanged.

Top method regressions (bytes):
          11 (2.66 % of base) : 51283.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (Tier1)
           6 (4.65 % of base) : 22771.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier1-OSR)
           6 (4.65 % of base) : 53538.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
           6 (4.65 % of base) : 27399.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
           6 (4.65 % of base) : 29282.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
           6 (4.65 % of base) : 31613.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
           6 (4.65 % of base) : 52597.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)

Top method improvements (bytes):
         -34 (-14.11 % of base) : 44662.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -29 (-10.14 % of base) : 3690.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -26 (-14.77 % of base) : 44241.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -26 (-10.44 % of base) : 3694.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,System.Type,ubyte):System.Attribute[] (Tier1)
         -25 (-33.78 % of base) : 4029.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -25 (-27.47 % of base) : 19101.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -25 (-29.07 % of base) : 20789.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -25 (-12.44 % of base) : 46696.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -20 (-10.42 % of base) : 44612.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -19 (-5.18 % of base) : 44231.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -18 (-17.82 % of base) : 42359.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -18 (-7.93 % of base) : 9851.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -18 (-4.43 % of base) : 53240.dasm - System.Attribute:GetCustomAttributes(System.Reflection.ParameterInfo,System.Type,ubyte):System.Attribute[] (Tier1)
         -16 (-10.67 % of base) : 44944.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -16 (-5.00 % of base) : 45366.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -16 (-4.88 % of base) : 23800.dasm - System.Linq.EnumerableSorter`2[System.__Canon,int]:ComputeKeys(System.__Canon[],int):this (Tier1)
         -14 (-2.99 % of base) : 26103.dasm - System.Attribute:InternalGetCustomAttributes(System.Reflection.PropertyInfo,System.Type,ubyte):System.Attribute[] (Tier1)
         -13 (-11.02 % of base) : 44827.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -13 (-2.52 % of base) : 42244.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic]):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (Tier1)
         -13 (-8.39 % of base) : 36760.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)

Top method regressions (percentages):
           6 (4.65 % of base) : 22771.dasm - PerfLabTests.CastingPerf:FooObjIsDescendant():this (Tier1-OSR)
           6 (4.65 % of base) : 53538.dasm - PerfLabTests.CastingPerf:FooObjIsFoo2():this (Tier1-OSR)
           6 (4.65 % of base) : 27399.dasm - PerfLabTests.CastingPerf:IFooObjIsIFoo():this (Tier1-OSR)
           6 (4.65 % of base) : 29282.dasm - PerfLabTests.CastingPerf:IFooObjIsIFooInterAlia():this (Tier1-OSR)
           6 (4.65 % of base) : 31613.dasm - PerfLabTests.CastingPerf:IntObj():this (Tier1-OSR)
           6 (4.65 % of base) : 52597.dasm - PerfLabTests.CastingPerf:ObjObjIsFoo():this (Tier1-OSR)
          11 (2.66 % of base) : 51283.dasm - System.Threading.Tasks.ValueTask`1+ValueTaskSourceAsTask+<>c[System.__Canon]:<.cctor>b__4_0(System.Object):this (Tier1)

Top method improvements (percentages):
         -25 (-33.78 % of base) : 4029.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -25 (-29.07 % of base) : 20789.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (Tier1)
         -25 (-27.47 % of base) : 19101.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -18 (-17.82 % of base) : 42359.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (Tier1)
         -26 (-14.77 % of base) : 44241.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -34 (-14.11 % of base) : 44662.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -25 (-12.44 % of base) : 46696.dasm - System.Threading.AsyncLocal`1[System.__Canon]:System.Threading.IAsyncLocal.OnValueChanged(System.Object,System.Object,ubyte):this (Tier1)
         -13 (-11.02 % of base) : 44827.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SymbolExtensions:GetPublicSymbol[System.__Canon](Microsoft.CodeAnalysis.CSharp.Symbol):System.__Canon (Tier1)
         -16 (-10.67 % of base) : 44944.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -26 (-10.44 % of base) : 3694.dasm - System.Attribute:GetCustomAttributes(System.Reflection.Assembly,System.Type,ubyte):System.Attribute[] (Tier1)
         -20 (-10.42 % of base) : 44612.dasm - Microsoft.CodeAnalysis.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)
         -13 (-10.16 % of base) : 42647.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRedAtZero[System.__Canon](byref):System.__Canon:this (Tier1)
         -29 (-10.14 % of base) : 3690.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.Assembly):System.__Canon (Tier1)
         -13 (-9.42 % of base) : 19262.dasm - System.Text.Json.Reflection.ReflectionExtensions:GetUniqueCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -13 (-8.55 % of base) : 43766.dasm - PerfLabTests.CastingPerf:FooObjCastIfIsa():this (Tier1-OSR)
         -13 (-8.39 % of base) : 36760.dasm - Microsoft.CodeAnalysis.SyntaxNode:GetRed[System.__Canon](byref,int):System.__Canon:this (Tier1)
         -18 (-7.93 % of base) : 9851.dasm - ProtoBuf.ProtoReader+State:DeserializeRootImpl[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -19 (-5.18 % of base) : 44231.dasm - System.Linq.Enumerable+<OfTypeIterator>d__64`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -16 (-5.00 % of base) : 45366.dasm - System.Linq.Enumerable+<CastIterator>d__66`1[System.__Canon]:MoveNext():ubyte:this (Tier1)
         -16 (-4.88 % of base) : 23800.dasm - System.Linq.EnumerableSorter`2[System.__Canon,int]:ComputeKeys(System.__Canon[],int):this (Tier1)

32 total methods with Code Size differences (25 improved, 7 regressed).


coreclr_tests.run.windows.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 369258614 (overridden on cmd)
Total bytes of diff: 369256509 (overridden on cmd)
Total bytes of delta: -2105 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          78 : 229303.dasm (2.02 % of base)
          74 : 2966.dasm (1.21 % of base)
          74 : 2987.dasm (1.21 % of base)
          47 : 183577.dasm (335.71 % of base)
          31 : 568124.dasm (2.00 % of base)
          27 : 571046.dasm (1.63 % of base)
          26 : 456146.dasm (7.32 % of base)
          23 : 242966.dasm (2.68 % of base)
          19 : 281491.dasm (2.62 % of base)
          13 : 166326.dasm (1.74 % of base)
          13 : 168817.dasm (1.74 % of base)
          13 : 166653.dasm (1.74 % of base)
           7 : 244067.dasm (1.74 % of base)
           6 : 566925.dasm (0.53 % of base)
           3 : 281870.dasm (1.18 % of base)
           3 : 302611.dasm (0.72 % of base)
           1 : 437494.dasm (0.28 % of base)

Top file improvements (bytes):
         -44 : 228751.dasm (-20.95 % of base)
         -42 : 271.dasm (-4.07 % of base)
         -37 : 190825.dasm (-4.65 % of base)
         -36 : 186328.dasm (-5.74 % of base)
         -34 : 187771.dasm (-14.11 % of base)
         -30 : 167022.dasm (-2.36 % of base)
         -29 : 269.dasm (-3.09 % of base)
         -29 : 439.dasm (-3.06 % of base)
         -29 : 302463.dasm (-3.35 % of base)
         -28 : 235226.dasm (-24.78 % of base)
         -26 : 168475.dasm (-1.55 % of base)
         -26 : 188980.dasm (-6.99 % of base)
         -26 : 173106.dasm (-9.89 % of base)
         -26 : 173129.dasm (-9.89 % of base)
         -26 : 189666.dasm (-14.77 % of base)
         -26 : 190851.dasm (-7.85 % of base)
         -25 : 204728.dasm (-23.58 % of base)
         -25 : 236514.dasm (-26.04 % of base)
         -25 : 306969.dasm (-33.78 % of base)
         -25 : 145594.dasm (-26.04 % of base)

60 total files with Code Size differences (43 improved, 17 regressed), 18 unchanged.

Top method regressions (bytes):
          78 (2.02 % of base) : 229303.dasm - Test_throw2dimarray.App:Main():int (FullOpts)
          74 (1.21 % of base) : 2966.dasm - Program:TestCase0003() (FullOpts)
          74 (1.21 % of base) : 2987.dasm - Program:TestCase0003() (FullOpts)
          47 (335.71 % of base) : 183577.dasm - T:TestEntryPoint():int (FullOpts)
          31 (2.00 % of base) : 568124.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          27 (1.63 % of base) : 571046.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          26 (7.32 % of base) : 456146.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          23 (2.68 % of base) : 242966.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          19 (2.62 % of base) : 281491.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          13 (1.74 % of base) : 166326.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.74 % of base) : 168817.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.74 % of base) : 166653.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
           7 (1.74 % of base) : 244067.dasm - Test.DD:Main1() (FullOpts)
           6 (0.53 % of base) : 566925.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]:GetOrAdd(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.Func`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]):System.__Canon:this (Tier1)
           3 (1.18 % of base) : 281870.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           3 (0.72 % of base) : 302611.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           1 (0.28 % of base) : 437494.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method improvements (bytes):
         -44 (-20.95 % of base) : 228751.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -42 (-4.07 % of base) : 271.dasm - InterlockedCompareExchange1:PosTest2[System.__Canon]():ubyte:this (FullOpts)
         -37 (-4.65 % of base) : 190825.dasm - Newtonsoft.Json.Utilities.ReflectionUtils:GetAttributes(System.Object,System.Type,ubyte):System.Attribute[] (FullOpts)
         -36 (-5.74 % of base) : 186328.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -34 (-14.11 % of base) : 187771.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -30 (-2.36 % of base) : 167022.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)
         -29 (-3.09 % of base) : 269.dasm - InterlockedCompareExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -29 (-3.06 % of base) : 439.dasm - InterlockedExchange1:PosTest1[System.__Canon]():ubyte:this (FullOpts)
         -29 (-3.35 % of base) : 302463.dasm - System.Xml.XmlNode:AppendChild(System.Xml.XmlNode):System.Xml.XmlNode:this (FullOpts)
         -28 (-24.78 % of base) : 235226.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -26 (-14.77 % of base) : 189666.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -26 (-1.55 % of base) : 168475.dasm - Microsoft.CSharp.RuntimeBinder.ComInterop.SplatInvokeBinder:Bind(System.Object[],System.Collections.ObjectModel.ReadOnlyCollection`1[System.Linq.Expressions.ParameterExpression],System.Linq.Expressions.LabelTarget):System.Linq.Expressions.Expression:this (FullOpts)
         -26 (-9.89 % of base) : 173129.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -26 (-9.89 % of base) : 173106.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon](int):this (FullOpts)
         -26 (-6.99 % of base) : 188980.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.__Canon[],int):this (FullOpts)
         -26 (-7.85 % of base) : 190851.dasm - System.ComponentModel.ReflectTypeDescriptionProvider:ReflectGetAttributes(System.Type):System.Attribute[] (FullOpts)
         -25 (-33.78 % of base) : 306969.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -25 (-26.04 % of base) : 145594.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -25 (-26.04 % of base) : 236514.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -25 (-23.58 % of base) : 165603.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)

Top method regressions (percentages):
          47 (335.71 % of base) : 183577.dasm - T:TestEntryPoint():int (FullOpts)
          26 (7.32 % of base) : 456146.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          23 (2.68 % of base) : 242966.dasm - AA`6[byte,ubyte,uint,uint,long,ubyte]:Static2(ulong,short,byref,byref):ushort[] (FullOpts)
          19 (2.62 % of base) : 281491.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          78 (2.02 % of base) : 229303.dasm - Test_throw2dimarray.App:Main():int (FullOpts)
          31 (2.00 % of base) : 568124.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
           7 (1.74 % of base) : 244067.dasm - Test.DD:Main1() (FullOpts)
          13 (1.74 % of base) : 166326.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.74 % of base) : 168817.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          13 (1.74 % of base) : 166653.dasm - DisabledRuntimeMarshalling.PInvokeAssemblyMarshallingDisabled.PInvokes:<Varargs_NotSupported>g__AssertThrowsCorrectException|6_1(System.Action) (FullOpts)
          27 (1.63 % of base) : 571046.dasm - ILCompiler.TypeExtensions:<CompareTypesForEquality>g__AreGuaranteedToRepresentDifferentTypes|13_0(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.TypeDesc):ubyte (Tier1)
          74 (1.21 % of base) : 2966.dasm - Program:TestCase0003() (FullOpts)
          74 (1.21 % of base) : 2987.dasm - Program:TestCase0003() (FullOpts)
           3 (1.18 % of base) : 281870.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           3 (0.72 % of base) : 302611.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           6 (0.53 % of base) : 566925.dasm - System.Collections.Concurrent.ConcurrentDictionary`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]:GetOrAdd(ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.Func`2[ILCompiler.DependencyAnalysis.ReadyToRunSymbolNodeFactory+ReadyToRunHelperKey,System.__Canon]):System.__Canon:this (Tier1)
           1 (0.28 % of base) : 437494.dasm - System.RuntimeType+RuntimeTypeCache+MemberInfoCache`1[System.__Canon]:GetListByName(ulong,int,ulong,int,int,int):System.__Canon[]:this (Tier1)

Top method improvements (percentages):
         -13 (-34.21 % of base) : 204739.dasm - CastExpansionTests:CastToArray(System.Object):System.Object:this (Tier1)
         -25 (-33.78 % of base) : 306969.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -22 (-32.35 % of base) : 301130.dasm - Program+TestDelegateFatFunctionPointers:OtherGeneric[System.__Canon](System.Object):System.__Canon:this (FullOpts)
         -13 (-31.71 % of base) : 204603.dasm - Program:CastToArray(System.Object):int[] (Tier1)
         -13 (-30.23 % of base) : 204734.dasm - CastExpansionTests:CastToGeneric[System.__Canon](System.Object):System.Object:this (Tier1)
         -25 (-26.04 % of base) : 145594.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -25 (-26.04 % of base) : 236514.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -28 (-24.78 % of base) : 235226.dasm - My:foo[System.__Canon](ubyte,System.Object):System.Object (FullOpts)
         -25 (-23.58 % of base) : 165603.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (FullOpts)
         -25 (-23.58 % of base) : 204728.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -44 (-20.95 % of base) : 228751.dasm - JitTest_castclass_ldlen_array_il.Test:Main():int (FullOpts)
         -17 (-20.24 % of base) : 282617.dasm - Internal.TypeSystem.MetadataTypeSystemContext:ComputeHasStaticConstructor(Internal.TypeSystem.TypeDesc):ubyte:this (FullOpts)
         -13 (-19.12 % of base) : 167128.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -13 (-17.33 % of base) : 241483.dasm - Program+<>c__5`1[System.__Canon]:<GetCustomAttributes>b__5_0(Program+CustomAttributeData):System.__Canon:this (FullOpts)
         -15 (-16.48 % of base) : 186538.dasm - Microsoft.CodeAnalysis.SyntaxNode:CloneNodeAsRoot[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.SyntaxTree):System.__Canon (FullOpts)
         -20 (-15.87 % of base) : 455750.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo):System.__Canon (Tier1)
         -26 (-14.77 % of base) : 189666.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -21 (-14.58 % of base) : 173127.dasm - MyCounter[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -21 (-14.58 % of base) : 173105.dasm - MyCounter`1[System.__Canon]:Decrement[System.__Canon]():this (FullOpts)
         -34 (-14.11 % of base) : 187771.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)


libraries.pmi.windows.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 45357899 (overridden on cmd)
Total bytes of diff: 45346612 (overridden on cmd)
Total bytes of delta: -11287 (-0.02 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          65 : 119416.dasm (3.20 % of base)
          34 : 112577.dasm (1.93 % of base)
          19 : 266367.dasm (2.57 % of base)
          11 : 261097.dasm (4.68 % of base)
           8 : 140408.dasm (0.26 % of base)
           8 : 176041.dasm (0.25 % of base)
           8 : 176051.dasm (0.89 % of base)
           8 : 17647.dasm (2.43 % of base)
           8 : 150516.dasm (3.32 % of base)
           6 : 159692.dasm (0.83 % of base)
           6 : 266051.dasm (0.58 % of base)
           6 : 266337.dasm (0.54 % of base)
           5 : 188261.dasm (4.95 % of base)
           5 : 271592.dasm (4.95 % of base)
           3 : 153967.dasm (1.18 % of base)
           3 : 156547.dasm (0.72 % of base)
           3 : 200964.dasm (0.63 % of base)
           2 : 269047.dasm (1.82 % of base)
           2 : 307478.dasm (1.82 % of base)
           2 : 248770.dasm (1.25 % of base)

Top file improvements (bytes):
        -425 : 258443.dasm (-23.57 % of base)
        -148 : 296867.dasm (-25.83 % of base)
        -143 : 97468.dasm (-12.79 % of base)
        -139 : 147503.dasm (-9.97 % of base)
        -126 : 221821.dasm (-38.65 % of base)
        -116 : 221176.dasm (-8.06 % of base)
        -112 : 221823.dasm (-6.53 % of base)
         -84 : 15494.dasm (-12.75 % of base)
         -84 : 15487.dasm (-13.15 % of base)
         -77 : 152716.dasm (-1.74 % of base)
         -76 : 17569.dasm (-17.43 % of base)
         -74 : 214157.dasm (-18.73 % of base)
         -64 : 235958.dasm (-1.71 % of base)
         -57 : 33347.dasm (-7.77 % of base)
         -54 : 15660.dasm (-10.89 % of base)
         -54 : 15651.dasm (-11.02 % of base)
         -53 : 267851.dasm (-0.85 % of base)
         -53 : 190111.dasm (-8.14 % of base)
         -51 : 298584.dasm (-14.09 % of base)
         -46 : 18587.dasm (-5.55 % of base)

73 total files with Code Size differences (52 improved, 21 regressed), 20 unchanged.

Top method regressions (bytes):
          65 (3.20 % of base) : 119416.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          34 (1.93 % of base) : 112577.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
          19 (2.57 % of base) : 266367.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          11 (4.68 % of base) : 261097.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):this (FullOpts)
           8 (0.89 % of base) : 176051.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:GetDeletedSynthesizedMethods(Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Emit.EncLambdaInfo]):System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[Microsoft.CodeAnalysis.CodeGen.DebugId,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal]]:this (FullOpts)
           8 (0.25 % of base) : 176041.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
           8 (0.26 % of base) : 140408.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Emit.EmitBaseline,Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)
           8 (3.32 % of base) : 150516.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
           8 (2.43 % of base) : 17647.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
           6 (0.83 % of base) : 159692.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)
           6 (0.58 % of base) : 266051.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           6 (0.54 % of base) : 266337.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:IntersectWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           5 (4.95 % of base) : 188261.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           5 (4.95 % of base) : 271592.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           3 (1.18 % of base) : 153967.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           3 (0.72 % of base) : 156547.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           3 (0.63 % of base) : 200964.dasm - System.Net.Http.Http3RequestStream:HandleReadResponseContentException(System.Exception,System.Threading.CancellationToken):this (FullOpts)
           2 (1.25 % of base) : 248770.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           2 (1.82 % of base) : 269047.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
           2 (1.82 % of base) : 307478.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)

Top method improvements (bytes):
        -425 (-23.57 % of base) : 258443.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -148 (-25.83 % of base) : 296867.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
        -143 (-12.79 % of base) : 97468.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -139 (-9.97 % of base) : 147503.dasm - Microsoft.VisualBasic.CompilerServices.Conversions:ToGenericParameter[System.__Canon](System.Object):System.__Canon (FullOpts)
        -126 (-38.65 % of base) : 221821.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
        -116 (-8.06 % of base) : 221176.dasm - System.Xml.Serialization.SchemaObjectWriter:Write54_XmlSchemaSequence(System.Xml.Schema.XmlSchemaSequence):this (FullOpts)
        -112 (-6.53 % of base) : 221823.dasm - System.Xml.Serialization.XmlSchemas:GetSchemaItem(System.Xml.Schema.XmlSchemaObject,System.String,System.String):System.String (FullOpts)
         -84 (-13.15 % of base) : 15487.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2520[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -84 (-12.75 % of base) : 15494.dasm - Microsoft.FSharp.Core.LanguagePrimitives:.cctor$cont@2543-1[System.__Canon](System.Type,Microsoft.FSharp.Core.Unit):System.__Canon (FullOpts)
         -77 (-1.74 % of base) : 152716.dasm - Newtonsoft.Json.JsonTextReader+<DoReadAsBytesAsync>d__42:MoveNext():this (FullOpts)
         -76 (-17.43 % of base) : 17569.dasm - System.Data.XSDSchema:GetParticleItems(System.Xml.Schema.XmlSchemaParticle):System.Xml.Schema.XmlSchemaObjectCollection (FullOpts)
         -74 (-18.73 % of base) : 214157.dasm - System.Xml.Schema.Compiler:CanonicalizeParticle(System.Xml.Schema.XmlSchemaParticle,ubyte):System.Xml.Schema.XmlSchemaParticle:this (FullOpts)
         -64 (-1.71 % of base) : 235958.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (FullOpts)
         -57 (-7.77 % of base) : 33347.dasm - System.Runtime.InteropServices.Marshalling.ComVariant:As[System.__Canon]():System.__Canon:this (FullOpts)
         -54 (-10.89 % of base) : 15660.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericOneDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -54 (-11.02 % of base) : 15651.dasm - Microsoft.FSharp.Core.LanguagePrimitives+GenericZeroDynamicImplTable`1[System.__Canon]:.cctor() (FullOpts)
         -53 (-0.85 % of base) : 267851.dasm - System.ComponentModel.Composition.MetadataViewGenerator:GenerateInterfaceViewProxyType(System.Type):System.Type (FullOpts)
         -53 (-8.14 % of base) : 190111.dasm - System.DirectoryServices.PropertyValueCollection:set_Value(System.Object):this (FullOpts)
         -51 (-14.09 % of base) : 298584.dasm - System.Security.Cryptography.Xml.XmlDsigBase64Transform:LoadInput(System.Object):this (FullOpts)
         -46 (-5.55 % of base) : 18587.dasm - System.Data.DataRowExtensions+UnboxT`1[System.__Canon]:NullableFieldUsingReflection(System.Object):System.__Canon (FullOpts)

Top method regressions (percentages):
           5 (4.95 % of base) : 188261.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           5 (4.95 % of base) : 271592.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
          11 (4.68 % of base) : 261097.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):this (FullOpts)
           8 (3.32 % of base) : 150516.dasm - Newtonsoft.Json.Utilities.DictionaryWrapper`2[System.__Canon,System.Nullable`1[int]]:System.Collections.IDictionary.Contains(System.Object):ubyte:this (FullOpts)
          65 (3.20 % of base) : 119416.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory:XmlThreadSafetyElement(ubyte,ubyte):Microsoft.CodeAnalysis.VisualBasic.Syntax.XmlEmptyElementSyntax (FullOpts)
          19 (2.57 % of base) : 266367.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
           8 (2.43 % of base) : 17647.dasm - System.Data.ColumnTypeConverter:ConvertFrom(System.ComponentModel.ITypeDescriptorContext,System.Globalization.CultureInfo,System.Object):System.Object:this (FullOpts)
          34 (1.93 % of base) : 112577.dasm - Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.Scanner:ScanXmlStringUnQuoted():Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax.SyntaxToken:this (FullOpts)
           2 (1.82 % of base) : 269047.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
           2 (1.82 % of base) : 307478.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
           2 (1.82 % of base) : 305756.dasm - Xunit.Sdk.AssertEqualityComparerAdapter`1[System.__Canon]:GetHashCode(System.Object):int:this (FullOpts)
           2 (1.25 % of base) : 248770.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)
           3 (1.18 % of base) : 153967.dasm - Internal.TypeSystem.TypeDesc:get_TypeHasCharacteristicsRequiredToBeTypeEquivalent():ubyte:this (FullOpts)
           8 (0.89 % of base) : 176051.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:GetDeletedSynthesizedMethods(Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.Emit.EncLambdaInfo]):System.Collections.Generic.IEnumerable`1[System.ValueTuple`2[Microsoft.CodeAnalysis.CodeGen.DebugId,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal]]:this (FullOpts)
           6 (0.83 % of base) : 159692.dasm - Microsoft.Build.BackEnd.TaskExecutionHost:InternalSetTaskParameter(Microsoft.Build.Framework.TaskPropertyInfo,System.Object):ubyte:this (FullOpts)
           3 (0.72 % of base) : 156547.dasm - Microsoft.Build.Logging.LoggerDescription:CreateForwardingLogger():Microsoft.Build.Framework.IForwardingLogger:this (FullOpts)
           3 (0.63 % of base) : 200964.dasm - System.Net.Http.Http3RequestStream:HandleReadResponseContentException(System.Exception,System.Threading.CancellationToken):this (FullOpts)
           6 (0.58 % of base) : 266051.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           6 (0.54 % of base) : 266337.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:IntersectWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           8 (0.26 % of base) : 140408.dasm - Microsoft.CodeAnalysis.Emit.DefinitionMap:TryCreateVariableSlotAllocator(Microsoft.CodeAnalysis.Emit.EmitBaseline,Microsoft.CodeAnalysis.Compilation,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.Symbols.IMethodSymbolInternal,Microsoft.CodeAnalysis.DiagnosticBag):Microsoft.CodeAnalysis.CodeGen.VariableSlotAllocator:this (FullOpts)

Top method improvements (percentages):
        -126 (-38.65 % of base) : 221821.dasm - System.Xml.Serialization.XmlSchemas:ItemName(System.Xml.Schema.XmlSchemaObject):System.String (FullOpts)
         -13 (-32.50 % of base) : 15207.dasm - Microsoft.FSharp.Core.Operators+Unchecked:Unbox[System.__Canon](System.Object):System.__Canon (FullOpts)
         -13 (-32.50 % of base) : 233332.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -20 (-31.25 % of base) : 165849.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -20 (-31.25 % of base) : 130095.dasm - Roslyn.Utilities.EnumUtilities:GetValues[ubyte]():ubyte[] (FullOpts)
         -25 (-30.49 % of base) : 243665.dasm - CommandLine.Infrastructure.ReflectionHelper:CreateDefaultImmutableInstance[System.__Canon](System.Type[]):System.__Canon (FullOpts)
         -25 (-30.49 % of base) : 152120.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
         -45 (-29.22 % of base) : 221742.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -25 (-29.07 % of base) : 269535.dasm - System.Composition.Hosting.Util.MethodInfoExtensions:CreateStaticDelegate[System.__Canon](System.Reflection.MethodInfo):System.__Canon (FullOpts)
         -18 (-28.57 % of base) : 285369.dasm - System.Net.Dns:GetHostAddressesCore(System.Net.IPAddress,int,System.Nullable`1[long]):System.Net.IPAddress[] (FullOpts)
         -18 (-28.57 % of base) : 285366.dasm - System.Net.Dns:GetHostAddressesCore(System.String,int,System.Nullable`1[long]):System.Net.IPAddress[] (FullOpts)
         -25 (-28.41 % of base) : 148524.dasm - Microsoft.VisualBasic.Conversion:CTypeDynamic[System.__Canon](System.Object):System.__Canon (FullOpts)
         -25 (-27.78 % of base) : 247143.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (FullOpts)
         -25 (-27.78 % of base) : 149356.dasm - Newtonsoft.Json.JsonConvert:DeserializeObject[System.__Canon](System.String,Newtonsoft.Json.JsonSerializerSettings):System.__Canon (FullOpts)
         -25 (-27.78 % of base) : 152128.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon](Newtonsoft.Json.JsonSerializer):System.__Canon:this (FullOpts)
         -18 (-27.27 % of base) : 22189.dasm - System.Data.Common.DbDataReader:GetFieldValue[System.__Canon](int):System.__Canon:this (FullOpts)
         -20 (-25.97 % of base) : 305635.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -20 (-25.97 % of base) : 305649.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
        -148 (-25.83 % of base) : 296867.dasm - System.Runtime.Serialization.Formatters.Binary.PrimitiveArray:.ctor(int,System.Array):this (FullOpts)
         -25 (-25.77 % of base) : 149617.dasm - Newtonsoft.Json.JsonSerializer:Deserialize[System.__Canon](Newtonsoft.Json.JsonReader):System.__Canon:this (FullOpts)


libraries_tests.run.windows.x64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 241741299 (overridden on cmd)
Total bytes of diff: 241721660 (overridden on cmd)
Total bytes of delta: -19639 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          86 : 314987.dasm (5.12 % of base)
          70 : 315008.dasm (4.03 % of base)
          50 : 67102.dasm (1.26 % of base)
          50 : 67103.dasm (1.83 % of base)
          47 : 65553.dasm (1.61 % of base)
          46 : 636855.dasm (1.08 % of base)
          44 : 57727.dasm (0.88 % of base)
          44 : 90581.dasm (0.89 % of base)
          39 : 171154.dasm (0.98 % of base)
          34 : 630873.dasm (0.74 % of base)
          33 : 537417.dasm (1.06 % of base)
          32 : 630874.dasm (0.77 % of base)
          32 : 649136.dasm (1.15 % of base)
          31 : 90842.dasm (1.19 % of base)
          29 : 416738.dasm (6.28 % of base)
          27 : 107044.dasm (4.75 % of base)
          27 : 89406.dasm (1.03 % of base)
          27 : 162963.dasm (4.75 % of base)
          24 : 315181.dasm (0.68 % of base)
          24 : 327124.dasm (4.88 % of base)

Top file improvements (bytes):
        -277 : 595698.dasm (-2.24 % of base)
        -106 : 187851.dasm (-2.90 % of base)
        -105 : 667970.dasm (-2.88 % of base)
         -98 : 668839.dasm (-2.70 % of base)
         -85 : 165409.dasm (-2.38 % of base)
         -82 : 574684.dasm (-0.85 % of base)
         -80 : 583334.dasm (-0.74 % of base)
         -74 : 640635.dasm (-2.34 % of base)
         -70 : 262072.dasm (-1.87 % of base)
         -69 : 107871.dasm (-1.87 % of base)
         -69 : 195333.dasm (-1.91 % of base)
         -69 : 209653.dasm (-1.90 % of base)
         -69 : 233861.dasm (-1.93 % of base)
         -69 : 293702.dasm (-1.91 % of base)
         -69 : 359221.dasm (-1.91 % of base)
         -69 : 381385.dasm (-2.03 % of base)
         -69 : 453509.dasm (-2.03 % of base)
         -69 : 201614.dasm (-1.90 % of base)
         -69 : 290522.dasm (-2.01 % of base)
         -69 : 376490.dasm (-2.03 % of base)

87 total files with Code Size differences (53 improved, 34 regressed), 16 unchanged.

Top method regressions (bytes):
          86 (5.12 % of base) : 314987.dasm - System.Security.AccessControl.DiscretionaryAcl:AddAccess(int,System.Security.Principal.SecurityIdentifier,int,int,int):this (Tier1)
          70 (4.03 % of base) : 315008.dasm - System.Security.AccessControl.ObjectSecurity:GetSecurityDescriptorBinaryForm():ubyte[]:this (Tier1)
          50 (1.26 % of base) : 67102.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location):ubyte:this (Tier1)
          50 (1.83 % of base) : 67103.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,int,int,System.Nullable`1[int]):ubyte:this (Tier1)
          47 (1.61 % of base) : 65553.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol:DeriveUseSiteDiagnosticFromTypeArguments(byref):ubyte:this (Tier1)
          46 (1.08 % of base) : 636855.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol:ReportDiagnosticsForSynthesizedAttributes(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag) (Tier1)
          44 (0.88 % of base) : 57727.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol:ReportDiagnosticsForUnsafeSynthesizedAttributes(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag) (Tier1)
          44 (0.89 % of base) : 90581.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol:ReportDiagnosticsForUnsafeSynthesizedAttributes(Microsoft.CodeAnalysis.CSharp.CSharpCompilation,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag) (Tier1)
          39 (0.98 % of base) : 171154.dasm - Microsoft.CodeAnalysis.CSharp.ConversionsBase:HasAnyBaseInterfaceConversion(Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,Microsoft.CodeAnalysis.CSharp.Symbols.TypeSymbol,byref):ubyte:this (Tier1)
          34 (0.74 % of base) : 630873.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(int,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location):ubyte:this (Tier1)
          33 (1.06 % of base) : 537417.dasm - Xunit.Sdk.ReflectionMethodInfo:GetCustomAttributes(System.Reflection.MethodInfo,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
          32 (0.77 % of base) : 630874.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,int,int,System.Nullable`1[int]):ubyte:this (Tier1)
          32 (1.15 % of base) : 649136.dasm - Microsoft.CodeAnalysis.CSharp.SyntheticBoundNodeFactory:WellKnownMember(int,ubyte):Microsoft.CodeAnalysis.CSharp.Symbol:this (Tier1)
          31 (1.19 % of base) : 90842.dasm - Microsoft.CodeAnalysis.CSharp.CSharpCompilation:CheckIfAttributeShouldBeEmbedded(Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag,Microsoft.CodeAnalysis.Location,int,int,System.Nullable`1[int]):ubyte:this (Tier1)
          29 (6.28 % of base) : 416738.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          27 (1.03 % of base) : 89406.dasm - Microsoft.CodeAnalysis.CSharp.Symbol:DeriveUseSiteInfoFromParameters(byref,System.Collections.Immutable.ImmutableArray`1[Microsoft.CodeAnalysis.CSharp.Symbols.ParameterSymbol]):ubyte:this (Tier1)
          27 (4.75 % of base) : 107044.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          27 (4.75 % of base) : 162963.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          24 (4.88 % of base) : 327124.dasm - System.Threading.ManualResetEventSlim:CancellationTokenCallback(System.Object) (Tier1)
          24 (0.68 % of base) : 315181.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)

Top method improvements (bytes):
        -277 (-2.24 % of base) : 595698.dasm - System.Text.Json.Serialization.Converters.ObjectWithParameterizedConstructorConverter`1[System.Text.Json.Serialization.Tests.Struct_With_Ctor_With_65_Params]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
        -106 (-2.90 % of base) : 187851.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
        -105 (-2.88 % of base) : 667970.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -98 (-2.70 % of base) : 668839.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -85 (-2.38 % of base) : 165409.dasm - Microsoft.CodeAnalysis.CSharp.Binder:CheckValueKind(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.CSharp.BoundExpression,ushort,ubyte,Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag):ubyte:this (Tier1)
         -82 (-0.85 % of base) : 574684.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
         -80 (-0.74 % of base) : 583334.dasm - System.Text.Json.Serialization.Converters.ObjectDefaultConverter`1[System.__Canon]:OnTryRead(byref,System.Type,System.Text.Json.JsonSerializerOptions,byref,byref):ubyte:this (Tier1)
         -74 (-2.34 % of base) : 640635.dasm - Microsoft.CodeAnalysis.CodeGen.PrivateImplementationDetails:Freeze():this (Tier1)
         -70 (-1.87 % of base) : 262072.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-1.87 % of base) : 107871.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-1.91 % of base) : 195333.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-1.90 % of base) : 209653.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-1.93 % of base) : 233861.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-1.91 % of base) : 293702.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-1.91 % of base) : 359221.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-2.03 % of base) : 381385.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-2.03 % of base) : 453509.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-1.90 % of base) : 201614.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-2.01 % of base) : 290522.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)
         -69 (-2.03 % of base) : 376490.dasm - Xunit.Sdk.ReflectionAttributeInfo:GetCustomAttributes(System.Type,System.Type,System.AttributeUsageAttribute):System.Collections.Generic.IEnumerable`1[Xunit.Abstractions.IAttributeInfo] (Tier1)

Top method regressions (percentages):
          13 (11.21 % of base) : 437670.dasm - OLEDB.Test.ModuleCore.CTestCase:get_TestModule():OLEDB.Test.ModuleCore.CTestModule:this (Tier1)
          19 (9.50 % of base) : 249972.dasm - System.ComponentModel.TypeDescriptor:GetNodeForBaseType(System.Type):System.Type (Tier1)
          22 (9.48 % of base) : 194615.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          22 (9.48 % of base) : 662672.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          14 (6.60 % of base) : 317360.dasm - System.Threading.CancellationTokenSource:Invoke(System.Delegate,System.Object,System.Threading.CancellationTokenSource) (Tier1)
          29 (6.28 % of base) : 416738.dasm - System.Xml.XPath.XNodeNavigator:GetNextNamespaceDeclarationGlobal(System.Xml.Linq.XAttribute):System.Xml.Linq.XAttribute (Tier1)
          22 (5.45 % of base) : 621710.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          14 (5.34 % of base) : 379419.dasm - System.Threading.CancellationTokenSource:Invoke(System.Delegate,System.Object,System.Threading.CancellationTokenSource) (Tier1)
          22 (5.13 % of base) : 53290.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (Tier1)
          86 (5.12 % of base) : 314987.dasm - System.Security.AccessControl.DiscretionaryAcl:AddAccess(int,System.Security.Principal.SecurityIdentifier,int,int,int):this (Tier1)
          24 (4.88 % of base) : 327124.dasm - System.Threading.ManualResetEventSlim:CancellationTokenCallback(System.Object) (Tier1)
          27 (4.75 % of base) : 107044.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
          27 (4.75 % of base) : 162963.dasm - System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:AddRange(System.Collections.Generic.IEnumerable`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,int]],ubyte):System.Collections.Immutable.ImmutableDictionary`2[System.__Canon,int]:this (Tier1)
           8 (4.52 % of base) : 664073.dasm - System.Threading.Tasks.TaskFactory`1+<>c[int]:<ContinueWhenAllImpl>b__57_0(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task[]],System.Object):int:this (Tier1)
          10 (4.39 % of base) : 664314.dasm - System.Threading.Tasks.TaskFactory`1+<>c[System.Threading.Tasks.VoidTaskResult]:<ContinueWhenAnyImpl>b__66_1(System.Threading.Tasks.Task`1[System.Threading.Tasks.Task],System.Object):System.Threading.Tasks.VoidTaskResult:this (Tier1)
          13 (4.18 % of base) : 195787.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler+<>c:<.cctor>b__10_0(System.Object):this (Tier1)
          70 (4.03 % of base) : 315008.dasm - System.Security.AccessControl.ObjectSecurity:GetSecurityDescriptorBinaryForm():ubyte[]:this (Tier1)
          10 (4.02 % of base) : 673772.dasm - CoreXml.Test.XLinq.RemoveUnit:Undo():this (Tier1)
          18 (3.98 % of base) : 90894.dasm - System.Linq.ImmutableArrayExtensions:SequenceEqual[System.__Canon,System.__Canon](System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Collections.Immutable.ImmutableArray`1[System.__Canon],System.Func`3[System.__Canon,System.__Canon,ubyte]):ubyte (Tier1)
          21 (3.83 % of base) : 107501.dasm - Microsoft.CodeAnalysis.DiagnosticBag:ToReadOnlyCore[System.__Canon](System.Collections.Concurrent.ConcurrentQueue`1[Microsoft.CodeAnalysis.Diagnostic],ubyte):System.Collections.Immutable.ImmutableArray`1[System.__Canon] (Tier1)

Top method improvements (percentages):
         -35 (-36.08 % of base) : 536946.dasm - Moq.Mock`1[System.__Canon]:get_Object():System.__Canon:this (Tier1)
         -25 (-33.78 % of base) : 3546.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (Tier1)
         -18 (-32.73 % of base) : 55333.dasm - Roslyn.Utilities.MultiDictionary`2+ValueSet[System.__Canon,System.__Canon]:Single():System.__Canon:this (Tier1)
         -13 (-32.50 % of base) : 586525.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (Tier1)
         -25 (-27.78 % of base) : 120069.dasm - Microsoft.Extensions.DependencyInjection.ActivatorUtilities:CreateInstance[System.__Canon](System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -25 (-27.47 % of base) : 59531.dasm - System.Reflection.CustomAttributeExtensions:GetCustomAttribute[System.__Canon](System.Reflection.MemberInfo,ubyte):System.__Canon (Tier1)
         -18 (-27.27 % of base) : 57994.dasm - Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter:VisitListElement[System.__Canon](System.__Canon):System.__Canon:this (Tier1)
         -32 (-27.12 % of base) : 412647.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (Tier1)
         -50 (-26.88 % of base) : 170483.dasm - Microsoft.CodeAnalysis.SyntaxNode:FirstAncestorOrSelf[System.__Canon](System.Func`2[System.__Canon,ubyte],ubyte):System.__Canon:this (Tier1)
         -18 (-26.47 % of base) : 252717.dasm - System.Threading.AsyncLocal`1[System.__Canon]:get_Value():System.__Canon:this (Tier1)
         -25 (-26.04 % of base) : 119246.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (Tier1)
         -25 (-26.04 % of base) : 206342.dasm - Xunit.Assert:ThrowsAny[System.__Canon](System.Action):System.__Canon (Tier1)
         -20 (-25.97 % of base) : 67481.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (Tier1)
         -20 (-25.97 % of base) : 119464.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (Tier1)
         -24 (-24.49 % of base) : 56108.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (Tier1)
         -23 (-23.96 % of base) : 119222.dasm - Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests:CreateInstance[System.__Canon](Microsoft.Extensions.DependencyInjection.Specification.DependencyInjectionSpecificationTests+CreateInstanceFunc,System.IServiceProvider,System.Object[]):System.__Canon (Tier1)
         -25 (-23.58 % of base) : 119034.dasm - Xunit.Assert:Throws[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -25 (-23.58 % of base) : 304718.dasm - Xunit.Assert:ThrowsAny[System.__Canon](System.Func`1[System.Object]):System.__Canon (Tier1)
         -16 (-23.53 % of base) : 330526.dasm - (dynamicClass):lambda_method813(System.Runtime.CompilerServices.Closure):long (FullOpts)
         -18 (-23.38 % of base) : 55469.dasm - Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (Tier1)


librariestestsnotieredcompilation.run.windows.x64.Release.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 108673850 (overridden on cmd)
Total bytes of diff: 108659026 (overridden on cmd)
Total bytes of delta: -14824 (-0.01 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
         149 : 216561.dasm (3.82 % of base)
         148 : 236681.dasm (9.15 % of base)
         117 : 318150.dasm (2.56 % of base)
          91 : 188994.dasm (5.74 % of base)
          80 : 94157.dasm (3.92 % of base)
          43 : 73273.dasm (2.00 % of base)
          33 : 98181.dasm (122.22 % of base)
          30 : 96476.dasm (60.00 % of base)
          30 : 98068.dasm (60.00 % of base)
          19 : 4056.dasm (2.62 % of base)
          16 : 193463.dasm (3.07 % of base)
          14 : 189145.dasm (2.97 % of base)
          11 : 72480.dasm (4.68 % of base)
          11 : 70840.dasm (1.51 % of base)
          10 : 77074.dasm (0.99 % of base)
           9 : 78507.dasm (0.99 % of base)
           6 : 78752.dasm (0.54 % of base)
           6 : 83149.dasm (1.37 % of base)
           5 : 99826.dasm (4.95 % of base)
           5 : 100200.dasm (4.95 % of base)

Top file improvements (bytes):
        -425 : 65494.dasm (-23.57 % of base)
        -259 : 201554.dasm (-16.55 % of base)
        -259 : 217184.dasm (-16.55 % of base)
        -255 : 174778.dasm (-14.42 % of base)
        -238 : 174772.dasm (-13.58 % of base)
        -220 : 173896.dasm (-11.03 % of base)
        -169 : 201003.dasm (-12.70 % of base)
        -169 : 217233.dasm (-12.70 % of base)
        -153 : 174774.dasm (-11.65 % of base)
        -144 : 14973.dasm (-13.15 % of base)
        -122 : 174770.dasm (-6.95 % of base)
        -108 : 174775.dasm (-8.53 % of base)
        -108 : 205576.dasm (-6.96 % of base)
        -108 : 206935.dasm (-6.96 % of base)
        -108 : 209708.dasm (-8.53 % of base)
        -105 : 65354.dasm (-12.06 % of base)
         -88 : 23863.dasm (-3.74 % of base)
         -87 : 174389.dasm (-6.52 % of base)
         -85 : 174777.dasm (-9.10 % of base)
         -78 : 164482.dasm (-13.29 % of base)

76 total files with Code Size differences (53 improved, 23 regressed), 20 unchanged.

Top method regressions (bytes):
         149 (3.82 % of base) : 216561.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
         148 (9.15 % of base) : 236681.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
         117 (2.56 % of base) : 318150.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
          91 (5.74 % of base) : 188994.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
          80 (3.92 % of base) : 94157.dasm - System.Data.DataSet:ReadXmlSchema(System.Xml.XmlReader,ubyte):this (FullOpts)
          43 (2.00 % of base) : 73273.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
          33 (122.22 % of base) : 98181.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          30 (60.00 % of base) : 96476.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          30 (60.00 % of base) : 98068.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
          19 (2.62 % of base) : 4056.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
          16 (3.07 % of base) : 193463.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
          14 (2.97 % of base) : 189145.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
          11 (1.51 % of base) : 70840.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.SmallFrozenSet`1+GSW[System.__Canon]]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
          11 (4.68 % of base) : 72480.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):this (FullOpts)
          10 (0.99 % of base) : 77074.dasm - System.Collections.Generic.SortedList`2[System.__Canon,System.__Canon]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           9 (0.99 % of base) : 78507.dasm - System.Collections.Generic.SortedSet`1[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.__Canon]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
           6 (0.54 % of base) : 78752.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:IntersectWith(System.Collections.Generic.IEnumerable`1[System.__Canon]):this (FullOpts)
           6 (1.37 % of base) : 83149.dasm - System.UnitTesting.EnumerableAssert:AreEqual[System.__Canon](System.Collections.IEnumerable,System.Collections.Generic.IList`1[System.__Canon]) (FullOpts)
           5 (4.95 % of base) : 99826.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           5 (4.95 % of base) : 100200.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)

Top method improvements (bytes):
        -425 (-23.57 % of base) : 65494.dasm - System.CodeDom.Compiler.CodeGenerator:GenerateExpression(System.CodeDom.CodeExpression):this (FullOpts)
        -259 (-16.55 % of base) : 201554.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -259 (-16.55 % of base) : 217184.dasm - System.Tests.ArrayTests:Sort_Array_Array_Generic[System.__Canon](System.__Canon[],System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[],System.__Canon[]) (FullOpts)
        -255 (-14.42 % of base) : 174778.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write28_XmlSchemaSimpleTypeRestriction(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleTypeRestriction,ubyte,ubyte):this (FullOpts)
        -238 (-13.58 % of base) : 174772.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write59_XmlSchemaComplexType(System.String,System.String,System.Xml.Schema.XmlSchemaComplexType,ubyte,ubyte):this (FullOpts)
        -220 (-11.03 % of base) : 173896.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write63_XmlSchema(System.String,System.String,System.Xml.Schema.XmlSchema,ubyte,ubyte):this (FullOpts)
        -169 (-12.70 % of base) : 201003.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -169 (-12.70 % of base) : 217233.dasm - System.Tests.ArrayTests:Sort_Array_Generic[System.__Canon](System.__Canon[],int,int,System.Collections.Generic.IComparer`1[System.__Canon],System.__Canon[]) (FullOpts)
        -153 (-11.65 % of base) : 174774.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write57_Item(System.String,System.String,System.Xml.Schema.XmlSchemaComplexContentExtension,ubyte,ubyte):this (FullOpts)
        -144 (-13.15 % of base) : 14973.dasm - Microsoft.CodeAnalysis.Shared.Utilities.AbstractSpeculationAnalyzer`8[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,Microsoft.CodeAnalysis.CSharp.Conversion]:ReplacementChangesSemanticsForNode(Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode,Microsoft.CodeAnalysis.SyntaxNode):ubyte:this (FullOpts)
        -122 (-6.95 % of base) : 174770.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write51_XmlSchemaElement(System.String,System.String,System.Xml.Schema.XmlSchemaElement,ubyte,ubyte):this (FullOpts)
        -108 (-6.96 % of base) : 205576.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -108 (-6.96 % of base) : 206935.dasm - DataContractJsonSerializerTests:DCJS_SuspensionManager() (FullOpts)
        -108 (-8.53 % of base) : 174775.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write53_XmlSchemaSequence(System.String,System.String,System.Xml.Schema.XmlSchemaSequence,ubyte,ubyte):this (FullOpts)
        -108 (-8.53 % of base) : 209708.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write54_XmlSchemaChoice(System.String,System.String,System.Xml.Schema.XmlSchemaChoice,ubyte,ubyte):this (FullOpts)
        -105 (-12.06 % of base) : 65354.dasm - System.CodeDom.Compiler.Tests.CodeGenerationTests:GenerateCode(System.CodeDom.CodeObject,System.CodeDom.Compiler.CodeDomProvider):System.String (FullOpts)
         -88 (-3.74 % of base) : 23863.dasm - Microsoft.CodeAnalysis.LanguageService.AbstractDeclaredSymbolInfoFactoryService`10[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:AddDeclaredSymbolInfos(Microsoft.CodeAnalysis.SyntaxNode,System.__Canon,Roslyn.Utilities.StringTable,System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[Microsoft.CodeAnalysis.FindSymbols.DeclaredSymbolInfo],System.Collections.Generic.Dictionary`2[System.String,System.String],System.Collections.Generic.Dictionary`2[System.String,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1[int]],System.String,System.String,System.Threading.CancellationToken):this (FullOpts)
         -87 (-6.52 % of base) : 174389.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterAliasedTestType:Write2_AliasedTestType(System.String,System.String,AliasedTestType,ubyte,ubyte):this (FullOpts)
         -85 (-9.10 % of base) : 174777.dasm - Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterXmlSchema:Write31_XmlSchemaSimpleType(System.String,System.String,System.Xml.Schema.XmlSchemaSimpleType,ubyte,ubyte):this (FullOpts)
         -78 (-13.29 % of base) : 164482.dasm - System.Security.Cryptography.X509Certificates.CertificateExtensionsCommon:GetPrivateKey[System.__Canon](System.Security.Cryptography.X509Certificates.X509Certificate2,System.Predicate`1[System.Security.Cryptography.X509Certificates.X509Certificate2]):System.__Canon (FullOpts)

Top method regressions (percentages):
          33 (122.22 % of base) : 98181.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest2+<>c__DisplayClass7_0:<Insert>b__2():this (FullOpts)
          30 (60.00 % of base) : 96476.dasm - System.Data.Tests.Common.DataColumnMappingCollectionTest:<RemoveException1>b__22_0():this (FullOpts)
          30 (60.00 % of base) : 98068.dasm - System.Data.Tests.Common.DataTableMappingCollectionTest:<RemoveException1>b__16_0():this (FullOpts)
         148 (9.15 % of base) : 236681.dasm - System.Security.Cryptography.X509Certificates.Tests.ChainTests:SystemTrustCertificateWithCustomRootTrust(ubyte) (FullOpts)
          91 (5.74 % of base) : 188994.dasm - System.Reflection.Tests.GetCustomAttributes_Compat:GetCustomAttributes_thisAsm():this (FullOpts)
           5 (4.95 % of base) : 99826.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
           5 (4.95 % of base) : 100200.dasm - System.Data.Common.DbConnectionPoolKey:Equals(System.Object):ubyte:this (FullOpts)
          11 (4.68 % of base) : 72480.dasm - System.Collections.Immutable.ImmutableArray`1+Builder[System.__Canon]:AddRange[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):this (FullOpts)
          80 (3.92 % of base) : 94157.dasm - System.Data.DataSet:ReadXmlSchema(System.Xml.XmlReader,ubyte):this (FullOpts)
         149 (3.82 % of base) : 216561.dasm - System.Tests.TupleTests+TupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.__Canon,System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
          16 (3.07 % of base) : 193463.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
          14 (2.97 % of base) : 189145.dasm - System.Reflection.Tests.ConstructorCommonTests:Invoke_OneDimensionalArray():this (FullOpts)
          19 (2.62 % of base) : 4056.dasm - System.Collections.Generic.SortedSet`1[System.__Canon]:.ctor(System.Collections.Generic.IEnumerable`1[System.__Canon],System.Collections.Generic.IComparer`1[System.__Canon]):this (FullOpts)
         117 (2.56 % of base) : 318150.dasm - System.Tests.ValueTupleTests+ValueTupleTestDriver`10[short,int,long,System.__Canon,ushort,float,double,System.DateTime,System.ValueTuple`2[ubyte,System.__Canon],System.TimeSpan]:.ctor(System.Object[]):this (FullOpts)
          43 (2.00 % of base) : 73273.dasm - System.Collections.Immutable.Tests.ImmutableSortedDictionaryTest:ToUnorderedTest():this (FullOpts)
           2 (1.82 % of base) : 85312.dasm - Microsoft.Internal.Collections.CollectionServices+CollectionOfObject`1[System.__Canon]:Add(System.Object):this (FullOpts)
          11 (1.51 % of base) : 70840.dasm - System.Collections.Frozen.FrozenSetInternalBase`2[System.__Canon,System.Collections.Frozen.SmallFrozenSet`1+GSW[System.__Canon]]:ComparersAreCompatible(System.Collections.Generic.IReadOnlySet`1[System.__Canon]):ubyte:this (FullOpts)
           6 (1.37 % of base) : 83149.dasm - System.UnitTesting.EnumerableAssert:AreEqual[System.__Canon](System.Collections.IEnumerable,System.Collections.Generic.IList`1[System.__Canon]) (FullOpts)
           3 (1.33 % of base) : 38199.dasm - FluentAssertions.Primitives.StringAssertions`1[System.__Canon]:Be(System.String,System.String,System.Object[]):FluentAssertions.AndConstraint`1[System.__Canon]:this (FullOpts)
           2 (1.25 % of base) : 38818.dasm - Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1[System.__Canon]:CreateServiceProvider(System.Object):System.IServiceProvider:this (FullOpts)

Top method improvements (percentages):
         -13 (-32.50 % of base) : 36946.dasm - LamarCodeGeneration.Util.TypeExtensions:As[System.__Canon](System.Object):System.__Canon (FullOpts)
         -13 (-32.50 % of base) : 149770.dasm - System.Text.Json.JsonSerializer:UnboxOnWrite[System.__Canon](System.Object):System.__Canon (FullOpts)
         -25 (-30.49 % of base) : 21731.dasm - Newtonsoft.Json.Linq.JToken:ToObject[System.__Canon]():System.__Canon:this (FullOpts)
         -13 (-30.23 % of base) : 30374.dasm - Microsoft.Extensions.Configuration.Binder.SourceGeneration.BindingHelperInfo+Builder+<>c:<ToIncrementalValue>b__7_2[System.__Canon](Microsoft.Extensions.Configuration.Binder.SourceGeneration.TypeSpec):System.__Canon:this (FullOpts)
         -45 (-29.22 % of base) : 174210.dasm - System.Xml.Serialization.XmlSchemaImporter:IsMixed(System.Xml.Schema.XmlSchemaType):ubyte (FullOpts)
         -26 (-27.37 % of base) : 174807.dasm - System.Xml.Schema.XmlSchemaSimpleType:get_DerivedFrom():System.Xml.XmlQualifiedName:this (FullOpts)
         -18 (-27.27 % of base) : 7585.dasm - Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter:VisitListElement[System.__Canon](System.__Canon):System.__Canon:this (FullOpts)
         -18 (-27.27 % of base) : 96657.dasm - System.Data.Common.DbDataReader:GetFieldValue[System.__Canon](int):System.__Canon:this (FullOpts)
         -32 (-27.12 % of base) : 63081.dasm - System.Xml.Serialization.ReflectionXmlSerializationReaderHelper+<>c__DisplayClass1_0`2[System.__Canon,System.__Canon]:<GetSetMemberValueDelegateWithType>b__0(System.Object,System.Object):this (FullOpts)
         -25 (-26.88 % of base) : 36301.dasm - Grace.DependencyInjection.Impl.BaseExportLocatorScope:Locate[System.__Canon]():System.__Canon:this (FullOpts)
         -51 (-26.15 % of base) : 3363.dasm - Microsoft.VisualStudio.Composition.ExportProvider:CastValueTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -25 (-26.04 % of base) : 17391.dasm - Xunit.Assert:Throws[System.__Canon](System.Action):System.__Canon (FullOpts)
         -25 (-26.04 % of base) : 17462.dasm - Xunit.Assert:ThrowsAny[System.__Canon](System.Action):System.__Canon (FullOpts)
         -20 (-25.97 % of base) : 78558.dasm - Xunit.Assert:IsAssignableFrom[System.__Canon](System.Object):System.__Canon (FullOpts)
         -20 (-25.97 % of base) : 133643.dasm - Xunit.Assert:IsType[System.__Canon](System.Object):System.__Canon (FullOpts)
         -13 (-25.49 % of base) : 91333.dasm - System.Composition.Hosting.Providers.Metadata.MetadataViewProvider+<>c__1`1[System.__Canon]:<GetMetadataViewProvider>b__1_0(System.Collections.Generic.IDictionary`2[System.String,System.Object]):System.__Canon:this (FullOpts)
         -18 (-25.35 % of base) : 47990.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -18 (-25.35 % of base) : 49231.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -18 (-25.00 % of base) : 4825.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -13 (-25.00 % of base) : 140897.dasm - System.Linq.ParallelQuery`1+<>c__2`1[System.__Canon,System.__Canon]:<OfType>b__2_1(System.__Canon):System.__Canon:this (FullOpts)


realworld.run.windows.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 9879513 (overridden on cmd)
Total bytes of diff: 9876529 (overridden on cmd)
Total bytes of delta: -2984 (-0.03 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          22 : 4755.dasm (6.09 % of base)

Top file improvements (bytes):
        -166 : 34810.dasm (-31.44 % of base)
        -103 : 35552.dasm (-30.93 % of base)
         -51 : 36250.dasm (-16.19 % of base)
         -46 : 27939.dasm (-5.23 % of base)
         -45 : 33769.dasm (-9.43 % of base)
         -43 : 34794.dasm (-22.87 % of base)
         -42 : 30765.dasm (-6.06 % of base)
         -42 : 36655.dasm (-18.50 % of base)
         -41 : 34806.dasm (-12.97 % of base)
         -41 : 8530.dasm (-30.15 % of base)
         -40 : 13003.dasm (-18.87 % of base)
         -40 : 36048.dasm (-16.81 % of base)
         -40 : 6884.dasm (-3.01 % of base)
         -40 : 7406.dasm (-7.34 % of base)
         -39 : 34768.dasm (-2.20 % of base)
         -36 : 19049.dasm (-5.74 % of base)
         -34 : 22944.dasm (-14.11 % of base)
         -31 : 34763.dasm (-19.25 % of base)
         -31 : 7274.dasm (-5.81 % of base)
         -30 : 32786.dasm (-2.40 % of base)

57 total files with Code Size differences (56 improved, 1 regressed), 10 unchanged.

Top method regressions (bytes):
          22 (6.09 % of base) : 4755.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)

Top method improvements (bytes):
        -166 (-31.44 % of base) : 34810.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`6[System.__Canon,ubyte,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
        -103 (-30.93 % of base) : 35552.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -51 (-16.19 % of base) : 36250.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`5[System.__Canon,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Invoke(System.Object,System.Object,System.Object,System.Object,System.Object):System.Object:this (FullOpts)
         -46 (-5.23 % of base) : 27939.dasm - Microsoft.CodeAnalysis.CSharp.NullableWalker:VisitAwaitableInfo(Microsoft.CodeAnalysis.CSharp.BoundAwaitableInfo):Microsoft.CodeAnalysis.CSharp.BoundNode:this (FullOpts)
         -45 (-9.43 % of base) : 33769.dasm - System.Management.Automation.SessionStateScope:CreateFunction(System.String,System.Management.Automation.ScriptBlock,System.Management.Automation.FunctionInfo,int,System.Management.Automation.ExecutionContext,System.String):System.Management.Automation.FunctionInfo (FullOpts)
         -43 (-22.87 % of base) : 34794.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -42 (-6.06 % of base) : 30765.dasm - Microsoft.CodeAnalysis.CSharp.AsyncMethodBuilderMemberCollection:TryGetBuilderMember[System.__Canon](Microsoft.CodeAnalysis.CSharp.SyntheticBoundNodeFactory,System.Nullable`1[int],Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol,ubyte,byref):ubyte (FullOpts)
         -42 (-18.50 % of base) : 36655.dasm - System.Runtime.InteropServices.CustomMarshalers.ComDataHelpers:GetOrCreateManagedViewFromComData[System.__Canon,System.__Canon](System.Object,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
         -41 (-30.15 % of base) : 8530.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -41 (-12.97 % of base) : 34806.dasm - System.Management.Automation.Interpreter.FuncCallInstruction`4[System.__Canon,System.__Canon,ubyte,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -40 (-7.34 % of base) : 7406.dasm - FSharp.Compiler.CheckDeclarations+TcDeclarations:SplitTyconDefn(FSharp.Compiler.Syntax.SynTypeDefn):System.Tuple`2[FSharp.Compiler.CheckDeclarations+MutRecDefnsPhase1DataForTycon,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] (FullOpts)
         -40 (-18.87 % of base) : 13003.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -40 (-3.01 % of base) : 6884.dasm - FSharp.Compiler.Lexer:endline(FSharp.Compiler.ParseHelpers+LexerEndlineContinuation,FSharp.Compiler.Lexhelp+LexArgs,ubyte,Internal.Utilities.Text.Lexing.LexBuffer`1[ushort]):FSharp.Compiler.Parser+token (FullOpts)
         -40 (-16.81 % of base) : 36048.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -39 (-2.20 % of base) : 34768.dasm - System.Management.Automation.ScriptBlock:BindArgumentsForScriptblockInvoke(System.Management.Automation.RuntimeDefinedParameter[],System.Object[],System.Management.Automation.ExecutionContext,ubyte,System.Collections.Generic.Dictionary`2[System.String,System.Management.Automation.PSVariable],System.Management.Automation.MutableTuple):System.Object[] (FullOpts)
         -36 (-5.74 % of base) : 19049.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithAnnotationsGreen[System.__Canon](System.__Canon,System.Collections.Generic.IEnumerable`1[Microsoft.CodeAnalysis.SyntaxAnnotation]):System.__Canon (FullOpts)
         -34 (-14.11 % of base) : 22944.dasm - Microsoft.CodeAnalysis.SyntaxList`1[System.__Canon]:get_Item(int):System.__Canon:this (FullOpts)
         -31 (-5.81 % of base) : 7274.dasm - FSharp.Compiler.ParseAndCheckInputs:GetScopedPragmasForHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective):Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] (FullOpts)
         -31 (-19.25 % of base) : 34763.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -30 (-2.40 % of base) : 32786.dasm - System.Runtime.CompilerServices.CallSite`1[System.__Canon]:<MakeUpdateDelegate>g__MakeUpdateDelegateWhenCanCompileToIL|18_0(byref):System.__Canon:this (FullOpts)

Top method regressions (percentages):
          22 (6.09 % of base) : 4755.dasm - System.Threading.Tasks.ThreadPoolTaskScheduler:TryExecuteTaskInline(System.Threading.Tasks.Task,ubyte):ubyte:this (FullOpts)

Top method improvements (percentages):
         -25 (-33.78 % of base) : 677.dasm - System.Activator:CreateInstance[System.__Canon]():System.__Canon (FullOpts)
        -166 (-31.44 % of base) : 34810.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`6[System.__Canon,ubyte,System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
        -103 (-30.93 % of base) : 35552.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`4[System.__Canon,System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -41 (-30.15 % of base) : 8530.dasm - FSharp.Compiler.TypedTreeOps:targetOfSuccessDecisionTree(FSharp.Compiler.TypedTree+DecisionTree):Microsoft.FSharp.Core.FSharpOption`1[int] (FullOpts)
         -25 (-29.07 % of base) : 21524.dasm - System.Reflection.MethodInfo:CreateDelegate[System.__Canon]():System.__Canon:this (FullOpts)
         -18 (-27.27 % of base) : 34968.dasm - System.Management.Automation.Language.GetSafeValueVisitor:VisitArrayExpression(System.Management.Automation.Language.ArrayExpressionAst):System.Object:this (FullOpts)
         -13 (-25.49 % of base) : 34889.dasm - System.Management.Automation.PSTypeExtensions+<>c__7`1[System.__Canon]:<GetCustomAttributes>b__7_1(System.Object):System.__Canon:this (FullOpts)
         -18 (-25.35 % of base) : 19756.dasm - Microsoft.CodeAnalysis.GreenNodeExtensions:WithDiagnosticsGreen[System.__Canon](System.__Canon,Microsoft.CodeAnalysis.DiagnosticInfo[]):System.__Canon (FullOpts)
         -23 (-23.71 % of base) : 9533.dasm - FSharp.Compiler.TypedTree+ValFlags:WithRecursiveValInfo(FSharp.Compiler.TypedTree+ValRecursiveScopeInfo):FSharp.Compiler.TypedTree+ValFlags:this (FullOpts)
         -43 (-22.87 % of base) : 34794.dasm - System.Management.Automation.Interpreter.ActionCallInstruction`2[System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -31 (-19.25 % of base) : 34763.dasm - System.Management.Automation.LanguagePrimitives:ConvertTo[System.__Canon](System.Object):System.__Canon (FullOpts)
         -13 (-19.12 % of base) : 32917.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile():System.__Canon:this (FullOpts)
         -40 (-18.87 % of base) : 13003.dasm - FSharp.Compiler.CompilerDiagnostics:GetWarningLevel(FSharp.Compiler.ErrorLogger+PhasedDiagnostic):int (FullOpts)
         -42 (-18.50 % of base) : 36655.dasm - System.Runtime.InteropServices.CustomMarshalers.ComDataHelpers:GetOrCreateManagedViewFromComData[System.__Canon,System.__Canon](System.Object,System.Func`2[System.__Canon,System.__Canon]):System.__Canon (FullOpts)
         -20 (-18.35 % of base) : 4558.dasm - FSharp.Compiler.ParseAndCheckInputs+PostParseModuleImpls@183:Invoke(FSharp.Compiler.Syntax.ParsedImplFileFragment):Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]]:this (FullOpts)
         -18 (-17.82 % of base) : 25248.dasm - Microsoft.CodeAnalysis.SyntaxList`1+Enumerator[System.__Canon]:get_Current():System.__Canon:this (FullOpts)
         -20 (-17.39 % of base) : 9644.dasm - FSharp.Compiler.TypedTreeBasics:ccuOfTyconRef(FSharp.Compiler.TypedTree+EntityRef):Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.TypedTree+CcuThunk] (FullOpts)
         -26 (-17.11 % of base) : 35840.dasm - System.Management.Automation.LanguagePrimitives:TryConvertTo[System.__Canon](System.Object,System.IFormatProvider,byref):ubyte (FullOpts)
         -40 (-16.81 % of base) : 36048.dasm - System.Management.Automation.Interpreter.DynamicInstruction`3[System.__Canon,System.__Canon,System.__Canon]:Run(System.Management.Automation.Interpreter.InterpretedFrame):int:this (FullOpts)
         -20 (-16.53 % of base) : 11095.dasm - FSharp.Compiler.TypedTreeOps:remapAttribKind(FSharp.Compiler.TypedTreeOps+Remap,FSharp.Compiler.TypedTree+AttribKind):FSharp.Compiler.TypedTree+AttribKind (FullOpts)


smoke_tests.nativeaot.windows.x64.checked.mch

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


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 3864 (overridden on cmd)
Total bytes of diff: 3849 (overridden on cmd)
Total bytes of delta: -15 (-0.39 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file improvements (bytes):
         -15 : 69.dasm (-11.54 % of base)

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

Top method improvements (bytes):
         -15 (-11.54 % of base) : 69.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)

Top method improvements (percentages):
         -15 (-11.54 % of base) : 69.dasm - System.Linq.Expressions.Expression`1[System.__Canon]:Compile(ubyte):System.__Canon:this (FullOpts)

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