MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] MihaZupan/runtime/multiab #753

Open MihuBot opened 3 weeks ago

MihuBot commented 3 weeks ago

Job completed in 19 minutes 5 seconds. https://github.com/MihaZupan/runtime/tree/multiab

Diffs

Found 264 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39563404
Total bytes of diff: 39563418
Total bytes of delta: 14 (0.00 % of base)
Total relative delta: -0.99
    diff is a regression.
    relative diff is an improvement.

Total byte diff includes 28 bytes from reconciling methods
    Base had    0 unique methods,        0 unique bytes
    Diff had    4 unique methods,       28 unique bytes

Top file regressions (bytes):
          21 : System.Net.Quic.dasm (0.01 % of base)

Top file improvements (bytes):
          -7 : System.Net.Http.dasm (-0.00 % of base)

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

Top method regressions (bytes):
          53 (12.41 % of base) : System.Net.Http.dasm - System.Net.Http.Http2Connection+Http2Stream:TryReadFromBuffer(System.Span`1[ubyte],ubyte):System.ValueTuple`2[ubyte,int]:this (FullOpts)
          52 (10.77 % of base) : System.Net.Quic.dasm - System.Net.Quic.ReceiveBuffers:CopyTo(System.Memory`1[ubyte],byref,byref):int:this (FullOpts)
           7 (Infinity of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:get_ActiveLength():int:this (FullOpts) (0 base, 1 diff methods)
           7 (Infinity of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:get_ActiveLength():int:this (FullOpts) (0 base, 1 diff methods)
           7 (Infinity of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:get_AvailableLength():int:this (FullOpts) (0 base, 1 diff methods)
           7 (Infinity of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:get_AvailableLength():int:this (FullOpts) (0 base, 1 diff methods)

Top method improvements (bytes):
         -38 (-8.10 % of base) : System.Net.Http.dasm - System.Net.Http.Http2Connection+Http2Stream:OnResponseData(System.ReadOnlySpan`1[ubyte],ubyte):this (FullOpts)
         -16 (-40.00 % of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts)
         -16 (-40.00 % of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts)
         -11 (-15.07 % of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:Discard(int):this (FullOpts)
         -11 (-15.07 % of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:Discard(int):this (FullOpts)
          -9 (-1.24 % of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this (FullOpts)
          -9 (-1.24 % of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this (FullOpts)
          -9 (-1.85 % of base) : System.Net.Quic.dasm - System.Net.Quic.ReceiveBuffers:CopyFrom(System.ReadOnlySpan`1[Microsoft.Quic.QUIC_BUFFER],int,ubyte):int:this (FullOpts)

Top method regressions (percentages):
           7 (Infinity of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:get_ActiveLength():int:this (FullOpts) (0 base, 1 diff methods)
           7 (Infinity of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:get_ActiveLength():int:this (FullOpts) (0 base, 1 diff methods)
           7 (Infinity of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:get_AvailableLength():int:this (FullOpts) (0 base, 1 diff methods)
           7 (Infinity of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:get_AvailableLength():int:this (FullOpts) (0 base, 1 diff methods)
          53 (12.41 % of base) : System.Net.Http.dasm - System.Net.Http.Http2Connection+Http2Stream:TryReadFromBuffer(System.Span`1[ubyte],ubyte):System.ValueTuple`2[ubyte,int]:this (FullOpts)
          52 (10.77 % of base) : System.Net.Quic.dasm - System.Net.Quic.ReceiveBuffers:CopyTo(System.Memory`1[ubyte],byref,byref):int:this (FullOpts)

Top method improvements (percentages):
         -16 (-40.00 % of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts)
         -16 (-40.00 % of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts)
         -11 (-15.07 % of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:Discard(int):this (FullOpts)
         -11 (-15.07 % of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:Discard(int):this (FullOpts)
         -38 (-8.10 % of base) : System.Net.Http.dasm - System.Net.Http.Http2Connection+Http2Stream:OnResponseData(System.ReadOnlySpan`1[ubyte],ubyte):this (FullOpts)
          -9 (-1.85 % of base) : System.Net.Quic.dasm - System.Net.Quic.ReceiveBuffers:CopyFrom(System.ReadOnlySpan`1[Microsoft.Quic.QUIC_BUFFER],int,ubyte):int:this (FullOpts)
          -9 (-1.24 % of base) : System.Net.Quic.dasm - System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this (FullOpts)
          -9 (-1.24 % of base) : System.Net.Http.dasm - System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this (FullOpts)

14 total methods with Code Size differences (8 improved, 6 regressed), 232649 unchanged.

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

Artifacts:

MihuBot commented 3 weeks ago

Top method regressions

53 (12.41 % of base) - System.Net.Http.Http2Connection+Http2Stream:TryReadFromBuffer(System.Span`1[ubyte],ubyte):System.ValueTuple`2[ubyte,int]:this ```diff ; Assembly listing for method System.Net.Http.Http2Connection+Http2Stream:TryReadFromBuffer(System.Span`1[ubyte],ubyte):System.ValueTuple`2[ubyte,int]:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 9 single block inlinees; 5 inlinees without PGO data +; 0 inlinees with PGO data; 11 single block inlinees; 6 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 13, 8.50) ref -> [rbp-0x40] this class-hnd EH-live single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def -; V02 arg2 [V02,T04] ( 3, 2.50) ubyte -> r15 single-def -;* V03 loc0 [V03,T28] ( 0, 0 ) ref -> zero-ref class-hnd exact EH-live single-def +; V02 arg2 [V02,T05] ( 3, 2.50) ubyte -> r15 single-def +;* V03 loc0 [V03,T31] ( 0, 0 ) ref -> zero-ref class-hnd exact EH-live single-def ; V04 loc1 [V04 ] ( 5, 4 ) ubyte -> [rbp-0x20] do-not-enreg[X] addr-exposed ld-addr-op ;* V05 loc2 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ;* V06 loc3 [V06 ] ( 0, 0 ) int -> zero-ref ; V07 loc4 [V07 ] ( 4, 2 ) struct (16) [rbp-0x30] do-not-enreg[XS] must-init addr-exposed ld-addr-op ; V08 loc5 [V08 ] ( 7, 4 ) struct ( 8) [rbp-0x38] do-not-enreg[S] ;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V10 tmp1 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" ;* V11 tmp2 [V11 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" ;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V13 tmp4 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" -; V14 tmp5 [V14,T02] ( 3, 6 ) byref -> rsi single-def "Inlining Arg" -; V15 tmp6 [V15,T08] ( 3, 3 ) byref -> rsi single-def "Inlining Arg" -;* V16 tmp7 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V17 tmp8 [V17,T09] ( 3, 3 ) int -> rsi "Inlining Arg" -; V18 tmp9 [V18,T13] ( 2, 2 ) ref -> rax class-hnd single-def "Inlining Arg" -; V19 tmp10 [V19,T14] ( 2, 2 ) int -> rcx "Inlining Arg" -; V20 tmp11 [V20,T06] ( 6, 3 ) int -> r15 "Inline return value spill temp" +; V14 tmp5 [V14,T03] ( 3, 6 ) byref -> rsi single-def "Inlining Arg" +; V15 tmp6 [V15,T09] ( 3, 3 ) byref -> rsi single-def "Inlining Arg" +; V16 tmp7 [V16,T15] ( 2, 2 ) ref -> rax class-hnd single-def "impAppendStmt" +; V17 tmp8 [V17,T16] ( 2, 2 ) int -> rcx "impAppendStmt" +;* V18 tmp9 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V19 tmp10 [V19,T10] ( 3, 3 ) int -> rsi "Inlining Arg" +; V20 tmp11 [V20,T06] ( 7, 3.50) int -> r15 "Inline return value spill temp" ;* V21 tmp12 [V21 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V22 tmp13 [V22 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V23 tmp14 [V23 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V24 tmp15 [V24,T27] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V24 tmp15 [V24,T30] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ;* V25 tmp16 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V26 tmp17 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" ;* V27 tmp18 [V27 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V28 tmp19 [V28,T01] ( 8, 8 ) byref -> rdx single-def "Inlining Arg" -;* V29 tmp20 [V29 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V30 tmp21 [V30 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" -; V31 tmp22 [V31,T05] ( 2, 1.50) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V32 tmp23 [V32,T03] ( 4, 2.50) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP -;* V33 tmp24 [V33 ] ( 0, 0 ) ref -> zero-ref single-def "field V05._blocks (fldOffset=0x0)" P-INDEP -;* V34 tmp25 [V34 ] ( 0, 0 ) int -> zero-ref "field V05._start (fldOffset=0x8)" P-INDEP -;* V35 tmp26 [V35 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0xc)" P-INDEP -; V36 tmp27 [V36 ] ( 2, 1 ) ref -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V07._blocks (fldOffset=0x0)" P-DEP -; V37 tmp28 [V37 ] ( 2, 1 ) int -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V07._start (fldOffset=0x8)" P-DEP -; V38 tmp29 [V38 ] ( 2, 1 ) int -> [rbp-0x24] do-not-enreg[X] addr-exposed "field V07._length (fldOffset=0xc)" P-DEP -; V39 tmp30 [V39,T11] ( 4, 2.50) int -> [rbp-0x38] do-not-enreg[] "field V08.Item2 (fldOffset=0x0)" P-DEP -; V40 tmp31 [V40,T12] ( 4, 2.50) ubyte -> [rbp-0x34] do-not-enreg[] "field V08.Item1 (fldOffset=0x4)" P-DEP -;* V41 tmp32 [V41,T22] ( 0, 0 ) int -> zero-ref "field V10.Item2 (fldOffset=0x0)" P-INDEP -;* V42 tmp33 [V42,T23] ( 0, 0 ) ubyte -> zero-ref "field V10.Item1 (fldOffset=0x4)" P-INDEP -;* V43 tmp34 [V43,T24] ( 0, 0 ) int -> zero-ref "field V11.Item2 (fldOffset=0x0)" P-INDEP -;* V44 tmp35 [V44,T25] ( 0, 0 ) ubyte -> zero-ref "field V11.Item1 (fldOffset=0x4)" P-INDEP -; V45 tmp36 [V45,T20] ( 2, 1 ) int -> r15 "field V13.Item2 (fldOffset=0x0)" P-INDEP -;* V46 tmp37 [V46,T26] ( 0, 0 ) ubyte -> zero-ref "field V13.Item1 (fldOffset=0x4)" P-INDEP -; V47 tmp38 [V47,T15] ( 3, 1.50) ref -> rax "field V16._blocks (fldOffset=0x0)" P-INDEP -; V48 tmp39 [V48,T17] ( 3, 1.50) int -> rcx "field V16._start (fldOffset=0x8)" P-INDEP -; V49 tmp40 [V49,T10] ( 5, 2.50) int -> rsi "field V16._length (fldOffset=0xc)" P-INDEP -; V50 tmp41 [V50,T16] ( 3, 1.50) ref -> rax "field V25._blocks (fldOffset=0x0)" P-INDEP -; V51 tmp42 [V51,T18] ( 3, 1.50) int -> rcx "field V25._start (fldOffset=0x8)" P-INDEP -; V52 tmp43 [V52,T19] ( 3, 1.50) int -> rsi "field V25._length (fldOffset=0xc)" P-INDEP -; V53 PSPSym [V53,T21] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym" -; V54 cse0 [V54,T07] ( 4, 3 ) int -> rdx "CSE #02: moderate" +; V28 tmp19 [V28,T02] ( 7, 7 ) byref -> rax single-def "Inlining Arg" +;* V29 tmp20 [V29 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V30 tmp21 [V30,T22] ( 2, 1 ) int -> rcx "Inline stloc first use temp" +;* V31 tmp22 [V31 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V32 tmp23 [V32,T01] ( 8, 8 ) byref -> rdx single-def "Inlining Arg" +;* V33 tmp24 [V33 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V34 tmp25 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" +; V35 tmp26 [V35,T07] ( 2, 1.50) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V36 tmp27 [V36,T04] ( 4, 2.50) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP +;* V37 tmp28 [V37 ] ( 0, 0 ) ref -> zero-ref single-def "field V05._blocks (fldOffset=0x0)" P-INDEP +;* V38 tmp29 [V38 ] ( 0, 0 ) int -> zero-ref "field V05._start (fldOffset=0x8)" P-INDEP +;* V39 tmp30 [V39 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0xc)" P-INDEP +; V40 tmp31 [V40 ] ( 2, 1 ) ref -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V07._blocks (fldOffset=0x0)" P-DEP +; V41 tmp32 [V41 ] ( 2, 1 ) int -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V07._start (fldOffset=0x8)" P-DEP +; V42 tmp33 [V42 ] ( 2, 1 ) int -> [rbp-0x24] do-not-enreg[X] addr-exposed "field V07._length (fldOffset=0xc)" P-DEP +; V43 tmp34 [V43,T12] ( 4, 2.50) int -> [rbp-0x38] do-not-enreg[] "field V08.Item2 (fldOffset=0x0)" P-DEP +; V44 tmp35 [V44,T13] ( 4, 2.50) ubyte -> [rbp-0x34] do-not-enreg[] "field V08.Item1 (fldOffset=0x4)" P-DEP +;* V45 tmp36 [V45,T25] ( 0, 0 ) int -> zero-ref "field V10.Item2 (fldOffset=0x0)" P-INDEP +;* V46 tmp37 [V46,T26] ( 0, 0 ) ubyte -> zero-ref "field V10.Item1 (fldOffset=0x4)" P-INDEP +;* V47 tmp38 [V47,T27] ( 0, 0 ) int -> zero-ref "field V11.Item2 (fldOffset=0x0)" P-INDEP +;* V48 tmp39 [V48,T28] ( 0, 0 ) ubyte -> zero-ref "field V11.Item1 (fldOffset=0x4)" P-INDEP +; V49 tmp40 [V49,T23] ( 2, 1 ) int -> r15 "field V13.Item2 (fldOffset=0x0)" P-INDEP +;* V50 tmp41 [V50,T29] ( 0, 0 ) ubyte -> zero-ref "field V13.Item1 (fldOffset=0x4)" P-INDEP +; V51 tmp42 [V51,T17] ( 3, 1.50) ref -> rax "field V18._blocks (fldOffset=0x0)" P-INDEP +; V52 tmp43 [V52,T19] ( 3, 1.50) int -> rcx "field V18._start (fldOffset=0x8)" P-INDEP +; V53 tmp44 [V53,T11] ( 5, 2.50) int -> rsi "field V18._length (fldOffset=0xc)" P-INDEP +; V54 tmp45 [V54,T18] ( 3, 1.50) ref -> rax "field V25._blocks (fldOffset=0x0)" P-INDEP +; V55 tmp46 [V55,T20] ( 3, 1.50) int -> rcx "field V25._start (fldOffset=0x8)" P-INDEP +; V56 tmp47 [V56,T21] ( 3, 1.50) int -> rsi "field V25._length (fldOffset=0xc)" P-INDEP +; V57 PSPSym [V57,T24] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym" +; V58 cse0 [V58,T14] ( 4, 2 ) int -> rsi "CSE #04: moderate" +; V59 cse1 [V59,T08] ( 4, 3 ) int -> rdx "CSE #02: moderate" ; ; Lcl frame size = 56 G_M513_IG01: push rbp push r15 push r14 push rbx sub rsp, 56 lea rbp, [rsp+0x50] xor eax, eax mov qword ptr [rbp-0x30], rax mov qword ptr [rbp-0x50], rsp mov gword ptr [rbp-0x40], rdi mov r14, rsi mov ebx, edx mov r15d, ecx ;; size=37 bbWeight=1 PerfScore 8.75 G_M513_IG02: xor esi, esi mov dword ptr [rbp-0x20], esi ;; size=5 bbWeight=1 PerfScore 1.25 G_M513_IG03: cmp byte ptr [rbp-0x20], 0 - jne G_M513_IG15 + jne G_M513_IG17 lea rsi, [rbp-0x20] call System.Threading.Monitor:ReliableEnter(System.Object,byref) mov rdi, gword ptr [rbp-0x40] mov rax, 0xD1FFAB1E ; code for System.Net.Http.Http2Connection+Http2Stream:CheckResponseBodyState():this call [rax]System.Net.Http.Http2Connection+Http2Stream:CheckResponseBodyState():this mov rdi, gword ptr [rbp-0x40] lea rsi, bword ptr [rdi+0x68] mov edx, dword ptr [rsi+0x0C] cmp edx, dword ptr [rsi+0x10] jne SHORT G_M513_IG09 ;; size=51 bbWeight=1 PerfScore 16.25 G_M513_IG04: cmp byte ptr [rdi+0x5E], 5 je SHORT G_M513_IG08 mov byte ptr [rdi+0x62], 1 lea rdx, bword ptr [rdi+0x90] inc word ptr [rdx+0x20] xor rsi, rsi mov gword ptr [rdx], rsi ;; size=26 bbWeight=0.50 PerfScore 4.88 G_M513_IG05: mov gword ptr [rdx+0x08], rsi ;; size=4 bbWeight=0.50 PerfScore 0.50 G_M513_IG06: mov gword ptr [rdx+0x10], rsi ;; size=4 bbWeight=0.50 PerfScore 0.50 G_M513_IG07: mov gword ptr [rdx+0x18], rsi mov word ptr [rdx+0x22], 0 test r15b, r15b sete sil mov byte ptr [rdi+0xB4], sil xor esi, esi mov dword ptr [rbp-0x38], esi mov byte ptr [rbp-0x34], 1 - jmp G_M513_IG16 + jmp G_M513_IG18 ;; size=38 bbWeight=0.50 PerfScore 4.25 G_M513_IG08: xor esi, esi mov dword ptr [rbp-0x38], esi mov byte ptr [rbp-0x34], 0 - jmp G_M513_IG16 + jmp G_M513_IG18 ;; size=14 bbWeight=0.50 PerfScore 2.12 G_M513_IG09: lea rsi, bword ptr [rdi+0x68] mov rax, gword ptr [rsi] mov ecx, edx mov esi, dword ptr [rsi+0x10] sub esi, edx je SHORT G_M513_IG10 jmp SHORT G_M513_IG11 ;; size=18 bbWeight=0.50 PerfScore 4.00 G_M513_IG10: xor rax, rax xor ecx, ecx xor esi, esi ;; size=6 bbWeight=0.50 PerfScore 0.38 G_M513_IG11: cmp ebx, esi mov r15d, esi cmovle r15d, ebx cmp r15d, esi - ja SHORT G_M513_IG14 + ja G_M513_IG16 test r15d, r15d je SHORT G_M513_IG12 mov esi, r15d jmp SHORT G_M513_IG13 - ;; size=24 bbWeight=0.50 PerfScore 2.75 + ;; size=28 bbWeight=0.50 PerfScore 2.75 G_M513_IG12: xor rax, rax xor ecx, ecx xor esi, esi ;; size=6 bbWeight=0.50 PerfScore 0.38 G_M513_IG13: mov gword ptr [rbp-0x30], rax mov dword ptr [rbp-0x28], ecx mov dword ptr [rbp-0x24], esi mov rsi, r14 mov edx, ebx lea rdi, [rbp-0x30] mov rax, 0xD1FFAB1E ; code for System.Net.MultiMemory:CopyTo(System.Span`1[ubyte]):this call [rax]System.Net.MultiMemory:CopyTo(System.Span`1[ubyte]):this mov rdi, gword ptr [rbp-0x40] - add rdi, 104 - mov esi, r15d - mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:Discard(int):this - call [rax]System.Net.MultiArrayBuffer:Discard(int):this + lea rax, bword ptr [rdi+0x68] + mov edx, dword ptr [rax+0x10] + mov esi, dword ptr [rax+0x0C] + sub edx, esi + cmp edx, r15d + je SHORT G_M513_IG14 + mov ecx, esi + shr ecx, 14 + add esi, r15d + mov dword ptr [rax+0x0C], esi + mov edx, dword ptr [rax+0x0C] + shr edx, 14 + mov rdi, rax + mov esi, ecx + mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this + call [rax]System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this + jmp SHORT G_M513_IG15 + ;; size=88 bbWeight=0.50 PerfScore 12.25 +G_M513_IG14: + mov rdi, rax + mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:DiscardAll():this + call [rax]System.Net.MultiArrayBuffer:DiscardAll():this + ;; size=15 bbWeight=0.50 PerfScore 1.75 +G_M513_IG15: mov dword ptr [rbp-0x38], r15d mov byte ptr [rbp-0x34], 0 mov rdi, gword ptr [rbp-0x40] - jmp SHORT G_M513_IG16 - ;; size=68 bbWeight=0.50 PerfScore 8.50 -G_M513_IG14: + jmp SHORT G_M513_IG18 + ;; size=14 bbWeight=0.50 PerfScore 2.50 +G_M513_IG16: mov rdi, 0xD1FFAB1E ; System.IndexOutOfRangeException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.IndexOutOfRangeException:.ctor():this call [rax]System.IndexOutOfRangeException:.ctor():this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=42 bbWeight=0 PerfScore 0.00 -G_M513_IG15: +G_M513_IG17: mov rax, 0xD1FFAB1E ; code for System.Threading.Monitor:ThrowLockTakenException() call [rax]System.Threading.Monitor:ThrowLockTakenException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M513_IG16: +G_M513_IG18: cmp byte ptr [rbp-0x20], 0 - je SHORT G_M513_IG18 + je SHORT G_M513_IG20 ;; size=6 bbWeight=1 PerfScore 3.00 -G_M513_IG17: +G_M513_IG19: call System.Threading.Monitor:Exit(System.Object) ;; size=5 bbWeight=0.50 PerfScore 0.50 -G_M513_IG18: +G_M513_IG20: mov rax, qword ptr [rbp-0x38] ;; size=4 bbWeight=1 PerfScore 1.00 -G_M513_IG19: +G_M513_IG21: add rsp, 56 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=1 PerfScore 3.25 -G_M513_IG20: +G_M513_IG22: push rbp push r15 push r14 push rbx push rax mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp lea rbp, [rbp+0x50] ;; size=18 bbWeight=0 PerfScore 0.00 -G_M513_IG21: +G_M513_IG23: cmp byte ptr [rbp-0x20], 0 - je SHORT G_M513_IG22 + je SHORT G_M513_IG24 mov rdi, gword ptr [rbp-0x40] call System.Threading.Monitor:Exit(System.Object) ;; size=15 bbWeight=0 PerfScore 0.00 -G_M513_IG22: +G_M513_IG24: nop ;; size=1 bbWeight=0 PerfScore 0.00 -G_M513_IG23: +G_M513_IG25: add rsp, 8 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=0 PerfScore 0.00 -; Total bytes of code 427, prolog size 37, PerfScore 62.25, instruction count 129, allocated bytes for code 427 (MethodHash=a249fdfe) for method System.Net.Http.Http2Connection+Http2Stream:TryReadFromBuffer(System.Span`1[ubyte],ubyte):System.ValueTuple`2[ubyte,int]:this (FullOpts) +; Total bytes of code 480, prolog size 37, PerfScore 70.25, instruction count 145, allocated bytes for code 480 (MethodHash=a249fdfe) for method System.Net.Http.Http2Connection+Http2Stream:TryReadFromBuffer(System.Span`1[ubyte],ubyte):System.ValueTuple`2[ubyte,int]:this (FullOpts) ; ============================================================ ```
52 (10.77 % of base) - System.Net.Quic.ReceiveBuffers:CopyTo(System.Memory`1[ubyte],byref,byref):int:this ```diff ; Assembly listing for method System.Net.Quic.ReceiveBuffers:CopyTo(System.Memory`1[ubyte],byref,byref):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 10 single block inlinees; 6 inlinees without PGO data +; 0 inlinees with PGO data; 12 single block inlinees; 7 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T00] ( 5, 4.50) byref -> rbx this single-def -; V01 arg1 [V01,T01] ( 5, 4 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg ld-addr-op single-def -; V02 arg2 [V02,T06] ( 3, 3 ) byref -> r15 single-def -; V03 arg3 [V03,T07] ( 3, 3 ) byref -> r14 single-def -; V04 loc0 [V04,T21] ( 4, 1.50) ref -> [rbp-0x58] class-hnd EH-live spill-single-def +; V00 this [V00,T01] ( 5, 4.50) byref -> rbx this single-def +; V01 arg1 [V01,T02] ( 5, 4 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg ld-addr-op single-def +; V02 arg2 [V02,T08] ( 3, 3 ) byref -> r15 single-def +; V03 arg3 [V03,T09] ( 3, 3 ) byref -> r14 single-def +; V04 loc0 [V04,T23] ( 4, 1.50) ref -> [rbp-0x58] class-hnd EH-live spill-single-def ; V05 loc1 [V05 ] ( 5, 4 ) ubyte -> [rbp-0x40] do-not-enreg[X] addr-exposed ld-addr-op -; V06 loc2 [V06,T08] ( 7, 4.50) int -> r12 +; V06 loc2 [V06,T06] ( 8, 5 ) int -> r12 ;* V07 loc3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ; V08 loc4 [V08 ] ( 4, 2 ) struct (16) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op ;* V09 loc5 [V09 ] ( 0, 0 ) int -> zero-ref ;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V11 tmp1 [V11 ] ( 0, 0 ) byref -> zero-ref single-def ;* V12 tmp2 [V12 ] ( 0, 0 ) byref -> zero-ref -; V13 tmp3 [V13,T17] ( 3, 2 ) int -> rdi +; V13 tmp3 [V13,T19] ( 3, 2 ) int -> rdi ;* V14 tmp4 [V14 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V15 tmp5 [V15 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V16 tmp6 [V16,T02] ( 3, 6 ) byref -> rdi single-def "Inlining Arg" -; V17 tmp7 [V17,T14] ( 3, 3 ) byref -> rdi single-def "Inlining Arg" -;* V18 tmp8 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V19 tmp9 [V19,T15] ( 3, 3 ) int -> rdi "Inlining Arg" -; V20 tmp10 [V20,T18] ( 2, 2 ) ref -> rdx class-hnd single-def "Inlining Arg" -; V21 tmp11 [V21,T20] ( 2, 2 ) int -> rsi "Inlining Arg" -; V22 tmp12 [V22,T30] ( 2, 1 ) int -> r12 "Inline return value spill temp" +; V16 tmp6 [V16,T03] ( 3, 6 ) byref -> rdi single-def "Inlining Arg" +; V17 tmp7 [V17,T15] ( 3, 3 ) byref -> rdi single-def "Inlining Arg" +; V18 tmp8 [V18,T20] ( 2, 2 ) ref -> rdx class-hnd single-def "impAppendStmt" +; V19 tmp9 [V19,T22] ( 2, 2 ) int -> rsi "impAppendStmt" +;* V20 tmp10 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V21 tmp11 [V21,T16] ( 3, 3 ) int -> rdi "Inlining Arg" +; V22 tmp12 [V22,T32] ( 2, 1 ) int -> r12 "Inline return value spill temp" ;* V23 tmp13 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V24 tmp14 [V24 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V26 tmp16 [V26,T34] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +; V26 tmp16 [V26,T37] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ;* V27 tmp17 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V28 tmp18 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" ;* V29 tmp19 [V29 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" -; V31 tmp21 [V31,T10] ( 6, 3 ) byref -> rcx "Inline stloc first use temp" -; V32 tmp22 [V32,T11] ( 6, 3 ) int -> rdx "Inline stloc first use temp" -; V33 tmp23 [V33,T09] ( 7, 3.50) ref -> rdi class-hnd single-def "Inline stloc first use temp" +; V31 tmp21 [V31,T11] ( 6, 3 ) byref -> rcx "Inline stloc first use temp" +; V32 tmp22 [V32,T12] ( 6, 3 ) int -> rdx "Inline stloc first use temp" +; V33 tmp23 [V33,T10] ( 7, 3.50) ref -> rdi class-hnd single-def "Inline stloc first use temp" ;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" ;* V35 tmp25 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" ;* V36 tmp26 [V36 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" ;* V37 tmp27 [V37 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline stloc first use temp" -; V38 tmp28 [V38,T24] ( 3, 1.50) long -> rsi "Inline stloc first use temp" +; V38 tmp28 [V38,T26] ( 3, 1.50) long -> rsi "Inline stloc first use temp" ;* V39 tmp29 [V39 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V40 tmp30 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" ;* V41 tmp31 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" -; V42 tmp32 [V42,T19] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" +; V42 tmp32 [V42,T21] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" ;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V44 tmp34 [V44,T03] ( 3, 6 ) byref -> rdi single-def "Inlining Arg" -; V45 tmp35 [V45,T04] ( 3, 6 ) byref -> rax single-def "Inlining Arg" -;* V46 tmp36 [V46 ] ( 0, 0 ) ref -> zero-ref single-def "field V07._blocks (fldOffset=0x0)" P-INDEP -;* V47 tmp37 [V47 ] ( 0, 0 ) int -> zero-ref "field V07._start (fldOffset=0x8)" P-INDEP -;* V48 tmp38 [V48 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0xc)" P-INDEP -; V49 tmp39 [V49 ] ( 2, 1 ) ref -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V08._blocks (fldOffset=0x0)" P-DEP -; V50 tmp40 [V50 ] ( 2, 1 ) int -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V08._start (fldOffset=0x8)" P-DEP -; V51 tmp41 [V51 ] ( 2, 1 ) int -> [rbp-0x44] do-not-enreg[X] addr-exposed "field V08._length (fldOffset=0xc)" P-DEP -;* V52 tmp42 [V52 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP -;* V53 tmp43 [V53 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP -; V54 tmp44 [V54,T22] ( 3, 1.50) ref -> rdx "field V18._blocks (fldOffset=0x0)" P-INDEP -; V55 tmp45 [V55,T25] ( 3, 1.50) int -> rsi "field V18._start (fldOffset=0x8)" P-INDEP -; V56 tmp46 [V56,T16] ( 5, 2.50) int -> rdi "field V18._length (fldOffset=0xc)" P-INDEP -; V57 tmp47 [V57,T23] ( 3, 1.50) ref -> rdx "field V27._blocks (fldOffset=0x0)" P-INDEP -; V58 tmp48 [V58,T26] ( 3, 1.50) int -> rsi "field V27._start (fldOffset=0x8)" P-INDEP -; V59 tmp49 [V59,T27] ( 3, 1.50) int -> rdi "field V27._length (fldOffset=0xc)" P-INDEP -;* V60 tmp50 [V60 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP -;* V61 tmp51 [V61 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP -; V62 tmp52 [V62,T28] ( 2, 1 ) byref -> rsi single-def "field V34._reference (fldOffset=0x0)" P-INDEP -; V63 tmp53 [V63,T31] ( 2, 1 ) int -> rdx "field V34._length (fldOffset=0x8)" P-INDEP -;* V64 tmp54 [V64 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-DEP -;* V65 tmp55 [V65 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-DEP -; V66 tmp56 [V66,T29] ( 2, 1 ) byref -> rcx "field V37._reference (fldOffset=0x0)" P-INDEP -; V67 tmp57 [V67,T32] ( 2, 1 ) int -> rdx "field V37._length (fldOffset=0x8)" P-INDEP -;* V68 tmp58 [V68 ] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP -;* V69 tmp59 [V69 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP -; V70 tmp60 [V70,T12] ( 5, 3 ) int -> r13 "V01.[012..016)" -; V71 PSPSym [V71,T33] ( 1, 1 ) long -> [rbp-0x70] do-not-enreg[V] "PSPSym" -; V72 cse0 [V72,T13] ( 4, 3 ) int -> rcx "CSE #02: moderate" -; V73 cse1 [V73,T05] ( 6, 5 ) byref -> [rbp-0x60] spill-single-def "CSE #01: moderate" +; V44 tmp34 [V44,T00] ( 7, 7 ) byref -> rdi single-def "Inlining Arg" +;* V45 tmp35 [V45 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V46 tmp36 [V46,T33] ( 2, 1 ) int -> rax "Inline stloc first use temp" +;* V47 tmp37 [V47 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V48 tmp38 [V48,T04] ( 3, 6 ) byref -> rdi single-def "Inlining Arg" +; V49 tmp39 [V49,T05] ( 3, 6 ) byref -> rax single-def "Inlining Arg" +;* V50 tmp40 [V50 ] ( 0, 0 ) ref -> zero-ref single-def "field V07._blocks (fldOffset=0x0)" P-INDEP +;* V51 tmp41 [V51 ] ( 0, 0 ) int -> zero-ref "field V07._start (fldOffset=0x8)" P-INDEP +;* V52 tmp42 [V52 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0xc)" P-INDEP +; V53 tmp43 [V53 ] ( 2, 1 ) ref -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V08._blocks (fldOffset=0x0)" P-DEP +; V54 tmp44 [V54 ] ( 2, 1 ) int -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V08._start (fldOffset=0x8)" P-DEP +; V55 tmp45 [V55 ] ( 2, 1 ) int -> [rbp-0x44] do-not-enreg[X] addr-exposed "field V08._length (fldOffset=0xc)" P-DEP +;* V56 tmp46 [V56 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP +;* V57 tmp47 [V57 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +; V58 tmp48 [V58,T24] ( 3, 1.50) ref -> rdx "field V20._blocks (fldOffset=0x0)" P-INDEP +; V59 tmp49 [V59,T27] ( 3, 1.50) int -> rsi "field V20._start (fldOffset=0x8)" P-INDEP +; V60 tmp50 [V60,T17] ( 5, 2.50) int -> rdi "field V20._length (fldOffset=0xc)" P-INDEP +; V61 tmp51 [V61,T25] ( 3, 1.50) ref -> rdx "field V27._blocks (fldOffset=0x0)" P-INDEP +; V62 tmp52 [V62,T28] ( 3, 1.50) int -> rsi "field V27._start (fldOffset=0x8)" P-INDEP +; V63 tmp53 [V63,T29] ( 3, 1.50) int -> rdi "field V27._length (fldOffset=0xc)" P-INDEP +;* V64 tmp54 [V64 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP +;* V65 tmp55 [V65 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP +; V66 tmp56 [V66,T30] ( 2, 1 ) byref -> rsi single-def "field V34._reference (fldOffset=0x0)" P-INDEP +; V67 tmp57 [V67,T34] ( 2, 1 ) int -> rdx "field V34._length (fldOffset=0x8)" P-INDEP +;* V68 tmp58 [V68 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-DEP +;* V69 tmp59 [V69 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-DEP +; V70 tmp60 [V70,T31] ( 2, 1 ) byref -> rcx "field V37._reference (fldOffset=0x0)" P-INDEP +; V71 tmp61 [V71,T35] ( 2, 1 ) int -> rdx "field V37._length (fldOffset=0x8)" P-INDEP +;* V72 tmp62 [V72 ] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP +;* V73 tmp63 [V73 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP +; V74 tmp64 [V74,T13] ( 5, 3 ) int -> r13 "V01.[012..016)" +; V75 PSPSym [V75,T36] ( 1, 1 ) long -> [rbp-0x70] do-not-enreg[V] "PSPSym" +; V76 cse0 [V76,T18] ( 4, 2 ) int -> rsi "CSE #05: moderate" +; V77 cse1 [V77,T14] ( 4, 3 ) int -> rcx "CSE #02: moderate" +; V78 cse2 [V78,T07] ( 6, 5 ) byref -> [rbp-0x60] spill-single-def "CSE #01: moderate" ; ; Lcl frame size = 72 G_M35338_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 72 lea rbp, [rsp+0x70] xor eax, eax mov qword ptr [rbp-0x50], rax mov qword ptr [rbp-0x70], rsp mov gword ptr [rbp-0x38], rsi mov qword ptr [rbp-0x30], rdx mov rbx, rdi mov r15, rcx mov r14, r8 ;; size=46 bbWeight=1 PerfScore 11.75 G_M35338_IG02: mov rdi, gword ptr [rbx] mov gword ptr [rbp-0x58], rdi xor esi, esi mov dword ptr [rbp-0x40], esi mov r13d, dword ptr [rbp-0x2C] ;; size=16 bbWeight=1 PerfScore 5.25 G_M35338_IG03: cmp byte ptr [rbp-0x40], 0 - jne G_M35338_IG18 + jne G_M35338_IG19 lea rsi, [rbp-0x40] call System.Threading.Monitor:ReliableEnter(System.Object,byref) xor r12d, r12d lea rax, bword ptr [rbx+0x10] mov bword ptr [rbp-0x60], rax mov rdi, rax mov ecx, dword ptr [rdi+0x0C] cmp ecx, dword ptr [rdi+0x10] - je G_M35338_IG12 + je G_M35338_IG13 ;; size=45 bbWeight=1 PerfScore 12.50 G_M35338_IG04: mov rdi, rax mov rdx, gword ptr [rdi] mov esi, ecx mov edi, dword ptr [rdi+0x10] sub edi, ecx je SHORT G_M35338_IG05 jmp SHORT G_M35338_IG06 ;; size=17 bbWeight=0.50 PerfScore 3.88 G_M35338_IG05: xor rdx, rdx xor esi, esi xor edi, edi ;; size=6 bbWeight=0.50 PerfScore 0.38 G_M35338_IG06: cmp r13d, edi mov r12d, edi cmovle r12d, r13d cmp r12d, edi - ja G_M35338_IG17 + ja G_M35338_IG18 test r12d, r12d je SHORT G_M35338_IG07 mov edi, r12d jmp SHORT G_M35338_IG08 ;; size=29 bbWeight=0.50 PerfScore 2.75 G_M35338_IG07: xor rdx, rdx xor esi, esi xor edi, edi ;; size=6 bbWeight=0.50 PerfScore 0.38 G_M35338_IG08: mov gword ptr [rbp-0x50], rdx mov dword ptr [rbp-0x48], esi mov dword ptr [rbp-0x44], edi xor rcx, rcx xor edx, edx mov rdi, gword ptr [rbp-0x38] test rdi, rdi je SHORT G_M35338_IG11 mov rcx, qword ptr [rdi] test dword ptr [rcx], 0xD1FFAB1E jne SHORT G_M35338_IG09 mov rcx, qword ptr [rdi] mov rcx, qword ptr [rcx+0x40] call [rcx+0x28]System.Buffers.MemoryManager`1[ubyte]:GetSpan():System.Span`1[ubyte]:this mov rcx, rax jmp SHORT G_M35338_IG10 ;; size=49 bbWeight=0.50 PerfScore 10.50 G_M35338_IG09: lea rcx, bword ptr [rdi+0x10] mov edx, dword ptr [rdi+0x08] ;; size=7 bbWeight=0.50 PerfScore 1.25 G_M35338_IG10: mov esi, dword ptr [rbp-0x30] and esi, 0xD1FFAB1E mov edi, r13d add rdi, rsi mov edx, edx cmp rdi, rdx - ja SHORT G_M35338_IG16 + ja G_M35338_IG17 add rcx, rsi mov edx, r13d - ;; size=28 bbWeight=0.50 PerfScore 1.88 + ;; size=32 bbWeight=0.50 PerfScore 1.88 G_M35338_IG11: mov rsi, rcx lea rdi, [rbp-0x50] mov rcx, 0xD1FFAB1E ; code for System.Net.MultiMemory:CopyTo(System.Span`1[ubyte]):this call [rcx]System.Net.MultiMemory:CopyTo(System.Span`1[ubyte]):this - mov rdi, bword ptr [rbp-0x60] - mov esi, r12d - mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:Discard(int):this - call [rax]System.Net.MultiArrayBuffer:Discard(int):this - mov rax, bword ptr [rbp-0x60] - ;; size=42 bbWeight=0.50 PerfScore 4.75 + mov r13, bword ptr [rbp-0x60] + mov rdi, r13 + mov edx, dword ptr [rdi+0x10] + mov esi, dword ptr [rdi+0x0C] + sub edx, esi + cmp edx, r12d + je SHORT G_M35338_IG12 + mov eax, esi + shr eax, 14 + add esi, r12d + mov dword ptr [rdi+0x0C], esi + mov edx, dword ptr [rdi+0x0C] + shr edx, 14 + mov esi, eax + mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this + call [rax]System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this + mov rax, r13 + jmp SHORT G_M35338_IG13 + ;; size=75 bbWeight=0.50 PerfScore 10.50 G_M35338_IG12: + mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:DiscardAll():this + call [rax]System.Net.MultiArrayBuffer:DiscardAll():this + mov rax, r13 + ;; size=15 bbWeight=0.50 PerfScore 1.75 +G_M35338_IG13: mov rdi, rax mov ecx, dword ptr [rdi+0x0C] cmp ecx, dword ptr [rdi+0x10] - je SHORT G_M35338_IG14 + je SHORT G_M35338_IG15 ;; size=11 bbWeight=1 PerfScore 6.25 -G_M35338_IG13: - xor edi, edi - jmp SHORT G_M35338_IG15 - ;; size=4 bbWeight=0.50 PerfScore 1.12 G_M35338_IG14: + xor edi, edi + jmp SHORT G_M35338_IG16 + ;; size=4 bbWeight=0.50 PerfScore 1.12 +G_M35338_IG15: movzx rdi, byte ptr [rbx+0x08] ;; size=5 bbWeight=0.50 PerfScore 1.00 -G_M35338_IG15: +G_M35338_IG16: mov byte ptr [r15], dil mov edi, dword ptr [rax+0x0C] cmp edi, dword ptr [rax+0x10] sete dil mov byte ptr [r14], dil - jmp SHORT G_M35338_IG19 + jmp SHORT G_M35338_IG20 ;; size=18 bbWeight=1 PerfScore 10.00 -G_M35338_IG16: +G_M35338_IG17: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M35338_IG17: +G_M35338_IG18: mov rdi, 0xD1FFAB1E ; System.IndexOutOfRangeException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.IndexOutOfRangeException:.ctor():this call [rax]System.IndexOutOfRangeException:.ctor():this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=42 bbWeight=0 PerfScore 0.00 -G_M35338_IG18: +G_M35338_IG19: mov rax, 0xD1FFAB1E ; code for System.Threading.Monitor:ThrowLockTakenException() call [rax]System.Threading.Monitor:ThrowLockTakenException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M35338_IG19: - cmp byte ptr [rbp-0x40], 0 - je SHORT G_M35338_IG21 - ;; size=6 bbWeight=1 PerfScore 3.00 G_M35338_IG20: + cmp byte ptr [rbp-0x40], 0 + je SHORT G_M35338_IG22 + ;; size=6 bbWeight=1 PerfScore 3.00 +G_M35338_IG21: mov rdi, gword ptr [rbp-0x58] call System.Threading.Monitor:Exit(System.Object) ;; size=9 bbWeight=0.50 PerfScore 1.00 -G_M35338_IG21: +G_M35338_IG22: mov eax, r12d ;; size=3 bbWeight=1 PerfScore 0.25 -G_M35338_IG22: +G_M35338_IG23: add rsp, 72 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=1 PerfScore 4.25 -G_M35338_IG23: +G_M35338_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+0x70] ;; size=22 bbWeight=0 PerfScore 0.00 -G_M35338_IG24: +G_M35338_IG25: cmp byte ptr [rbp-0x40], 0 - je SHORT G_M35338_IG25 + je SHORT G_M35338_IG26 mov rdi, gword ptr [rbp-0x58] call System.Threading.Monitor:Exit(System.Object) ;; size=15 bbWeight=0 PerfScore 0.00 -G_M35338_IG25: +G_M35338_IG26: nop ;; size=1 bbWeight=0 PerfScore 0.00 -G_M35338_IG26: +G_M35338_IG27: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=0 PerfScore 0.00 -; Total bytes of code 483, prolog size 46, PerfScore 82.12, instruction count 154, allocated bytes for code 483 (MethodHash=1f0175f5) for method System.Net.Quic.ReceiveBuffers:CopyTo(System.Memory`1[ubyte],byref,byref):int:this (FullOpts) +; Total bytes of code 535, prolog size 46, PerfScore 89.62, instruction count 170, allocated bytes for code 535 (MethodHash=1f0175f5) for method System.Net.Quic.ReceiveBuffers:CopyTo(System.Memory`1[ubyte],byref,byref):int:this (FullOpts) ; ============================================================ ```
MihuBot commented 3 weeks ago

Top method improvements

-38 (-8.10 % of base) - System.Net.Http.Http2Connection+Http2Stream:OnResponseData(System.ReadOnlySpan`1[ubyte],ubyte):this ```diff ; Assembly listing for method System.Net.Http.Http2Connection+Http2Stream:OnResponseData(System.ReadOnlySpan`1[ubyte],ubyte):this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame ; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 11 single block inlinees; 5 inlinees without PGO data +; 0 inlinees with PGO data; 10 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 15, 15 ) ref -> [rbp-0x40] this class-hnd EH-live single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def -; V02 arg2 [V02,T11] ( 3, 3 ) ubyte -> r15 single-def -; V03 loc0 [V03,T26] ( 2, 2 ) ubyte -> rbx -;* V04 loc1 [V04,T30] ( 0, 0 ) ref -> zero-ref class-hnd exact EH-live single-def +; V02 arg2 [V02,T09] ( 3, 3 ) ubyte -> r15 single-def +; V03 loc0 [V03,T19] ( 2, 2 ) ubyte -> rbx +;* V04 loc1 [V04,T21] ( 0, 0 ) ref -> zero-ref class-hnd exact EH-live single-def ; V05 loc2 [V05 ] ( 5, 5 ) ubyte -> [rbp-0x28] do-not-enreg[X] addr-exposed ld-addr-op -; V06 loc3 [V06,T19] ( 3, 3 ) ubyte -> r13 -; V07 loc4 [V07 ] ( 8, 8 ) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op +; V06 loc3 [V06,T14] ( 3, 3 ) ubyte -> r13 +; V07 loc4 [V07 ] ( 4, 4 ) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" -; V10 tmp2 [V10,T02] ( 4, 8 ) byref -> rsi single-def "Inlining Arg" -;* V11 tmp3 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V12 tmp4 [V12,T07] ( 3, 6 ) int -> rsi "Inlining Arg" -; V13 tmp5 [V13,T12] ( 2, 4 ) ref -> rax class-hnd single-def "Inlining Arg" -; V14 tmp6 [V14,T15] ( 2, 4 ) int -> rdx "Inlining Arg" -;* V15 tmp7 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" -;* V16 tmp8 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V17 tmp9 [V17,T03] ( 4, 8 ) byref -> rsi single-def "Inlining Arg" -;* V18 tmp10 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" -;* V19 tmp11 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V20 tmp12 [V20,T08] ( 3, 6 ) int -> rcx "Inlining Arg" -;* V21 tmp13 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" -;* V22 tmp14 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V23 tmp15 [V23,T04] ( 4, 8 ) byref -> rsi single-def "Inlining Arg" -;* V24 tmp16 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V25 tmp17 [V25,T09] ( 3, 6 ) int -> rsi "Inlining Arg" -; V26 tmp18 [V26,T13] ( 2, 4 ) ref -> rdx class-hnd single-def "Inlining Arg" -; V27 tmp19 [V27,T16] ( 2, 4 ) int -> rcx "Inlining Arg" -;* V28 tmp20 [V28 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V29 tmp21 [V29 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V30 tmp22 [V30,T05] ( 3, 6 ) byref -> r13 single-def "Inlining Arg" -; V31 tmp23 [V31,T06] ( 3, 6 ) byref -> rdi single-def "Inlining Arg" -; V32 tmp24 [V32,T14] ( 2, 2 ) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V33 tmp25 [V33,T01] ( 6, 6 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP -; V34 tmp26 [V34 ] ( 3, 3 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V07._blocks (fldOffset=0x0)" P-DEP -; V35 tmp27 [V35 ] ( 3, 3 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V07._start (fldOffset=0x8)" P-DEP -; V36 tmp28 [V36 ] ( 4, 4 ) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V07._length (fldOffset=0xc)" P-DEP -; V37 tmp29 [V37,T17] ( 3, 3 ) ref -> rax "field V11._blocks (fldOffset=0x0)" P-INDEP -; V38 tmp30 [V38,T20] ( 3, 3 ) int -> rdx "field V11._start (fldOffset=0x8)" P-INDEP -; V39 tmp31 [V39,T21] ( 3, 3 ) int -> rsi "field V11._length (fldOffset=0xc)" P-INDEP -;* V40 tmp32 [V40 ] ( 0, 0 ) ref -> zero-ref "field V18._blocks (fldOffset=0x0)" P-INDEP -;* V41 tmp33 [V41 ] ( 0, 0 ) int -> zero-ref "field V18._start (fldOffset=0x8)" P-INDEP -;* V42 tmp34 [V42 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0xc)" P-INDEP -;* V43 tmp35 [V43 ] ( 0, 0 ) ref -> zero-ref "field V19._blocks (fldOffset=0x0)" P-INDEP -;* V44 tmp36 [V44 ] ( 0, 0 ) int -> zero-ref "field V19._start (fldOffset=0x8)" P-INDEP -; V45 tmp37 [V45,T27] ( 2, 2 ) int -> rcx "field V19._length (fldOffset=0xc)" P-INDEP -; V46 tmp38 [V46,T18] ( 3, 3 ) ref -> rdx "field V24._blocks (fldOffset=0x0)" P-INDEP -; V47 tmp39 [V47,T22] ( 3, 3 ) int -> rcx "field V24._start (fldOffset=0x8)" P-INDEP -; V48 tmp40 [V48,T23] ( 3, 3 ) int -> rsi "field V24._length (fldOffset=0xc)" P-INDEP -; V49 PSPSym [V49,T29] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym" -; V50 cse0 [V50,T24] ( 3, 3 ) int -> rcx "CSE #01: moderate" -; V51 cse1 [V51,T28] ( 2, 2 ) int -> rax "CSE #03: moderate" -; V52 cse2 [V52,T25] ( 3, 3 ) int -> rax "CSE #04: moderate" -; V53 cse3 [V53,T10] ( 5, 5 ) byref -> r13 "CSE #02: moderate" +; V10 tmp2 [V10,T03] ( 3, 6 ) byref -> rsi single-def "Inlining Arg" +;* V11 tmp3 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V12 tmp4 [V12 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +; V13 tmp5 [V13,T04] ( 3, 6 ) byref -> rsi single-def "Inlining Arg" +; V14 tmp6 [V14,T02] ( 4, 8 ) byref -> rsi single-def "Inlining Arg" +; V15 tmp7 [V15,T10] ( 2, 4 ) ref -> rdx class-hnd single-def "impAppendStmt" +; V16 tmp8 [V16,T12] ( 2, 4 ) int -> rcx "impAppendStmt" +;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V18 tmp10 [V18,T07] ( 3, 6 ) int -> rsi "Inlining Arg" +;* V19 tmp11 [V19 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V20 tmp12 [V20 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V21 tmp13 [V21,T05] ( 3, 6 ) byref -> r13 single-def "Inlining Arg" +; V22 tmp14 [V22,T06] ( 3, 6 ) byref -> rdi single-def "Inlining Arg" +; V23 tmp15 [V23,T11] ( 2, 2 ) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V24 tmp16 [V24,T01] ( 6, 6 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V25 tmp17 [V25 ] ( 2, 2 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V07._blocks (fldOffset=0x0)" P-DEP +; V26 tmp18 [V26 ] ( 2, 2 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V07._start (fldOffset=0x8)" P-DEP +; V27 tmp19 [V27 ] ( 2, 2 ) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V07._length (fldOffset=0xc)" P-DEP +; V28 tmp20 [V28,T13] ( 3, 3 ) ref -> rdx "field V17._blocks (fldOffset=0x0)" P-INDEP +; V29 tmp21 [V29,T15] ( 3, 3 ) int -> rcx "field V17._start (fldOffset=0x8)" P-INDEP +; V30 tmp22 [V30,T16] ( 3, 3 ) int -> rsi "field V17._length (fldOffset=0xc)" P-INDEP +; V31 PSPSym [V31,T20] ( 1, 1 ) long -> [rbp-0x50] do-not-enreg[V] "PSPSym" +; V32 cse0 [V32,T17] ( 3, 3 ) int -> rax "CSE #02: moderate" +; V33 cse1 [V33,T18] ( 3, 3 ) int -> rax "CSE #03: moderate" +; V34 cse2 [V34,T08] ( 5, 5 ) byref -> r13 "CSE #01: moderate" ; ; Lcl frame size = 48 G_M34456_IG01: push rbp push r15 push r14 push r13 push rbx sub rsp, 48 lea rbp, [rsp+0x50] xor eax, eax mov qword ptr [rbp-0x38], rax mov qword ptr [rbp-0x50], rsp mov gword ptr [rbp-0x40], rdi mov r14, rsi mov ebx, edx mov r15d, ecx ;; size=39 bbWeight=1 PerfScore 9.75 G_M34456_IG02: xor esi, esi mov dword ptr [rbp-0x28], esi ;; size=5 bbWeight=1 PerfScore 1.25 G_M34456_IG03: cmp byte ptr [rbp-0x28], 0 - jne G_M34456_IG12 + jne G_M34456_IG10 lea rsi, [rbp-0x28] call System.Threading.Monitor:ReliableEnter(System.Object,byref) mov rdi, gword ptr [rbp-0x40] movzx r13, byte ptr [rdi+0x5E] cmp r13d, 3 - jne G_M34456_IG10 + jne G_M34456_IG08 lea r13, bword ptr [rdi+0x68] mov rsi, r13 - mov rax, gword ptr [rsi] - mov ecx, dword ptr [rsi+0x0C] - mov edx, ecx - mov esi, dword ptr [rsi+0x10] - sub esi, ecx - je SHORT G_M34456_IG04 - jmp SHORT G_M34456_IG05 - ;; size=62 bbWeight=1 PerfScore 19.00 -G_M34456_IG04: - xor rax, rax - xor edx, edx - xor esi, esi - ;; size=6 bbWeight=1 PerfScore 0.75 -G_M34456_IG05: - mov gword ptr [rbp-0x38], rax - mov dword ptr [rbp-0x30], edx - mov dword ptr [rbp-0x2C], esi - mov esi, ebx - add esi, dword ptr [rbp-0x2C] - cmp esi, dword ptr [rdi+0x84] - jg G_M34456_IG13 - mov rsi, r13 mov eax, dword ptr [rsi+0x10] + mov ecx, eax + sub ecx, dword ptr [rsi+0x0C] + add ecx, ebx + cmp ecx, dword ptr [rdi+0x84] + jg G_M34456_IG11 + mov rsi, r13 mov ecx, dword ptr [rsi+0x08] sub ecx, eax - xor eax, eax - test ecx, ecx - cmove ecx, eax - cmp ebx, ecx - jle SHORT G_M34456_IG06 + cmp ecx, ebx + jge SHORT G_M34456_IG04 mov rdi, rsi mov esi, ebx mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this call [rax]System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this - ;; size=66 bbWeight=1 PerfScore 19.50 -G_M34456_IG06: + ;; size=96 bbWeight=1 PerfScore 26.50 +G_M34456_IG04: mov rsi, r13 mov rdx, gword ptr [rsi] mov eax, dword ptr [rsi+0x10] mov ecx, eax mov esi, dword ptr [rsi+0x08] sub esi, eax - je SHORT G_M34456_IG07 - jmp SHORT G_M34456_IG08 + je SHORT G_M34456_IG05 + jmp SHORT G_M34456_IG06 ;; size=20 bbWeight=1 PerfScore 9.75 -G_M34456_IG07: +G_M34456_IG05: xor rdx, rdx xor ecx, ecx xor esi, esi ;; size=6 bbWeight=1 PerfScore 0.75 -G_M34456_IG08: +G_M34456_IG06: mov gword ptr [rbp-0x38], rdx mov dword ptr [rbp-0x30], ecx mov dword ptr [rbp-0x2C], esi mov rsi, r14 mov edx, ebx lea rdi, [rbp-0x38] mov rax, 0xD1FFAB1E ; code for System.Net.MultiMemory:CopyFrom(System.ReadOnlySpan`1[ubyte]):this call [rax]System.Net.MultiMemory:CopyFrom(System.ReadOnlySpan`1[ubyte]):this add dword ptr [r13+0x10], ebx test r15b, r15b - je SHORT G_M34456_IG09 + je SHORT G_M34456_IG07 mov rdi, gword ptr [rbp-0x40] mov word ptr [rdi+0x5D], 0x501 cmp byte ptr [rdi+0x5C], 1 - jne SHORT G_M34456_IG09 + jne SHORT G_M34456_IG07 cmp byte ptr [rdi+0x64], 0 - jne SHORT G_M34456_IG09 + jne SHORT G_M34456_IG07 mov rax, 0xD1FFAB1E ; code for System.Net.Http.Http2Connection+Http2Stream:Complete():this call [rax]System.Net.Http.Http2Connection+Http2Stream:Complete():this ;; size=74 bbWeight=1 PerfScore 24.75 -G_M34456_IG09: +G_M34456_IG07: mov rdi, gword ptr [rbp-0x40] movzx rbx, byte ptr [rdi+0x62] mov byte ptr [rdi+0x62], 0 - jmp SHORT G_M34456_IG14 + jmp SHORT G_M34456_IG12 ;; size=14 bbWeight=1 PerfScore 6.00 -G_M34456_IG10: +G_M34456_IG08: cmp r13d, 6 - je SHORT G_M34456_IG16 + je SHORT G_M34456_IG14 ;; size=6 bbWeight=1 PerfScore 1.25 -G_M34456_IG11: +G_M34456_IG09: mov edi, 1 xor rsi, rsi mov rax, 0xD1FFAB1E ; code for System.Net.Http.Http2Connection:ThrowProtocolError(int,System.String) call [rax]System.Net.Http.Http2Connection:ThrowProtocolError(int,System.String) int3 ;; size=20 bbWeight=0 PerfScore 0.00 -G_M34456_IG12: +G_M34456_IG10: mov rax, 0xD1FFAB1E ; code for System.Threading.Monitor:ThrowLockTakenException() call [rax]System.Threading.Monitor:ThrowLockTakenException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M34456_IG13: +G_M34456_IG11: mov edi, 3 xor rsi, rsi mov rax, 0xD1FFAB1E ; code for System.Net.Http.Http2Connection:ThrowProtocolError(int,System.String) call [rax]System.Net.Http.Http2Connection:ThrowProtocolError(int,System.String) int3 ;; size=20 bbWeight=0 PerfScore 0.00 -G_M34456_IG14: +G_M34456_IG12: cmp byte ptr [rbp-0x28], 0 - je SHORT G_M34456_IG15 + je SHORT G_M34456_IG13 call System.Threading.Monitor:Exit(System.Object) mov rdi, gword ptr [rbp-0x40] ;; size=15 bbWeight=1 PerfScore 5.00 -G_M34456_IG15: +G_M34456_IG13: test ebx, ebx - je SHORT G_M34456_IG18 + je SHORT G_M34456_IG16 add rdi, 144 mov byte ptr [rdi+0x22], 1 mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1[ubyte]:SignalCompletion():this call [rax]System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1[ubyte]:SignalCompletion():this - jmp SHORT G_M34456_IG18 + jmp SHORT G_M34456_IG16 ;; size=29 bbWeight=1 PerfScore 7.75 -G_M34456_IG16: +G_M34456_IG14: mov rdi, rsp ;; size=3 bbWeight=1 PerfScore 0.25 -G_M34456_IG17: - call G_M34456_IG19 +G_M34456_IG15: + call G_M34456_IG17 nop ;; size=6 bbWeight=1 PerfScore 1.25 -G_M34456_IG18: +G_M34456_IG16: add rsp, 48 pop rbx pop r13 pop r14 pop r15 pop rbp ret ;; size=13 bbWeight=1 PerfScore 3.75 -G_M34456_IG19: +G_M34456_IG17: push rbp push r15 push r14 push r13 push rbx sub rsp, 16 mov rbp, qword ptr [rdi] mov qword ptr [rsp], rbp lea rbp, [rbp+0x50] ;; size=23 bbWeight=1 PerfScore 8.75 -G_M34456_IG20: +G_M34456_IG18: cmp byte ptr [rbp-0x28], 0 - je SHORT G_M34456_IG21 + je SHORT G_M34456_IG19 mov rdi, gword ptr [rbp-0x40] call System.Threading.Monitor:Exit(System.Object) ;; size=15 bbWeight=1 PerfScore 5.00 -G_M34456_IG21: +G_M34456_IG19: nop ;; size=1 bbWeight=1 PerfScore 0.25 -G_M34456_IG22: +G_M34456_IG20: add rsp, 16 pop rbx pop r13 pop r14 pop r15 pop rbp ret ;; size=13 bbWeight=1 PerfScore 3.75 -; Total bytes of code 469, prolog size 39, PerfScore 128.50, instruction count 147, allocated bytes for code 469 (MethodHash=ecb17967) for method System.Net.Http.Http2Connection+Http2Stream:OnResponseData(System.ReadOnlySpan`1[ubyte],ubyte):this (FullOpts) +; Total bytes of code 431, prolog size 39, PerfScore 115.75, instruction count 132, allocated bytes for code 431 (MethodHash=ecb17967) for method System.Net.Http.Http2Connection+Http2Stream:OnResponseData(System.ReadOnlySpan`1[ubyte],ubyte):this (FullOpts) ; ============================================================ ```
-16 (-40.00 % of base) - System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this ```diff ; Assembly listing for method System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rsp based frame -; partially interruptible +; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T00] ( 6, 5.50) byref -> rdi this single-def -; V01 arg1 [V01,T02] ( 4, 3.50) int -> rsi single-def -;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op -;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V05 tmp2 [V05,T01] ( 3, 6 ) int -> rcx "Inlining Arg" -;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" -;* V07 tmp4 [V07 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref "field V02._blocks (fldOffset=0x0)" P-INDEP -;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref "field V02._start (fldOffset=0x8)" P-INDEP -;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref "field V02._length (fldOffset=0xc)" P-INDEP -;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref "field V04._blocks (fldOffset=0x0)" P-INDEP -;* V12 tmp9 [V12 ] ( 0, 0 ) int -> zero-ref "field V04._start (fldOffset=0x8)" P-INDEP -; V13 tmp10 [V13,T03] ( 2, 2 ) int -> rcx "field V04._length (fldOffset=0xc)" P-INDEP -; V14 cse0 [V14,T04] ( 2, 2 ) int -> rax "CSE #01: aggressive" +; V00 this [V00,T00] ( 5, 4.50) byref -> rdi this single-def +; V01 arg1 [V01,T01] ( 4, 3.50) int -> rsi single-def +;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M36835_IG01: - push rax - ;; size=1 bbWeight=1 PerfScore 1.00 + ;; size=0 bbWeight=1 PerfScore 0.00 G_M36835_IG02: - cmp dword ptr [rdi], edi - mov eax, dword ptr [rdi+0x10] - mov ecx, dword ptr [rdi+0x08] - sub ecx, eax - xor eax, eax - test ecx, ecx - cmove ecx, eax - cmp esi, ecx - jle SHORT G_M36835_IG04 - ;; size=21 bbWeight=1 PerfScore 9.25 + mov eax, dword ptr [rdi+0x08] + sub eax, dword ptr [rdi+0x10] + cmp eax, esi + jl SHORT G_M36835_IG04 + ;; size=10 bbWeight=1 PerfScore 6.25 G_M36835_IG03: - mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this - call [rax]System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this - ;; size=12 bbWeight=0.50 PerfScore 1.62 -G_M36835_IG04: - nop - ;; size=1 bbWeight=1 PerfScore 0.25 -G_M36835_IG05: - add rsp, 8 ret - ;; size=5 bbWeight=1 PerfScore 1.25 + ;; size=1 bbWeight=0.50 PerfScore 0.50 +G_M36835_IG04: + mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this + ;; size=10 bbWeight=0.50 PerfScore 0.12 +G_M36835_IG05: + tail.jmp [rax]System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this + ;; size=3 bbWeight=0.50 PerfScore 1.00 -; Total bytes of code 40, prolog size 1, PerfScore 13.38, instruction count 15, allocated bytes for code 40 (MethodHash=172f701c) for method System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts) +; Total bytes of code 24, prolog size 0, PerfScore 7.88, instruction count 7, allocated bytes for code 24 (MethodHash=172f701c) for method System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts) ; ============================================================ ```
-16 (-40.00 % of base) - System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this ```diff ; Assembly listing for method System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rsp based frame -; partially interruptible +; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T00] ( 6, 5.50) byref -> rdi this single-def -; V01 arg1 [V01,T02] ( 4, 3.50) int -> rsi single-def -;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op -;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V05 tmp2 [V05,T01] ( 3, 6 ) int -> rcx "Inlining Arg" -;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" -;* V07 tmp4 [V07 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V08 tmp5 [V08 ] ( 0, 0 ) ref -> zero-ref "field V02._blocks (fldOffset=0x0)" P-INDEP -;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref "field V02._start (fldOffset=0x8)" P-INDEP -;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref "field V02._length (fldOffset=0xc)" P-INDEP -;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref "field V04._blocks (fldOffset=0x0)" P-INDEP -;* V12 tmp9 [V12 ] ( 0, 0 ) int -> zero-ref "field V04._start (fldOffset=0x8)" P-INDEP -; V13 tmp10 [V13,T03] ( 2, 2 ) int -> rcx "field V04._length (fldOffset=0xc)" P-INDEP -; V14 cse0 [V14,T04] ( 2, 2 ) int -> rax "CSE #01: aggressive" +; V00 this [V00,T00] ( 5, 4.50) byref -> rdi this single-def +; V01 arg1 [V01,T01] ( 4, 3.50) int -> rsi single-def +;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M36835_IG01: - push rax - ;; size=1 bbWeight=1 PerfScore 1.00 + ;; size=0 bbWeight=1 PerfScore 0.00 G_M36835_IG02: - cmp dword ptr [rdi], edi - mov eax, dword ptr [rdi+0x10] - mov ecx, dword ptr [rdi+0x08] - sub ecx, eax - xor eax, eax - test ecx, ecx - cmove ecx, eax - cmp esi, ecx - jle SHORT G_M36835_IG04 - ;; size=21 bbWeight=1 PerfScore 9.25 + mov eax, dword ptr [rdi+0x08] + sub eax, dword ptr [rdi+0x10] + cmp eax, esi + jl SHORT G_M36835_IG04 + ;; size=10 bbWeight=1 PerfScore 6.25 G_M36835_IG03: - mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this - call [rax]System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this - ;; size=12 bbWeight=0.50 PerfScore 1.62 -G_M36835_IG04: - nop - ;; size=1 bbWeight=1 PerfScore 0.25 -G_M36835_IG05: - add rsp, 8 ret - ;; size=5 bbWeight=1 PerfScore 1.25 + ;; size=1 bbWeight=0.50 PerfScore 0.50 +G_M36835_IG04: + mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this + ;; size=10 bbWeight=0.50 PerfScore 0.12 +G_M36835_IG05: + tail.jmp [rax]System.Net.MultiArrayBuffer:GrowAvailableSpace(int):this + ;; size=3 bbWeight=0.50 PerfScore 1.00 -; Total bytes of code 40, prolog size 1, PerfScore 13.38, instruction count 15, allocated bytes for code 40 (MethodHash=172f701c) for method System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts) +; Total bytes of code 24, prolog size 0, PerfScore 7.88, instruction count 7, allocated bytes for code 24 (MethodHash=172f701c) for method System.Net.MultiArrayBuffer:EnsureAvailableSpace(int):this (FullOpts) ; ============================================================ ```
-11 (-15.07 % of base) - System.Net.MultiArrayBuffer:Discard(int):this ```diff ; Assembly listing for method System.Net.MultiArrayBuffer:Discard(int):this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame -; partially interruptible +; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T00] ( 9, 7 ) byref -> rdi this single-def -; V01 arg1 [V01,T02] ( 4, 3.50) int -> rsi single-def +; V00 this [V00,T00] ( 8, 6 ) byref -> rdi this single-def +; V01 arg1 [V01,T01] ( 4, 3.50) int -> rsi single-def ;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref -; V03 loc1 [V03,T05] ( 2, 1 ) int -> rax +; V03 loc1 [V03,T03] ( 2, 1 ) int -> rcx ;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref -;* V05 loc3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op -;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V07 tmp1 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V08 tmp2 [V08,T01] ( 3, 6 ) int -> rax "Inlining Arg" -;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" -;* V10 tmp4 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V11 tmp5 [V11 ] ( 0, 0 ) ref -> zero-ref "field V05._blocks (fldOffset=0x0)" P-INDEP -;* V12 tmp6 [V12 ] ( 0, 0 ) int -> zero-ref "field V05._start (fldOffset=0x8)" P-INDEP -;* V13 tmp7 [V13 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0xc)" P-INDEP -;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref "field V07._blocks (fldOffset=0x0)" P-INDEP -;* V15 tmp9 [V15 ] ( 0, 0 ) int -> zero-ref "field V07._start (fldOffset=0x8)" P-INDEP -; V16 tmp10 [V16,T04] ( 2, 2 ) int -> rax "field V07._length (fldOffset=0xc)" P-INDEP -; V17 cse0 [V17,T03] ( 4, 3 ) int -> rdx "CSE #01: aggressive" +;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" +; V06 cse0 [V06,T02] ( 4, 3 ) int -> rax "CSE #01: aggressive" ; ; Lcl frame size = 0 G_M26734_IG01: push rbp mov rbp, rsp ;; size=4 bbWeight=1 PerfScore 1.25 G_M26734_IG02: - cmp dword ptr [rdi], edi - mov edx, dword ptr [rdi+0x0C] - mov eax, dword ptr [rdi+0x10] - sub eax, edx - xor ecx, ecx - test eax, eax - cmove eax, ecx - cmp esi, eax + mov edx, dword ptr [rdi+0x10] + mov eax, dword ptr [rdi+0x0C] + sub edx, eax + cmp edx, esi je SHORT G_M26734_IG05 - ;; size=21 bbWeight=1 PerfScore 9.25 + ;; size=12 bbWeight=1 PerfScore 5.50 G_M26734_IG03: - mov eax, edx - shr eax, 14 - add edx, esi - mov dword ptr [rdi+0x0C], edx + mov ecx, eax + shr ecx, 14 + add esi, eax + mov dword ptr [rdi+0x0C], esi mov edx, dword ptr [rdi+0x0C] shr edx, 14 - mov esi, eax + mov esi, ecx mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this - call [rax]System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this - nop - ;; size=31 bbWeight=0.50 PerfScore 4.12 + ;; size=28 bbWeight=0.50 PerfScore 2.50 G_M26734_IG04: pop rbp - ret - ;; size=2 bbWeight=0.50 PerfScore 0.75 + tail.jmp [rax]System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this + ;; size=4 bbWeight=0.50 PerfScore 1.25 G_M26734_IG05: mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:DiscardAll():this - call [rax]System.Net.MultiArrayBuffer:DiscardAll():this - nop - ;; size=13 bbWeight=0.50 PerfScore 1.75 + ;; size=10 bbWeight=0.50 PerfScore 0.12 G_M26734_IG06: pop rbp - ret - ;; size=2 bbWeight=0.50 PerfScore 0.75 + tail.jmp [rax]System.Net.MultiArrayBuffer:DiscardAll():this + ;; size=4 bbWeight=0.50 PerfScore 1.25 -; Total bytes of code 73, prolog size 4, PerfScore 17.88, instruction count 28, allocated bytes for code 73 (MethodHash=4bbf9791) for method System.Net.MultiArrayBuffer:Discard(int):this (FullOpts) +; Total bytes of code 62, prolog size 4, PerfScore 11.88, instruction count 20, allocated bytes for code 62 (MethodHash=4bbf9791) for method System.Net.MultiArrayBuffer:Discard(int):this (FullOpts) ; ============================================================ ```
-11 (-15.07 % of base) - System.Net.MultiArrayBuffer:Discard(int):this ```diff ; Assembly listing for method System.Net.MultiArrayBuffer:Discard(int):this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX - Unix ; FullOpts code ; optimized code ; rbp based frame -; partially interruptible +; fully interruptible ; No PGO data -; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T00] ( 9, 7 ) byref -> rdi this single-def -; V01 arg1 [V01,T02] ( 4, 3.50) int -> rsi single-def +; V00 this [V00,T00] ( 8, 6 ) byref -> rdi this single-def +; V01 arg1 [V01,T01] ( 4, 3.50) int -> rsi single-def ;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref -; V03 loc1 [V03,T05] ( 2, 1 ) int -> rax +; V03 loc1 [V03,T03] ( 2, 1 ) int -> rcx ;* V04 loc2 [V04 ] ( 0, 0 ) int -> zero-ref -;* V05 loc3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op -;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -;* V07 tmp1 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V08 tmp2 [V08,T01] ( 3, 6 ) int -> rax "Inlining Arg" -;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" -;* V10 tmp4 [V10 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V11 tmp5 [V11 ] ( 0, 0 ) ref -> zero-ref "field V05._blocks (fldOffset=0x0)" P-INDEP -;* V12 tmp6 [V12 ] ( 0, 0 ) int -> zero-ref "field V05._start (fldOffset=0x8)" P-INDEP -;* V13 tmp7 [V13 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0xc)" P-INDEP -;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref "field V07._blocks (fldOffset=0x0)" P-INDEP -;* V15 tmp9 [V15 ] ( 0, 0 ) int -> zero-ref "field V07._start (fldOffset=0x8)" P-INDEP -; V16 tmp10 [V16,T04] ( 2, 2 ) int -> rax "field V07._length (fldOffset=0xc)" P-INDEP -; V17 cse0 [V17,T03] ( 4, 3 ) int -> rdx "CSE #01: aggressive" +;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" +; V06 cse0 [V06,T02] ( 4, 3 ) int -> rax "CSE #01: aggressive" ; ; Lcl frame size = 0 G_M26734_IG01: push rbp mov rbp, rsp ;; size=4 bbWeight=1 PerfScore 1.25 G_M26734_IG02: - cmp dword ptr [rdi], edi - mov edx, dword ptr [rdi+0x0C] - mov eax, dword ptr [rdi+0x10] - sub eax, edx - xor ecx, ecx - test eax, eax - cmove eax, ecx - cmp esi, eax + mov edx, dword ptr [rdi+0x10] + mov eax, dword ptr [rdi+0x0C] + sub edx, eax + cmp edx, esi je SHORT G_M26734_IG05 - ;; size=21 bbWeight=1 PerfScore 9.25 + ;; size=12 bbWeight=1 PerfScore 5.50 G_M26734_IG03: - mov eax, edx - shr eax, 14 - add edx, esi - mov dword ptr [rdi+0x0C], edx + mov ecx, eax + shr ecx, 14 + add esi, eax + mov dword ptr [rdi+0x0C], esi mov edx, dword ptr [rdi+0x0C] shr edx, 14 - mov esi, eax + mov esi, ecx mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this - call [rax]System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this - nop - ;; size=31 bbWeight=0.50 PerfScore 4.12 + ;; size=28 bbWeight=0.50 PerfScore 2.50 G_M26734_IG04: pop rbp - ret - ;; size=2 bbWeight=0.50 PerfScore 0.75 + tail.jmp [rax]System.Net.MultiArrayBuffer:FreeBlocks(uint,uint):this + ;; size=4 bbWeight=0.50 PerfScore 1.25 G_M26734_IG05: mov rax, 0xD1FFAB1E ; code for System.Net.MultiArrayBuffer:DiscardAll():this - call [rax]System.Net.MultiArrayBuffer:DiscardAll():this - nop - ;; size=13 bbWeight=0.50 PerfScore 1.75 + ;; size=10 bbWeight=0.50 PerfScore 0.12 G_M26734_IG06: pop rbp - ret - ;; size=2 bbWeight=0.50 PerfScore 0.75 + tail.jmp [rax]System.Net.MultiArrayBuffer:DiscardAll():this + ;; size=4 bbWeight=0.50 PerfScore 1.25 -; Total bytes of code 73, prolog size 4, PerfScore 17.88, instruction count 28, allocated bytes for code 73 (MethodHash=4bbf9791) for method System.Net.MultiArrayBuffer:Discard(int):this (FullOpts) +; Total bytes of code 62, prolog size 4, PerfScore 11.88, instruction count 20, allocated bytes for code 62 (MethodHash=4bbf9791) for method System.Net.MultiArrayBuffer:Discard(int):this (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/e78a72fa03e6fe8eef1bb8153d45c224

MihuBot commented 3 weeks ago

@MihaZupan