MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] [hez2010] JIT: Allow stack allocate objects in loops #570

Open MihuBot opened 2 months ago

MihuBot commented 2 months ago

Job completed in 15 minutes. https://github.com/dotnet/runtime/pull/106526

Diffs

Found 265 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39722709
Total bytes of diff: 39722286
Total bytes of delta: -423 (-0.00 % of base)
Total relative delta: -0.67
    diff is an improvement.
    relative diff is an improvement.

Top file regressions (bytes):
          19 : ILCompiler.Reflection.ReadyToRun.dasm (0.01 % of base)

Top file improvements (bytes):
        -329 : System.Linq.Expressions.dasm (-0.04 % of base)
        -113 : System.Reflection.MetadataLoadContext.dasm (-0.05 % of base)

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

Top method regressions (bytes):
          19 (2.29 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts)
          11 (1.77 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)

Top method improvements (bytes):
        -113 (-4.80 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.Ecma.EcmaDefaultValueProcessing:TryFindRawDefaultValueFromCustomAttributes(System.Reflection.Metadata.CustomAttributeHandleCollection,System.Reflection.TypeLoading.Ecma.EcmaModule,byref):ubyte (FullOpts)
         -70 (-13.49 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
         -69 (-13.48 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
         -67 (-13.06 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts)

Top method regressions (percentages):
          19 (2.29 % of base) : ILCompiler.Reflection.ReadyToRun.dasm - ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts)
          11 (1.77 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts)

Top method improvements (percentages):
         -70 (-13.49 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts)
         -69 (-13.48 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts)
         -67 (-13.21 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts)
         -67 (-13.06 % of base) : System.Linq.Expressions.dasm - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts)
        -113 (-4.80 % of base) : System.Reflection.MetadataLoadContext.dasm - System.Reflection.TypeLoading.Ecma.EcmaDefaultValueProcessing:TryFindRawDefaultValueFromCustomAttributes(System.Reflection.Metadata.CustomAttributeHandleCollection,System.Reflection.TypeLoading.Ecma.EcmaModule,byref):ubyte (FullOpts)

8 total methods with Code Size differences (6 improved, 2 regressed), 232053 unchanged.

--------------------------------------------------------------------------------

Artifacts:

MihuBot commented 2 months ago

Top method regressions

19 (2.29 % of base) - ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this ```diff ; Assembly listing for method ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data ; 0 inlinees with PGO data; 25 single block inlinees; 8 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T25] ( 3, 3 ) ref -> rbx this class-hnd single-def -; V01 arg1 [V01,T26] ( 3, 3 ) ref -> r15 class-hnd single-def +; V00 this [V00,T31] ( 3, 3 ) ref -> rbx this class-hnd single-def +; V01 arg1 [V01,T32] ( 3, 3 ) ref -> r15 class-hnd single-def ; V02 loc0 [V02,T08] ( 5,162 ) ref -> r14 class-hnd exact single-def ; V03 loc1 [V03,T13] ( 5, 57 ) int -> r13 -;* V04 loc2 [V04,T38] ( 0, 0 ) long -> zero-ref class-hnd exact EH-live single-def +; V04 loc2 [V04,T20] ( 5, 19 ) ref -> r12 class-hnd exact single-def ;* V05 loc3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op -; V06 loc4 [V06,T20] ( 3, 17 ) int -> [rbp-0x2C] +; V06 loc4 [V06,T22] ( 3, 17 ) int -> [rbp-0x2C] ;* V07 loc5 [V07 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op ;* V08 loc6 [V08 ] ( 0, 0 ) ref -> zero-ref class-hnd ; V09 loc7 [V09,T01] ( 8,296 ) int -> [rbp-0x30] ;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V11 tmp1 [V11,T23] ( 3, 6 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" -;* V12 tmp2 [V12 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +; V11 tmp1 [V11,T29] ( 3, 6 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" +; V12 tmp2 [V12,T27] ( 5, 10 ) ref -> r12 class-hnd exact single-def "Single-def Box Helper" ;* V13 tmp3 [V13 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V14 tmp4 [V14 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V15 tmp5 [V15,T04] ( 3,192 ) ref -> [rbp-0x90] class-hnd exact spill-single-def "NewObj constructor temp" +; V15 tmp5 [V15,T04] ( 3,192 ) ref -> [rbp-0x70] class-hnd exact spill-single-def "NewObj constructor temp" ;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V17 tmp7 [V17 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V18 tmp8 [V18,T24] ( 3, 6 ) ref -> rdi class-hnd single-def "Inlining Arg" -; V19 tmp9 [V19,T33] ( 1, 2 ) struct (32) [rbp-0x50] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" +; V18 tmp8 [V18,T30] ( 3, 6 ) ref -> rdi class-hnd single-def "Inlining Arg" +; V19 tmp9 [V19,T33] ( 2, 4 ) struct (32) [rbp-0x50] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" ;* V20 tmp10 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V21 tmp11 [V21 ] ( 0, 0 ) long -> zero-ref "Inlining Arg" -; V22 tmp12 [V22,T27] ( 4, 3 ) ref -> rdi class-hnd single-def "Inline stloc first use temp" +; V21 tmp11 [V21,T25] ( 9, 12 ) byref -> rax single-def "Inlining Arg" +; V22 tmp12 [V22,T34] ( 4, 3 ) ref -> rdi class-hnd single-def "Inline stloc first use temp" ;* V23 tmp13 [V23 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V24 tmp14 [V24 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op "NewObj constructor temp" ;* V25 tmp15 [V25 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V26 tmp16 [V26,T10] ( 9,144 ) long -> rdi "Inlining Arg" -; V27 tmp17 [V27,T17] ( 4, 32 ) ref -> rsi class-hnd "Inline stloc first use temp" +; V26 tmp16 [V26,T10] ( 7,112 ) byref -> rax "Inlining Arg" +; V27 tmp17 [V27,T17] ( 4, 32 ) ref -> rdx class-hnd "Inline stloc first use temp" ;* V28 tmp18 [V28 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ; V29 tmp19 [V29,T00] ( 7,448 ) ref -> rdi class-hnd "Inline return value spill temp" ; V30 tmp20 [V30,T05] ( 3,192 ) byref -> rax "Inline stloc first use temp" ;* V31 tmp21 [V31 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd "Inline ldloca(s) first use temp" ; V32 tmp22 [V32,T06] ( 3,192 ) ref -> rdx class-hnd "Inline stloc first use temp" ; V33 tmp23 [V33,T03] ( 4,256 ) int -> rsi "Inline stloc first use temp" ;* V34 tmp24 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V35 tmp25 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" ;* V36 tmp26 [V36 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -; V37 tmp27 [V37 ] ( 19, 36.50) struct (40) [rbp-0x78] do-not-enreg[XSF] must-init addr-exposed "stack allocated boxed value class temp" -;* V38 tmp28 [V38 ] ( 0, 0 ) int -> zero-ref "field V05.k__BackingField (fldOffset=0x0)" P-INDEP -; V39 tmp29 [V39,T12] ( 6, 58 ) int -> rbx "field V05.k__BackingField (fldOffset=0x4)" P-INDEP -; V40 tmp30 [V40,T14] ( 5, 50 ) int -> r12 "field V05.k__BackingField (fldOffset=0x8)" P-INDEP -; V41 tmp31 [V41,T11] ( 4, 73 ) ref -> r15 single-def "field V07._list (fldOffset=0x0)" P-INDEP -; V42 tmp32 [V42,T02] ( 6,264 ) ref -> [rbp-0x98] spill-single-def "field V07._current (fldOffset=0x8)" P-INDEP -;* V43 tmp33 [V43,T35] ( 0, 0 ) int -> zero-ref "field V07._index (fldOffset=0x10)" P-INDEP -; V44 tmp34 [V44,T22] ( 2, 9 ) int -> [rbp-0x7C] spill-single-def "field V07._version (fldOffset=0x14)" P-INDEP -; V45 tmp35 [V45,T28] ( 3, 3 ) ref -> r15 single-def "field V24._list (fldOffset=0x0)" P-INDEP -;* V46 tmp36 [V46 ] ( 0, 0 ) ref -> zero-ref single-def "field V24._current (fldOffset=0x8)" P-INDEP -;* V47 tmp37 [V47,T36] ( 0, 0 ) int -> zero-ref single-def "field V24._index (fldOffset=0x10)" P-INDEP -; V48 tmp38 [V48,T31] ( 2, 2 ) int -> rax single-def "field V24._version (fldOffset=0x14)" P-INDEP -;* V49 tmp39 [V49 ] ( 0, 0 ) ref -> zero-ref single-def "V19.[000..008)" -;* V50 tmp40 [V50 ] ( 0, 0 ) int -> zero-ref single-def "V19.[008..012)" -; V51 tmp41 [V51,T32] ( 2, 2 ) int -> rsi single-def "V19.[012..016)" -; V52 tmp42 [V52,T29] ( 3, 3 ) ref -> rdi single-def "arr expr" -; V53 tmp43 [V53,T30] ( 3, 3 ) int -> rsi "index expr" -; V54 tmp44 [V54,T07] ( 3,192 ) ref -> rcx "arr expr" -; V55 tmp45 [V55,T15] ( 3, 48 ) ref -> r8 "arr expr" -; V56 tmp46 [V56,T16] ( 3, 48 ) int -> r9 "index expr" -; V57 PSPSym [V57,T37] ( 1, 1 ) long -> [rbp-0xA0] do-not-enreg[V] "PSPSym" -; V58 cse0 [V58,T19] ( 3, 24 ) int -> r9 "CSE #06: moderate" -; V59 cse1 [V59,T21] ( 2, 16 ) int -> r9 "CSE #07: moderate" -; V60 cse2 [V60,T34] ( 3, 1.50) int -> rsi "CSE #05: conservative" -; V61 cse3 [V61,T18] ( 3, 24 ) ref -> r8 "CSE #08: moderate" -; V62 rat0 [V62,T09] ( 6,161 ) long -> [rbp-0x88] "Widened IV V43" +;* V37 tmp27 [V37 ] ( 0, 0 ) int -> zero-ref "field V05.k__BackingField (fldOffset=0x0)" P-INDEP +; V38 tmp28 [V38,T12] ( 6, 58 ) int -> [rbp-0x54] "field V05.k__BackingField (fldOffset=0x4)" P-INDEP +; V39 tmp29 [V39,T14] ( 5, 50 ) int -> [rbp-0x58] "field V05.k__BackingField (fldOffset=0x8)" P-INDEP +; V40 tmp30 [V40,T11] ( 4, 73 ) ref -> r15 single-def "field V07._list (fldOffset=0x0)" P-INDEP +; V41 tmp31 [V41,T02] ( 6,264 ) ref -> [rbp-0x78] spill-single-def "field V07._current (fldOffset=0x8)" P-INDEP +;* V42 tmp32 [V42,T42] ( 0, 0 ) int -> zero-ref "field V07._index (fldOffset=0x10)" P-INDEP +; V43 tmp33 [V43,T28] ( 2, 9 ) int -> [rbp-0x5C] spill-single-def "field V07._version (fldOffset=0x14)" P-INDEP +; V44 tmp34 [V44,T35] ( 3, 3 ) ref -> r15 single-def "field V24._list (fldOffset=0x0)" P-INDEP +;* V45 tmp35 [V45 ] ( 0, 0 ) ref -> zero-ref single-def "field V24._current (fldOffset=0x8)" P-INDEP +;* V46 tmp36 [V46,T43] ( 0, 0 ) int -> zero-ref single-def "field V24._index (fldOffset=0x10)" P-INDEP +; V47 tmp37 [V47,T38] ( 2, 2 ) int -> r8 single-def "field V24._version (fldOffset=0x14)" P-INDEP +;* V48 tmp38 [V48 ] ( 0, 0 ) ref -> zero-ref single-def "V19.[000..008)" +;* V49 tmp39 [V49 ] ( 0, 0 ) int -> zero-ref single-def "V19.[008..012)" +; V50 tmp40 [V50,T39] ( 2, 2 ) int -> rdx single-def "V19.[012..016)" +; V51 tmp41 [V51,T36] ( 3, 3 ) ref -> rdi single-def "arr expr" +; V52 tmp42 [V52,T37] ( 3, 3 ) int -> rsi "index expr" +; V53 tmp43 [V53,T07] ( 3,192 ) ref -> r9 "arr expr" +; V54 tmp44 [V54,T15] ( 3, 48 ) ref -> rsi "arr expr" +; V55 tmp45 [V55,T16] ( 3, 48 ) int -> rdi "index expr" +; V56 PSPSym [V56,T44] ( 1, 1 ) long -> [rbp-0x90] do-not-enreg[V] "PSPSym" +; V57 cse0 [V57,T18] ( 3, 24 ) int -> rdi "CSE #08: moderate" +; V58 cse1 [V58,T23] ( 2, 16 ) int -> rdi "CSE #09: moderate" +; V59 cse2 [V59,T24] ( 2, 16 ) int -> r11 "CSE #11: moderate" +; V60 cse3 [V60,T19] ( 3, 24 ) int -> rsi "CSE #12: moderate" +; V61 cse4 [V61,T40] ( 3, 1.50) int -> rsi "CSE #02: conservative" +; V62 cse5 [V62,T41] ( 3, 1.50) int -> rcx "CSE #06: conservative" +; V63 cse6 [V63,T21] ( 6, 18 ) byref -> [rbp-0x80] multi-def "CSE #07: moderate" +; V64 cse7 [V64,T26] ( 4, 11 ) byref -> rbx "CSE #01: moderate" +; V65 rat0 [V65,T09] ( 6,161 ) long -> [rbp-0x68] "Widened IV V42" ; -; Lcl frame size = 120 +; Lcl frame size = 104 G_M53180_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 120 - lea rbp, [rsp+0xA0] - xor eax, eax - mov qword ptr [rbp-0x78], rax + sub rsp, 104 + lea rbp, [rsp+0x90] vxorps xmm8, xmm8, xmm8 - vmovdqu32 zmmword ptr [rbp-0x70], zmm8 - mov qword ptr [rbp-0xA0], rsp + vmovdqu ymmword ptr [rbp-0x50], ymm8 + mov qword ptr [rbp-0x90], rsp mov rbx, rdi mov r15, rsi - ;; size=56 bbWeight=1 PerfScore 11.83 + ;; size=45 bbWeight=1 PerfScore 10.58 G_M53180_IG02: mov rdi, 0xD1FFAB1E ; System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]] call CORINFO_HELP_NEWSFAST mov r14, rax mov rdi, r14 xor esi, esi xor rdx, rdx mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:.ctor(int,System.Collections.Generic.IEqualityComparer`1[int]):this call [rax]System.Collections.Generic.Dictionary`2[int,System.__Canon]:.ctor(int,System.Collections.Generic.IEqualityComparer`1[int]):this xor r13d, r13d mov rdi, 0xD1FFAB1E ; System.Collections.Generic.List`1+Enumerator[ILCompiler.Reflection.ReadyToRun.Amd64.InterruptibleRange] - mov qword ptr [rbp-0x78], rdi + call CORINFO_HELP_NEWSFAST + mov r12, rax mov rdi, gword ptr [rbx+0x38] - mov esi, dword ptr [rdi+0x14] - ;; size=61 bbWeight=1 PerfScore 11.00 + mov edx, dword ptr [rdi+0x14] + mov gword ptr [rbp-0x50], rdi + lea rbx, bword ptr [r12+0x08] + mov rdi, rbx + lea rsi, bword ptr [rbp-0x50] + call CORINFO_HELP_ASSIGN_BYREF + movsq + movsq + movsq + xor edi, edi + mov dword ptr [r12+0x10], edi + mov dword ptr [r12+0x14], edx + ;; size=104 bbWeight=1 PerfScore 19.75 G_M53180_IG03: - vmovdqu ymm0, ymmword ptr [rbp-0x50] - vmovdqu ymmword ptr [rbp-0x70], ymm0 - ;; size=10 bbWeight=1 PerfScore 5.00 + mov rax, rbx + mov rdi, gword ptr [rax] + mov esi, dword ptr [rax+0x0C] + cmp esi, dword ptr [rdi+0x14] + jne G_M53180_IG19 + ;; size=18 bbWeight=1 PerfScore 8.25 G_M53180_IG04: - mov gword ptr [rbp-0x70], rdi + mov esi, dword ptr [rax+0x08] + mov ecx, dword ptr [rdi+0x10] + cmp esi, ecx + jb SHORT G_M53180_IG05 + inc ecx + mov dword ptr [rax+0x08], ecx + lea rcx, bword ptr [rax+0x10] xor edi, edi - mov dword ptr [rbp-0x68], edi - mov dword ptr [rbp-0x64], esi - ;; size=12 bbWeight=1 PerfScore 3.25 + mov qword ptr [rcx], rdi + mov dword ptr [rcx+0x08], edi + jmp SHORT G_M53180_IG06 + ;; size=29 bbWeight=0.50 PerfScore 5.62 G_M53180_IG05: - mov rdi, gword ptr [rbp-0x70] - mov esi, dword ptr [rbp-0x64] - cmp esi, dword ptr [rdi+0x14] - jne G_M53180_IG21 - ;; size=16 bbWeight=1 PerfScore 6.00 -G_M53180_IG06: - mov esi, dword ptr [rdi+0x10] - cmp dword ptr [rbp-0x68], esi - jb SHORT G_M53180_IG07 - inc esi - mov dword ptr [rbp-0x68], esi - xor edi, edi - mov qword ptr [rbp-0x60], rdi - mov dword ptr [rbp-0x58], edi - jmp SHORT G_M53180_IG08 - ;; size=24 bbWeight=0.50 PerfScore 5.25 -G_M53180_IG07: mov rdi, gword ptr [rdi+0x08] - mov esi, dword ptr [rbp-0x68] cmp esi, dword ptr [rdi+0x08] - jae G_M53180_IG20 - lea rsi, [rsi+2*rsi] - mov rax, qword ptr [rdi+4*rsi+0x10] - mov qword ptr [rbp-0x60], rax - mov eax, dword ptr [rdi+4*rsi+0x18] - mov dword ptr [rbp-0x58], eax - mov edi, dword ptr [rbp-0x68] - inc edi - mov dword ptr [rbp-0x68], edi - ;; size=44 bbWeight=0.50 PerfScore 7.88 -G_M53180_IG08: - mov ebx, dword ptr [rbp-0x5C] - mov r12d, dword ptr [rbp-0x58] - mov edi, r12d - sub edi, ebx - mov eax, dword ptr [r15+0x14] - mov dword ptr [rbp-0x7C], eax + jae G_M53180_IG18 + mov ecx, esi + lea rsi, [rcx+2*rcx] + lea rcx, bword ptr [rax+0x10] + mov rdx, qword ptr [rdi+4*rsi+0x10] + mov qword ptr [rcx], rdx + mov edx, dword ptr [rdi+4*rsi+0x18] + mov dword ptr [rcx+0x08], edx + inc dword ptr [rax+0x08] + ;; size=41 bbWeight=0.50 PerfScore 8.12 +G_M53180_IG06: + mov eax, dword ptr [r12+0x1C] + mov edx, dword ptr [r12+0x20] + mov edi, edx + sub edi, eax + mov r8d, dword ptr [r15+0x14] + mov dword ptr [rbp-0x5C], r8d xor esi, esi - jmp SHORT G_M53180_IG10 - ;; size=23 bbWeight=1 PerfScore 7.75 -G_M53180_IG09: + jmp SHORT G_M53180_IG08 + ;; size=26 bbWeight=1 PerfScore 9.75 +G_M53180_IG07: lea eax, [rsi+0x01] mov dword ptr [rdi+0x10], eax movsxd rsi, esi mov rdi, rdx - mov rdx, gword ptr [rbp-0x98] + mov rdx, gword ptr [rbp-0x78] mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ARRADDR_ST call [rax]CORINFO_HELP_ARRADDR_ST - mov eax, dword ptr [rbp-0x7C] - mov rsi, qword ptr [rbp-0x88] + mov eax, dword ptr [rbp-0x54] + mov rcx, bword ptr [rbp-0x80] + mov edx, dword ptr [rbp-0x58] + mov rsi, qword ptr [rbp-0x68] mov edi, dword ptr [rbp-0x2C] - ;; size=44 bbWeight=64 PerfScore 592.00 -G_M53180_IG10: - cmp eax, dword ptr [r15+0x14] - jne G_M53180_IG21 + mov r8d, dword ptr [rbp-0x5C] + ;; size=49 bbWeight=64 PerfScore 784.00 +G_M53180_IG08: + cmp r8d, dword ptr [r15+0x14] + jne G_M53180_IG19 ;; size=10 bbWeight=8 PerfScore 32.00 -G_M53180_IG11: +G_M53180_IG09: cmp esi, dword ptr [r15+0x10] - jae G_M53180_IG24 - mov rcx, gword ptr [r15+0x08] - cmp esi, dword ptr [rcx+0x08] - jae G_M53180_IG20 - mov rcx, gword ptr [rcx+8*rsi+0x10] - mov gword ptr [rbp-0x98], rcx + jae G_M53180_IG22 + mov r9, gword ptr [r15+0x08] + cmp esi, dword ptr [r9+0x08] + jae G_M53180_IG18 + mov r9, gword ptr [r9+8*rsi+0x10] + mov gword ptr [rbp-0x78], r9 inc esi - mov qword ptr [rbp-0x88], rsi - mov r8d, ebx - add r8d, dword ptr [rcx+0x08] - sub r8d, r13d - movsxd rsi, r8d - mov r9d, r12d - cmp rsi, r9 - jle SHORT G_M53180_IG13 - ;; size=65 bbWeight=32 PerfScore 624.00 -G_M53180_IG12: + mov qword ptr [rbp-0x68], rsi + mov r11d, eax + add r11d, dword ptr [r9+0x08] + sub r11d, r13d + movsxd rsi, r11d + mov r8d, edx + cmp rsi, r8 + mov dword ptr [rbp-0x54], eax + mov dword ptr [rbp-0x58], edx + jle SHORT G_M53180_IG11 + ;; size=66 bbWeight=32 PerfScore 688.00 +G_M53180_IG10: add r13d, edi - lea rdi, [rbp-0x70] - mov r8, gword ptr [rdi] - mov rsi, r8 - mov r9d, dword ptr [rdi+0x0C] - cmp r9d, dword ptr [rsi+0x14] - jne G_M53180_IG21 - mov r9d, dword ptr [rdi+0x08] - cmp r9d, dword ptr [rsi+0x10] - jae SHORT G_M53180_IG14 - mov r8, gword ptr [rsi+0x08] - cmp r9d, dword ptr [r8+0x08] - jae G_M53180_IG20 - mov esi, r9d - lea rsi, [rsi+2*rsi] - mov r9, qword ptr [r8+4*rsi+0x10] - mov qword ptr [rdi+0x10], r9 - mov r9d, dword ptr [r8+4*rsi+0x18] - mov dword ptr [rdi+0x18], r9d - inc dword ptr [rdi+0x08] - jmp SHORT G_M53180_IG15 - ;; size=81 bbWeight=8 PerfScore 262.00 -G_M53180_IG13: + mov rax, rbx + mov rdx, gword ptr [rax] + mov edi, dword ptr [rax+0x0C] + mov r11d, dword ptr [rdx+0x14] + cmp edi, r11d + jne G_M53180_IG19 + mov edi, dword ptr [rax+0x08] + mov esi, dword ptr [rdx+0x10] + cmp edi, esi + jae SHORT G_M53180_IG12 + mov rsi, gword ptr [rdx+0x08] + cmp edi, dword ptr [rsi+0x08] + jae G_M53180_IG18 + lea rdi, [rdi+2*rdi] + mov rdx, qword ptr [rsi+4*rdi+0x10] + mov qword ptr [rcx], rdx + mov edx, dword ptr [rsi+4*rdi+0x18] + mov dword ptr [rcx+0x08], edx + inc dword ptr [rax+0x08] + jmp SHORT G_M53180_IG13 + ;; size=72 bbWeight=8 PerfScore 244.00 +G_M53180_IG11: + mov bword ptr [rbp-0x80], rcx mov dword ptr [rbp-0x2C], edi - jmp SHORT G_M53180_IG16 - ;; size=5 bbWeight=16 PerfScore 48.00 -G_M53180_IG14: - mov esi, dword ptr [r8+0x10] + jmp SHORT G_M53180_IG14 + ;; size=9 bbWeight=16 PerfScore 64.00 +G_M53180_IG12: inc esi - mov dword ptr [rdi+0x08], esi - xor esi, esi - mov qword ptr [rdi+0x10], rsi - mov dword ptr [rdi+0x18], esi - ;; size=18 bbWeight=8 PerfScore 44.00 -G_M53180_IG15: - mov ebx, dword ptr [rbp-0x5C] - mov r12d, dword ptr [rbp-0x58] - mov edi, r12d - sub edi, ebx + mov dword ptr [rax+0x08], esi + xor edi, edi + mov bword ptr [rbp-0x80], rcx + mov qword ptr [rcx], rdi + mov dword ptr [rcx+0x08], edi + mov rcx, bword ptr [rbp-0x80] + ;; size=21 bbWeight=8 PerfScore 44.00 +G_M53180_IG13: + mov eax, dword ptr [r12+0x1C] + mov edx, dword ptr [r12+0x20] + mov dword ptr [rbp-0x58], edx + mov edi, edx + sub edi, eax mov dword ptr [rbp-0x2C], edi - mov edi, ebx - add edi, dword ptr [rcx+0x08] - sub edi, r13d - mov r9d, edi - mov r8d, r9d - ;; size=29 bbWeight=8 PerfScore 60.00 -G_M53180_IG16: - mov dword ptr [rcx+0x08], r8d + mov dword ptr [rbp-0x54], eax + mov r11d, eax + add r11d, dword ptr [r9+0x08] + sub r11d, r13d + mov bword ptr [rbp-0x80], rcx + ;; size=37 bbWeight=8 PerfScore 96.00 +G_M53180_IG14: + mov dword ptr [r9+0x08], r11d mov rdi, r14 - mov dword ptr [rbp-0x30], r8d - mov esi, r8d - mov r9, 0xD1FFAB1E ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this - call [r9]System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this + mov dword ptr [rbp-0x30], r11d + mov esi, r11d + mov r8, 0xD1FFAB1E ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this + call [r8]System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this test rax, rax - jne SHORT G_M53180_IG19 + jne SHORT G_M53180_IG17 ;; size=32 bbWeight=64 PerfScore 448.00 -G_M53180_IG17: +G_M53180_IG15: mov rdi, 0xD1FFAB1E ; System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition] call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x90], rax + mov gword ptr [rbp-0x70], rax mov rdi, 0xD1FFAB1E ; global ptr test byte ptr [rdi], 1 - je G_M53180_IG22 - ;; size=41 bbWeight=32 PerfScore 208.00 -G_M53180_IG18: + je G_M53180_IG20 + ;; size=38 bbWeight=32 PerfScore 208.00 +G_M53180_IG16: mov rdi, 0xD1FFAB1E ; data for System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]:s_emptyArray mov rsi, gword ptr [rdi] lea rdi, bword ptr [rax+0x08] call CORINFO_HELP_ASSIGN_REF mov rdi, r14 mov esi, dword ptr [rbp-0x30] - mov rdx, gword ptr [rbp-0x90] + mov rdx, gword ptr [rbp-0x70] mov ecx, 1 mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:TryInsert(int,System.__Canon,ubyte):ubyte:this call [rax]System.Collections.Generic.Dictionary`2[int,System.__Canon]:TryInsert(int,System.__Canon,ubyte):ubyte:this - ;; size=52 bbWeight=32 PerfScore 304.00 -G_M53180_IG19: + ;; size=49 bbWeight=32 PerfScore 304.00 +G_M53180_IG17: mov rdi, r14 mov esi, dword ptr [rbp-0x30] mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this call [rax]System.Collections.Generic.Dictionary`2[int,System.__Canon]:FindValue(int):byref:this test rax, rax - je SHORT G_M53180_IG23 + je SHORT G_M53180_IG21 mov rdi, gword ptr [rax] inc dword ptr [rdi+0x14] mov rdx, gword ptr [rdi+0x08] mov esi, dword ptr [rdi+0x10] cmp dword ptr [rdx+0x08], esi - ja G_M53180_IG09 - mov rsi, gword ptr [rbp-0x98] + ja G_M53180_IG07 + mov rsi, gword ptr [rbp-0x78] mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this call [rax]System.Collections.Generic.List`1[System.__Canon]:AddWithResize(System.__Canon):this - mov eax, dword ptr [rbp-0x7C] - mov rsi, qword ptr [rbp-0x88] + mov eax, dword ptr [rbp-0x54] + mov rcx, bword ptr [rbp-0x80] + mov edx, dword ptr [rbp-0x58] + mov rsi, qword ptr [rbp-0x68] mov edi, dword ptr [rbp-0x2C] - jmp G_M53180_IG10 - ;; size=82 bbWeight=64 PerfScore 1792.00 -G_M53180_IG20: + mov r8d, dword ptr [rbp-0x5C] + jmp G_M53180_IG08 + ;; size=87 bbWeight=64 PerfScore 1984.00 +G_M53180_IG18: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -G_M53180_IG21: +G_M53180_IG19: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion() call [rax]System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M53180_IG22: +G_M53180_IG20: mov rdi, 0xD1FFAB1E ; System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition] call CORINFO_HELP_GET_GCSTATIC_BASE - mov rax, gword ptr [rbp-0x90] - jmp G_M53180_IG18 - ;; size=27 bbWeight=0 PerfScore 0.00 -G_M53180_IG23: + mov rax, gword ptr [rbp-0x70] + jmp G_M53180_IG16 + ;; size=24 bbWeight=0 PerfScore 0.00 +G_M53180_IG21: mov edi, dword ptr [rbp-0x30] mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowKeyNotFoundException[int](int) call [rax]System.ThrowHelper:ThrowKeyNotFoundException[int](int) int3 ;; size=16 bbWeight=0 PerfScore 0.00 -G_M53180_IG24: +G_M53180_IG22: mov rax, r14 ;; size=3 bbWeight=1 PerfScore 0.25 -G_M53180_IG25: - vzeroupper - add rsp, 120 +G_M53180_IG23: + add rsp, 104 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=18 bbWeight=1 PerfScore 5.25 -G_M53180_IG26: + ;; size=15 bbWeight=1 PerfScore 4.25 +G_M53180_IG24: push rbp push r15 push r14 push r13 push r12 push rbx push rax mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp - lea rbp, [rbp+0xA0] + lea rbp, [rbp+0x90] ;; size=25 bbWeight=0 PerfScore 0.00 -G_M53180_IG27: - vzeroupper +G_M53180_IG25: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret - ;; size=18 bbWeight=0 PerfScore 0.00 + ;; size=15 bbWeight=0 PerfScore 0.00 -; Total bytes of code 831, prolog size 56, PerfScore 4477.46, instruction count 219, allocated bytes for code 831 (MethodHash=d9be3043) for method ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts) +; Total bytes of code 850, prolog size 45, PerfScore 4962.58, instruction count 234, allocated bytes for code 850 (MethodHash=d9be3043) for method ILCompiler.Reflection.ReadyToRun.Amd64.GcInfo:UpdateTransitionCodeOffset(System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.Amd64.GcTransition]):System.Collections.Generic.Dictionary`2[int,System.Collections.Generic.List`1[ILCompiler.Reflection.ReadyToRun.BaseGcTransition]]:this (FullOpts) ```
11 (1.77 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] ```diff ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T03] ( 9, 26.50) ref -> rbx class-hnd single-def ; V01 arg1 [V01,T04] ( 5, 11 ) ref -> r15 class-hnd single-def ; V02 loc0 [V02,T02] ( 11, 29.66) ref -> r14 class-hnd ;* V03 loc1 [V03,T09] ( 0, 0 ) int -> zero-ref -; V04 loc2 [V04,T07] ( 4, 8 ) int -> r12 +; V04 loc2 [V04,T06] ( 4, 8 ) int -> r12 ; V05 loc3 [V05,T12] ( 3, 8 ) simd32 -> [rbp-0x50] do-not-enreg[HS] hidden-struct-arg ; V06 loc4 [V06,T00] ( 12, 82.16) int -> [rbp-0x54] ; V07 OutArgs [V07 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V08 tmp1 [V08,T11] ( 2, 16 ) simd32 -> [rbp-0x90] do-not-enreg[HS] hidden-struct-arg "spilled call-like call argument" -; V09 tmp2 [V09,T05] ( 3, 12 ) ref -> [rbp-0xB8] class-hnd exact spill-single-def "Single-def Box Helper" -; V10 tmp3 [V10,T06] ( 3, 12 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Single-def Box Helper" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +; V10 tmp3 [V10,T05] ( 3, 12 ) ref -> [rbp-0xE0] class-hnd exact spill-single-def "Single-def Box Helper" ; V11 tmp4 [V11,T10] ( 4, 64 ) simd32 -> [rbp-0xB0] do-not-enreg[HS] hidden-struct-arg "Strict ordering of exceptions for Array store" ; V12 tmp5 [V12,T08] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V13 rat0 [V13,T01] ( 12, 42 ) long -> r13 "Widened IV V03" +; V13 tmp6 [V13 ] ( 4, 8 ) struct (40) [rbp-0xD8] do-not-enreg[XSF] addr-exposed "stack allocated boxed value class temp" +; V14 cse0 [V14,T07] ( 3, 6 ) long -> rdi "CSE #01: aggressive" +; V15 rat0 [V15,T01] ( 12, 42 ) long -> r13 "Widened IV V03" ; -; Lcl frame size = 184 +; Lcl frame size = 216 G_M3520_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 184 - lea rbp, [rsp+0xE0] + sub rsp, 216 + lea rbp, [rsp+0x100] mov rbx, rdi mov r15, rsi ;; size=31 bbWeight=1 PerfScore 7.25 G_M3520_IG02: test rbx, rbx je G_M3520_IG16 test r15, r15 je G_M3520_IG15 xor r14, r14 xor r13d, r13d mov rdi, gword ptr [rbx+0x08] mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.ICollection`1[System.Numerics.Vector`1[float]]:get_Count():int:this call [r11]System.Collections.Generic.ICollection`1[System.Numerics.Vector`1[float]]:get_Count():int:this mov r12d, eax test r12d, r12d jle G_M3520_IG09 ;; size=53 bbWeight=1 PerfScore 9.75 G_M3520_IG03: mov rdi, gword ptr [rbx+0x08] lea rsi, [rbp-0x90] mov edx, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this call [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this vmovups ymm0, ymmword ptr [rbp-0x90] vmovups ymmword ptr [rsp], ymm0 lea rsi, [rbp-0x50] mov rdi, gword ptr [r15+0x08] call [r15+0x18]System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]:Invoke(System.Numerics.Vector`1[float]):System.Numerics.Vector`1[float]:this test r14, r14 jne G_M3520_IG07 ;; size=61 bbWeight=4 PerfScore 71.00 G_M3520_IG04: + vxorps ymm0, ymm0, ymm0 + vmovdqu ymmword ptr [rbp-0xD8], ymm0 + vmovdqu xmmword ptr [rbp-0xC0], xmm0 mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0xB8], rax + mov qword ptr [rbp-0xD8], rdi vmovups ymm0, ymmword ptr [rbp-0x50] - vmovups ymmword ptr [rax+0x08], ymm0 - mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float] + vmovups ymmword ptr [rbp-0xD0], ymm0 call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0xC0], rax + mov gword ptr [rbp-0xE0], rax mov rdi, gword ptr [rbx+0x08] lea rsi, bword ptr [rax+0x08] mov edx, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this call [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this - mov rsi, gword ptr [rbp-0xB8] - cmp rsi, gword ptr [rbp-0xC0] + lea rsi, [rbp-0xD8] + mov rdi, gword ptr [rbp-0xE0] + cmp rsi, rdi je G_M3520_IG08 movsxd rsi, r12d mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float][] call CORINFO_HELP_NEWARR_1_VC mov r14, rax xor eax, eax test r13d, r13d jle SHORT G_M3520_IG07 - ;; size=126 bbWeight=2 PerfScore 47.50 + ;; size=137 bbWeight=2 PerfScore 45.17 G_M3520_IG05: cmp dword ptr [r14+0x08], r13d jl G_M3520_IG12 ;; size=10 bbWeight=1 PerfScore 4.00 G_M3520_IG06: mov rdi, gword ptr [rbx+0x08] lea rsi, [rbp-0xB0] mov dword ptr [rbp-0x54], eax mov edx, eax mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this call [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this mov eax, dword ptr [rbp-0x54] mov edi, eax shl rdi, 5 vmovups ymm0, ymmword ptr [rbp-0xB0] vmovups ymmword ptr [r14+rdi+0x10], ymm0 inc eax cmp eax, r13d jl SHORT G_M3520_IG06 ;; size=60 bbWeight=15.84 PerfScore 257.40 G_M3520_IG07: cmp r13d, dword ptr [r14+0x08] jae G_M3520_IG17 mov rax, r13 shl rax, 5 vmovups ymm0, ymmword ptr [rbp-0x50] vmovups ymmword ptr [r14+rax+0x10], ymm0 ;; size=29 bbWeight=2 PerfScore 21.50 G_M3520_IG08: inc r13d cmp r13d, r12d jl G_M3520_IG03 ;; size=12 bbWeight=4 PerfScore 6.00 G_M3520_IG09: test r14, r14 jne SHORT G_M3520_IG13 ;; size=5 bbWeight=1 PerfScore 1.25 G_M3520_IG10: mov rax, rbx ;; size=3 bbWeight=0.50 PerfScore 0.12 G_M3520_IG11: vzeroupper - add rsp, 184 + add rsp, 216 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=21 bbWeight=0.50 PerfScore 2.62 G_M3520_IG12: mov rdi, gword ptr [rbx+0x08] lea rsi, [rbp-0xB0] mov dword ptr [rbp-0x54], eax mov edx, eax mov r11, 0xD1FFAB1E ; function address call [r11]System.Collections.Generic.IList`1[System.Numerics.Vector`1[float]]:get_Item(int):System.Numerics.Vector`1[float]:this mov edi, dword ptr [rbp-0x54] cmp edi, dword ptr [r14+0x08] jae G_M3520_IG17 mov eax, edi shl rax, 5 vmovups ymm0, ymmword ptr [rbp-0xB0] vmovups ymmword ptr [r14+rax+0x10], ymm0 inc edi cmp edi, r13d mov eax, edi jl SHORT G_M3520_IG12 jmp G_M3520_IG07 ;; size=77 bbWeight=0.16 PerfScore 3.60 G_M3520_IG13: mov rdi, 0xD1FFAB1E ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[System.Numerics.Vector`1[float]] call CORINFO_HELP_NEWSFAST mov rbx, rax lea rdi, bword ptr [rbx+0x08] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov rax, rbx ;; size=33 bbWeight=0.50 PerfScore 1.75 G_M3520_IG14: vzeroupper - add rsp, 184 + add rsp, 216 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=21 bbWeight=0.50 PerfScore 2.62 G_M3520_IG15: mov edi, 0x3B01 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 G_M3520_IG16: mov edi, 0x3AF5 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 G_M3520_IG17: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 620, prolog size 25, PerfScore 436.38, instruction count 144, allocated bytes for code 620 (MethodHash=f352f23f) for method System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts) +; Total bytes of code 631, prolog size 25, PerfScore 434.04, instruction count 146, allocated bytes for code 631 (MethodHash=f352f23f) for method System.Linq.Expressions.ExpressionVisitor:Visit[System.Numerics.Vector`1[float]](System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]],System.Func`2[System.Numerics.Vector`1[float],System.Numerics.Vector`1[float]]):System.Collections.ObjectModel.ReadOnlyCollection`1[System.Numerics.Vector`1[float]] (FullOpts) ```
MihuBot commented 2 months ago

Top method improvements

-70 (-13.49 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] ```diff ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T03] ( 9, 26.50) ref -> rbx class-hnd single-def ; V01 arg1 [V01,T04] ( 5, 11 ) ref -> r15 class-hnd single-def -; V02 loc0 [V02,T02] ( 11, 29.66) ref -> r14 class-hnd -;* V03 loc1 [V03,T09] ( 0, 0 ) int -> zero-ref -; V04 loc2 [V04,T07] ( 4, 8 ) int -> r12 -; V05 loc3 [V05,T12] ( 3, 8 ) double -> [rbp-0x30] spill-single-def +; V02 loc0 [V02,T02] ( 11, 33.66) ref -> r14 class-hnd +;* V03 loc1 [V03,T07] ( 0, 0 ) int -> zero-ref +; V04 loc2 [V04,T05] ( 4, 8 ) int -> r12 +; V05 loc3 [V05,T10] ( 2, 8 ) double -> [rbp-0x30] spill-single-def ; V06 loc4 [V06,T00] ( 12, 82.16) int -> [rbp-0x34] ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T05] ( 3, 12 ) ref -> [rbp-0x40] class-hnd exact spill-single-def "Single-def Box Helper" -; V09 tmp2 [V09,T06] ( 3, 12 ) ref -> [rbp-0x48] class-hnd exact spill-single-def "Single-def Box Helper" -; V10 tmp3 [V10,T10] ( 4, 64 ) double -> mm0 "Strict ordering of exceptions for Array store" -; V11 tmp4 [V11,T08] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V12 tmp5 [V12,T11] ( 2, 16 ) double -> mm0 "argument with side effect" -; V13 rat0 [V13,T01] ( 12, 42 ) long -> r13 "Widened IV V03" +;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +; V10 tmp3 [V10,T08] ( 4, 64 ) double -> mm0 "Strict ordering of exceptions for Array store" +; V11 tmp4 [V11,T06] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +; V14 tmp7 [V14,T09] ( 2, 16 ) double -> mm0 "argument with side effect" +; V15 rat0 [V15,T01] ( 12, 46 ) long -> r13 "Widened IV V03" ; -; Lcl frame size = 40 +; Lcl frame size = 24 G_M3862_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 40 - lea rbp, [rsp+0x50] + sub rsp, 24 + lea rbp, [rsp+0x40] mov rbx, rdi mov r15, rsi ;; size=25 bbWeight=1 PerfScore 7.25 G_M3862_IG02: test rbx, rbx - je G_M3862_IG16 - test r15, r15 je G_M3862_IG15 + test r15, r15 + je G_M3862_IG14 xor r14, r14 xor r13d, r13d mov rdi, gword ptr [rbx+0x08] mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.ICollection`1[double]:get_Count():int:this call [r11]System.Collections.Generic.ICollection`1[double]:get_Count():int:this mov r12d, eax test r12d, r12d - jle G_M3862_IG09 + jle G_M3862_IG08 ;; size=53 bbWeight=1 PerfScore 9.75 G_M3862_IG03: mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[double]:get_Item(int):double:this call [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this mov rdi, gword ptr [r15+0x08] call [r15+0x18]System.Func`2[double,double]:Invoke(double):double:this vmovsd qword ptr [rbp-0x30], xmm0 test r14, r14 - jne G_M3862_IG07 - ;; size=42 bbWeight=4 PerfScore 51.00 + jne SHORT G_M3862_IG07 + ;; size=38 bbWeight=4 PerfScore 51.00 G_M3862_IG04: - mov rdi, 0xD1FFAB1E ; System.Double - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x40], rax - vmovsd xmm0, qword ptr [rbp-0x30] - vmovsd qword ptr [rax+0x08], xmm0 - mov rdi, 0xD1FFAB1E ; System.Double - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x48], rax mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[double]:get_Item(int):double:this call [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this - mov rsi, gword ptr [rbp-0x48] - vmovsd qword ptr [rsi+0x08], xmm0 - mov rdi, gword ptr [rbp-0x40] - cmp rdi, rsi - je SHORT G_M3862_IG08 movsxd rsi, r12d mov rdi, 0xD1FFAB1E ; double[] call CORINFO_HELP_NEWARR_1_VC mov r14, rax xor eax, eax test r13d, r13d jle SHORT G_M3862_IG07 - ;; size=114 bbWeight=2 PerfScore 47.00 + ;; size=48 bbWeight=2 PerfScore 17.50 G_M3862_IG05: cmp dword ptr [r14+0x08], r13d - jl SHORT G_M3862_IG12 + jl SHORT G_M3862_IG11 ;; size=6 bbWeight=1 PerfScore 4.00 G_M3862_IG06: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x34], eax mov esi, eax mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[double]:get_Item(int):double:this call [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this mov eax, dword ptr [rbp-0x34] mov edi, eax vmovsd qword ptr [r14+8*rdi+0x10], xmm0 inc eax cmp eax, r13d jl SHORT G_M3862_IG06 ;; size=41 bbWeight=15.84 PerfScore 178.20 G_M3862_IG07: cmp r13d, dword ptr [r14+0x08] - jae G_M3862_IG17 + jae G_M3862_IG16 vmovsd xmm0, qword ptr [rbp-0x30] vmovsd qword ptr [r14+8*r13+0x10], xmm0 - ;; size=22 bbWeight=2 PerfScore 18.00 -G_M3862_IG08: inc r13d cmp r13d, r12d jl G_M3862_IG03 - ;; size=12 bbWeight=4 PerfScore 6.00 -G_M3862_IG09: + ;; size=34 bbWeight=4 PerfScore 42.00 +G_M3862_IG08: test r14, r14 - jne SHORT G_M3862_IG13 + jne SHORT G_M3862_IG12 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M3862_IG10: +G_M3862_IG09: mov rax, rbx ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M3862_IG11: - add rsp, 40 +G_M3862_IG10: + add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M3862_IG12: +G_M3862_IG11: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x34], eax mov esi, eax mov r11, 0xD1FFAB1E ; function address call [r11]System.Collections.Generic.IList`1[double]:get_Item(int):double:this mov edi, dword ptr [rbp-0x34] cmp edi, dword ptr [r14+0x08] - jae G_M3862_IG17 + jae G_M3862_IG16 mov eax, edi vmovsd qword ptr [r14+8*rax+0x10], xmm0 inc edi cmp edi, r13d mov eax, edi - jl SHORT G_M3862_IG12 + jl SHORT G_M3862_IG11 jmp SHORT G_M3862_IG07 ;; size=55 bbWeight=0.16 PerfScore 2.80 -G_M3862_IG13: +G_M3862_IG12: mov rdi, 0xD1FFAB1E ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[double] call CORINFO_HELP_NEWSFAST mov rbx, rax lea rdi, bword ptr [rbx+0x08] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov rax, rbx ;; size=33 bbWeight=0.50 PerfScore 1.75 -G_M3862_IG14: - add rsp, 40 +G_M3862_IG13: + add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M3862_IG15: +G_M3862_IG14: mov edi, 0x3B01 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M3862_IG16: +G_M3862_IG15: mov edi, 0x3AF5 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M3862_IG17: +G_M3862_IG16: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 519, prolog size 19, PerfScore 331.38, instruction count 132, allocated bytes for code 519 (MethodHash=5a3ef0e9) for method System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts) +; Total bytes of code 449, prolog size 19, PerfScore 319.88, instruction count 119, allocated bytes for code 449 (MethodHash=5a3ef0e9) for method System.Linq.Expressions.ExpressionVisitor:Visit[double](System.Collections.ObjectModel.ReadOnlyCollection`1[double],System.Func`2[double,double]):System.Collections.ObjectModel.ReadOnlyCollection`1[double] (FullOpts) ```
-69 (-13.48 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] ```diff ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T04] ( 9, 26.50) ref -> rbx class-hnd single-def ; V01 arg1 [V01,T06] ( 5, 11 ) ref -> r15 class-hnd single-def -; V02 loc0 [V02,T03] ( 11, 29.66) ref -> r14 class-hnd -;* V03 loc1 [V03,T12] ( 0, 0 ) int -> zero-ref -; V04 loc2 [V04,T09] ( 4, 8 ) int -> r12 -; V05 loc3 [V05,T10] ( 3, 8 ) short -> [rbp-0x2C] spill-single-def +; V02 loc0 [V02,T03] ( 11, 33.66) ref -> r14 class-hnd +;* V03 loc1 [V03,T10] ( 0, 0 ) int -> zero-ref +; V04 loc2 [V04,T07] ( 4, 8 ) int -> r12 +; V05 loc3 [V05,T08] ( 2, 8 ) short -> [rbp-0x2C] spill-single-def ; V06 loc4 [V06,T00] ( 12, 82.16) int -> [rbp-0x30] ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T07] ( 3, 12 ) ref -> [rbp-0x38] class-hnd exact spill-single-def "Single-def Box Helper" -; V09 tmp2 [V09,T08] ( 3, 12 ) ref -> [rbp-0x40] class-hnd exact spill-single-def "Single-def Box Helper" +;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" ; V10 tmp3 [V10,T01] ( 4, 64 ) int -> rax "Strict ordering of exceptions for Array store" -; V11 tmp4 [V11,T11] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V12 tmp5 [V12,T05] ( 2, 16 ) int -> rsi "argument with side effect" -; V13 rat0 [V13,T02] ( 12, 42 ) long -> r13 "Widened IV V03" +; V11 tmp4 [V11,T09] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +; V14 tmp7 [V14,T05] ( 2, 16 ) int -> rsi "argument with side effect" +; V15 rat0 [V15,T02] ( 12, 46 ) long -> r13 "Widened IV V03" ; -; Lcl frame size = 24 +; Lcl frame size = 8 G_M56529_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 24 - lea rbp, [rsp+0x40] + push rax + lea rbp, [rsp+0x30] mov rbx, rdi mov r15, rsi - ;; size=25 bbWeight=1 PerfScore 7.25 + ;; size=22 bbWeight=1 PerfScore 8.00 G_M56529_IG02: test rbx, rbx - je G_M56529_IG16 - test r15, r15 je G_M56529_IG15 + test r15, r15 + je G_M56529_IG14 xor r14, r14 xor r13d, r13d mov rdi, gword ptr [rbx+0x08] mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.ICollection`1[short]:get_Count():int:this call [r11]System.Collections.Generic.ICollection`1[short]:get_Count():int:this mov r12d, eax test r12d, r12d - jle G_M56529_IG09 + jle G_M56529_IG08 ;; size=53 bbWeight=1 PerfScore 9.75 G_M56529_IG03: mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[short]:get_Item(int):short:this call [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this mov esi, eax mov rdi, gword ptr [r15+0x08] call [r15+0x18]System.Func`2[short,short]:Invoke(short):short:this mov dword ptr [rbp-0x2C], eax test r14, r14 - jne G_M56529_IG07 - ;; size=42 bbWeight=4 PerfScore 52.00 + jne SHORT G_M56529_IG07 + ;; size=38 bbWeight=4 PerfScore 52.00 G_M56529_IG04: - mov rdi, 0xD1FFAB1E ; System.Int16 - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x38], rax - mov ecx, dword ptr [rbp-0x2C] - mov word ptr [rax+0x08], cx - mov rdi, 0xD1FFAB1E ; System.Int16 - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x40], rax mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[short]:get_Item(int):short:this call [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this - mov rsi, gword ptr [rbp-0x40] - mov word ptr [rsi+0x08], ax - mov rdi, gword ptr [rbp-0x38] - cmp rdi, rsi - je SHORT G_M56529_IG08 movsxd rsi, r12d mov rdi, 0xD1FFAB1E ; short[] call CORINFO_HELP_NEWARR_1_VC mov r14, rax xor eax, eax test r13d, r13d jle SHORT G_M56529_IG07 - ;; size=110 bbWeight=2 PerfScore 39.00 + ;; size=48 bbWeight=2 PerfScore 17.50 G_M56529_IG05: cmp dword ptr [r14+0x08], r13d - jl SHORT G_M56529_IG12 + jl SHORT G_M56529_IG11 ;; size=6 bbWeight=1 PerfScore 4.00 G_M56529_IG06: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x30], eax mov esi, eax mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[short]:get_Item(int):short:this call [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this mov edi, dword ptr [rbp-0x30] mov esi, edi mov word ptr [r14+2*rsi+0x10], ax inc edi cmp edi, r13d mov eax, edi jl SHORT G_M56529_IG06 ;; size=42 bbWeight=15.84 PerfScore 166.32 G_M56529_IG07: cmp r13d, dword ptr [r14+0x08] - jae G_M56529_IG17 + jae G_M56529_IG16 mov ecx, dword ptr [rbp-0x2C] mov word ptr [r14+2*r13+0x10], cx - ;; size=19 bbWeight=2 PerfScore 12.00 -G_M56529_IG08: inc r13d cmp r13d, r12d jl G_M56529_IG03 - ;; size=12 bbWeight=4 PerfScore 6.00 -G_M56529_IG09: + ;; size=31 bbWeight=4 PerfScore 30.00 +G_M56529_IG08: test r14, r14 - jne SHORT G_M56529_IG13 + jne SHORT G_M56529_IG12 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M56529_IG10: +G_M56529_IG09: mov rax, rbx ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M56529_IG11: - add rsp, 24 +G_M56529_IG10: + add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M56529_IG12: +G_M56529_IG11: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x30], eax mov esi, eax mov r11, 0xD1FFAB1E ; function address call [r11]System.Collections.Generic.IList`1[short]:get_Item(int):short:this mov edi, dword ptr [rbp-0x30] cmp edi, dword ptr [r14+0x08] - jae G_M56529_IG17 + jae G_M56529_IG16 mov ecx, edi mov word ptr [r14+2*rcx+0x10], ax inc edi cmp edi, r13d mov eax, edi - jl SHORT G_M56529_IG12 + jl SHORT G_M56529_IG11 jmp SHORT G_M56529_IG07 ;; size=54 bbWeight=0.16 PerfScore 2.64 -G_M56529_IG13: +G_M56529_IG12: mov rdi, 0xD1FFAB1E ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[short] call CORINFO_HELP_NEWSFAST mov rbx, rax lea rdi, bword ptr [rbx+0x08] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov rax, rbx ;; size=33 bbWeight=0.50 PerfScore 1.75 -G_M56529_IG14: - add rsp, 24 +G_M56529_IG13: + add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M56529_IG15: +G_M56529_IG14: mov edi, 0x3B01 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M56529_IG16: +G_M56529_IG15: mov edi, 0x3AF5 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M56529_IG17: +G_M56529_IG16: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 512, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 512 (MethodHash=e7be232e) for method System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts) +; Total bytes of code 443, prolog size 16, PerfScore 297.59, instruction count 121, allocated bytes for code 443 (MethodHash=e7be232e) for method System.Linq.Expressions.ExpressionVisitor:Visit[short](System.Collections.ObjectModel.ReadOnlyCollection`1[short],System.Func`2[short,short]):System.Collections.ObjectModel.ReadOnlyCollection`1[short] (FullOpts) ```
-67 (-13.21 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] ```diff ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T04] ( 9, 26.50) ref -> rbx class-hnd single-def ; V01 arg1 [V01,T06] ( 5, 11 ) ref -> r15 class-hnd single-def -; V02 loc0 [V02,T03] ( 11, 29.66) ref -> r14 class-hnd -;* V03 loc1 [V03,T12] ( 0, 0 ) int -> zero-ref -; V04 loc2 [V04,T09] ( 4, 8 ) int -> r12 -; V05 loc3 [V05,T10] ( 3, 8 ) int -> [rbp-0x2C] spill-single-def +; V02 loc0 [V02,T03] ( 11, 33.66) ref -> r14 class-hnd +;* V03 loc1 [V03,T10] ( 0, 0 ) int -> zero-ref +; V04 loc2 [V04,T07] ( 4, 8 ) int -> r12 +; V05 loc3 [V05,T08] ( 2, 8 ) int -> [rbp-0x2C] spill-single-def ; V06 loc4 [V06,T00] ( 12, 82.16) int -> [rbp-0x30] ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T07] ( 3, 12 ) ref -> [rbp-0x38] class-hnd exact spill-single-def "Single-def Box Helper" -; V09 tmp2 [V09,T08] ( 3, 12 ) ref -> [rbp-0x40] class-hnd exact spill-single-def "Single-def Box Helper" +;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" ; V10 tmp3 [V10,T01] ( 4, 64 ) int -> rax "Strict ordering of exceptions for Array store" -; V11 tmp4 [V11,T11] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V12 tmp5 [V12,T05] ( 2, 16 ) int -> rsi "argument with side effect" -; V13 rat0 [V13,T02] ( 12, 42 ) long -> r13 "Widened IV V03" +; V11 tmp4 [V11,T09] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +; V14 tmp7 [V14,T05] ( 2, 16 ) int -> rsi "argument with side effect" +; V15 rat0 [V15,T02] ( 12, 46 ) long -> r13 "Widened IV V03" ; -; Lcl frame size = 24 +; Lcl frame size = 8 G_M35728_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 24 - lea rbp, [rsp+0x40] + push rax + lea rbp, [rsp+0x30] mov rbx, rdi mov r15, rsi - ;; size=25 bbWeight=1 PerfScore 7.25 + ;; size=22 bbWeight=1 PerfScore 8.00 G_M35728_IG02: test rbx, rbx - je G_M35728_IG16 - test r15, r15 je G_M35728_IG15 + test r15, r15 + je G_M35728_IG14 xor r14, r14 xor r13d, r13d mov rdi, gword ptr [rbx+0x08] mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.ICollection`1[int]:get_Count():int:this call [r11]System.Collections.Generic.ICollection`1[int]:get_Count():int:this mov r12d, eax test r12d, r12d - jle G_M35728_IG09 + jle G_M35728_IG08 ;; size=53 bbWeight=1 PerfScore 9.75 G_M35728_IG03: mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[int]:get_Item(int):int:this call [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this mov esi, eax mov rdi, gword ptr [r15+0x08] call [r15+0x18]System.Func`2[int,int]:Invoke(int):int:this mov dword ptr [rbp-0x2C], eax test r14, r14 - jne G_M35728_IG07 - ;; size=42 bbWeight=4 PerfScore 52.00 + jne SHORT G_M35728_IG07 + ;; size=38 bbWeight=4 PerfScore 52.00 G_M35728_IG04: - mov rdi, 0xD1FFAB1E ; System.Int32 - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x38], rax - mov ecx, dword ptr [rbp-0x2C] - mov dword ptr [rax+0x08], ecx - mov rdi, 0xD1FFAB1E ; System.Int32 - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x40], rax mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[int]:get_Item(int):int:this call [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this - mov rsi, gword ptr [rbp-0x40] - mov dword ptr [rsi+0x08], eax - mov rdi, gword ptr [rbp-0x38] - cmp rdi, rsi - je SHORT G_M35728_IG08 movsxd rsi, r12d mov rdi, 0xD1FFAB1E ; int[] call CORINFO_HELP_NEWARR_1_VC mov r14, rax xor eax, eax test r13d, r13d jle SHORT G_M35728_IG07 - ;; size=108 bbWeight=2 PerfScore 39.00 + ;; size=48 bbWeight=2 PerfScore 17.50 G_M35728_IG05: cmp dword ptr [r14+0x08], r13d - jl SHORT G_M35728_IG12 + jl SHORT G_M35728_IG11 ;; size=6 bbWeight=1 PerfScore 4.00 G_M35728_IG06: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x30], eax mov esi, eax mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[int]:get_Item(int):int:this call [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this mov edi, dword ptr [rbp-0x30] mov esi, edi mov dword ptr [r14+4*rsi+0x10], eax inc edi cmp edi, r13d mov eax, edi jl SHORT G_M35728_IG06 ;; size=41 bbWeight=15.84 PerfScore 166.32 G_M35728_IG07: cmp r13d, dword ptr [r14+0x08] - jae G_M35728_IG17 + jae G_M35728_IG16 mov ecx, dword ptr [rbp-0x2C] mov dword ptr [r14+4*r13+0x10], ecx - ;; size=18 bbWeight=2 PerfScore 12.00 -G_M35728_IG08: inc r13d cmp r13d, r12d jl G_M35728_IG03 - ;; size=12 bbWeight=4 PerfScore 6.00 -G_M35728_IG09: + ;; size=30 bbWeight=4 PerfScore 30.00 +G_M35728_IG08: test r14, r14 - jne SHORT G_M35728_IG13 + jne SHORT G_M35728_IG12 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M35728_IG10: +G_M35728_IG09: mov rax, rbx ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M35728_IG11: - add rsp, 24 +G_M35728_IG10: + add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M35728_IG12: +G_M35728_IG11: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x30], eax mov esi, eax mov r11, 0xD1FFAB1E ; function address call [r11]System.Collections.Generic.IList`1[int]:get_Item(int):int:this mov edi, dword ptr [rbp-0x30] cmp edi, dword ptr [r14+0x08] - jae G_M35728_IG17 + jae G_M35728_IG16 mov ecx, edi mov dword ptr [r14+4*rcx+0x10], eax inc edi cmp edi, r13d mov eax, edi - jl SHORT G_M35728_IG12 + jl SHORT G_M35728_IG11 jmp SHORT G_M35728_IG07 ;; size=53 bbWeight=0.16 PerfScore 2.64 -G_M35728_IG13: +G_M35728_IG12: mov rdi, 0xD1FFAB1E ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[int] call CORINFO_HELP_NEWSFAST mov rbx, rax lea rdi, bword ptr [rbx+0x08] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov rax, rbx ;; size=33 bbWeight=0.50 PerfScore 1.75 -G_M35728_IG14: - add rsp, 24 +G_M35728_IG13: + add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M35728_IG15: +G_M35728_IG14: mov edi, 0x3B01 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M35728_IG16: +G_M35728_IG15: mov edi, 0x3AF5 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M35728_IG17: +G_M35728_IG16: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 507, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 507 (MethodHash=f676746f) for method System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts) +; Total bytes of code 440, prolog size 16, PerfScore 297.59, instruction count 121, allocated bytes for code 440 (MethodHash=f676746f) for method System.Linq.Expressions.ExpressionVisitor:Visit[int](System.Collections.ObjectModel.ReadOnlyCollection`1[int],System.Func`2[int,int]):System.Collections.ObjectModel.ReadOnlyCollection`1[int] (FullOpts) ```
-67 (-13.06 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] ```diff ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T04] ( 9, 26.50) ref -> rbx class-hnd single-def ; V01 arg1 [V01,T06] ( 5, 11 ) ref -> r15 class-hnd single-def -; V02 loc0 [V02,T03] ( 11, 29.66) ref -> r14 class-hnd -;* V03 loc1 [V03,T12] ( 0, 0 ) int -> zero-ref -; V04 loc2 [V04,T09] ( 4, 8 ) int -> r12 -; V05 loc3 [V05,T10] ( 3, 8 ) long -> [rbp-0x30] spill-single-def +; V02 loc0 [V02,T03] ( 11, 33.66) ref -> r14 class-hnd +;* V03 loc1 [V03,T10] ( 0, 0 ) int -> zero-ref +; V04 loc2 [V04,T07] ( 4, 8 ) int -> r12 +; V05 loc3 [V05,T08] ( 2, 8 ) long -> [rbp-0x30] spill-single-def ; V06 loc4 [V06,T00] ( 12, 82.16) int -> [rbp-0x34] ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T07] ( 3, 12 ) ref -> [rbp-0x40] class-hnd exact spill-single-def "Single-def Box Helper" -; V09 tmp2 [V09,T08] ( 3, 12 ) ref -> [rbp-0x48] class-hnd exact spill-single-def "Single-def Box Helper" +;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" ; V10 tmp3 [V10,T01] ( 4, 64 ) long -> rax "Strict ordering of exceptions for Array store" -; V11 tmp4 [V11,T11] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V12 tmp5 [V12,T05] ( 2, 16 ) long -> rsi "argument with side effect" -; V13 rat0 [V13,T02] ( 12, 42 ) long -> r13 "Widened IV V03" +; V11 tmp4 [V11,T09] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +; V14 tmp7 [V14,T05] ( 2, 16 ) long -> rsi "argument with side effect" +; V15 rat0 [V15,T02] ( 12, 46 ) long -> r13 "Widened IV V03" ; -; Lcl frame size = 40 +; Lcl frame size = 24 G_M41065_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 40 - lea rbp, [rsp+0x50] + sub rsp, 24 + lea rbp, [rsp+0x40] mov rbx, rdi mov r15, rsi ;; size=25 bbWeight=1 PerfScore 7.25 G_M41065_IG02: test rbx, rbx - je G_M41065_IG16 - test r15, r15 je G_M41065_IG15 + test r15, r15 + je G_M41065_IG14 xor r14, r14 xor r13d, r13d mov rdi, gword ptr [rbx+0x08] mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.ICollection`1[long]:get_Count():int:this call [r11]System.Collections.Generic.ICollection`1[long]:get_Count():int:this mov r12d, eax test r12d, r12d - jle G_M41065_IG09 + jle G_M41065_IG08 ;; size=53 bbWeight=1 PerfScore 9.75 G_M41065_IG03: mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[long]:get_Item(int):long:this call [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this mov rsi, rax mov rdi, gword ptr [r15+0x08] call [r15+0x18]System.Func`2[long,long]:Invoke(long):long:this mov qword ptr [rbp-0x30], rax test r14, r14 - jne G_M41065_IG07 - ;; size=44 bbWeight=4 PerfScore 52.00 + jne SHORT G_M41065_IG07 + ;; size=40 bbWeight=4 PerfScore 52.00 G_M41065_IG04: - mov rdi, 0xD1FFAB1E ; System.Int64 - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x40], rax - mov rcx, qword ptr [rbp-0x30] - mov qword ptr [rax+0x08], rcx - mov rdi, 0xD1FFAB1E ; System.Int64 - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x48], rax mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[long]:get_Item(int):long:this call [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this - mov rsi, gword ptr [rbp-0x48] - mov qword ptr [rsi+0x08], rax - mov rdi, gword ptr [rbp-0x40] - cmp rdi, rsi - je SHORT G_M41065_IG08 movsxd rsi, r12d mov rdi, 0xD1FFAB1E ; long[] call CORINFO_HELP_NEWARR_1_VC mov r14, rax xor eax, eax test r13d, r13d jle SHORT G_M41065_IG07 - ;; size=111 bbWeight=2 PerfScore 39.00 + ;; size=48 bbWeight=2 PerfScore 17.50 G_M41065_IG05: cmp dword ptr [r14+0x08], r13d - jl SHORT G_M41065_IG12 + jl SHORT G_M41065_IG11 ;; size=6 bbWeight=1 PerfScore 4.00 G_M41065_IG06: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x34], eax mov esi, eax mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[long]:get_Item(int):long:this call [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this mov edi, dword ptr [rbp-0x34] mov esi, edi mov qword ptr [r14+8*rsi+0x10], rax inc edi cmp edi, r13d mov eax, edi jl SHORT G_M41065_IG06 ;; size=41 bbWeight=15.84 PerfScore 166.32 G_M41065_IG07: cmp r13d, dword ptr [r14+0x08] - jae G_M41065_IG17 + jae G_M41065_IG16 mov rcx, qword ptr [rbp-0x30] mov qword ptr [r14+8*r13+0x10], rcx - ;; size=19 bbWeight=2 PerfScore 12.00 -G_M41065_IG08: inc r13d cmp r13d, r12d jl G_M41065_IG03 - ;; size=12 bbWeight=4 PerfScore 6.00 -G_M41065_IG09: + ;; size=31 bbWeight=4 PerfScore 30.00 +G_M41065_IG08: test r14, r14 - jne SHORT G_M41065_IG13 + jne SHORT G_M41065_IG12 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M41065_IG10: +G_M41065_IG09: mov rax, rbx ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M41065_IG11: - add rsp, 40 +G_M41065_IG10: + add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M41065_IG12: +G_M41065_IG11: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x34], eax mov esi, eax mov r11, 0xD1FFAB1E ; function address call [r11]System.Collections.Generic.IList`1[long]:get_Item(int):long:this mov edi, dword ptr [rbp-0x34] cmp edi, dword ptr [r14+0x08] - jae G_M41065_IG17 + jae G_M41065_IG16 mov ecx, edi mov qword ptr [r14+8*rcx+0x10], rax inc edi cmp edi, r13d mov eax, edi - jl SHORT G_M41065_IG12 + jl SHORT G_M41065_IG11 jmp SHORT G_M41065_IG07 ;; size=53 bbWeight=0.16 PerfScore 2.64 -G_M41065_IG13: +G_M41065_IG12: mov rdi, 0xD1FFAB1E ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[long] call CORINFO_HELP_NEWSFAST mov rbx, rax lea rdi, bword ptr [rbx+0x08] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov rax, rbx ;; size=33 bbWeight=0.50 PerfScore 1.75 -G_M41065_IG14: - add rsp, 40 +G_M41065_IG13: + add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M41065_IG15: +G_M41065_IG14: mov edi, 0x3B01 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M41065_IG16: +G_M41065_IG15: mov edi, 0x3AF5 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M41065_IG17: +G_M41065_IG16: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 513, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 513 (MethodHash=f4f75f96) for method System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts) +; Total bytes of code 446, prolog size 19, PerfScore 296.84, instruction count 121, allocated bytes for code 446 (MethodHash=f4f75f96) for method System.Linq.Expressions.ExpressionVisitor:Visit[long](System.Collections.ObjectModel.ReadOnlyCollection`1[long],System.Func`2[long,long]):System.Collections.ObjectModel.ReadOnlyCollection`1[long] (FullOpts) ```
-67 (-13.21 % of base) - System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] ```diff ; Assembly listing for method System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T04] ( 9, 26.50) ref -> rbx class-hnd single-def ; V01 arg1 [V01,T06] ( 5, 11 ) ref -> r15 class-hnd single-def -; V02 loc0 [V02,T03] ( 11, 29.66) ref -> r14 class-hnd -;* V03 loc1 [V03,T12] ( 0, 0 ) int -> zero-ref -; V04 loc2 [V04,T09] ( 4, 8 ) int -> r12 -; V05 loc3 [V05,T10] ( 3, 8 ) ubyte -> [rbp-0x2C] spill-single-def +; V02 loc0 [V02,T03] ( 11, 33.66) ref -> r14 class-hnd +;* V03 loc1 [V03,T10] ( 0, 0 ) int -> zero-ref +; V04 loc2 [V04,T07] ( 4, 8 ) int -> r12 +; V05 loc3 [V05,T08] ( 2, 8 ) ubyte -> [rbp-0x2C] spill-single-def ; V06 loc4 [V06,T00] ( 12, 82.16) int -> [rbp-0x30] ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V08 tmp1 [V08,T07] ( 3, 12 ) ref -> [rbp-0x38] class-hnd exact spill-single-def "Single-def Box Helper" -; V09 tmp2 [V09,T08] ( 3, 12 ) ref -> [rbp-0x40] class-hnd exact spill-single-def "Single-def Box Helper" +;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" +;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref class-hnd exact "Single-def Box Helper" ; V10 tmp3 [V10,T01] ( 4, 64 ) int -> rax "Strict ordering of exceptions for Array store" -; V11 tmp4 [V11,T11] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -; V12 tmp5 [V12,T05] ( 2, 16 ) int -> rsi "argument with side effect" -; V13 rat0 [V13,T02] ( 12, 42 ) long -> r13 "Widened IV V03" +; V11 tmp4 [V11,T09] ( 3, 3 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] "stack allocated boxed value class temp" +; V14 tmp7 [V14,T05] ( 2, 16 ) int -> rsi "argument with side effect" +; V15 rat0 [V15,T02] ( 12, 46 ) long -> r13 "Widened IV V03" ; -; Lcl frame size = 24 +; Lcl frame size = 8 G_M46492_IG01: push rbp push r15 push r14 push r13 push r12 push rbx - sub rsp, 24 - lea rbp, [rsp+0x40] + push rax + lea rbp, [rsp+0x30] mov rbx, rdi mov r15, rsi - ;; size=25 bbWeight=1 PerfScore 7.25 + ;; size=22 bbWeight=1 PerfScore 8.00 G_M46492_IG02: test rbx, rbx - je G_M46492_IG16 - test r15, r15 je G_M46492_IG15 + test r15, r15 + je G_M46492_IG14 xor r14, r14 xor r13d, r13d mov rdi, gword ptr [rbx+0x08] mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.ICollection`1[ubyte]:get_Count():int:this call [r11]System.Collections.Generic.ICollection`1[ubyte]:get_Count():int:this mov r12d, eax test r12d, r12d - jle G_M46492_IG09 + jle G_M46492_IG08 ;; size=53 bbWeight=1 PerfScore 9.75 G_M46492_IG03: mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this call [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this mov esi, eax mov rdi, gword ptr [r15+0x08] call [r15+0x18]System.Func`2[ubyte,ubyte]:Invoke(ubyte):ubyte:this mov dword ptr [rbp-0x2C], eax test r14, r14 - jne G_M46492_IG07 - ;; size=42 bbWeight=4 PerfScore 52.00 + jne SHORT G_M46492_IG07 + ;; size=38 bbWeight=4 PerfScore 52.00 G_M46492_IG04: - mov rdi, 0xD1FFAB1E ; System.Byte - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x38], rax - mov ecx, dword ptr [rbp-0x2C] - mov byte ptr [rax+0x08], cl - mov rdi, 0xD1FFAB1E ; System.Byte - call CORINFO_HELP_NEWSFAST - mov gword ptr [rbp-0x40], rax mov rdi, gword ptr [rbx+0x08] mov esi, r13d mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this call [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this - mov rsi, gword ptr [rbp-0x40] - mov byte ptr [rsi+0x08], al - mov rdi, gword ptr [rbp-0x38] - cmp rdi, rsi - je SHORT G_M46492_IG08 movsxd rsi, r12d mov rdi, 0xD1FFAB1E ; ubyte[] call CORINFO_HELP_NEWARR_1_VC mov r14, rax xor eax, eax test r13d, r13d jle SHORT G_M46492_IG07 - ;; size=108 bbWeight=2 PerfScore 39.00 + ;; size=48 bbWeight=2 PerfScore 17.50 G_M46492_IG05: cmp dword ptr [r14+0x08], r13d - jl SHORT G_M46492_IG12 + jl SHORT G_M46492_IG11 ;; size=6 bbWeight=1 PerfScore 4.00 G_M46492_IG06: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x30], eax mov esi, eax mov r11, 0xD1FFAB1E ; code for System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this call [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this mov edi, dword ptr [rbp-0x30] mov esi, edi mov byte ptr [r14+rsi+0x10], al inc edi cmp edi, r13d mov eax, edi jl SHORT G_M46492_IG06 ;; size=41 bbWeight=15.84 PerfScore 166.32 G_M46492_IG07: cmp r13d, dword ptr [r14+0x08] - jae G_M46492_IG17 + jae G_M46492_IG16 mov ecx, dword ptr [rbp-0x2C] mov byte ptr [r14+r13+0x10], cl - ;; size=18 bbWeight=2 PerfScore 12.00 -G_M46492_IG08: inc r13d cmp r13d, r12d jl G_M46492_IG03 - ;; size=12 bbWeight=4 PerfScore 6.00 -G_M46492_IG09: + ;; size=30 bbWeight=4 PerfScore 30.00 +G_M46492_IG08: test r14, r14 - jne SHORT G_M46492_IG13 + jne SHORT G_M46492_IG12 ;; size=5 bbWeight=1 PerfScore 1.25 -G_M46492_IG10: +G_M46492_IG09: mov rax, rbx ;; size=3 bbWeight=0.50 PerfScore 0.12 -G_M46492_IG11: - add rsp, 24 +G_M46492_IG10: + add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M46492_IG12: +G_M46492_IG11: mov rdi, gword ptr [rbx+0x08] mov dword ptr [rbp-0x30], eax mov esi, eax mov r11, 0xD1FFAB1E ; function address call [r11]System.Collections.Generic.IList`1[ubyte]:get_Item(int):ubyte:this mov edi, dword ptr [rbp-0x30] cmp edi, dword ptr [r14+0x08] - jae G_M46492_IG17 + jae G_M46492_IG16 mov ecx, edi mov byte ptr [r14+rcx+0x10], al inc edi cmp edi, r13d mov eax, edi - jl SHORT G_M46492_IG12 + jl SHORT G_M46492_IG11 jmp SHORT G_M46492_IG07 ;; size=53 bbWeight=0.16 PerfScore 2.64 -G_M46492_IG13: +G_M46492_IG12: mov rdi, 0xD1FFAB1E ; System.Runtime.CompilerServices.TrueReadOnlyCollection`1[ubyte] call CORINFO_HELP_NEWSFAST mov rbx, rax lea rdi, bword ptr [rbx+0x08] mov rsi, r14 call CORINFO_HELP_ASSIGN_REF mov rax, rbx ;; size=33 bbWeight=0.50 PerfScore 1.75 -G_M46492_IG14: - add rsp, 24 +G_M46492_IG13: + add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0.50 PerfScore 2.12 -G_M46492_IG15: +G_M46492_IG14: mov edi, 0x3B01 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M46492_IG16: +G_M46492_IG15: mov edi, 0x3AF5 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String) call [rax]System.ArgumentNullException:Throw(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -G_M46492_IG17: +G_M46492_IG16: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 507, prolog size 19, PerfScore 306.34, instruction count 134, allocated bytes for code 507 (MethodHash=174c4a63) for method System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts) +; Total bytes of code 440, prolog size 16, PerfScore 297.59, instruction count 121, allocated bytes for code 440 (MethodHash=174c4a63) for method System.Linq.Expressions.ExpressionVisitor:Visit[ubyte](System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte],System.Func`2[ubyte,ubyte]):System.Collections.ObjectModel.ReadOnlyCollection`1[ubyte] (FullOpts) ```

Note: some changes were skipped as they were too large to fit into a comment.

Larger list of diffs: https://gist.github.com/MihuBot/5f1390056574e77eed6ce6a61b9740bf

MihuBot commented 2 months ago

@hez2010