forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JitDiff X64] MihaZupan/runtime/multiab #753
Comments
Top method regressions53 (12.41 % of base) - System.Net.Http.Http2Connection+Http2Stream:TryReadFromBuffer(System.Span`1[ubyte],ubyte):System.ValueTuple`2[ubyte,int]:this ; 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 <System.Net.Http.Http2Connection+Http2Stream>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.Span`1[ubyte]>
-; 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 <System.Net.Http.Http2Connection+Http2Stream>
+; 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 <System.Net.Http.Http2Connection+Http2Stream>
; 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 <System.Net.MultiMemory>
;* 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 <System.Net.MultiMemory>
; V08 loc5 [V08 ] ( 7, 4 ) struct ( 8) [rbp-0x38] do-not-enreg[S] <System.ValueTuple`2[ubyte,int]>
;# 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" <System.ValueTuple`2[ubyte,int]>
;* V11 tmp2 [V11 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[ubyte,int]>
;* V12 tmp3 [V12 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
;* V13 tmp4 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[ubyte,int]>
-; 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" <System.Net.MultiMemory>
-; V17 tmp8 [V17,T09] ( 3, 3 ) int -> rsi "Inlining Arg"
-; V18 tmp9 [V18,T13] ( 2, 2 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[][]>
-; 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" <ubyte[][]>
+; V17 tmp8 [V17,T16] ( 2, 2 ) int -> rcx "impAppendStmt"
+;* V18 tmp9 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Net.MultiMemory>
+; 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" <System.IndexOutOfRangeException>
+; V24 tmp15 [V24,T30] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
;* V25 tmp16 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Net.MultiMemory>
;* V26 tmp17 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ubyte[][]>
;* 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 ; 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 <System.Memory`1[ubyte]>
-; 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 <System.Object>
+; 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 <System.Memory`1[ubyte]>
+; 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 <System.Object>
; 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 <System.Net.MultiMemory>
; V08 loc4 [V08 ] ( 4, 2 ) struct (16) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Net.MultiMemory>
;* 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" <System.Span`1[ubyte]>
-; 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" <System.Net.MultiMemory>
-; V19 tmp9 [V19,T15] ( 3, 3 ) int -> rdi "Inlining Arg"
-; V20 tmp10 [V20,T18] ( 2, 2 ) ref -> rdx class-hnd single-def "Inlining Arg" <ubyte[][]>
-; 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" <ubyte[][]>
+; V19 tmp9 [V19,T22] ( 2, 2 ) int -> rsi "impAppendStmt"
+;* V20 tmp10 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Net.MultiMemory>
+; 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" <System.IndexOutOfRangeException>
+; V26 tmp16 [V26,T37] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.IndexOutOfRangeException>
;* V27 tmp17 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Net.MultiMemory>
;* V28 tmp18 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ubyte[][]>
;* V29 tmp19 [V29 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
-; 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" <System.Object>
+; 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" <System.Object>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V35 tmp25 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[ubyte]>
;* V36 tmp26 [V36 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Span`1[ubyte]>
;* V37 tmp27 [V37 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline stloc first use temp" <System.Span`1[ubyte]>
-; 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" <ubyte[]>
;* V41 tmp31 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <ubyte[]>
-; 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" <System.Span`1[ubyte]>
-; 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)
; ============================================================ |
Top method improvements-38 (-8.10 % of base) - System.Net.Http.Http2Connection+Http2Stream:OnResponseData(System.ReadOnlySpan`1[ubyte],ubyte):this ; 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 <System.Net.Http.Http2Connection+Http2Stream>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ubyte]>
-; 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 <System.Net.Http.Http2Connection+Http2Stream>
+; 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 <System.Net.Http.Http2Connection+Http2Stream>
; 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 <System.Net.MultiMemory>
+; 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 <System.Net.MultiMemory>
;# 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" <System.Net.MultiMemory>
-; V12 tmp4 [V12,T07] ( 3, 6 ) int -> rsi "Inlining Arg"
-; V13 tmp5 [V13,T12] ( 2, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[][]>
-; 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" <System.Net.MultiMemory>
-;* V19 tmp11 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Net.MultiMemory>
-; V20 tmp12 [V20,T08] ( 3, 6 ) int -> rcx "Inlining Arg"
-;* V21 tmp13 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ubyte[][]>
-;* 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" <System.Net.MultiMemory>
-; V25 tmp17 [V25,T09] ( 3, 6 ) int -> rsi "Inlining Arg"
-; V26 tmp18 [V26,T13] ( 2, 4 ) ref -> rdx class-hnd single-def "Inlining Arg" <ubyte[][]>
-; 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" <ubyte[][]>
+; V16 tmp8 [V16,T12] ( 2, 4 ) int -> rcx "impAppendStmt"
+;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Net.MultiMemory>
+; 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 ; 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 <System.Net.MultiMemory>
-;# 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" <System.Net.MultiMemory>
-; V05 tmp2 [V05,T01] ( 3, 6 ) int -> rcx "Inlining Arg"
-;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ubyte[][]>
-;* 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 ; 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 <System.Net.MultiMemory>
-;# 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" <System.Net.MultiMemory>
-; V05 tmp2 [V05,T01] ( 3, 6 ) int -> rcx "Inlining Arg"
-;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ubyte[][]>
-;* 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 ; 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 <System.Net.MultiMemory>
-;# 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" <System.Net.MultiMemory>
-; V08 tmp2 [V08,T01] ( 3, 6 ) int -> rax "Inlining Arg"
-;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ubyte[][]>
-;* 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 ; 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 <System.Net.MultiMemory>
-;# 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" <System.Net.MultiMemory>
-; V08 tmp2 [V08,T01] ( 3, 6 ) int -> rax "Inlining Arg"
-;* V09 tmp3 [V09 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <ubyte[][]>
-;* 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 19 minutes 5 seconds.
https://github.com/MihaZupan/runtime/tree/multiab
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: