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] Rework HttpClient content buffering #800
Comments
Top method regressions215 (75.97 % of base) - System.Net.Http.HttpContent:CreateTemporaryBuffer(long,byref,byref):ubyte:this ; Assembly listing for method System.Net.Http.HttpContent:CreateTemporaryBuffer(long,byref,byref):ubyte:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 7 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T01] ( 4, 3.50) ref -> rdi this class-hnd single-def <System.Net.Http.HttpContent>
-; V01 arg1 [V01,T00] ( 5, 3.50) long -> rbx single-def
-; V02 arg2 [V02,T02] ( 4, 3 ) byref -> r15 single-def
-; V03 arg3 [V03,T03] ( 4, 3 ) byref -> rcx single-def
-;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T04] ( 3, 0 ) ref -> r15 class-hnd exact single-def "Single-def Box Helper" <System.Int64>
-; V06 tmp2 [V06,T07] ( 2, 0 ) ref -> rbx class-hnd exact single-def "non-inline candidate call" <System.Globalization.CultureInfo>
-; V07 tmp3 [V07,T05] ( 3, 0 ) ref -> r14 class-hnd exact single-def "Single-def Box Helper" <System.Int32>
-; V08 tmp4 [V08,T08] ( 2, 0 ) ref -> r13 class-hnd exact single-def "impImportAndPushBox" <System.String>
-; V09 tmp5 [V09,T06] ( 3, 0 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
-; V10 tmp6 [V10,T09] ( 2, 0 ) ref -> [rbp-0x30] spill-single-def "argument with side effect"
-; V11 tmp7 [V11,T10] ( 2, 0 ) ref -> rcx single-def "argument with side effect"
+; V00 this [V00,T04] ( 4, 3.50) ref -> rdi this class-hnd single-def <System.Net.Http.HttpContent>
+; V01 arg1 [V01,T01] ( 7, 4.50) long -> rbx single-def
+; V02 arg2 [V02,T02] ( 5, 3.50) byref -> r15 single-def
+; V03 arg3 [V03,T03] ( 5, 3.50) byref -> r14 single-def
+;* V04 loc0 [V04 ] ( 0, 0 ) long -> zero-ref
+;* V05 loc1 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op <System.Nullable`1[long]>
+;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V07 tmp1 [V07,T00] ( 7, 7 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
+; V08 tmp2 [V08,T08] ( 3, 0 ) ref -> r15 class-hnd exact single-def "Single-def Box Helper" <System.Int64>
+; V09 tmp3 [V09,T11] ( 2, 0 ) ref -> rbx class-hnd exact single-def "non-inline candidate call" <System.Globalization.CultureInfo>
+; V10 tmp4 [V10,T09] ( 3, 0 ) ref -> r14 class-hnd exact single-def "Single-def Box Helper" <System.Int32>
+; V11 tmp5 [V11,T12] ( 2, 0 ) ref -> r13 class-hnd exact single-def "impImportAndPushBox" <System.String>
+; V12 tmp6 [V12,T10] ( 3, 0 ) ref -> r12 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
+; V13 tmp7 [V13,T05] ( 4, 3 ) int -> rbx "Inlining Arg"
+;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref
+;* V15 tmp9 [V15 ] ( 0, 0 ) ref -> zero-ref
+;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref
+; V17 tmp11 [V17,T07] ( 1, 0.50) ubyte -> rax "field V05.hasValue (fldOffset=0x0)" P-INDEP
+; V18 tmp12 [V18,T06] ( 5, 2.50) long -> r13 "field V05.value (fldOffset=0x8)" P-INDEP
+; V19 tmp13 [V19,T13] ( 2, 0 ) ref -> [rbp-0x30] spill-single-def "argument with side effect"
+; V20 tmp14 [V20,T14] ( 2, 0 ) ref -> rcx single-def "argument with side effect"
;
; Lcl frame size = 8
G_M14512_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
push rax
lea rbp, [rsp+0x30]
mov rbx, rsi
mov r15, rdx
- ;; size=22 bbWeight=1 PerfScore 8.00
+ mov r14, rcx
+ ;; size=25 bbWeight=1 PerfScore 8.25
G_M14512_IG02:
cmp rbx, 0xD1FFAB1E
- jg SHORT G_M14512_IG08
+ jg G_M14512_IG13
cmp gword ptr [rdi+0x10], 0
- jne SHORT G_M14512_IG05
- ;; size=16 bbWeight=1 PerfScore 5.25
+ jne G_M14512_IG08
+ ;; size=24 bbWeight=1 PerfScore 5.25
G_M14512_IG03:
- mov rsi, rbx
- mov rdx, rcx
- mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateMemoryStream(long,byref):System.Net.Http.HttpContent+LimitMemoryStream:this
- call [rax]System.Net.Http.HttpContent:CreateMemoryStream(long,byref):System.Net.Http.HttpContent+LimitMemoryStream:this
- mov rsi, rax
- mov rdi, r15
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov eax, 1
- ;; size=34 bbWeight=0.50 PerfScore 2.75
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:get_Headers():System.Net.Http.Headers.HttpContentHeaders:this
+ call [rax]System.Net.Http.HttpContent:get_Headers():System.Net.Http.Headers.HttpContentHeaders:this
+ mov rdi, rax
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.Headers.HttpContentHeaders:get_ContentLength():System.Nullable`1[long]:this
+ cmp dword ptr [rdi], edi
+ call [rax]System.Net.Http.Headers.HttpContentHeaders:get_ContentLength():System.Nullable`1[long]:this
+ mov r13, rdx
+ cmp r13, rbx
+ jg SHORT G_M14512_IG05
+ mov rdi, 0xD1FFAB1E ; System.Net.Http.HttpContent+LimitArrayPoolWriteStream
+ call CORINFO_HELP_NEWSFAST
+ mov r12, rax
+ movsxd rdi, ebx
+ cmp r13, rdi
+ jg G_M14512_IG12
+ mov dword ptr [r12+0x20], ebx
+ mov dword ptr [r12+0x24], r13d
+ test r13, r13
+ sete dil
+ mov byte ptr [r12+0x30], dil
+ mov byte ptr [r12+0x31], 0
+ mov rdi, 0xD1FFAB1E ; global ptr
+ test byte ptr [rdi], 1
+ je SHORT G_M14512_IG11
+ ;; size=110 bbWeight=0.50 PerfScore 11.88
G_M14512_IG04:
- add rsp, 8
- pop rbx
- pop r12
- pop r13
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ mov rdi, 0xD1FFAB1E ; data for System.Array+EmptyArray`1[ubyte]:Value
+ mov rsi, gword ptr [rdi]
+ lea rdi, bword ptr [r12+0x10]
+ call CORINFO_HELP_ASSIGN_REF
+ mov rdi, r15
+ mov rsi, r12
+ call CORINFO_HELP_CHECKED_ASSIGN_REF
+ xor rdi, rdi
+ mov gword ptr [r14], rdi
+ jmp SHORT G_M14512_IG06
+ ;; size=41 bbWeight=0.50 PerfScore 4.25
G_M14512_IG05:
- xor rax, rax
- mov gword ptr [r15], rax
- ;; size=5 bbWeight=0.50 PerfScore 0.62
+ xor rdi, rdi
+ mov gword ptr [r15], rdi
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateOverCapacityException(long):System.Net.Http.HttpRequestException
+ call [rax]System.Net.Http.HttpContent:CreateOverCapacityException(long):System.Net.Http.HttpRequestException
+ mov rsi, rax
+ mov rdi, r14
+ call CORINFO_HELP_CHECKED_ASSIGN_REF
+ ;; size=31 bbWeight=0.50 PerfScore 3.12
G_M14512_IG06:
- mov gword ptr [rcx], rax
- ;; size=3 bbWeight=0.50 PerfScore 0.50
+ mov eax, 1
+ ;; size=5 bbWeight=0.50 PerfScore 0.12
G_M14512_IG07:
add rsp, 8
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M14512_IG08:
+ xor rax, rax
+ mov gword ptr [r15], rax
+ ;; size=5 bbWeight=0.50 PerfScore 0.62
+G_M14512_IG09:
+ mov gword ptr [r14], rax
+ ;; size=3 bbWeight=0.50 PerfScore 0.50
+G_M14512_IG10:
+ add rsp, 8
+ pop rbx
+ pop r12
+ pop r13
+ pop r14
+ pop r15
+ pop rbp
+ ret
+ ;; size=15 bbWeight=0.50 PerfScore 2.12
+G_M14512_IG11:
+ mov rdi, 0xD1FFAB1E ; System.Array+EmptyArray`1[ubyte]
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ jmp G_M14512_IG04
+ ;; size=27 bbWeight=0 PerfScore 0.00
+G_M14512_IG12:
+ movsxd rdi, ebx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateOverCapacityException(long):System.Net.Http.HttpRequestException
+ call [rax]System.Net.Http.HttpContent:CreateOverCapacityException(long):System.Net.Http.HttpRequestException
+ mov rdi, rax
+ call CORINFO_HELP_THROW
+ int3
+ ;; size=24 bbWeight=0 PerfScore 0.00
+G_M14512_IG13:
mov rdi, 0xD1FFAB1E ; System.Int64
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov qword ptr [r15+0x08], rbx
mov rdi, 0xD1FFAB1E ; const ptr
mov rbx, gword ptr [rdi]
mov rdi, 0xD1FFAB1E ; System.Int32
call CORINFO_HELP_NEWSFAST
mov r14, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_net_http_content_buffersize_limit():System.String
call [rax]System.SR:get_net_http_content_buffersize_limit():System.String
mov r13, rax
mov dword ptr [r14+0x08], 0xD1FFAB1E
mov rdi, 0xD1FFAB1E ; System.ArgumentOutOfRangeException
call CORINFO_HELP_NEWSFAST
mov r12, rax
mov edi, 0x3E30
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov gword ptr [rbp-0x30], rax
mov rdx, r14
mov rdi, rbx
mov rsi, r13
mov rcx, 0xD1FFAB1E ; code for System.SR:Format(System.IFormatProvider,System.String,System.Object):System.String
call [rcx]System.SR:Format(System.IFormatProvider,System.String,System.Object):System.String
mov rcx, rax
mov rsi, gword ptr [rbp-0x30]
mov rdx, r15
mov rdi, r12
mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
call [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
mov rdi, r12
call CORINFO_HELP_THROW
int3
;; size=173 bbWeight=0 PerfScore 0.00
-; Total bytes of code 283, prolog size 16, PerfScore 21.38, instruction count 75, allocated bytes for code 283 (MethodHash=1a89c74f) for method System.Net.Http.HttpContent:CreateTemporaryBuffer(long,byref,byref):ubyte:this (FullOpts)
+; Total bytes of code 498, prolog size 16, PerfScore 38.25, instruction count 121, allocated bytes for code 498 (MethodHash=1a89c74f) for method System.Net.Http.HttpContent:CreateTemporaryBuffer(long,byref,byref):ubyte:this (FullOpts)
; ============================================================ 164 (820.00 % of base) - System.Net.Http.HttpContent:ReadBufferedContentAsByteArray():ubyte[]:this ; Assembly listing for method System.Net.Http.HttpContent:ReadBufferedContentAsByteArray():ubyte[]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
-; fully interruptible
+; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 3 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Net.Http.HttpContent>
+; V00 this [V00,T03] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Net.Http.HttpContent>
;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V02 rat0 [V02,T00] ( 3, 6 ) ref -> rdi "virtual vtable call"
+; V02 tmp1 [V02,T01] ( 3, 6 ) ref -> rsi class-hnd exact single-def "Inlining Arg" <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
+;* V03 tmp2 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[ubyte]>
+; V04 tmp3 [V04,T00] ( 4, 6 ) ref -> rbx class-hnd single-def "Inlining Arg" <ubyte[]>
+; V05 tmp4 [V05,T02] ( 4, 5 ) int -> r15 "Inlining Arg"
+;* V06 tmp5 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+; V07 tmp6 [V07,T06] ( 3, 2 ) ref -> r14 class-hnd "Inline return value spill temp" <ubyte[]>
+; V08 tmp7 [V08,T05] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <ubyte[]>
+;* V09 tmp8 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V10 tmp9 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V11 tmp10 [V11 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V12 tmp11 [V12 ] ( 0, 0 ) byref -> zero-ref single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V13 tmp12 [V13 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+; V14 tmp13 [V14,T07] ( 3, 1.50) byref -> rbx "field V06._reference (fldOffset=0x0)" P-INDEP
+; V15 tmp14 [V15,T04] ( 5, 3 ) int -> r15 "field V06._length (fldOffset=0x8)" P-INDEP
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M2296_IG01:
push rbp
- mov rbp, rsp
- ;; size=4 bbWeight=1 PerfScore 1.25
+ push r15
+ push r14
+ push rbx
+ push rax
+ lea rbp, [rsp+0x20]
+ ;; size=12 bbWeight=1 PerfScore 5.50
G_M2296_IG02:
- mov rdi, gword ptr [rdi+0x10]
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x68]
- ;; size=11 bbWeight=1 PerfScore 6.00
+ mov rsi, gword ptr [rdi+0x10]
+ mov rbx, gword ptr [rsi+0x10]
+ mov r15d, dword ptr [rsi+0x2C]
+ test rbx, rbx
+ je SHORT G_M2296_IG04
+ ;; size=17 bbWeight=1 PerfScore 7.25
G_M2296_IG03:
+ cmp dword ptr [rbx+0x08], r15d
+ jb G_M2296_IG12
+ add rbx, 16
+ jmp SHORT G_M2296_IG05
+ ;; size=16 bbWeight=0.50 PerfScore 3.12
+G_M2296_IG04:
+ test r15d, r15d
+ jne SHORT G_M2296_IG12
+ xor rbx, rbx
+ xor r15d, r15d
+ ;; size=10 bbWeight=0.50 PerfScore 0.88
+G_M2296_IG05:
+ test r15d, r15d
+ je SHORT G_M2296_IG07
+ ;; size=5 bbWeight=1 PerfScore 1.25
+G_M2296_IG06:
+ mov esi, r15d
+ mov rdi, 0xD1FFAB1E ; ubyte[]
+ call CORINFO_HELP_NEWARR_1_VC
+ mov r14, rax
+ mov edx, r15d
+ lea rdi, bword ptr [r14+0x10]
+ mov rsi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
+ call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
+ jmp SHORT G_M2296_IG09
+ ;; size=45 bbWeight=0.50 PerfScore 4.00
+G_M2296_IG07:
+ mov rdi, 0xD1FFAB1E ; global ptr
+ test byte ptr [rdi], 1
+ je SHORT G_M2296_IG11
+ ;; size=15 bbWeight=0.50 PerfScore 2.12
+G_M2296_IG08:
+ mov rax, 0xD1FFAB1E ; data for System.Array+EmptyArray`1[ubyte]:Value
+ mov r14, gword ptr [rax]
+ ;; size=13 bbWeight=0.50 PerfScore 1.12
+G_M2296_IG09:
+ mov rax, r14
+ ;; size=3 bbWeight=1 PerfScore 0.25
+G_M2296_IG10:
+ add rsp, 8
+ pop rbx
+ pop r14
+ pop r15
pop rbp
- tail.jmp [rax+0x30]System.IO.MemoryStream:ToArray():ubyte[]:this
- ;; size=5 bbWeight=1 PerfScore 2.50
+ ret
+ ;; size=11 bbWeight=1 PerfScore 3.25
+G_M2296_IG11:
+ mov rdi, 0xD1FFAB1E ; System.Array+EmptyArray`1[ubyte]
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ jmp SHORT G_M2296_IG08
+ ;; size=24 bbWeight=0 PerfScore 0.00
+G_M2296_IG12:
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ int3
+ ;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 20, prolog size 4, PerfScore 9.75, instruction count 7, allocated bytes for code 20 (MethodHash=f95ef707) for method System.Net.Http.HttpContent:ReadBufferedContentAsByteArray():ubyte[]:this (FullOpts)
+; Total bytes of code 184, prolog size 12, PerfScore 28.75, instruction count 50, allocated bytes for code 184 (MethodHash=f95ef707) for method System.Net.Http.HttpContent:ReadBufferedContentAsByteArray():ubyte[]:this (FullOpts)
; ============================================================ 83 (122.06 % of base) - System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ToArray():ubyte[]:this ; Assembly listing for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ToArray():ubyte[]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
-; rsp based frame
+; rbp based frame
; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
-; V01 loc0 [V01,T01] ( 3, 3 ) ref -> r14 class-hnd exact single-def <ubyte[]>
+; V00 this [V00,T00] ( 7, 5 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
+; V01 loc0 [V01,T02] ( 4, 2 ) ref -> r15 class-hnd exact single-def <ubyte[]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 cse0 [V03,T02] ( 3, 3 ) int -> r15 "CSE #01: aggressive"
+;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V05 tmp3 [V05 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+; V07 tmp5 [V07,T04] ( 2, 1 ) byref -> rsi "field V04._reference (fldOffset=0x0)" P-INDEP
+; V08 tmp6 [V08,T05] ( 2, 1 ) int -> rdx "field V04._length (fldOffset=0x8)" P-INDEP
+; V09 cse0 [V09,T03] ( 3, 1.50) ref -> rax "CSE #01: moderate"
+; V10 cse1 [V10,T01] ( 5, 2.50) int -> rsi multi-def "CSE #02: aggressive"
;
; Lcl frame size = 0
G_M28475_IG01:
+ push rbp
push r15
- push r14
push rbx
+ lea rbp, [rsp+0x10]
mov rbx, rdi
- ;; size=8 bbWeight=1 PerfScore 3.25
+ ;; size=12 bbWeight=1 PerfScore 3.75
G_M28475_IG02:
- mov r15d, dword ptr [rbx+0x1C]
- movsxd rsi, r15d
+ cmp byte ptr [rbx+0x31], 0
+ jne SHORT G_M28475_IG04
+ ;; size=6 bbWeight=1 PerfScore 4.00
+G_M28475_IG03:
+ mov esi, dword ptr [rbx+0x2C]
+ mov rax, gword ptr [rbx+0x10]
+ cmp esi, dword ptr [rax+0x08]
+ je SHORT G_M28475_IG09
+ ;; size=12 bbWeight=0.50 PerfScore 4.00
+G_M28475_IG04:
+ mov esi, dword ptr [rbx+0x2C]
+ test esi, esi
+ je SHORT G_M28475_IG06
+ movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; ubyte[]
call CORINFO_HELP_NEWARR_1_VC
- mov r14, rax
- mov rdi, gword ptr [rbx+0x10]
- mov r8d, r15d
- mov rdx, r14
- xor esi, esi
- xor ecx, ecx
- mov rax, 0xD1FFAB1E ; code for System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
- call [rax]System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
- mov rax, r14
- ;; size=54 bbWeight=1 PerfScore 10.25
-G_M28475_IG03:
+ mov r15, rax
+ lea rsi, bword ptr [r15+0x10]
+ mov edx, dword ptr [r15+0x08]
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent+LimitArrayPoolWriteStream:CopyToCore(System.Span`1[ubyte]):this
+ call [rax]System.Net.Http.HttpContent+LimitArrayPoolWriteStream:CopyToCore(System.Span`1[ubyte]):this
+ mov rax, r15
+ ;; size=54 bbWeight=0.50 PerfScore 5.62
+G_M28475_IG05:
pop rbx
- pop r14
pop r15
+ pop rbp
ret
- ;; size=6 bbWeight=1 PerfScore 2.50
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
+G_M28475_IG06:
+ mov rdi, 0xD1FFAB1E ; global ptr
+ test byte ptr [rdi], 1
+ je SHORT G_M28475_IG10
+ ;; size=15 bbWeight=0.50 PerfScore 2.12
+G_M28475_IG07:
+ mov rax, 0xD1FFAB1E ; data for System.Array+EmptyArray`1[ubyte]:Value
+ mov rax, gword ptr [rax]
+ ;; size=13 bbWeight=0.50 PerfScore 1.12
+G_M28475_IG08:
+ pop rbx
+ pop r15
+ pop rbp
+ ret
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
+G_M28475_IG09:
+ pop rbx
+ pop r15
+ pop rbp
+ ret
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
+G_M28475_IG10:
+ mov rdi, 0xD1FFAB1E ; System.Array+EmptyArray`1[ubyte]
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ jmp SHORT G_M28475_IG07
+ ;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 68, prolog size 5, PerfScore 16.00, instruction count 21, allocated bytes for code 68 (MethodHash=4f6790c4) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ToArray():ubyte[]:this (FullOpts)
+; Total bytes of code 151, prolog size 9, PerfScore 24.38, instruction count 45, allocated bytes for code 151 (MethodHash=4f6790c4) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ToArray():ubyte[]:this (FullOpts)
; ============================================================ 57 (65.52 % of base) - System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(ubyte[],int,int):this ; Assembly listing for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(ubyte[],int,int):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 3 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 8, 8 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
-; V01 arg1 [V01,T02] ( 3, 3 ) ref -> r14 class-hnd single-def <ubyte[]>
-; V02 arg2 [V02,T03] ( 3, 3 ) int -> r13 single-def
-; V03 arg3 [V03,T01] ( 5, 5 ) int -> r15 single-def
+; V00 this [V00,T03] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
+; V01 arg1 [V01,T00] ( 5, 5 ) ref -> rsi class-hnd single-def <ubyte[]>
+; V02 arg2 [V02,T01] ( 5, 5 ) int -> rdx single-def
+; V03 arg3 [V03,T02] ( 4, 4 ) int -> rcx single-def
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V05 tmp1 [V05 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V09 tmp5 [V09 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V10 tmp6 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+;* V11 tmp7 [V11 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V12 tmp8 [V12 ] ( 0, 0 ) byref -> zero-ref "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V13 tmp9 [V13 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+;* V14 tmp10 [V14 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V15 tmp11 [V15 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
+; V16 tmp12 [V16,T07] ( 2, 2 ) byref -> rsi single-def "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V17 tmp13 [V17 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+;* V18 tmp14 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V19 tmp15 [V19 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+; V20 tmp16 [V20,T08] ( 2, 2 ) byref -> rsi single-def "field V09._reference (fldOffset=0x0)" P-INDEP
+; V21 tmp17 [V21,T09] ( 2, 2 ) int -> rdx "field V09._length (fldOffset=0x8)" P-INDEP
+; V22 cse0 [V22,T04] ( 3, 3 ) int -> rax "CSE #02: aggressive"
+; V23 cse1 [V23,T05] ( 3, 3 ) long -> r9 "CSE #01: aggressive"
+; V24 cse2 [V24,T06] ( 3, 3 ) long -> rdx "CSE #03: aggressive"
;
; Lcl frame size = 0
G_M28126_IG01:
push rbp
- push r15
- push r14
- push r13
- push rbx
- lea rbp, [rsp+0x20]
- mov rbx, rdi
- mov r14, rsi
- mov r13d, edx
- mov r15d, ecx
- ;; size=25 bbWeight=1 PerfScore 6.50
+ mov rbp, rsp
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M28126_IG02:
- mov esi, r15d
- add esi, dword ptr [rbx+0x1C]
- mov rdi, rbx
- mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent+LimitArrayPoolWriteStream:EnsureCapacity(int):this
- call [rax]System.Net.Http.HttpContent+LimitArrayPoolWriteStream:EnsureCapacity(int):this
- mov rdx, gword ptr [rbx+0x10]
- mov ecx, dword ptr [rbx+0x1C]
- mov rdi, r14
- mov esi, r13d
- mov r8d, r15d
- mov rax, 0xD1FFAB1E ; code for System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
- call [rax]System.Buffer:BlockCopy(System.Array,int,System.Array,int,int)
- add dword ptr [rbx+0x1C], r15d
- ;; size=53 bbWeight=1 PerfScore 17.75
+ test rsi, rsi
+ je SHORT G_M28126_IG07
+ test edx, edx
+ jl SHORT G_M28126_IG06
+ mov eax, dword ptr [rsi+0x08]
+ mov r8d, eax
+ sub r8d, edx
+ movsxd r8, r8d
+ mov r9d, ecx
+ cmp r8, r9
+ jl SHORT G_M28126_IG05
+ mov edx, edx
+ add r9, rdx
+ cmp r9, rax
+ ja SHORT G_M28126_IG04
+ lea rsi, bword ptr [rsi+rdx+0x10]
+ mov edx, ecx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(System.ReadOnlySpan`1[ubyte]):this
+ cmp dword ptr [rdi], edi
+ call [rax]System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(System.ReadOnlySpan`1[ubyte]):this
+ nop
+ ;; size=61 bbWeight=1 PerfScore 16.25
G_M28126_IG03:
- pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=9 bbWeight=1 PerfScore 3.50
+ ;; size=2 bbWeight=1 PerfScore 1.50
+G_M28126_IG04:
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ int3
+ ;; size=13 bbWeight=0 PerfScore 0.00
+G_M28126_IG05:
+ mov edi, 27
+ mov esi, 16
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
+ call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
+ int3
+ ;; size=23 bbWeight=0 PerfScore 0.00
+G_M28126_IG06:
+ mov edi, 90
+ mov esi, 13
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
+ call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
+ int3
+ ;; size=23 bbWeight=0 PerfScore 0.00
+G_M28126_IG07:
+ mov edi, 88
+ mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentNullException(int)
+ call [rax]System.ThrowHelper:ThrowArgumentNullException(int)
+ int3
+ ;; size=18 bbWeight=0 PerfScore 0.00
-; Total bytes of code 87, prolog size 13, PerfScore 27.75, instruction count 29, allocated bytes for code 87 (MethodHash=28219221) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(ubyte[],int,int):this (FullOpts)
+; Total bytes of code 144, prolog size 4, PerfScore 19.00, instruction count 42, allocated bytes for code 144 (MethodHash=28219221) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(ubyte[],int,int):this (FullOpts)
; ============================================================ 35 (22.58 % of base) - System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(System.ReadOnlySpan`1[ubyte]):this ; Assembly listing for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(System.ReadOnlySpan`1[ubyte]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 0 single block inlinees; 3 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 8, 8 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
+; V00 this [V00,T00] ( 11, 8 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ubyte]>
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-; V04 tmp2 [V04,T02] ( 4, 6 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[]>
-; V05 tmp3 [V05,T03] ( 4, 5 ) int -> rcx "Inlining Arg"
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-;* V07 tmp5 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V09 tmp7 [V09 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V10 tmp8 [V10 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V11 tmp9 [V11,T04] ( 2, 2 ) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-; V12 tmp10 [V12,T01] ( 8, 6.50) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP
-; V13 tmp11 [V13,T05] ( 3, 2 ) byref -> rdi "field V03._reference (fldOffset=0x0)" P-INDEP
-; V14 tmp12 [V14,T06] ( 3, 2 ) int -> rax "field V03._length (fldOffset=0x8)" P-INDEP
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V16 tmp14 [V16 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+; V02 loc0 [V02,T04] ( 3, 2.50) ref -> r14 class-hnd single-def <ubyte[]>
+; V03 loc1 [V03,T03] ( 5, 3.50) int -> r13
+;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V05 tmp1 [V05 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
+;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
+; V09 tmp5 [V09,T07] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V10 tmp6 [V10,T08] ( 2, 2 ) int -> rax "Inlining Arg"
+;* V11 tmp7 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V12 tmp8 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V13 tmp9 [V13 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V14 tmp10 [V14 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+; V15 tmp11 [V15,T02] ( 3, 2 ) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+; V16 tmp12 [V16,T01] ( 8, 5.50) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V17 tmp13 [V17 ] ( 0, 0 ) byref -> zero-ref "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V18 tmp14 [V18 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+;* V19 tmp15 [V19 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp16 [V20 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
+;* V21 tmp17 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V22 tmp18 [V22 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp19 [V23 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp20 [V24 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+;* V25 tmp21 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp22 [V26 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V27 cse0 [V27,T05] ( 3, 2.50) int -> rax "CSE #03: aggressive"
+; V28 cse1 [V28,T06] ( 3, 2.50) int -> r12 "CSE #02: aggressive"
;
; Lcl frame size = 8
G_M24462_IG01:
push rbp
push r15
push r14
+ push r13
+ push r12
push rbx
push rax
- lea rbp, [rsp+0x20]
+ lea rbp, [rsp+0x30]
mov rbx, rdi
- mov r14, rsi
mov r15d, edx
- ;; size=21 bbWeight=1 PerfScore 6.25
+ ;; size=22 bbWeight=1 PerfScore 8.00
G_M24462_IG02:
- mov esi, r15d
- add esi, dword ptr [rbx+0x1C]
- mov rdi, rbx
- mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent+LimitArrayPoolWriteStream:EnsureCapacity(int):this
- call [rax]System.Net.Http.HttpContent+LimitArrayPoolWriteStream:EnsureCapacity(int):this
- mov rax, gword ptr [rbx+0x10]
- mov ecx, dword ptr [rbx+0x1C]
- test rax, rax
- je SHORT G_M24462_IG04
- ;; size=33 bbWeight=1 PerfScore 12.00
+ mov edx, dword ptr [rbx+0x20]
+ sub edx, dword ptr [rbx+0x2C]
+ cmp edx, r15d
+ jl G_M24462_IG08
+ mov r14, gword ptr [rbx+0x10]
+ mov r13d, dword ptr [rbx+0x28]
+ mov r12d, dword ptr [r14+0x08]
+ mov eax, r12d
+ sub eax, r13d
+ cmp eax, r15d
+ jge SHORT G_M24462_IG04
+ ;; size=38 bbWeight=1 PerfScore 14.00
G_M24462_IG03:
- mov edx, ecx
- mov edi, r15d
- add rdx, rdi
- mov edi, dword ptr [rax+0x08]
- cmp rdx, rdi
- ja SHORT G_M24462_IG08
- mov ecx, ecx
- lea rdi, bword ptr [rax+rcx+0x10]
- mov eax, r15d
- jmp SHORT G_M24462_IG05
- ;; size=28 bbWeight=0.50 PerfScore 3.75
-G_M24462_IG04:
- or ecx, r15d
- jne SHORT G_M24462_IG08
- xor rdi, rdi
- xor eax, eax
- ;; size=9 bbWeight=0.50 PerfScore 0.88
-G_M24462_IG05:
- cmp r15d, eax
- jg SHORT G_M24462_IG07
mov edx, r15d
- mov rsi, r14
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent+LimitArrayPoolWriteStream:GrowAndWrite(System.ReadOnlySpan`1[ubyte]):this
+ call [rax]System.Net.Http.HttpContent+LimitArrayPoolWriteStream:GrowAndWrite(System.ReadOnlySpan`1[ubyte]):this
+ jmp SHORT G_M24462_IG05
+ ;; size=20 bbWeight=0.50 PerfScore 2.88
+G_M24462_IG04:
+ cmp r12d, r13d
+ jb SHORT G_M24462_IG07
+ mov ecx, r13d
+ lea rdi, bword ptr [r14+rcx+0x10]
+ cmp r15d, eax
+ ja SHORT G_M24462_IG06
+ mov edx, r15d
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
- add dword ptr [rbx+0x1C], r15d
- ;; size=27 bbWeight=1 PerfScore 8.00
-G_M24462_IG06:
+ add r13d, r15d
+ mov dword ptr [rbx+0x28], r13d
+ add dword ptr [rbx+0x2C], r15d
+ ;; size=44 bbWeight=0.50 PerfScore 5.75
+G_M24462_IG05:
add rsp, 8
pop rbx
+ pop r12
+ pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 3.25
-G_M24462_IG07:
+ ;; size=15 bbWeight=1 PerfScore 4.25
+G_M24462_IG06:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M24462_IG08:
+G_M24462_IG07:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
+G_M24462_IG08:
+ movsxd rdi, dword ptr [rbx+0x20]
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateOverCapacityException(long):System.Net.Http.HttpRequestException
+ call [rax]System.Net.Http.HttpContent:CreateOverCapacityException(long):System.Net.Http.HttpRequestException
+ mov rdi, rax
+ call CORINFO_HELP_THROW
+ int3
+ ;; size=25 bbWeight=0 PerfScore 0.00
-; Total bytes of code 155, prolog size 12, PerfScore 34.12, instruction count 51, allocated bytes for code 155 (MethodHash=7a51a071) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(System.ReadOnlySpan`1[ubyte]):this (FullOpts)
+; Total bytes of code 190, prolog size 16, PerfScore 34.88, instruction count 58, allocated bytes for code 190 (MethodHash=7a51a071) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Write(System.ReadOnlySpan`1[ubyte]):this (FullOpts)
; ============================================================ 23 (69.70 % of base) - System.Net.Http.HttpContent:CreateContentReadStream(System.Threading.CancellationToken):System.IO.Stream:this ; Assembly listing for method System.Net.Http.HttpContent:CreateContentReadStream(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
-; rsp based frame
+; rbp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.Threading.CancellationToken>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V03 tmp1 [V03,T01] ( 2, 2 ) ref -> rsi single-def "field V01._source (fldOffset=0x0)" P-INDEP
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M34305_IG01:
+ push rbp
push rbx
+ push rax
+ lea rbp, [rsp+0x10]
mov rbx, rdi
- ;; size=4 bbWeight=1 PerfScore 1.25
+ ;; size=11 bbWeight=1 PerfScore 3.75
G_M34305_IG02:
mov rdi, rbx
mov rdx, rsi
mov esi, 0xD1FFAB1E
mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:LoadIntoBuffer(long,System.Threading.CancellationToken):this
call [rax]System.Net.Http.HttpContent:LoadIntoBuffer(long,System.Threading.CancellationToken):this
- mov rax, gword ptr [rbx+0x10]
- ;; size=27 bbWeight=1 PerfScore 6.00
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ ;; size=36 bbWeight=1 PerfScore 4.50
G_M34305_IG03:
+ add rsp, 8
pop rbx
- ret
- ;; size=2 bbWeight=1 PerfScore 1.50
+ pop rbp
+ tail.jmp [rax]System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 33, prolog size 1, PerfScore 8.75, instruction count 10, allocated bytes for code 33 (MethodHash=0a9c79fe) for method System.Net.Http.HttpContent:CreateContentReadStream(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
+; Total bytes of code 56, prolog size 8, PerfScore 11.50, instruction count 16, allocated bytes for code 56 (MethodHash=0a9c79fe) for method System.Net.Http.HttpContent:CreateContentReadStream(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
; ============================================================ 23 (69.70 % of base) - System.Net.Http.MultipartContent:<>n__1(System.Threading.CancellationToken):System.IO.Stream:this ; Assembly listing for method System.Net.Http.MultipartContent:<>n__1(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
-; rsp based frame
+; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Net.Http.MultipartContent>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.Threading.CancellationToken>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V03 tmp1 [V03,T01] ( 2, 2 ) ref -> rsi single-def "field V01._source (fldOffset=0x0)" P-INDEP
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M1337_IG01:
+ push rbp
push rbx
+ push rax
+ lea rbp, [rsp+0x10]
mov rbx, rdi
- ;; size=4 bbWeight=1 PerfScore 1.25
+ ;; size=11 bbWeight=1 PerfScore 3.75
G_M1337_IG02:
mov rdi, rbx
mov rdx, rsi
mov esi, 0xD1FFAB1E
mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:LoadIntoBuffer(long,System.Threading.CancellationToken):this
call [rax]System.Net.Http.HttpContent:LoadIntoBuffer(long,System.Threading.CancellationToken):this
- mov rax, gword ptr [rbx+0x10]
- ;; size=27 bbWeight=1 PerfScore 6.00
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ ;; size=36 bbWeight=1 PerfScore 4.50
G_M1337_IG03:
+ add rsp, 8
pop rbx
- ret
- ;; size=2 bbWeight=1 PerfScore 1.50
+ pop rbp
+ tail.jmp [rax]System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 33, prolog size 1, PerfScore 8.75, instruction count 10, allocated bytes for code 33 (MethodHash=6164fac6) for method System.Net.Http.MultipartContent:<>n__1(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
+; Total bytes of code 56, prolog size 8, PerfScore 11.50, instruction count 16, allocated bytes for code 56 (MethodHash=6164fac6) for method System.Net.Http.MultipartContent:<>n__1(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
; ============================================================ 15 (4.41 % of base) - System.Net.Http.HttpContent:Dispose(ubyte):this ; Assembly listing for method System.Net.Http.HttpContent:Dispose(ubyte):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 8 single block inlinees; 3 inlinees without PGO data
+; 0 inlinees with PGO data; 12 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 7, 4.50) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
; V01 arg1 [V01,T02] ( 3, 3 ) ubyte -> rsi single-def
; V02 loc0 [V02,T01] ( 11, 5 ) ref -> r15 class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V04 tmp1 [V04,T06] ( 2, 2 ) ref -> rdi class-hnd single-def "dup spill" <System.IO.Stream>
-; V05 tmp2 [V05,T03] ( 7, 3.50) ref -> rdi
+; V05 tmp2 [V05,T04] ( 7, 3.50) ref -> rdi
;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref single-def
;* V07 tmp4 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.IO.Stream>
;* V08 tmp5 [V08 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken>
;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V10 tmp7 [V10 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken>
; V11 tmp8 [V11,T08] ( 3, 1 ) ref -> r14 class-hnd single-def "Inline stloc first use temp" <System.AggregateException>
-;* V12 tmp9 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.IO.MemoryStream>
+; V12 tmp9 [V12,T03] ( 4, 4 ) ref -> rbx class-hnd exact single-def "Inlining Arg" <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
;* V13 tmp10 [V13,T09] ( 0, 0 ) ref -> zero-ref single-def "field V08._source (fldOffset=0x0)" P-INDEP
;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref "field V10._source (fldOffset=0x0)" P-INDEP
-; V15 tmp12 [V15,T04] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V16 cse0 [V16,T05] ( 4, 2 ) ref -> r15 "CSE #01: aggressive"
-; V17 cse1 [V17,T07] ( 3, 1.50) ref -> rdi "CSE #02: moderate"
+; V15 cse0 [V15,T05] ( 4, 2 ) ref -> r15 "CSE #01: aggressive"
+; V16 cse1 [V16,T07] ( 3, 1.50) ref -> rbx "CSE #02: moderate"
;
; Lcl frame size = 8
G_M18504_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
mov rbx, rdi
;; size=15 bbWeight=1 PerfScore 5.75
G_M18504_IG02:
test sil, sil
je G_M18504_IG10
;; size=9 bbWeight=1 PerfScore 1.25
G_M18504_IG03:
cmp byte ptr [rbx+0x20], 0
jne G_M18504_IG10
mov byte ptr [rbx+0x20], 1
mov r15, gword ptr [rbx+0x18]
test r15, r15
je G_M18504_IG09
mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.IO.Stream
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
mov rdi, rax
test rdi, rdi
jne G_M18504_IG07
mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task`1[System.IO.Stream]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
mov r15, rax
test r15, r15
je G_M18504_IG06
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:get_Status():int:this
call [rax]System.Threading.Tasks.Task:get_Status():int:this
cmp eax, 5
jne SHORT G_M18504_IG06
mov edi, dword ptr [r15+0x34]
and edi, 0xD1FFAB1E
cmp edi, 0xD1FFAB1E
je SHORT G_M18504_IG05
test dword ptr [r15+0x34], 0xD1FFAB1E
jne SHORT G_M18504_IG04
mov rdi, r15
xor rdx, rdx
mov esi, -1
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:InternalWaitCore(int,System.Threading.CancellationToken):ubyte:this
call [rax]System.Threading.Tasks.Task:InternalWaitCore(int,System.Threading.CancellationToken):ubyte:this
;; size=171 bbWeight=0.50 PerfScore 17.50
G_M18504_IG04:
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:NotifyDebuggerOfWaitCompletionIfNecessary():ubyte:this
call [rax]System.Threading.Tasks.Task:NotifyDebuggerOfWaitCompletionIfNecessary():ubyte:this
mov edi, dword ptr [r15+0x34]
and edi, 0xD1FFAB1E
cmp edi, 0xD1FFAB1E
je SHORT G_M18504_IG05
mov rdi, r15
mov esi, 1
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:GetExceptions(ubyte):System.AggregateException:this
call [rax]System.Threading.Tasks.Task:GetExceptions(ubyte):System.AggregateException:this
mov r14, rax
test r14, r14
jne SHORT G_M18504_IG12
;; size=61 bbWeight=0.50 PerfScore 6.12
G_M18504_IG05:
mov rdi, gword ptr [r15+0x38]
jmp SHORT G_M18504_IG07
;; size=6 bbWeight=0.50 PerfScore 2.00
G_M18504_IG06:
xor rdi, rdi
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M18504_IG07:
test rdi, rdi
je SHORT G_M18504_IG08
mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x50]
call [rax+0x18]System.IO.Stream:Close():this
;; size=15 bbWeight=0.50 PerfScore 4.12
G_M18504_IG08:
xor rdi, rdi
mov gword ptr [rbx+0x18], rdi
;; size=6 bbWeight=0.50 PerfScore 0.62
G_M18504_IG09:
- mov rdi, gword ptr [rbx+0x10]
- test rdi, rdi
+ mov rbx, gword ptr [rbx+0x10]
+ test rbx, rbx
je SHORT G_M18504_IG10
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x50]
- call [rax+0x18]System.IO.Stream:Close():this
- ;; size=19 bbWeight=0.50 PerfScore 5.12
+ cmp byte ptr [rbx], bl
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ReturnAllPooledBuffers():this
+ call [rax]System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ReturnAllPooledBuffers():this
+ mov rdi, rbx
+ call System.GC:_SuppressFinalize(System.Object)
+ ;; size=34 bbWeight=0.50 PerfScore 5.50
G_M18504_IG10:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M18504_IG11:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
G_M18504_IG12:
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:UpdateExceptionObservedStatus():this
call [rax]System.Threading.Tasks.Task:UpdateExceptionObservedStatus():this
mov rdi, r14
call CORINFO_HELP_THROW
int3
;; size=24 bbWeight=0 PerfScore 0.00
-; Total bytes of code 340, prolog size 12, PerfScore 46.12, instruction count 88, allocated bytes for code 340 (MethodHash=f6afb7b7) for method System.Net.Http.HttpContent:Dispose(ubyte):this (FullOpts)
+; Total bytes of code 355, prolog size 12, PerfScore 46.50, instruction count 91, allocated bytes for code 355 (MethodHash=f6afb7b7) for method System.Net.Http.HttpContent:Dispose(ubyte):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/c4d8c48e1d0fe823d0635204ac232d70 |
Top method improvements-361 (-49.79 % of base) - System.Net.Http.HttpContent:TryReadAsStream():System.IO.Stream:this ; Assembly listing for method System.Net.Http.HttpContent:TryReadAsStream():System.IO.Stream:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 15 single block inlinees; 9 inlinees without PGO data
+; 0 inlinees with PGO data; 7 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T01] ( 9, 6 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
+; V00 this [V00,T00] ( 10, 6.50) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.IO.Stream>
-; V02 loc1 [V02 ] ( 5, 2.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[ubyte]>
-; V03 loc2 [V03,T11] ( 3, 1.50) ref -> rax class-hnd single-def <System.IO.Stream>
-; V04 loc3 [V04,T03] ( 10, 4.50) ref -> rbx class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
-;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T05] ( 4, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <ubyte[]>
-; V07 tmp2 [V07,T02] ( 7, 6 ) int -> r14 "impAppendStmt"
-; V08 tmp3 [V08,T00] ( 9, 9 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" <System.IO.MemoryStream>
-; V09 tmp4 [V09,T10] ( 4, 2 ) ref -> r13
-;* V10 tmp5 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V11 tmp6 [V11,T15] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
-; V12 tmp7 [V12,T04] ( 5, 4 ) int -> r12 "Inlining Arg"
-;* V13 tmp8 [V13 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V14 tmp9 [V14,T09] ( 3, 3 ) int -> r12 "dup spill"
-; V15 tmp10 [V15,T17] ( 3, 0 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
-;* V16 tmp11 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.IO.Stream>
-;* V17 tmp12 [V17 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken>
-;* V18 tmp13 [V18 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-;* V19 tmp14 [V19 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken>
-; V20 tmp15 [V20,T14] ( 3, 1 ) ref -> r15 class-hnd single-def "Inline stloc first use temp" <System.AggregateException>
-; V21 tmp16 [V21 ] ( 3, 1.50) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V02._array (fldOffset=0x0)" P-DEP
-; V22 tmp17 [V22 ] ( 3, 1.50) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V02._offset (fldOffset=0x8)" P-DEP
-; V23 tmp18 [V23 ] ( 3, 1.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V02._count (fldOffset=0xc)" P-DEP
-;* V24 tmp19 [V24,T16] ( 0, 0 ) ref -> zero-ref single-def "field V17._source (fldOffset=0x0)" P-INDEP
-;* V25 tmp20 [V25 ] ( 0, 0 ) ref -> zero-ref "field V19._source (fldOffset=0x0)" P-INDEP
-; V26 tmp21 [V26,T08] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V27 tmp22 [V27,T18] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V28 tmp23 [V28,T19] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V29 tmp24 [V29,T20] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V30 cse0 [V30,T07] ( 5, 3.12) ref -> r15 "CSE #02: moderate"
-; V31 cse1 [V31,T12] ( 3, 1.50) ref -> rdi "CSE #01: moderate"
-; V32 rat0 [V32,T06] ( 5, 3.75) ref -> rbx "replacement local"
-; V33 rat1 [V33,T13] ( 3, 1.25) long -> rdi "CSE for expectedClsNode"
+; V02 loc1 [V02,T05] ( 3, 1.50) ref -> rax class-hnd single-def <System.IO.Stream>
+; V03 loc2 [V03,T01] ( 10, 4.50) ref -> rbx class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
+;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V05 tmp1 [V05,T04] ( 4, 2 ) ref -> r15
+;* V06 tmp2 [V06 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+;* V07 tmp3 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.IO.Stream>
+;* V08 tmp4 [V08 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken>
+;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V10 tmp6 [V10 ] ( 0, 0 ) struct ( 8) zero-ref "Inlining Arg" <System.Threading.CancellationToken>
+; V11 tmp7 [V11,T07] ( 3, 1 ) ref -> r15 class-hnd single-def "Inline stloc first use temp" <System.AggregateException>
+;* V12 tmp8 [V12,T08] ( 0, 0 ) ref -> zero-ref single-def "field V08._source (fldOffset=0x0)" P-INDEP
+;* V13 tmp9 [V13 ] ( 0, 0 ) ref -> zero-ref "field V10._source (fldOffset=0x0)" P-INDEP
+; V14 cse0 [V14,T03] ( 5, 3.12) ref -> r15 "CSE #01: aggressive"
+; V15 rat0 [V15,T02] ( 5, 3.75) ref -> rbx "replacement local"
+; V16 rat1 [V16,T06] ( 3, 1.25) long -> rdi "CSE for expectedClsNode"
;
-; Lcl frame size = 24
+; Lcl frame size = 0
G_M29990_IG01:
push rbp
push r15
- push r14
- push r13
- push r12
push rbx
- sub rsp, 24
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
+ lea rbp, [rsp+0x10]
mov rbx, rdi
- ;; size=28 bbWeight=1 PerfScore 8.25
+ ;; size=12 bbWeight=1 PerfScore 3.75
G_M29990_IG02:
cmp byte ptr [rbx+0x20], 0
- jne G_M29990_IG23
+ jne G_M29990_IG18
mov r15, gword ptr [rbx+0x18]
test r15, r15
je G_M29990_IG13
;; size=23 bbWeight=1 PerfScore 7.25
G_M29990_IG03:
mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.IO.Stream
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
test rax, rax
jne G_M29990_IG12
mov rbx, r15
test rbx, rbx
je SHORT G_M29990_IG06
;; size=42 bbWeight=0.50 PerfScore 3.25
G_M29990_IG04:
mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task`1[System.IO.Stream]
cmp qword ptr [rbx], rdi
je SHORT G_M29990_IG06
;; size=15 bbWeight=0.25 PerfScore 1.06
G_M29990_IG05:
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS_SPECIAL
call [rax]CORINFO_HELP_CHKCASTCLASS_SPECIAL
mov rbx, rax
;; size=18 bbWeight=0.12 PerfScore 0.47
G_M29990_IG06:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:get_Status():int:this
cmp dword ptr [rdi], edi
call [rax]System.Threading.Tasks.Task:get_Status():int:this
cmp eax, 5
- jne G_M29990_IG10
+ jne SHORT G_M29990_IG10
mov edi, dword ptr [rbx+0x34]
and edi, 0xD1FFAB1E
cmp edi, 0xD1FFAB1E
je SHORT G_M29990_IG08
test dword ptr [rbx+0x34], 0xD1FFAB1E
jne SHORT G_M29990_IG07
mov rdi, rbx
xor rdx, rdx
mov esi, -1
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:InternalWaitCore(int,System.Threading.CancellationToken):ubyte:this
call [rax]System.Threading.Tasks.Task:InternalWaitCore(int,System.Threading.CancellationToken):ubyte:this
- ;; size=74 bbWeight=0.50 PerfScore 9.62
+ ;; size=70 bbWeight=0.50 PerfScore 9.62
G_M29990_IG07:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:NotifyDebuggerOfWaitCompletionIfNecessary():ubyte:this
call [rax]System.Threading.Tasks.Task:NotifyDebuggerOfWaitCompletionIfNecessary():ubyte:this
mov edi, dword ptr [rbx+0x34]
and edi, 0xD1FFAB1E
cmp edi, 0xD1FFAB1E
je SHORT G_M29990_IG08
mov rdi, rbx
mov esi, 1
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:GetExceptions(ubyte):System.AggregateException:this
call [rax]System.Threading.Tasks.Task:GetExceptions(ubyte):System.AggregateException:this
mov r15, rax
test r15, r15
- jne G_M29990_IG18
- ;; size=64 bbWeight=0.50 PerfScore 6.12
+ jne SHORT G_M29990_IG17
+ ;; size=60 bbWeight=0.50 PerfScore 6.12
G_M29990_IG08:
mov rax, gword ptr [rbx+0x38]
;; size=4 bbWeight=0.50 PerfScore 1.00
G_M29990_IG09:
- add rsp, 24
pop rbx
- pop r12
- pop r13
- pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
G_M29990_IG10:
xor rax, rax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M29990_IG11:
- add rsp, 24
pop rbx
- pop r12
- pop r13
- pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
G_M29990_IG12:
- add rsp, 24
pop rbx
- pop r12
- pop r13
- pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
G_M29990_IG13:
- mov rdi, gword ptr [rbx+0x10]
- test rdi, rdi
- jne SHORT G_M29990_IG17
- vxorps xmm0, xmm0, xmm0
- vmovdqu xmmword ptr [rbp-0x38], xmm0
- ;; size=18 bbWeight=0.50 PerfScore 2.29
+ cmp gword ptr [rbx+0x10], 0
+ je SHORT G_M29990_IG14
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ call [rax]System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ mov r15, rax
+ jmp SHORT G_M29990_IG15
+ ;; size=27 bbWeight=0.50 PerfScore 4.88
G_M29990_IG14:
mov rdi, rbx
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+0x48]
call [rax+0x18]System.Net.Http.HttpContent:TryCreateContentReadStream():System.IO.Stream:this
- mov r13, rax
+ mov r15, rax
;; size=16 bbWeight=0.50 PerfScore 3.75
G_M29990_IG15:
lea rdi, bword ptr [rbx+0x18]
- mov rsi, r13
+ mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
- mov rax, r13
+ mov rax, r15
;; size=15 bbWeight=0.50 PerfScore 1.00
G_M29990_IG16:
- add rsp, 24
pop rbx
- pop r12
- pop r13
- pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
G_M29990_IG17:
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x68]
- call [rax+0x18]System.IO.MemoryStream:TryGetBuffer(byref):ubyte:this
- test eax, eax
- je SHORT G_M29990_IG14
- mov r15, gword ptr [rbp-0x38]
- mov r14d, dword ptr [rbp-0x30]
- mov rdi, 0xD1FFAB1E ; System.IO.MemoryStream
- call CORINFO_HELP_NEWSFAST
- mov r13, rax
- mov r12d, dword ptr [rbp-0x2C]
- test r15, r15
- je G_M29990_IG22
- test r14d, r14d
- jl G_M29990_IG21
- test r12d, r12d
- jl G_M29990_IG20
- mov edi, dword ptr [r15+0x08]
- sub edi, r14d
- cmp edi, r12d
- jl SHORT G_M29990_IG19
- lea rdi, bword ptr [r13+0x10]
- mov rsi, r15
- call CORINFO_HELP_ASSIGN_REF
- mov dword ptr [r13+0x1C], r14d
- mov dword ptr [r13+0x18], r14d
- add r12d, r14d
- mov dword ptr [r13+0x24], r12d
- mov dword ptr [r13+0x20], r12d
- mov word ptr [r13+0x29], 0
- mov byte ptr [r13+0x2B], 1
- jmp G_M29990_IG15
- ;; size=135 bbWeight=0.50 PerfScore 15.25
-G_M29990_IG18:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Threading.Tasks.Task:UpdateExceptionObservedStatus():this
call [rax]System.Threading.Tasks.Task:UpdateExceptionObservedStatus():this
mov rdi, r15
call CORINFO_HELP_THROW
int3
;; size=24 bbWeight=0 PerfScore 0.00
-G_M29990_IG19:
- mov rdi, 0xD1FFAB1E ; System.ArgumentException
- call CORINFO_HELP_NEWSFAST
- mov r14, rax
- mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidOffLen():System.String
- call [rax]System.SR:get_Argument_InvalidOffLen():System.String
- mov rsi, rax
- mov rdi, r14
- mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this
- call [rax]System.ArgumentException:.ctor(System.String):this
- mov rdi, r14
- call CORINFO_HELP_THROW
- int3
- ;; size=57 bbWeight=0 PerfScore 0.00
-G_M29990_IG20:
- mov edi, 0x3F3
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rsi, rax
- mov edi, r12d
- mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- call [rax]System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- int3
- ;; size=39 bbWeight=0 PerfScore 0.00
-G_M29990_IG21:
- mov edi, 0x135AE
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rsi, rax
- mov edi, r14d
- mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- call [rax]System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- int3
- ;; size=39 bbWeight=0 PerfScore 0.00
-G_M29990_IG22:
- mov edi, 0x13968
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rdi, rax
- mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String)
- call [rax]System.ArgumentNullException:Throw(System.String)
- int3
- ;; size=36 bbWeight=0 PerfScore 0.00
-G_M29990_IG23:
+G_M29990_IG18:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowObjectDisposedException(System.Object)
call [rax]System.ThrowHelper:ThrowObjectDisposedException(System.Object)
int3
;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 725, prolog size 25, PerfScore 67.95, instruction count 189, allocated bytes for code 725 (MethodHash=0dcf8ad9) for method System.Net.Http.HttpContent:TryReadAsStream():System.IO.Stream:this (FullOpts)
+; Total bytes of code 364, prolog size 9, PerfScore 47.28, instruction count 101, allocated bytes for code 364 (MethodHash=0dcf8ad9) for method System.Net.Http.HttpContent:TryReadAsStream():System.IO.Stream:this (FullOpts)
; ============================================================ -342 (-61.62 % of base) - System.Net.Http.HttpContent:ReadAsStream(System.Threading.CancellationToken):System.IO.Stream:this ; Assembly listing for method System.Net.Http.HttpContent:ReadAsStream(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 12 single block inlinees; 6 inlinees without PGO data
+; 0 inlinees with PGO data; 4 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T01] ( 10, 6.50) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
+; V00 this [V00,T00] ( 10, 6.50) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.Threading.CancellationToken>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.IO.Stream>
-; V03 loc1 [V03 ] ( 5, 2.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[ubyte]>
-; V04 loc2 [V04,T09] ( 3, 1.50) ref -> rax class-hnd single-def <System.IO.Stream>
-;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V06 tmp1 [V06,T12] ( 4, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Net.Http.HttpRequestException>
-; V07 tmp2 [V07,T04] ( 4, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <ubyte[]>
-; V08 tmp3 [V08,T02] ( 7, 6 ) int -> r14 "impAppendStmt"
-; V09 tmp4 [V09,T00] ( 9, 9 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" <System.IO.MemoryStream>
-; V10 tmp5 [V10,T08] ( 4, 2 ) ref -> r13
-;* V11 tmp6 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V12 tmp7 [V12,T11] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
-; V13 tmp8 [V13,T03] ( 5, 4 ) int -> r12 "Inlining Arg"
-;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V15 tmp10 [V15,T07] ( 3, 3 ) int -> r12 "dup spill"
-; V16 tmp11 [V16,T13] ( 3, 0 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
-; V17 tmp12 [V17,T14] ( 2, 0 ) ref -> r15 class-hnd exact single-def "Inlining Arg" <System.String>
-; V18 tmp13 [V18,T05] ( 2, 1.50) ref -> r15 single-def "field V01._source (fldOffset=0x0)" P-INDEP
-; V19 tmp14 [V19 ] ( 3, 1.50) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V03._array (fldOffset=0x0)" P-DEP
-; V20 tmp15 [V20 ] ( 3, 1.50) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V03._offset (fldOffset=0x8)" P-DEP
-; V21 tmp16 [V21 ] ( 3, 1.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V03._count (fldOffset=0xc)" P-DEP
-; V22 tmp17 [V22,T06] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V23 tmp18 [V23,T15] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V24 tmp19 [V24,T16] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V25 tmp20 [V25,T17] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V26 cse0 [V26,T10] ( 3, 1.50) ref -> rdi "CSE #01: moderate"
+; V03 loc1 [V03,T04] ( 3, 1.50) ref -> rax class-hnd single-def <System.IO.Stream>
+;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V05 tmp1 [V05,T05] ( 4, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Net.Http.HttpRequestException>
+; V06 tmp2 [V06,T03] ( 4, 2 ) ref -> r15
+;* V07 tmp3 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+; V08 tmp4 [V08,T06] ( 2, 0 ) ref -> r15 class-hnd exact single-def "Inlining Arg" <System.String>
+; V09 tmp5 [V09,T01] ( 2, 1.50) ref -> rsi single-def "field V01._source (fldOffset=0x0)" P-INDEP
+; V10 cse0 [V10,T02] ( 3, 2.50) ref -> rdi "CSE #01: aggressive"
;
-; Lcl frame size = 24
+; Lcl frame size = 0
G_M11678_IG01:
push rbp
push r15
- push r14
- push r13
- push r12
push rbx
- sub rsp, 24
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
+ lea rbp, [rsp+0x10]
mov rbx, rdi
- mov r15, rsi
- ;; size=31 bbWeight=1 PerfScore 8.50
+ ;; size=12 bbWeight=1 PerfScore 3.75
G_M11678_IG02:
cmp byte ptr [rbx+0x20], 0
- jne G_M11678_IG15
- cmp gword ptr [rbx+0x18], 0
+ jne G_M11678_IG10
+ mov rdi, gword ptr [rbx+0x18]
+ test rdi, rdi
je SHORT G_M11678_IG05
- ;; size=17 bbWeight=1 PerfScore 8.00
+ ;; size=19 bbWeight=1 PerfScore 7.25
G_M11678_IG03:
- mov rsi, gword ptr [rbx+0x18]
+ mov rsi, rdi
mov rdi, 0xD1FFAB1E ; System.IO.Stream
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
test rax, rax
- je G_M11678_IG10
- ;; size=35 bbWeight=0.50 PerfScore 3.38
+ je SHORT G_M11678_IG09
+ ;; size=30 bbWeight=0.50 PerfScore 2.50
G_M11678_IG04:
- add rsp, 24
pop rbx
- pop r12
- pop r13
- pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
G_M11678_IG05:
- mov rdi, gword ptr [rbx+0x10]
- test rdi, rdi
- jne SHORT G_M11678_IG09
- vxorps xmm0, xmm0, xmm0
- vmovdqu xmmword ptr [rbp-0x38], xmm0
- ;; size=18 bbWeight=0.50 PerfScore 2.29
+ cmp gword ptr [rbx+0x10], 0
+ je SHORT G_M11678_IG06
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ call [rax]System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ mov r15, rax
+ jmp SHORT G_M11678_IG07
+ ;; size=27 bbWeight=0.50 PerfScore 4.88
G_M11678_IG06:
mov rdi, rbx
- mov rsi, r15
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+0x48]
call [rax]System.Net.Http.HttpContent:CreateContentReadStream(System.Threading.CancellationToken):System.IO.Stream:this
- mov r13, rax
- ;; size=18 bbWeight=0.50 PerfScore 3.88
+ mov r15, rax
+ ;; size=15 bbWeight=0.50 PerfScore 3.75
G_M11678_IG07:
lea rdi, bword ptr [rbx+0x18]
- mov rsi, r13
+ mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
- mov rax, r13
+ mov rax, r15
;; size=15 bbWeight=0.50 PerfScore 1.00
G_M11678_IG08:
- add rsp, 24
pop rbx
- pop r12
- pop r13
- pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=5 bbWeight=0.50 PerfScore 1.25
G_M11678_IG09:
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x68]
- call [rax+0x18]System.IO.MemoryStream:TryGetBuffer(byref):ubyte:this
- test eax, eax
- je SHORT G_M11678_IG06
- mov r15, gword ptr [rbp-0x38]
- mov r14d, dword ptr [rbp-0x30]
- mov rdi, 0xD1FFAB1E ; System.IO.MemoryStream
- call CORINFO_HELP_NEWSFAST
- mov r13, rax
- mov r12d, dword ptr [rbp-0x2C]
- test r15, r15
- je G_M11678_IG14
- test r14d, r14d
- jl G_M11678_IG13
- test r12d, r12d
- jl G_M11678_IG12
- mov edi, dword ptr [r15+0x08]
- sub edi, r14d
- cmp edi, r12d
- jl SHORT G_M11678_IG11
- lea rdi, bword ptr [r13+0x10]
- mov rsi, r15
- call CORINFO_HELP_ASSIGN_REF
- mov dword ptr [r13+0x1C], r14d
- mov dword ptr [r13+0x18], r14d
- add r12d, r14d
- mov dword ptr [r13+0x24], r12d
- mov dword ptr [r13+0x20], r12d
- mov word ptr [r13+0x29], 0
- mov byte ptr [r13+0x2B], 1
- jmp G_M11678_IG07
- ;; size=135 bbWeight=0.50 PerfScore 15.25
-G_M11678_IG10:
mov rdi, 0xD1FFAB1E ; System.Net.Http.HttpRequestException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_net_http_content_read_as_stream_has_task():System.String
call [rax]System.SR:get_net_http_content_read_as_stream_has_task():System.String
mov r15, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Exception:.ctor():this
call [rax]System.Exception:.ctor():this
lea rdi, bword ptr [rbx+0x10]
mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=69 bbWeight=0 PerfScore 0.00
-G_M11678_IG11:
- mov rdi, 0xD1FFAB1E ; System.ArgumentException
- call CORINFO_HELP_NEWSFAST
- mov r14, rax
- mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidOffLen():System.String
- call [rax]System.SR:get_Argument_InvalidOffLen():System.String
- mov rsi, rax
- mov rdi, r14
- mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this
- call [rax]System.ArgumentException:.ctor(System.String):this
- mov rdi, r14
- call CORINFO_HELP_THROW
- int3
- ;; size=57 bbWeight=0 PerfScore 0.00
-G_M11678_IG12:
- mov edi, 0x3F3
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rsi, rax
- mov edi, r12d
- mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- call [rax]System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- int3
- ;; size=39 bbWeight=0 PerfScore 0.00
-G_M11678_IG13:
- mov edi, 0x135AE
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rsi, rax
- mov edi, r14d
- mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- call [rax]System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- int3
- ;; size=39 bbWeight=0 PerfScore 0.00
-G_M11678_IG14:
- mov edi, 0x13968
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rdi, rax
- mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String)
- call [rax]System.ArgumentNullException:Throw(System.String)
- int3
- ;; size=36 bbWeight=0 PerfScore 0.00
-G_M11678_IG15:
+G_M11678_IG10:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowObjectDisposedException(System.Object)
call [rax]System.ThrowHelper:ThrowObjectDisposedException(System.Object)
int3
;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 555, prolog size 25, PerfScore 46.54, instruction count 140, allocated bytes for code 555 (MethodHash=e6f4d261) for method System.Net.Http.HttpContent:ReadAsStream(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
+; Total bytes of code 213, prolog size 9, PerfScore 25.62, instruction count 59, allocated bytes for code 213 (MethodHash=e6f4d261) for method System.Net.Http.HttpContent:ReadAsStream(System.Threading.CancellationToken):System.IO.Stream:this (FullOpts)
; ============================================================ -269 (-43.25 % of base) - System.Net.Http.HttpContent:ReadAsStreamAsync(System.Threading.CancellationToken):System.Threading.Tasks.Task`1[System.IO.Stream]:this ; Assembly listing for method System.Net.Http.HttpContent:ReadAsStreamAsync(System.Threading.CancellationToken):System.Threading.Tasks.Task`1[System.IO.Stream]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 14 single block inlinees; 10 inlinees without PGO data
+; 0 inlinees with PGO data; 6 single block inlinees; 5 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T01] ( 10, 6.50) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
+; V00 this [V00,T00] ( 11, 7 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
;* V01 arg1 [V01 ] ( 0, 0 ) struct ( 8) zero-ref single-def <System.Threading.CancellationToken>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
-; V03 loc1 [V03 ] ( 5, 2.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[ubyte]>
-; V04 loc2 [V04,T14] ( 3, 1.50) ref -> rax class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
-;* V05 loc3 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V07 tmp1 [V07,T04] ( 4, 4 ) ref -> r15 class-hnd single-def "impAppendStmt" <ubyte[]>
-; V08 tmp2 [V08,T02] ( 7, 6 ) int -> r14 "impAppendStmt"
-; V09 tmp3 [V09,T00] ( 9, 9 ) ref -> r13 class-hnd exact single-def "NewObj constructor temp" <System.IO.MemoryStream>
-; V10 tmp4 [V10,T11] ( 4, 2 ) ref -> r15
-;* V11 tmp5 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V12 tmp6 [V12,T18] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
-; V13 tmp7 [V13,T03] ( 5, 4 ) int -> r12 "Inlining Arg"
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V15 tmp9 [V15,T10] ( 3, 3 ) int -> r12 "dup spill"
-; V16 tmp10 [V16,T19] ( 3, 0 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.ArgumentException>
-; V17 tmp11 [V17,T17] ( 2, 1 ) ref -> r15 class-hnd "Inline return value spill temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
-;* V18 tmp12 [V18 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd single-def "Inlining Arg" <System.IO.Stream>
-; V19 tmp13 [V19,T05] ( 4, 4 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
-;* V20 tmp14 [V20 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken>
-;* V21 tmp15 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.IO.Stream>
-;* V22 tmp16 [V22 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V23 tmp17 [V23,T15] ( 3, 1.50) ref -> r14 class-hnd "Inline return value spill temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
-; V24 tmp18 [V24,T13] ( 2, 2 ) ref -> r15 ld-addr-op class-hnd single-def "Inlining Arg" <System.IO.Stream>
-; V25 tmp19 [V25,T06] ( 4, 4 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
-;* V26 tmp20 [V26 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken>
-;* V27 tmp21 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.IO.Stream>
-;* V28 tmp22 [V28 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V29 tmp23 [V29,T07] ( 2, 1.50) ref -> r15 single-def "field V01._source (fldOffset=0x0)" P-INDEP
-; V30 tmp24 [V30 ] ( 3, 1.50) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V03._array (fldOffset=0x0)" P-DEP
-; V31 tmp25 [V31 ] ( 3, 1.50) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V03._offset (fldOffset=0x8)" P-DEP
-; V32 tmp26 [V32 ] ( 3, 1.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V03._count (fldOffset=0xc)" P-DEP
-;* V33 tmp27 [V33 ] ( 0, 0 ) ref -> zero-ref "field V20._source (fldOffset=0x0)" P-INDEP
-;* V34 tmp28 [V34 ] ( 0, 0 ) ref -> zero-ref "field V26._source (fldOffset=0x0)" P-INDEP
-; V35 tmp29 [V35,T09] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V36 tmp30 [V36,T20] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V37 tmp31 [V37,T21] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V38 tmp32 [V38,T22] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V39 cse0 [V39,T08] ( 4, 3 ) ref -> r14 "CSE #03: moderate"
-; V40 cse1 [V40,T16] ( 3, 1.50) ref -> rdi "CSE #01: moderate"
-; V41 cse2 [V41,T12] ( 4, 2 ) long -> rdi multi-def "CSE #02: moderate"
+; V03 loc1 [V03,T08] ( 3, 1.50) ref -> rax class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
+;* V04 loc2 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Threading.Tasks.Task`1[System.IO.Stream]>
+;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V06 tmp1 [V06,T06] ( 4, 2 ) ref -> r14
+;* V07 tmp2 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+; V08 tmp3 [V08,T09] ( 3, 1.50) ref -> r14 class-hnd "Inline return value spill temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
+; V09 tmp4 [V09,T05] ( 3, 3 ) ref -> r15 ld-addr-op class-hnd single-def "Inlining Arg" <System.IO.Stream>
+; V10 tmp5 [V10,T01] ( 4, 4 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
+;* V11 tmp6 [V11 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken>
+;* V12 tmp7 [V12 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.IO.Stream>
+;* V13 tmp8 [V13 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+; V14 tmp9 [V14,T10] ( 3, 1.50) ref -> r14 class-hnd "Inline return value spill temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
+; V15 tmp10 [V15,T07] ( 2, 2 ) ref -> r15 ld-addr-op class-hnd single-def "Inlining Arg" <System.IO.Stream>
+; V16 tmp11 [V16,T02] ( 4, 4 ) ref -> r14 class-hnd exact single-def "NewObj constructor temp" <System.Threading.Tasks.Task`1[System.IO.Stream]>
+;* V17 tmp12 [V17 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Threading.CancellationToken>
+;* V18 tmp13 [V18 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.IO.Stream>
+;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+; V20 tmp15 [V20,T03] ( 2, 1.50) ref -> rsi single-def "field V01._source (fldOffset=0x0)" P-INDEP
+;* V21 tmp16 [V21 ] ( 0, 0 ) ref -> zero-ref "field V11._source (fldOffset=0x0)" P-INDEP
+;* V22 tmp17 [V22 ] ( 0, 0 ) ref -> zero-ref "field V17._source (fldOffset=0x0)" P-INDEP
+;* V23 cse0 [V23,T12] ( 0, 0 ) byref -> zero-ref "CSE #03: moderate"
+; V24 cse1 [V24,T04] ( 4, 3 ) ref -> r15 "CSE #02: moderate"
+; V25 cse2 [V25,T11] ( 2, 1 ) long -> rdi "CSE #04: moderate"
;
-; Lcl frame size = 24
+; Lcl frame size = 8
G_M63737_IG01:
push rbp
push r15
push r14
- push r13
- push r12
push rbx
- sub rsp, 24
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
+ push rax
+ lea rbp, [rsp+0x20]
mov rbx, rdi
- mov r15, rsi
- ;; size=31 bbWeight=1 PerfScore 8.50
+ ;; size=15 bbWeight=1 PerfScore 5.75
G_M63737_IG02:
cmp byte ptr [rbx+0x20], 0
- jne G_M63737_IG15
- mov r14, gword ptr [rbx+0x18]
- test r14, r14
+ jne G_M63737_IG14
+ mov r15, gword ptr [rbx+0x18]
+ test r15, r15
je G_M63737_IG06
;; size=23 bbWeight=1 PerfScore 7.25
G_M63737_IG03:
- mov rsi, r14
+ mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task`1[System.IO.Stream]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
test rax, rax
jne SHORT G_M63737_IG05
- mov rsi, r14
+ mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.IO.Stream
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
call [rax]CORINFO_HELP_CHKCASTCLASS
mov r15, rax
mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task`1[System.IO.Stream]
call CORINFO_HELP_NEWSFAST
mov r14, rax
mov dword ptr [r14+0x34], 0xD1FFAB1E
lea rdi, bword ptr [r14+0x38]
mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
lea rdi, bword ptr [rbx+0x18]
mov rsi, r14
call CORINFO_HELP_ASSIGN_REF
mov rax, r14
;; size=111 bbWeight=0.50 PerfScore 7.62
G_M63737_IG04:
- add rsp, 24
+ add rsp, 8
pop rbx
- pop r12
- pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=11 bbWeight=0.50 PerfScore 1.62
G_M63737_IG05:
- add rsp, 24
+ add rsp, 8
pop rbx
- pop r12
- pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
+ ;; size=11 bbWeight=0.50 PerfScore 1.62
G_M63737_IG06:
- mov rdi, gword ptr [rbx+0x10]
- test rdi, rdi
- jne SHORT G_M63737_IG10
- vxorps xmm0, xmm0, xmm0
- vmovdqu xmmword ptr [rbp-0x38], xmm0
- ;; size=18 bbWeight=0.50 PerfScore 2.29
-G_M63737_IG07:
+ cmp gword ptr [rbx+0x10], 0
+ je SHORT G_M63737_IG10
mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ call [rax]System.Net.Http.HttpContent:CreateMemoryStreamFromBufferedContent():System.IO.MemoryStream:this
+ mov r15, rax
+ test r15, r15
+ je SHORT G_M63737_IG07
+ mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task`1[System.IO.Stream]
+ call CORINFO_HELP_NEWSFAST
+ mov r14, rax
+ mov dword ptr [r14+0x34], 0xD1FFAB1E
+ lea rdi, bword ptr [r14+0x38]
mov rsi, r15
+ call CORINFO_HELP_ASSIGN_REF
+ jmp SHORT G_M63737_IG09
+ ;; size=70 bbWeight=0.50 PerfScore 7.62
+G_M63737_IG07:
+ mov rdi, 0xD1FFAB1E ; global ptr
+ test byte ptr [rdi], 1
+ je SHORT G_M63737_IG13
+ ;; size=15 bbWeight=0.50 PerfScore 2.12
+G_M63737_IG08:
+ mov rdi, 0xD1FFAB1E ; data for System.Threading.Tasks.Task`1[System.IO.Stream]:s_defaultResultTask
+ mov r14, gword ptr [rdi]
+ ;; size=13 bbWeight=0.50 PerfScore 1.12
+G_M63737_IG09:
+ jmp SHORT G_M63737_IG11
+ ;; size=2 bbWeight=0.50 PerfScore 1.00
+G_M63737_IG10:
+ mov rdi, rbx
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+0x48]
call [rax+0x10]System.Net.Http.HttpContent:CreateContentReadStreamAsync(System.Threading.CancellationToken):System.Threading.Tasks.Task`1[System.IO.Stream]:this
- mov r15, rax
- ;; size=19 bbWeight=0.50 PerfScore 3.88
-G_M63737_IG08:
+ mov r14, rax
+ ;; size=16 bbWeight=0.50 PerfScore 3.75
+G_M63737_IG11:
lea rdi, bword ptr [rbx+0x18]
- mov rsi, r15
+ mov rsi, r14
call CORINFO_HELP_ASSIGN_REF
- mov rax, r15
+ mov rax, r14
;; size=15 bbWeight=0.50 PerfScore 1.00
-G_M63737_IG09:
- add rsp, 24
+G_M63737_IG12:
+ add rsp, 8
pop rbx
- pop r12
- pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M63737_IG10:
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x68]
- call [rax+0x18]System.IO.MemoryStream:TryGetBuffer(byref):ubyte:this
- test eax, eax
- je SHORT G_M63737_IG07
- mov r15, gword ptr [rbp-0x38]
- mov r14d, dword ptr [rbp-0x30]
- mov rdi, 0xD1FFAB1E ; System.IO.MemoryStream
- call CORINFO_HELP_NEWSFAST
- mov r13, rax
- mov r12d, dword ptr [rbp-0x2C]
- test r15, r15
- je G_M63737_IG14
- test r14d, r14d
- jl G_M63737_IG13
- test r12d, r12d
- jl G_M63737_IG12
- mov edi, dword ptr [r15+0x08]
- sub edi, r14d
- cmp edi, r12d
- jl SHORT G_M63737_IG11
- lea rdi, bword ptr [r13+0x10]
- mov rsi, r15
- call CORINFO_HELP_ASSIGN_REF
- mov dword ptr [r13+0x1C], r14d
- mov dword ptr [r13+0x18], r14d
- add r12d, r14d
- mov dword ptr [r13+0x24], r12d
- mov dword ptr [r13+0x20], r12d
- mov word ptr [r13+0x29], 0
- mov byte ptr [r13+0x2B], 1
- mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task`1[System.IO.Stream]
- call CORINFO_HELP_NEWSFAST
- mov r15, rax
- mov dword ptr [r15+0x34], 0xD1FFAB1E
- lea rdi, bword ptr [r15+0x38]
- mov rsi, r13
- call CORINFO_HELP_ASSIGN_REF
- jmp G_M63737_IG08
- ;; size=173 bbWeight=0.50 PerfScore 17.38
-G_M63737_IG11:
- mov rdi, 0xD1FFAB1E ; System.ArgumentException
- call CORINFO_HELP_NEWSFAST
- mov r14, rax
- mov rax, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidOffLen():System.String
- call [rax]System.SR:get_Argument_InvalidOffLen():System.String
- mov rsi, rax
- mov rdi, r14
- mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this
- call [rax]System.ArgumentException:.ctor(System.String):this
- mov rdi, r14
- call CORINFO_HELP_THROW
- int3
- ;; size=57 bbWeight=0 PerfScore 0.00
-G_M63737_IG12:
- mov edi, 0x3F3
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rsi, rax
- mov edi, r12d
- mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- call [rax]System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- int3
- ;; size=39 bbWeight=0 PerfScore 0.00
+ ;; size=11 bbWeight=0.50 PerfScore 1.62
G_M63737_IG13:
- mov edi, 0x135AE
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rsi, rax
- mov edi, r14d
- mov rax, 0xD1FFAB1E ; code for System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- call [rax]System.ArgumentOutOfRangeException:ThrowNegative[int](int,System.String)
- int3
- ;; size=39 bbWeight=0 PerfScore 0.00
+ mov rdi, 0xD1FFAB1E ; System.Threading.Tasks.Task`1[System.IO.Stream]
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
+ call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
+ jmp SHORT G_M63737_IG08
+ ;; size=24 bbWeight=0 PerfScore 0.00
G_M63737_IG14:
- mov edi, 0x13968
- mov rsi, 0xD1FFAB1E
- call CORINFO_HELP_STRCNS
- mov rdi, rax
- mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String)
- call [rax]System.ArgumentNullException:Throw(System.String)
- int3
- ;; size=36 bbWeight=0 PerfScore 0.00
-G_M63737_IG15:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowObjectDisposedException(System.Object)
call [rax]System.ThrowHelper:ThrowObjectDisposedException(System.Object)
int3
;; size=16 bbWeight=0 PerfScore 0.00
-; Total bytes of code 622, prolog size 25, PerfScore 54.29, instruction count 157, allocated bytes for code 622 (MethodHash=f93f0706) for method System.Net.Http.HttpContent:ReadAsStreamAsync(System.Threading.CancellationToken):System.Threading.Tasks.Task`1[System.IO.Stream]:this (FullOpts)
+; Total bytes of code 353, prolog size 12, PerfScore 42.12, instruction count 91, allocated bytes for code 353 (MethodHash=f93f0706) for method System.Net.Http.HttpContent:ReadAsStreamAsync(System.Threading.CancellationToken):System.Threading.Tasks.Task`1[System.IO.Stream]:this (FullOpts)
; ============================================================ -167 (-77.31 % of base) - System.Net.Http.HttpContent:ReadBufferedContentAsString():System.String:this ; Assembly listing for method System.Net.Http.HttpContent:ReadBufferedContentAsString():System.String:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 0 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 6, 4.50) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent>
-; V01 loc0 [V01 ] ( 6, 3 ) struct (16) [rbp-0x18] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[ubyte]>
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ArraySegment`1[ubyte]>
-; V04 tmp2 [V04,T08] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
-; V05 tmp3 [V05,T02] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[]>
-; V06 tmp4 [V06 ] ( 4, 2 ) ref -> [rbp-0x18] do-not-enreg[X] addr-exposed "field V01._array (fldOffset=0x0)" P-DEP
-; V07 tmp5 [V07 ] ( 4, 2 ) int -> [rbp-0x10] do-not-enreg[X] addr-exposed "field V01._offset (fldOffset=0x8)" P-DEP
-; V08 tmp6 [V08 ] ( 4, 2 ) int -> [rbp-0x0C] do-not-enreg[X] addr-exposed "field V01._count (fldOffset=0xc)" P-DEP
-;* V09 tmp7 [V09 ] ( 0, 0 ) ref -> zero-ref "field V03._array (fldOffset=0x0)" P-INDEP
-;* V10 tmp8 [V10 ] ( 0, 0 ) int -> zero-ref "field V03._offset (fldOffset=0x8)" P-INDEP
-;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V03._count (fldOffset=0xc)" P-INDEP
-; V12 tmp10 [V12,T01] ( 3, 6 ) ref -> rdi single-def "argument with side effect"
-; V13 tmp11 [V13,T03] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V14 tmp12 [V14,T04] ( 3, 3 ) ref -> rdi single-def "argument with side effect"
-; V15 tmp13 [V15,T06] ( 2, 2 ) ref -> rdx single-def "argument with side effect"
-; V16 tmp14 [V16,T05] ( 3, 3 ) struct (16) [rbp-0x28] do-not-enreg[SFA] multireg-arg must-init "argument with side effect" <System.ArraySegment`1[ubyte]>
-; V17 cse0 [V17,T07] ( 3, 1.50) ref -> rdi "CSE #01: moderate"
+; V00 this [V00,T00] ( 4, 4 ) ref -> rdi this class-hnd single-def <System.Net.Http.HttpContent>
+;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V02 tmp1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
+; V03 tmp2 [V03,T01] ( 2, 4 ) ref -> rsi single-def "argument with side effect"
+; V04 tmp3 [V04,T02] ( 2, 4 ) ref -> rbx single-def "argument with side effect"
;
-; Lcl frame size = 40
+; Lcl frame size = 8
G_M14105_IG01:
push rbp
push rbx
- sub rsp, 40
- lea rbp, [rsp+0x30]
- xor eax, eax
- mov qword ptr [rbp-0x28], rax
- vxorps xmm8, xmm8, xmm8
- vmovdqa xmmword ptr [rbp-0x20], xmm8
- mov qword ptr [rbp-0x10], rax
- mov rbx, rdi
- ;; size=34 bbWeight=1 PerfScore 7.58
+ push rax
+ lea rbp, [rsp+0x10]
+ ;; size=8 bbWeight=1 PerfScore 3.50
G_M14105_IG02:
- mov rdi, gword ptr [rbx+0x10]
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x48]
- call [rax+0x08]System.IO.Stream:get_Length():long:this
- test rax, rax
- je SHORT G_M14105_IG08
- ;; size=19 bbWeight=1 PerfScore 10.25
-G_M14105_IG03:
- mov rdi, gword ptr [rbx+0x10]
- test rdi, rdi
- jne SHORT G_M14105_IG10
- vxorps xmm0, xmm0, xmm0
- vmovdqu xmmword ptr [rbp-0x18], xmm0
- ;; size=18 bbWeight=0.50 PerfScore 2.29
-G_M14105_IG04:
- mov rdi, gword ptr [rbx+0x10]
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x68]
- call [rax+0x30]System.IO.MemoryStream:ToArray():ubyte[]:this
- test rax, rax
- je SHORT G_M14105_IG11
- mov gword ptr [rbp-0x18], rax
- xor edi, edi
- mov dword ptr [rbp-0x10], edi
- mov edi, dword ptr [rax+0x08]
- mov dword ptr [rbp-0x0C], edi
- ;; size=34 bbWeight=0.50 PerfScore 7.75
-G_M14105_IG05:
- vmovdqu xmm0, xmmword ptr [rbp-0x18]
- vmovdqu xmmword ptr [rbp-0x28], xmm0
- ;; size=10 bbWeight=0.50 PerfScore 2.00
-G_M14105_IG06:
- mov rdi, rbx
+ mov rbx, gword ptr [rdi+0x10]
mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:get_Headers():System.Net.Http.Headers.HttpContentHeaders:this
call [rax]System.Net.Http.HttpContent:get_Headers():System.Net.Http.Headers.HttpContentHeaders:this
- mov rdx, rax
- mov rdi, gword ptr [rbp-0x28]
- mov rsi, qword ptr [rbp-0x20]
- mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:ReadBufferAsString(System.ArraySegment`1[ubyte],System.Net.Http.Headers.HttpContentHeaders):System.String
- call [rax]System.Net.Http.HttpContent:ReadBufferAsString(System.ArraySegment`1[ubyte],System.Net.Http.Headers.HttpContentHeaders):System.String
- nop
- ;; size=39 bbWeight=0.50 PerfScore 4.62
-G_M14105_IG07:
- add rsp, 40
+ mov rsi, rax
+ mov rdi, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent:ReadBufferAsString(System.Net.Http.HttpContent+LimitArrayPoolWriteStream,System.Net.Http.Headers.HttpContentHeaders):System.String
+ ;; size=32 bbWeight=1 PerfScore 6.00
+G_M14105_IG03:
+ add rsp, 8
pop rbx
pop rbp
- ret
- ;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M14105_IG08:
- mov rax, 0xD1FFAB1E ; ''
- ;; size=10 bbWeight=0.50 PerfScore 0.12
-G_M14105_IG09:
- add rsp, 40
- pop rbx
- pop rbp
- ret
- ;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M14105_IG10:
- lea rsi, [rbp-0x18]
- mov rax, qword ptr [rdi]
- mov rax, qword ptr [rax+0x68]
- call [rax+0x18]System.IO.MemoryStream:TryGetBuffer(byref):ubyte:this
- test eax, eax
- jne SHORT G_M14105_IG05
- jmp SHORT G_M14105_IG04
- ;; size=20 bbWeight=0.50 PerfScore 5.38
-G_M14105_IG11:
- mov edi, 2
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentNullException(int)
- call [rax]System.ThrowHelper:ThrowArgumentNullException(int)
- int3
- ;; size=18 bbWeight=0 PerfScore 0.00
+ tail.jmp [rax]System.Net.Http.HttpContent:ReadBufferAsString(System.Net.Http.HttpContent+LimitArrayPoolWriteStream,System.Net.Http.Headers.HttpContentHeaders):System.String
+ ;; size=9 bbWeight=1 PerfScore 3.25
-; Total bytes of code 216, prolog size 31, PerfScore 42.25, instruction count 63, allocated bytes for code 216 (MethodHash=956cc8e6) for method System.Net.Http.HttpContent:ReadBufferedContentAsString():System.String:this (FullOpts)
+; Total bytes of code 49, prolog size 8, PerfScore 12.75, instruction count 14, allocated bytes for code 49 (MethodHash=956cc8e6) for method System.Net.Http.HttpContent:ReadBufferedContentAsString():System.String:this (FullOpts)
; ============================================================ -65 (-77.38 % of base) - System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Dispose(ubyte):this ; Assembly listing for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Dispose(ubyte):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 0 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] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
+; V00 this [V00,T00] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Net.Http.HttpContent+LimitArrayPoolWriteStream>
;* V01 arg1 [V01 ] ( 0, 0 ) ubyte -> zero-ref single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T01] ( 2, 4 ) ref -> rdi single-def "argument with side effect"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M2610_IG01:
- push rbx
- mov rbx, rdi
- ;; size=4 bbWeight=1 PerfScore 1.25
+ push rax
+ ;; size=1 bbWeight=1 PerfScore 1.00
G_M2610_IG02:
- mov rdi, 0xD1FFAB1E ; global ptr
- test byte ptr [rdi], 1
- je SHORT G_M2610_IG05
- ;; size=15 bbWeight=1 PerfScore 4.25
+ mov rax, 0xD1FFAB1E ; code for System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ReturnAllPooledBuffers():this
+ call [rax]System.Net.Http.HttpContent+LimitArrayPoolWriteStream:ReturnAllPooledBuffers():this
+ nop
+ ;; size=13 bbWeight=1 PerfScore 3.50
G_M2610_IG03:
- mov rdi, 0xD1FFAB1E ; data for System.Buffers.ArrayPool`1[ubyte]:s_shared
- mov rdi, gword ptr [rdi]
- mov rsi, gword ptr [rbx+0x10]
- xor edx, edx
- mov rax, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[ubyte]:Return(ubyte[],ubyte):this
- cmp dword ptr [rdi], edi
- call [rax]System.Buffers.SharedArrayPool`1[ubyte]:Return(ubyte[],ubyte):this
- xor rax, rax
- mov gword ptr [rbx+0x10], rax
- ;; size=39 bbWeight=1 PerfScore 12.00
-G_M2610_IG04:
- pop rbx
+ add rsp, 8
ret
- ;; size=2 bbWeight=1 PerfScore 1.50
-G_M2610_IG05:
- mov rdi, 0xD1FFAB1E ; System.Buffers.ArrayPool`1[ubyte]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
- call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
- jmp SHORT G_M2610_IG03
- ;; size=24 bbWeight=0 PerfScore 0.00
+ ;; size=5 bbWeight=1 PerfScore 1.25
-; Total bytes of code 84, prolog size 1, PerfScore 19.00, instruction count 20, allocated bytes for code 84 (MethodHash=86e9f5cd) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Dispose(ubyte):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=86e9f5cd) for method System.Net.Http.HttpContent+LimitArrayPoolWriteStream:Dispose(ubyte):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/bdc34dc33d0f74cce26391c0e25b6420 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 17 minutes 41 seconds.
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: