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] xtqqczze/dotnet-runtime/BitCast-Memory2 #991
Comments
Top method regressions62 (18.90 % of base) - System.Buffers.ReadOnlySequence`1[System.__Canon]:.ctor(System.ReadOnlyMemory`1[System.__Canon]):this ; Assembly listing for method System.Buffers.ReadOnlySequence`1[System.__Canon]:.ctor(System.ReadOnlyMemory`1[System.__Canon]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 5 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 6 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 10, 6 ) byref -> rbx this single-def
-; V01 TypeCtx [V01,T01] ( 7, 4.80) long -> r15 single-def
-; V02 arg1 [V02,T02] ( 5, 4.50) struct (16) [rbp-0x30] do-not-enreg[SA] multireg-arg single-def <System.ReadOnlyMemory`1[System.__Canon]>
+; V01 TypeCtx [V01,T02] ( 7, 4.80) long -> r15 single-def
+; V02 arg1 [V02,T01] ( 6, 5 ) struct (16) [rbp-0x30] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[System.__Canon]>
; V03 loc0 [V03 ] ( 3, 2 ) ref -> [rbp-0x38] do-not-enreg[X] must-init addr-exposed ld-addr-op class-hnd <System.Buffers.MemoryManager`1[System.__Canon]>
; V04 loc1 [V04 ] ( 3, 2 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed ld-addr-op
; V05 loc2 [V05 ] ( 2, 1.50) int -> [rbp-0x48] do-not-enreg[X] addr-exposed ld-addr-op
; V06 loc3 [V06 ] ( 4, 2 ) struct (16) [rbp-0x58] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[System.__Canon]>
-; V07 loc4 [V07,T11] ( 3, 1.50) ref -> r15 class-hnd single-def <System.__Canon[]>
-; V08 loc5 [V08,T12] ( 3, 1.50) int -> r14
+; V07 loc4 [V07,T14] ( 3, 1.50) ref -> r15 class-hnd single-def <System.__Canon[]>
+; V08 loc5 [V08,T15] ( 3, 1.50) int -> r14
;* V09 loc6 [V09 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.String>
;* V10 loc7 [V10 ] ( 0, 0 ) int -> zero-ref ld-addr-op
;# V11 OutArgs [V11 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;* V12 tmp1 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V13 tmp2 [V13 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V14 tmp3 [V14 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V15 tmp4 [V15 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V16 tmp5 [V16 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V17 tmp6 [V17,T09] ( 2, 2 ) int -> rax "Inlining Arg"
-;* V18 tmp7 [V18 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V19 tmp8 [V19 ] ( 2, 1 ) ref -> [rbp-0x58] do-not-enreg[X] addr-exposed "field V06._array (fldOffset=0x0)" P-DEP
-; V20 tmp9 [V20 ] ( 2, 1 ) int -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V06._offset (fldOffset=0x8)" P-DEP
-; V21 tmp10 [V21 ] ( 2, 1 ) int -> [rbp-0x4C] do-not-enreg[X] addr-exposed "field V06._count (fldOffset=0xc)" P-DEP
-; V22 tmp11 [V22,T05] ( 2, 4 ) long -> rdi "argument with side effect"
-; V23 tmp12 [V23,T10] ( 2, 2 ) long -> rdi "argument with side effect"
-; V24 cse0 [V24,T07] ( 3, 2.50) ref -> r14 "CSE #01: aggressive"
-; V25 rat0 [V25,T04] ( 3, 4 ) long -> rdi "runtime lookup"
-; V26 rat1 [V26,T03] ( 3, 5.60) long -> rdi "fgMakeTemp is creating a new local variable"
-; V27 rat2 [V27,T08] ( 3, 2 ) long -> rdi "runtime lookup"
-; V28 rat3 [V28,T06] ( 3, 2.80) long -> rdi "fgMakeTemp is creating a new local variable"
+; V17 tmp6 [V17,T12] ( 2, 2 ) int -> rax "Inlining Arg"
+;* V18 tmp7 [V18 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V19 tmp8 [V19 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V20 tmp9 [V20 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+; V21 tmp10 [V21 ] ( 2, 1 ) ref -> [rbp-0x58] do-not-enreg[X] addr-exposed "field V06._array (fldOffset=0x0)" P-DEP
+; V22 tmp11 [V22 ] ( 2, 1 ) int -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V06._offset (fldOffset=0x8)" P-DEP
+; V23 tmp12 [V23 ] ( 2, 1 ) int -> [rbp-0x4C] do-not-enreg[X] addr-exposed "field V06._count (fldOffset=0xc)" P-DEP
+; V24 tmp13 [V24,T05] ( 2, 4 ) long -> rdi "argument with side effect"
+; V25 tmp14 [V25,T09] ( 3, 2.20) long -> rdi "argument with side effect"
+; V26 tmp15 [V26,T13] ( 2, 2 ) long -> rdi "argument with side effect"
+; V27 cse0 [V27,T08] ( 3, 2.50) ref -> r14 "CSE #01: aggressive"
+; V28 rat0 [V28,T04] ( 3, 4 ) long -> rdi "runtime lookup"
+; V29 rat1 [V29,T03] ( 3, 5.60) long -> rdi "fgMakeTemp is creating a new local variable"
+; V30 rat2 [V30,T10] ( 3, 2 ) long -> rdi "runtime lookup"
+; V31 rat3 [V31,T06] ( 3, 2.80) long -> rdi "fgMakeTemp is creating a new local variable"
+; V32 rat4 [V32,T11] ( 3, 2 ) long -> rdi "runtime lookup"
+; V33 rat5 [V33,T07] ( 3, 2.80) long -> rax "fgMakeTemp is creating a new local variable"
;
; Lcl frame size = 72
G_M28634_IG01:
push rbp
push r15
push r14
push rbx
sub rsp, 72
lea rbp, [rsp+0x60]
xor eax, eax
mov qword ptr [rbp-0x58], rax
vxorps xmm8, xmm8, xmm8
vmovdqu ymmword ptr [rbp-0x50], ymm8
mov qword ptr [rbp-0x20], rsi
mov gword ptr [rbp-0x30], rdx
mov qword ptr [rbp-0x28], rcx
mov rbx, rdi
mov r15, rsi
;; size=49 bbWeight=1 PerfScore 11.83
G_M28634_IG02:
mov rdi, qword ptr [r15+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x68]
test rdi, rdi
je SHORT G_M28634_IG05
;; size=16 bbWeight=1 PerfScore 7.25
G_M28634_IG03:
mov r14, gword ptr [rbp-0x30]
mov rsi, r14
mov rdx, qword ptr [rbp-0x28]
lea rcx, [rbp-0x38]
lea r8, [rbp-0x40]
lea r9, [rbp-0x48]
mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetMemoryManager[System.__Canon,System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref,byref,byref):ubyte
call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetMemoryManager[System.__Canon,System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref,byref,byref):ubyte
test eax, eax
je SHORT G_M28634_IG06
;; size=39 bbWeight=1 PerfScore 8.25
G_M28634_IG04:
mov rsi, gword ptr [rbp-0x38]
mov rdi, rbx
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
mov rsi, gword ptr [rbp-0x38]
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov eax, dword ptr [rbp-0x40]
or eax, 0xD1FFAB1E
mov dword ptr [rbx+0x10], eax
mov eax, dword ptr [rbp-0x40]
add eax, dword ptr [rbp-0x48]
mov dword ptr [rbx+0x14], eax
- jmp SHORT G_M28634_IG08
- ;; size=47 bbWeight=0.50 PerfScore 6.50
+ jmp G_M28634_IG10
+ ;; size=50 bbWeight=0.50 PerfScore 6.50
G_M28634_IG05:
mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
call [rax]CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
jmp SHORT G_M28634_IG03
;; size=30 bbWeight=0.20 PerfScore 1.20
G_M28634_IG06:
mov rdi, qword ptr [r15+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x70]
test rdi, rdi
- je SHORT G_M28634_IG09
+ je SHORT G_M28634_IG11
;; size=16 bbWeight=0.50 PerfScore 3.62
G_M28634_IG07:
+ mov rsi, qword ptr [rdi+0x18]
+ mov rax, qword ptr [rsi+0x10]
+ test rax, rax
+ je G_M28634_IG12
+ ;; size=17 bbWeight=0.50 PerfScore 2.62
+G_M28634_IG08:
+ mov rdi, rax
+ ;; size=3 bbWeight=0.40 PerfScore 0.10
+G_M28634_IG09:
+ lea r8, [rbp-0x58]
mov rsi, r14
- mov rdx, qword ptr [rbp-0x28]
- lea rcx, [rbp-0x58]
- mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref):ubyte
- call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref):ubyte
+ mov edx, dword ptr [rbp-0x28]
+ mov ecx, dword ptr [rbp-0x24]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[System.__Canon](System.Object,int,int,byref):ubyte
+ call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[System.__Canon](System.Object,int,int,byref):ubyte
test eax, eax
- je SHORT G_M28634_IG10
+ je G_M28634_IG13
mov r15, gword ptr [rbp-0x58]
mov r14d, dword ptr [rbp-0x50]
mov rdi, rbx
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rbx+0x10], r14d
add r14d, dword ptr [rbp-0x4C]
or r14d, 0xD1FFAB1E
mov dword ptr [rbx+0x14], r14d
- ;; size=77 bbWeight=0.50 PerfScore 7.88
-G_M28634_IG08:
+ ;; size=83 bbWeight=0.50 PerfScore 8.38
+G_M28634_IG10:
add rsp, 72
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M28634_IG09:
+G_M28634_IG11:
mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
call [rax]CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
- jmp SHORT G_M28634_IG07
- ;; size=30 bbWeight=0.10 PerfScore 0.60
-G_M28634_IG10:
+ jmp G_M28634_IG07
+ ;; size=33 bbWeight=0.10 PerfScore 0.60
+G_M28634_IG12:
+ mov rsi, 0xD1FFAB1E ; global ptr
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rdi, rax
+ jmp G_M28634_IG09
+ ;; size=30 bbWeight=0.10 PerfScore 0.58
+G_M28634_IG13:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException()
call [rax]System.ThrowHelper:ThrowInvalidOperationException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 328, prolog size 35, PerfScore 52.13, instruction count 88, allocated bytes for code 328 (MethodHash=58a89025) for method System.Buffers.ReadOnlySequence`1[System.__Canon]:.ctor(System.ReadOnlyMemory`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 390, prolog size 35, PerfScore 55.93, instruction count 99, allocated bytes for code 390 (MethodHash=58a89025) for method System.Buffers.ReadOnlySequence`1[System.__Canon]:.ctor(System.ReadOnlyMemory`1[System.__Canon]):this (FullOpts)
; ============================================================ 12 (5.22 % of base) - System.Buffers.ReadOnlySequence`1[double]:.ctor(System.ReadOnlyMemory`1[double]):this ; Assembly listing for method System.Buffers.ReadOnlySequence`1[double]:.ctor(System.ReadOnlyMemory`1[double]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 1 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,T00] ( 10, 6 ) byref -> rbx this single-def
-; V01 arg1 [V01,T01] ( 6, 5.50) struct (16) [rbp-0x38] do-not-enreg[SA] multireg-arg single-def <System.ReadOnlyMemory`1[double]>
+; V01 arg1 [V01,T01] ( 5, 5 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[double]>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd single-def <System.Buffers.MemoryManager`1[double]>
-; V03 loc1 [V03,T04] ( 3, 2 ) int -> r14 ld-addr-op
-; V04 loc2 [V04,T10] ( 2, 1.50) int -> r13 ld-addr-op
-; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x48] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[double]>
-; V06 loc4 [V06,T08] ( 3, 1.50) ref -> r15 class-hnd single-def <double[]>
-; V07 loc5 [V07,T09] ( 3, 1.50) int -> r14
+; V03 loc1 [V03,T06] ( 3, 2 ) int -> r12 ld-addr-op
+; V04 loc2 [V04,T09] ( 2, 1.50) int -> [rbp-0x3C] ld-addr-op spill-single-def
+; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[double]>
+; V06 loc4 [V06,T07] ( 3, 1.50) ref -> r15 class-hnd single-def <double[]>
+; V07 loc5 [V07,T08] ( 3, 1.50) int -> r14
;* V08 loc6 [V08 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.String>
;* V09 loc7 [V09 ] ( 0, 0 ) int -> zero-ref ld-addr-op
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;* V11 tmp1 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V12 tmp2 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlyMemory`1[double]>
-; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> r12 class-hnd single-def "dup spill" <System.Buffers.MemoryManager`1[double]>
+; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> [rbp-0x58] class-hnd spill-single-def "dup spill" <System.Buffers.MemoryManager`1[double]>
;* V14 tmp4 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Buffers.MemoryManager`1[double]>
;* V15 tmp5 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x3C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp10 [V20,T05] ( 2, 2 ) ref -> rsi single-def "field V12._object (fldOffset=0x0)" P-INDEP
-; V21 tmp11 [V21,T06] ( 2, 2 ) int -> r14 "field V12._index (fldOffset=0x8)" P-INDEP
-; V22 tmp12 [V22,T07] ( 2, 2 ) int -> r13 "field V12._length (fldOffset=0xc)" P-INDEP
-; V23 cse0 [V23,T03] ( 3, 2.50) ref -> r15 "CSE #01: aggressive"
+; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
+; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
+; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x44] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
+;* V20 tmp10 [V20 ] ( 0, 0 ) ref -> zero-ref single-def "field V12._object (fldOffset=0x0)" P-INDEP
+;* V21 tmp11 [V21 ] ( 0, 0 ) int -> zero-ref "field V12._index (fldOffset=0x8)" P-INDEP
+;* V22 tmp12 [V22 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0xc)" P-INDEP
+; V23 tmp13 [V23,T03] ( 3, 2.50) ref -> r15 single-def "V01.[000..008)"
+; V24 tmp14 [V24,T04] ( 3, 2.50) int -> r14 "V01.[008..012)"
+; V25 tmp15 [V25,T05] ( 3, 2.50) int -> r13 "V01.[012..016)"
;
-; Lcl frame size = 40
+; Lcl frame size = 56
G_M48922_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 40
- lea rbp, [rsp+0x50]
+ sub rsp, 56
+ lea rbp, [rsp+0x60]
xor eax, eax
- mov qword ptr [rbp-0x48], rax
+ mov qword ptr [rbp-0x50], rax
mov gword ptr [rbp-0x38], rsi
mov qword ptr [rbp-0x30], rdx
mov rbx, rdi
;; size=36 bbWeight=1 PerfScore 10.25
G_M48922_IG02:
mov r15, gword ptr [rbp-0x38]
- mov rsi, r15
mov r14d, dword ptr [rbp-0x30]
mov r13d, dword ptr [rbp-0x2C]
+ mov r12d, r14d
+ mov dword ptr [rbp-0x3C], r13d
+ mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Buffers.MemoryManager`1[double]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
- call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
- mov r12, rax
- test r12, r12
+ mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
+ call [rcx]CORINFO_HELP_ISINSTANCEOFCLASS
+ mov gword ptr [rbp-0x58], rax
+ test rax, rax
je SHORT G_M48922_IG04
- ;; size=45 bbWeight=1 PerfScore 8.25
+ ;; size=53 bbWeight=1 PerfScore 10.25
G_M48922_IG03:
mov rdi, rbx
- mov rsi, r12
+ mov rsi, rax
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
- mov rsi, r12
+ mov rsi, gword ptr [rbp-0x58]
call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov edi, r14d
- or edi, 0xD1FFAB1E
- mov dword ptr [rbx+0x10], edi
- add r14d, r13d
- mov dword ptr [rbx+0x14], r14d
+ mov ecx, r12d
+ or ecx, 0xD1FFAB1E
+ mov dword ptr [rbx+0x10], ecx
+ add r12d, dword ptr [rbp-0x3C]
+ mov dword ptr [rbx+0x14], r12d
jmp SHORT G_M48922_IG06
- ;; size=44 bbWeight=0.50 PerfScore 4.00
+ ;; size=46 bbWeight=0.50 PerfScore 5.25
G_M48922_IG04:
+ lea rcx, [rbp-0x50]
mov rdi, r15
- mov rsi, qword ptr [rbp-0x30]
- lea rdx, [rbp-0x48]
- mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):ubyte
- call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):ubyte
+ mov esi, r14d
+ mov edx, r13d
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[double](System.Object,int,int,byref):ubyte
+ call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[double](System.Object,int,int,byref):ubyte
test eax, eax
jne SHORT G_M48922_IG05
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException()
call [rax]System.ThrowHelper:ThrowInvalidOperationException()
int3
- ;; size=40 bbWeight=0.50 PerfScore 4.88
+ ;; size=42 bbWeight=0.50 PerfScore 4.62
G_M48922_IG05:
- mov r15, gword ptr [rbp-0x48]
- mov r14d, dword ptr [rbp-0x40]
+ mov r15, gword ptr [rbp-0x50]
+ mov r14d, dword ptr [rbp-0x48]
mov rdi, rbx
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rbx+0x10], r14d
- add r14d, dword ptr [rbp-0x3C]
+ add r14d, dword ptr [rbp-0x44]
or r14d, 0xD1FFAB1E
mov dword ptr [rbx+0x14], r14d
;; size=50 bbWeight=0.50 PerfScore 4.75
G_M48922_IG06:
- add rsp, 40
+ add rsp, 56
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
-; Total bytes of code 230, prolog size 25, PerfScore 36.38, instruction count 65, allocated bytes for code 230 (MethodHash=c77240e5) for method System.Buffers.ReadOnlySequence`1[double]:.ctor(System.ReadOnlyMemory`1[double]):this (FullOpts)
+; Total bytes of code 242, prolog size 25, PerfScore 39.38, instruction count 68, allocated bytes for code 242 (MethodHash=c77240e5) for method System.Buffers.ReadOnlySequence`1[double]:.ctor(System.ReadOnlyMemory`1[double]):this (FullOpts)
; ============================================================ 12 (5.22 % of base) - System.Buffers.ReadOnlySequence`1[int]:.ctor(System.ReadOnlyMemory`1[int]):this ; Assembly listing for method System.Buffers.ReadOnlySequence`1[int]:.ctor(System.ReadOnlyMemory`1[int]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 1 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,T00] ( 10, 6 ) byref -> rbx this single-def
-; V01 arg1 [V01,T01] ( 6, 5.50) struct (16) [rbp-0x38] do-not-enreg[SA] multireg-arg single-def <System.ReadOnlyMemory`1[int]>
+; V01 arg1 [V01,T01] ( 5, 5 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[int]>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd single-def <System.Buffers.MemoryManager`1[int]>
-; V03 loc1 [V03,T04] ( 3, 2 ) int -> r14 ld-addr-op
-; V04 loc2 [V04,T10] ( 2, 1.50) int -> r13 ld-addr-op
-; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x48] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[int]>
-; V06 loc4 [V06,T08] ( 3, 1.50) ref -> r15 class-hnd single-def <int[]>
-; V07 loc5 [V07,T09] ( 3, 1.50) int -> r14
+; V03 loc1 [V03,T06] ( 3, 2 ) int -> r12 ld-addr-op
+; V04 loc2 [V04,T09] ( 2, 1.50) int -> [rbp-0x3C] ld-addr-op spill-single-def
+; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[int]>
+; V06 loc4 [V06,T07] ( 3, 1.50) ref -> r15 class-hnd single-def <int[]>
+; V07 loc5 [V07,T08] ( 3, 1.50) int -> r14
;* V08 loc6 [V08 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.String>
;* V09 loc7 [V09 ] ( 0, 0 ) int -> zero-ref ld-addr-op
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;* V11 tmp1 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V12 tmp2 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlyMemory`1[int]>
-; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> r12 class-hnd single-def "dup spill" <System.Buffers.MemoryManager`1[int]>
+; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> [rbp-0x58] class-hnd spill-single-def "dup spill" <System.Buffers.MemoryManager`1[int]>
;* V14 tmp4 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Buffers.MemoryManager`1[int]>
;* V15 tmp5 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x3C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp10 [V20,T05] ( 2, 2 ) ref -> rsi single-def "field V12._object (fldOffset=0x0)" P-INDEP
-; V21 tmp11 [V21,T06] ( 2, 2 ) int -> r14 "field V12._index (fldOffset=0x8)" P-INDEP
-; V22 tmp12 [V22,T07] ( 2, 2 ) int -> r13 "field V12._length (fldOffset=0xc)" P-INDEP
-; V23 cse0 [V23,T03] ( 3, 2.50) ref -> r15 "CSE #01: aggressive"
+; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
+; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
+; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x44] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
+;* V20 tmp10 [V20 ] ( 0, 0 ) ref -> zero-ref single-def "field V12._object (fldOffset=0x0)" P-INDEP
+;* V21 tmp11 [V21 ] ( 0, 0 ) int -> zero-ref "field V12._index (fldOffset=0x8)" P-INDEP
+;* V22 tmp12 [V22 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0xc)" P-INDEP
+; V23 tmp13 [V23,T03] ( 3, 2.50) ref -> r15 single-def "V01.[000..008)"
+; V24 tmp14 [V24,T04] ( 3, 2.50) int -> r14 "V01.[008..012)"
+; V25 tmp15 [V25,T05] ( 3, 2.50) int -> r13 "V01.[012..016)"
;
-; Lcl frame size = 40
+; Lcl frame size = 56
G_M154_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 40
- lea rbp, [rsp+0x50]
+ sub rsp, 56
+ lea rbp, [rsp+0x60]
xor eax, eax
- mov qword ptr [rbp-0x48], rax
+ mov qword ptr [rbp-0x50], rax
mov gword ptr [rbp-0x38], rsi
mov qword ptr [rbp-0x30], rdx
mov rbx, rdi
;; size=36 bbWeight=1 PerfScore 10.25
G_M154_IG02:
mov r15, gword ptr [rbp-0x38]
- mov rsi, r15
mov r14d, dword ptr [rbp-0x30]
mov r13d, dword ptr [rbp-0x2C]
+ mov r12d, r14d
+ mov dword ptr [rbp-0x3C], r13d
+ mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Buffers.MemoryManager`1[int]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
- call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
- mov r12, rax
- test r12, r12
+ mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
+ call [rcx]CORINFO_HELP_ISINSTANCEOFCLASS
+ mov gword ptr [rbp-0x58], rax
+ test rax, rax
je SHORT G_M154_IG04
- ;; size=45 bbWeight=1 PerfScore 8.25
+ ;; size=53 bbWeight=1 PerfScore 10.25
G_M154_IG03:
mov rdi, rbx
- mov rsi, r12
+ mov rsi, rax
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
- mov rsi, r12
+ mov rsi, gword ptr [rbp-0x58]
call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov edi, r14d
- or edi, 0xD1FFAB1E
- mov dword ptr [rbx+0x10], edi
- add r14d, r13d
- mov dword ptr [rbx+0x14], r14d
+ mov ecx, r12d
+ or ecx, 0xD1FFAB1E
+ mov dword ptr [rbx+0x10], ecx
+ add r12d, dword ptr [rbp-0x3C]
+ mov dword ptr [rbx+0x14], r12d
jmp SHORT G_M154_IG06
- ;; size=44 bbWeight=0.50 PerfScore 4.00
+ ;; size=46 bbWeight=0.50 PerfScore 5.25
G_M154_IG04:
+ lea rcx, [rbp-0x50]
mov rdi, r15
- mov rsi, qword ptr [rbp-0x30]
- lea rdx, [rbp-0x48]
- mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArray[int](System.ReadOnlyMemory`1[int],byref):ubyte
- call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArray[int](System.ReadOnlyMemory`1[int],byref):ubyte
+ mov esi, r14d
+ mov edx, r13d
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[int](System.Object,int,int,byref):ubyte
+ call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[int](System.Object,int,int,byref):ubyte
test eax, eax
jne SHORT G_M154_IG05
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException()
call [rax]System.ThrowHelper:ThrowInvalidOperationException()
int3
- ;; size=40 bbWeight=0.50 PerfScore 4.88
+ ;; size=42 bbWeight=0.50 PerfScore 4.62
G_M154_IG05:
- mov r15, gword ptr [rbp-0x48]
- mov r14d, dword ptr [rbp-0x40]
+ mov r15, gword ptr [rbp-0x50]
+ mov r14d, dword ptr [rbp-0x48]
mov rdi, rbx
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rbx+0x10], r14d
- add r14d, dword ptr [rbp-0x3C]
+ add r14d, dword ptr [rbp-0x44]
or r14d, 0xD1FFAB1E
mov dword ptr [rbx+0x14], r14d
;; size=50 bbWeight=0.50 PerfScore 4.75
G_M154_IG06:
- add rsp, 40
+ add rsp, 56
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
-; Total bytes of code 230, prolog size 25, PerfScore 36.38, instruction count 65, allocated bytes for code 230 (MethodHash=3829ff65) for method System.Buffers.ReadOnlySequence`1[int]:.ctor(System.ReadOnlyMemory`1[int]):this (FullOpts)
+; Total bytes of code 242, prolog size 25, PerfScore 39.38, instruction count 68, allocated bytes for code 242 (MethodHash=3829ff65) for method System.Buffers.ReadOnlySequence`1[int]:.ctor(System.ReadOnlyMemory`1[int]):this (FullOpts)
; ============================================================ 12 (5.22 % of base) - System.Buffers.ReadOnlySequence`1[long]:.ctor(System.ReadOnlyMemory`1[long]):this ; Assembly listing for method System.Buffers.ReadOnlySequence`1[long]:.ctor(System.ReadOnlyMemory`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 1 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,T00] ( 10, 6 ) byref -> rbx this single-def
-; V01 arg1 [V01,T01] ( 6, 5.50) struct (16) [rbp-0x38] do-not-enreg[SA] multireg-arg single-def <System.ReadOnlyMemory`1[long]>
+; V01 arg1 [V01,T01] ( 5, 5 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[long]>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd single-def <System.Buffers.MemoryManager`1[long]>
-; V03 loc1 [V03,T04] ( 3, 2 ) int -> r14 ld-addr-op
-; V04 loc2 [V04,T10] ( 2, 1.50) int -> r13 ld-addr-op
-; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x48] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[long]>
-; V06 loc4 [V06,T08] ( 3, 1.50) ref -> r15 class-hnd single-def <long[]>
-; V07 loc5 [V07,T09] ( 3, 1.50) int -> r14
+; V03 loc1 [V03,T06] ( 3, 2 ) int -> r12 ld-addr-op
+; V04 loc2 [V04,T09] ( 2, 1.50) int -> [rbp-0x3C] ld-addr-op spill-single-def
+; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[long]>
+; V06 loc4 [V06,T07] ( 3, 1.50) ref -> r15 class-hnd single-def <long[]>
+; V07 loc5 [V07,T08] ( 3, 1.50) int -> r14
;* V08 loc6 [V08 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.String>
;* V09 loc7 [V09 ] ( 0, 0 ) int -> zero-ref ld-addr-op
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;* V11 tmp1 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V12 tmp2 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlyMemory`1[long]>
-; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> r12 class-hnd single-def "dup spill" <System.Buffers.MemoryManager`1[long]>
+; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> [rbp-0x58] class-hnd spill-single-def "dup spill" <System.Buffers.MemoryManager`1[long]>
;* V14 tmp4 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Buffers.MemoryManager`1[long]>
;* V15 tmp5 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x3C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp10 [V20,T05] ( 2, 2 ) ref -> rsi single-def "field V12._object (fldOffset=0x0)" P-INDEP
-; V21 tmp11 [V21,T06] ( 2, 2 ) int -> r14 "field V12._index (fldOffset=0x8)" P-INDEP
-; V22 tmp12 [V22,T07] ( 2, 2 ) int -> r13 "field V12._length (fldOffset=0xc)" P-INDEP
-; V23 cse0 [V23,T03] ( 3, 2.50) ref -> r15 "CSE #01: aggressive"
+; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
+; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
+; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x44] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
+;* V20 tmp10 [V20 ] ( 0, 0 ) ref -> zero-ref single-def "field V12._object (fldOffset=0x0)" P-INDEP
+;* V21 tmp11 [V21 ] ( 0, 0 ) int -> zero-ref "field V12._index (fldOffset=0x8)" P-INDEP
+;* V22 tmp12 [V22 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0xc)" P-INDEP
+; V23 tmp13 [V23,T03] ( 3, 2.50) ref -> r15 single-def "V01.[000..008)"
+; V24 tmp14 [V24,T04] ( 3, 2.50) int -> r14 "V01.[008..012)"
+; V25 tmp15 [V25,T05] ( 3, 2.50) int -> r13 "V01.[012..016)"
;
-; Lcl frame size = 40
+; Lcl frame size = 56
G_M16218_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 40
- lea rbp, [rsp+0x50]
+ sub rsp, 56
+ lea rbp, [rsp+0x60]
xor eax, eax
- mov qword ptr [rbp-0x48], rax
+ mov qword ptr [rbp-0x50], rax
mov gword ptr [rbp-0x38], rsi
mov qword ptr [rbp-0x30], rdx
mov rbx, rdi
;; size=36 bbWeight=1 PerfScore 10.25
G_M16218_IG02:
mov r15, gword ptr [rbp-0x38]
- mov rsi, r15
mov r14d, dword ptr [rbp-0x30]
mov r13d, dword ptr [rbp-0x2C]
+ mov r12d, r14d
+ mov dword ptr [rbp-0x3C], r13d
+ mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Buffers.MemoryManager`1[long]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
- call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
- mov r12, rax
- test r12, r12
+ mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
+ call [rcx]CORINFO_HELP_ISINSTANCEOFCLASS
+ mov gword ptr [rbp-0x58], rax
+ test rax, rax
je SHORT G_M16218_IG04
- ;; size=45 bbWeight=1 PerfScore 8.25
+ ;; size=53 bbWeight=1 PerfScore 10.25
G_M16218_IG03:
mov rdi, rbx
- mov rsi, r12
+ mov rsi, rax
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
- mov rsi, r12
+ mov rsi, gword ptr [rbp-0x58]
call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov edi, r14d
- or edi, 0xD1FFAB1E
- mov dword ptr [rbx+0x10], edi
- add r14d, r13d
- mov dword ptr [rbx+0x14], r14d
+ mov ecx, r12d
+ or ecx, 0xD1FFAB1E
+ mov dword ptr [rbx+0x10], ecx
+ add r12d, dword ptr [rbp-0x3C]
+ mov dword ptr [rbx+0x14], r12d
jmp SHORT G_M16218_IG06
- ;; size=44 bbWeight=0.50 PerfScore 4.00
+ ;; size=46 bbWeight=0.50 PerfScore 5.25
G_M16218_IG04:
+ lea rcx, [rbp-0x50]
mov rdi, r15
- mov rsi, qword ptr [rbp-0x30]
- lea rdx, [rbp-0x48]
- mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArray[long](System.ReadOnlyMemory`1[long],byref):ubyte
- call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArray[long](System.ReadOnlyMemory`1[long],byref):ubyte
+ mov esi, r14d
+ mov edx, r13d
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[long](System.Object,int,int,byref):ubyte
+ call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[long](System.Object,int,int,byref):ubyte
test eax, eax
jne SHORT G_M16218_IG05
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException()
call [rax]System.ThrowHelper:ThrowInvalidOperationException()
int3
- ;; size=40 bbWeight=0.50 PerfScore 4.88
+ ;; size=42 bbWeight=0.50 PerfScore 4.62
G_M16218_IG05:
- mov r15, gword ptr [rbp-0x48]
- mov r14d, dword ptr [rbp-0x40]
+ mov r15, gword ptr [rbp-0x50]
+ mov r14d, dword ptr [rbp-0x48]
mov rdi, rbx
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rbx+0x10], r14d
- add r14d, dword ptr [rbp-0x3C]
+ add r14d, dword ptr [rbp-0x44]
or r14d, 0xD1FFAB1E
mov dword ptr [rbx+0x14], r14d
;; size=50 bbWeight=0.50 PerfScore 4.75
G_M16218_IG06:
- add rsp, 40
+ add rsp, 56
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
-; Total bytes of code 230, prolog size 25, PerfScore 36.38, instruction count 65, allocated bytes for code 230 (MethodHash=e511c0a5) for method System.Buffers.ReadOnlySequence`1[long]:.ctor(System.ReadOnlyMemory`1[long]):this (FullOpts)
+; Total bytes of code 242, prolog size 25, PerfScore 39.38, instruction count 68, allocated bytes for code 242 (MethodHash=e511c0a5) for method System.Buffers.ReadOnlySequence`1[long]:.ctor(System.ReadOnlyMemory`1[long]):this (FullOpts)
; ============================================================ 12 (5.22 % of base) - System.Buffers.ReadOnlySequence`1[short]:.ctor(System.ReadOnlyMemory`1[short]):this ; Assembly listing for method System.Buffers.ReadOnlySequence`1[short]:.ctor(System.ReadOnlyMemory`1[short]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 1 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,T00] ( 10, 6 ) byref -> rbx this single-def
-; V01 arg1 [V01,T01] ( 6, 5.50) struct (16) [rbp-0x38] do-not-enreg[SA] multireg-arg single-def <System.ReadOnlyMemory`1[short]>
+; V01 arg1 [V01,T01] ( 5, 5 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[short]>
;* V02 loc0 [V02 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd single-def <System.Buffers.MemoryManager`1[short]>
-; V03 loc1 [V03,T04] ( 3, 2 ) int -> r14 ld-addr-op
-; V04 loc2 [V04,T10] ( 2, 1.50) int -> r13 ld-addr-op
-; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x48] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[short]>
-; V06 loc4 [V06,T08] ( 3, 1.50) ref -> r15 class-hnd single-def <short[]>
-; V07 loc5 [V07,T09] ( 3, 1.50) int -> r14
+; V03 loc1 [V03,T06] ( 3, 2 ) int -> r12 ld-addr-op
+; V04 loc2 [V04,T09] ( 2, 1.50) int -> [rbp-0x3C] ld-addr-op spill-single-def
+; V05 loc3 [V05 ] ( 4, 2 ) struct (16) [rbp-0x50] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[short]>
+; V06 loc4 [V06,T07] ( 3, 1.50) ref -> r15 class-hnd single-def <short[]>
+; V07 loc5 [V07,T08] ( 3, 1.50) int -> r14
;* V08 loc6 [V08 ] ( 0, 0 ) ref -> zero-ref ld-addr-op class-hnd <System.String>
;* V09 loc7 [V09 ] ( 0, 0 ) int -> zero-ref ld-addr-op
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;* V11 tmp1 [V11 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V12 tmp2 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlyMemory`1[short]>
-; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> r12 class-hnd single-def "dup spill" <System.Buffers.MemoryManager`1[short]>
+; V13 tmp3 [V13,T02] ( 4, 6 ) ref -> [rbp-0x58] class-hnd spill-single-def "dup spill" <System.Buffers.MemoryManager`1[short]>
;* V14 tmp4 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Buffers.MemoryManager`1[short]>
;* V15 tmp5 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x3C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp10 [V20,T05] ( 2, 2 ) ref -> rsi single-def "field V12._object (fldOffset=0x0)" P-INDEP
-; V21 tmp11 [V21,T06] ( 2, 2 ) int -> r14 "field V12._index (fldOffset=0x8)" P-INDEP
-; V22 tmp12 [V22,T07] ( 2, 2 ) int -> r13 "field V12._length (fldOffset=0xc)" P-INDEP
-; V23 cse0 [V23,T03] ( 3, 2.50) ref -> r15 "CSE #01: aggressive"
+; V17 tmp7 [V17 ] ( 2, 1 ) ref -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
+; V18 tmp8 [V18 ] ( 2, 1 ) int -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
+; V19 tmp9 [V19 ] ( 2, 1 ) int -> [rbp-0x44] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
+;* V20 tmp10 [V20 ] ( 0, 0 ) ref -> zero-ref single-def "field V12._object (fldOffset=0x0)" P-INDEP
+;* V21 tmp11 [V21 ] ( 0, 0 ) int -> zero-ref "field V12._index (fldOffset=0x8)" P-INDEP
+;* V22 tmp12 [V22 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0xc)" P-INDEP
+; V23 tmp13 [V23,T03] ( 3, 2.50) ref -> r15 single-def "V01.[000..008)"
+; V24 tmp14 [V24,T04] ( 3, 2.50) int -> r14 "V01.[008..012)"
+; V25 tmp15 [V25,T05] ( 3, 2.50) int -> r13 "V01.[012..016)"
;
-; Lcl frame size = 40
+; Lcl frame size = 56
G_M29114_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 40
- lea rbp, [rsp+0x50]
+ sub rsp, 56
+ lea rbp, [rsp+0x60]
xor eax, eax
- mov qword ptr [rbp-0x48], rax
+ mov qword ptr [rbp-0x50], rax
mov gword ptr [rbp-0x38], rsi
mov qword ptr [rbp-0x30], rdx
mov rbx, rdi
;; size=36 bbWeight=1 PerfScore 10.25
G_M29114_IG02:
mov r15, gword ptr [rbp-0x38]
- mov rsi, r15
mov r14d, dword ptr [rbp-0x30]
mov r13d, dword ptr [rbp-0x2C]
+ mov r12d, r14d
+ mov dword ptr [rbp-0x3C], r13d
+ mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Buffers.MemoryManager`1[short]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
- call [rax]CORINFO_HELP_ISINSTANCEOFCLASS
- mov r12, rax
- test r12, r12
+ mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_ISINSTANCEOFCLASS
+ call [rcx]CORINFO_HELP_ISINSTANCEOFCLASS
+ mov gword ptr [rbp-0x58], rax
+ test rax, rax
je SHORT G_M29114_IG04
- ;; size=45 bbWeight=1 PerfScore 8.25
+ ;; size=53 bbWeight=1 PerfScore 10.25
G_M29114_IG03:
mov rdi, rbx
- mov rsi, r12
+ mov rsi, rax
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
- mov rsi, r12
+ mov rsi, gword ptr [rbp-0x58]
call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov edi, r14d
- or edi, 0xD1FFAB1E
- mov dword ptr [rbx+0x10], edi
- add r14d, r13d
- mov dword ptr [rbx+0x14], r14d
+ mov ecx, r12d
+ or ecx, 0xD1FFAB1E
+ mov dword ptr [rbx+0x10], ecx
+ add r12d, dword ptr [rbp-0x3C]
+ mov dword ptr [rbx+0x14], r12d
jmp SHORT G_M29114_IG06
- ;; size=44 bbWeight=0.50 PerfScore 4.00
+ ;; size=46 bbWeight=0.50 PerfScore 5.25
G_M29114_IG04:
+ lea rcx, [rbp-0x50]
mov rdi, r15
- mov rsi, qword ptr [rbp-0x30]
- lea rdx, [rbp-0x48]
- mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArray[short](System.ReadOnlyMemory`1[short],byref):ubyte
- call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArray[short](System.ReadOnlyMemory`1[short],byref):ubyte
+ mov esi, r14d
+ mov edx, r13d
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[short](System.Object,int,int,byref):ubyte
+ call [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[short](System.Object,int,int,byref):ubyte
test eax, eax
jne SHORT G_M29114_IG05
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException()
call [rax]System.ThrowHelper:ThrowInvalidOperationException()
int3
- ;; size=40 bbWeight=0.50 PerfScore 4.88
+ ;; size=42 bbWeight=0.50 PerfScore 4.62
G_M29114_IG05:
- mov r15, gword ptr [rbp-0x48]
- mov r14d, dword ptr [rbp-0x40]
+ mov r15, gword ptr [rbp-0x50]
+ mov r14d, dword ptr [rbp-0x48]
mov rdi, rbx
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
lea rdi, bword ptr [rbx+0x08]
mov rsi, r15
call CORINFO_HELP_CHECKED_ASSIGN_REF
mov dword ptr [rbx+0x10], r14d
- add r14d, dword ptr [rbp-0x3C]
+ add r14d, dword ptr [rbp-0x44]
or r14d, 0xD1FFAB1E
mov dword ptr [rbx+0x14], r14d
;; size=50 bbWeight=0.50 PerfScore 4.75
G_M29114_IG06:
- add rsp, 40
+ add rsp, 56
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
-; Total bytes of code 230, prolog size 25, PerfScore 36.38, instruction count 65, allocated bytes for code 230 (MethodHash=f3488e45) for method System.Buffers.ReadOnlySequence`1[short]:.ctor(System.ReadOnlyMemory`1[short]):this (FullOpts)
+; Total bytes of code 242, prolog size 25, PerfScore 39.38, instruction count 68, allocated bytes for code 242 (MethodHash=f3488e45) for method System.Buffers.ReadOnlySequence`1[short]:.ctor(System.ReadOnlyMemory`1[short]):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/a48094c03f6d8637597eea89309f30bb |
Top method improvements-249 (-71.14 % of base) - System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref):ubyte ; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
-; partially interruptible
+; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T02] ( 5, 3.60) long -> r15 single-def
-; V01 arg0 [V01,T01] ( 5, 5 ) struct (16) [rbp-0x38] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[System.__Canon]>
-; V02 arg1 [V02,T00] ( 10, 6 ) byref -> rbx single-def
-; V03 loc0 [V03,T07] ( 7, 4.50) ref -> rdi class-hnd single-def <System.Object>
-; V04 loc1 [V04,T09] ( 3, 2 ) int -> r14 ld-addr-op
-; V05 loc2 [V05,T06] ( 8, 4.50) int -> r13 ld-addr-op
-; V06 loc3 [V06 ] ( 3, 1.50) struct (16) [rbp-0x48] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[System.__Canon]>
-;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;* V08 tmp1 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V09 tmp2 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V10 tmp3 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[System.__Canon]>
-;* V11 tmp4 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V13 tmp6 [V13,T03] ( 5, 5 ) ref -> rdi class-hnd single-def "impAppendStmt" <System.__Canon[]>
-;* V14 tmp7 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[System.__Canon]>
-;* V15 tmp8 [V15 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V16 tmp9 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <System.__Canon[]>
-;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[System.__Canon]>
-;* V18 tmp11 [V18 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V19 tmp12 [V19,T11] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V20 tmp13 [V20,T04] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V21 tmp14 [V21 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V22 tmp15 [V22,T05] ( 5, 5 ) int -> r14 "Inlining Arg"
-;* V23 tmp16 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-;* V24 tmp17 [V24 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V25 tmp18 [V25 ] ( 2, 1 ) ref -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V06._array (fldOffset=0x0)" P-DEP
-; V26 tmp19 [V26 ] ( 2, 1 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V06._offset (fldOffset=0x8)" P-DEP
-; V27 tmp20 [V27 ] ( 1, 0.50) int -> [rbp-0x3C] do-not-enreg[X] addr-exposed "field V06._count (fldOffset=0xc)" P-DEP
-; V28 tmp21 [V28,T15] ( 2, 1 ) ref -> rsi single-def "field V14._array (fldOffset=0x0)" P-INDEP
-; V29 tmp22 [V29,T17] ( 2, 1 ) int -> r14 "field V14._offset (fldOffset=0x8)" P-INDEP
-; V30 tmp23 [V30,T18] ( 2, 1 ) int -> r13 "field V14._count (fldOffset=0xc)" P-INDEP
-; V31 tmp24 [V31,T16] ( 2, 1 ) ref -> [rbp-0x50] spill-single-def "field V17._array (fldOffset=0x0)" P-INDEP
-; V32 tmp25 [V32,T19] ( 2, 1 ) int -> r15 "field V17._offset (fldOffset=0x8)" P-INDEP
-; V33 tmp26 [V33,T20] ( 2, 1 ) int -> r13 "field V17._count (fldOffset=0xc)" P-INDEP
-; V34 cse0 [V34,T12] ( 3, 1.50) int -> rsi "CSE #01: moderate"
-; V35 cse1 [V35,T13] ( 3, 1.50) long -> rax "CSE #02: moderate"
-; V36 cse2 [V36,T14] ( 3, 1.50) int -> rsi "CSE #03: moderate"
-; V37 rat0 [V37,T10] ( 3, 2 ) long -> rdi "runtime lookup"
-; V38 rat1 [V38,T08] ( 3, 2.80) long -> rdi "fgMakeTemp is creating a new local variable"
+; V00 TypeCtx [V00,T01] ( 5, 4.20) long -> rdi single-def
+; V01 arg0 [V01,T00] ( 5, 5 ) struct (16) [rbp-0x20] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[System.__Canon]>
+; V02 arg1 [V02,T03] ( 3, 3 ) byref -> rbx single-def
+;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
+;* V04 tmp1 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V05 tmp2 [V05,T05] ( 2, 4 ) long -> rdi "argument with side effect"
+; V06 rat0 [V06,T04] ( 3, 4 ) long -> rdi "runtime lookup"
+; V07 rat1 [V07,T02] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 48
+; Lcl frame size = 24
G_M45636_IG01:
push rbp
- push r15
- push r14
- push r13
push rbx
- sub rsp, 48
- lea rbp, [rsp+0x50]
- xor eax, eax
- mov qword ptr [rbp-0x48], rax
- mov qword ptr [rbp-0x28], rdi
- mov gword ptr [rbp-0x38], rsi
- mov qword ptr [rbp-0x30], rdx
- mov r15, rdi
+ sub rsp, 24
+ lea rbp, [rsp+0x20]
+ mov qword ptr [rbp-0x10], rdi
+ mov gword ptr [rbp-0x20], rsi
+ mov qword ptr [rbp-0x18], rdx
mov rbx, rcx
- ;; size=41 bbWeight=1 PerfScore 10.50
+ ;; size=26 bbWeight=1 PerfScore 6.00
G_M45636_IG02:
- mov r14d, dword ptr [rbp-0x30]
- mov r13d, dword ptr [rbp-0x2C]
- mov rdi, gword ptr [rbp-0x38]
- test rdi, rdi
- je SHORT G_M45636_IG04
- ;; size=17 bbWeight=1 PerfScore 4.25
-G_M45636_IG03:
- mov rax, qword ptr [rdi]
- mov rsi, rax
- test dword ptr [rsi], 0xD1FFAB1E
- jne G_M45636_IG11
- lea rsi, [rbp-0x48]
- mov rax, qword ptr [rax+0x48]
- call [rax]System.Buffers.MemoryManager`1[System.__Canon]:TryGetArray(byref):ubyte:this
- test eax, eax
- jne SHORT G_M45636_IG09
- ;; size=32 bbWeight=0.50 PerfScore 6.50
-G_M45636_IG04:
- test r13d, r13d
+ mov rsi, qword ptr [rdi+0x18]
+ mov rax, qword ptr [rsi+0x10]
+ test rax, rax
je SHORT G_M45636_IG06
- xor eax, eax
- mov qword ptr [rbx], rax
- mov qword ptr [rbx+0x08], rax
- ;; size=14 bbWeight=0.50 PerfScore 1.75
+ ;; size=13 bbWeight=1 PerfScore 5.25
+G_M45636_IG03:
+ mov rdi, rax
+ ;; size=3 bbWeight=0.80 PerfScore 0.20
+G_M45636_IG04:
+ mov rsi, gword ptr [rbp-0x20]
+ mov edx, dword ptr [rbp-0x18]
+ mov ecx, dword ptr [rbp-0x14]
+ mov r8, rbx
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[System.__Canon](System.Object,int,int,byref):ubyte
+ ;; size=23 bbWeight=1 PerfScore 3.50
G_M45636_IG05:
- add rsp, 48
+ add rsp, 24
pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
- ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
+ tail.jmp [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[System.__Canon](System.Object,int,int,byref):ubyte
+ ;; size=9 bbWeight=1 PerfScore 3.25
G_M45636_IG06:
- mov rdi, qword ptr [r15+0x18]
- mov rdi, qword ptr [rdi+0x18]
- test rdi, rdi
- je SHORT G_M45636_IG08
- ;; size=13 bbWeight=0.50 PerfScore 2.62
-G_M45636_IG07:
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_GET_GCSTATIC_BASE
- call [rax]CORINFO_HELP_GET_GCSTATIC_BASE
- mov rsi, gword ptr [rax]
- add rsi, 8
- mov rdi, rbx
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- jmp G_M45636_IG12
- ;; size=34 bbWeight=0.50 PerfScore 4.88
-G_M45636_IG08:
- mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rdi, rax
- jmp SHORT G_M45636_IG07
- ;; size=30 bbWeight=0.10 PerfScore 0.60
-G_M45636_IG09:
- mov rdi, gword ptr [rbp-0x48]
- add r14d, dword ptr [rbp-0x40]
- test rdi, rdi
- je SHORT G_M45636_IG10
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r14d
- jb SHORT G_M45636_IG10
- sub esi, r14d
- cmp esi, r13d
- jb SHORT G_M45636_IG10
- mov rsi, rdi
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r14d
- mov dword ptr [rbx+0x0C], r13d
- jmp SHORT G_M45636_IG12
- ;; size=50 bbWeight=0.50 PerfScore 7.25
-G_M45636_IG10:
- mov esi, r14d
- mov edx, r13d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
-G_M45636_IG11:
- mov r15d, r14d
- and r15d, 0xD1FFAB1E
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M45636_IG14
- sub esi, r15d
- cmp esi, r13d
- jb SHORT G_M45636_IG14
- mov gword ptr [rbp-0x50], rdi
- mov rsi, gword ptr [rbp-0x50]
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r13d
- ;; size=50 bbWeight=0.50 PerfScore 5.25
-G_M45636_IG12:
- mov eax, 1
- ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M45636_IG13:
- add rsp, 48
- pop rbx
- pop r13
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
-G_M45636_IG14:
- mov esi, r15d
- mov edx, r13d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
+ jmp SHORT G_M45636_IG04
+ ;; size=27 bbWeight=0.20 PerfScore 1.15
-; Total bytes of code 350, prolog size 27, PerfScore 51.47, instruction count 106, allocated bytes for code 350 (MethodHash=54a64dbb) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref):ubyte (FullOpts)
+; Total bytes of code 101, prolog size 26, PerfScore 19.35, instruction count 27, allocated bytes for code 101 (MethodHash=54a64dbb) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.__Canon](System.ReadOnlyMemory`1[System.__Canon],byref):ubyte (FullOpts)
; ============================================================ -239 (-83.57 % of base) - System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):ubyte ; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
-; rbp based frame
-; partially interruptible
+; rsp based frame
+; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 5 ) struct (16) [rbp-0x28] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[double]>
-; V01 arg1 [V01,T00] ( 10, 6 ) byref -> rbx single-def
-; V02 loc0 [V02,T06] ( 7, 4.50) ref -> rdi class-hnd single-def <System.Object>
-; V03 loc1 [V03,T07] ( 3, 2 ) int -> r15 ld-addr-op
-; V04 loc2 [V04,T05] ( 8, 4.50) int -> r14 ld-addr-op
-; V05 loc3 [V05 ] ( 3, 1.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[double]>
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;* V07 tmp1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[double]>
-; V08 tmp2 [V08,T02] ( 5, 5 ) ref -> rdi class-hnd single-def "impAppendStmt" <double[]>
-;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[double]>
-;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <double[]>
-;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[double]>
-; V12 tmp6 [V12,T08] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V13 tmp7 [V13,T03] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V15 tmp9 [V15,T04] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp11 [V17 ] ( 2, 1 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp12 [V18 ] ( 2, 1 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp13 [V19 ] ( 1, 0.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp14 [V20,T12] ( 2, 1 ) ref -> rsi single-def "field V09._array (fldOffset=0x0)" P-INDEP
-; V21 tmp15 [V21,T14] ( 2, 1 ) int -> r15 "field V09._offset (fldOffset=0x8)" P-INDEP
-; V22 tmp16 [V22,T15] ( 2, 1 ) int -> r14 "field V09._count (fldOffset=0xc)" P-INDEP
-; V23 tmp17 [V23,T13] ( 2, 1 ) ref -> [rbp-0x40] spill-single-def "field V11._array (fldOffset=0x0)" P-INDEP
-; V24 tmp18 [V24,T16] ( 2, 1 ) int -> r15 "field V11._offset (fldOffset=0x8)" P-INDEP
-; V25 tmp19 [V25,T17] ( 2, 1 ) int -> r14 "field V11._count (fldOffset=0xc)" P-INDEP
-; V26 cse0 [V26,T09] ( 3, 1.50) int -> rsi "CSE #01: moderate"
-; V27 cse1 [V27,T10] ( 3, 1.50) long -> rax "CSE #02: moderate"
-; V28 cse2 [V28,T11] ( 3, 1.50) int -> rsi "CSE #03: moderate"
+; V00 arg0 [V00,T00] ( 5, 5 ) struct (16) [rsp+0x08] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[double]>
+; V01 arg1 [V01,T01] ( 3, 3 ) byref -> rcx single-def
+;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M516_IG01:
- push rbp
- push r15
- push r14
- push rbx
- sub rsp, 40
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
- mov gword ptr [rbp-0x28], rdi
- mov qword ptr [rbp-0x20], rsi
- mov rbx, rdx
- ;; size=32 bbWeight=1 PerfScore 8.25
+ sub rsp, 24
+ mov gword ptr [rsp+0x08], rdi
+ mov qword ptr [rsp+0x10], rsi
+ mov rcx, rdx
+ ;; size=17 bbWeight=1 PerfScore 2.50
G_M516_IG02:
- mov r15d, dword ptr [rbp-0x20]
- mov r14d, dword ptr [rbp-0x1C]
- mov rdi, gword ptr [rbp-0x28]
- test rdi, rdi
- je SHORT G_M516_IG04
- ;; size=17 bbWeight=1 PerfScore 4.25
+ mov rdi, gword ptr [rsp+0x08]
+ mov esi, dword ptr [rsp+0x10]
+ mov edx, dword ptr [rsp+0x14]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[double](System.Object,int,int,byref):ubyte
+ ;; size=23 bbWeight=1 PerfScore 3.25
G_M516_IG03:
- mov rax, qword ptr [rdi]
- mov rsi, rax
- test dword ptr [rsi], 0xD1FFAB1E
- jne G_M516_IG09
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rax+0x48]
- call [rax]System.Buffers.MemoryManager`1[double]:TryGetArray(byref):ubyte:this
- test eax, eax
- jne SHORT G_M516_IG07
- ;; size=32 bbWeight=0.50 PerfScore 6.50
-G_M516_IG04:
- test r14d, r14d
- je SHORT G_M516_IG06
- xor eax, eax
- mov qword ptr [rbx], rax
- mov qword ptr [rbx+0x08], rax
- ;; size=14 bbWeight=0.50 PerfScore 1.75
-G_M516_IG05:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M516_IG06:
- mov rdi, 0xD1FFAB1E ; box for System.ArraySegment`1[double]:<Empty>k__BackingField
- mov rsi, gword ptr [rdi]
- add rsi, 8
- mov rdi, rbx
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- jmp SHORT G_M516_IG10
- ;; size=29 bbWeight=0.50 PerfScore 3.38
-G_M516_IG07:
- mov rdi, gword ptr [rbp-0x38]
- add r15d, dword ptr [rbp-0x30]
- test rdi, rdi
- je SHORT G_M516_IG08
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M516_IG08
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M516_IG08
- mov rsi, rdi
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- jmp SHORT G_M516_IG10
- ;; size=50 bbWeight=0.50 PerfScore 7.25
-G_M516_IG08:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
-G_M516_IG09:
- and r15d, 0xD1FFAB1E
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M516_IG12
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M516_IG12
- mov gword ptr [rbp-0x40], rdi
- mov rsi, gword ptr [rbp-0x40]
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- ;; size=47 bbWeight=0.50 PerfScore 5.12
-G_M516_IG10:
- mov eax, 1
- ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M516_IG11:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M516_IG12:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
+ add rsp, 24
+ tail.jmp [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[double](System.Object,int,int,byref):ubyte
+ ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 286, prolog size 21, PerfScore 43.88, instruction count 89, allocated bytes for code 286 (MethodHash=5d74fdfb) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):ubyte (FullOpts)
+; Total bytes of code 47, prolog size 17, PerfScore 8.00, instruction count 10, allocated bytes for code 47 (MethodHash=5d74fdfb) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[double](System.ReadOnlyMemory`1[double],byref):ubyte (FullOpts)
; ============================================================ -239 (-83.57 % of base) - System.Runtime.InteropServices.MemoryMarshal:TryGetArray[int](System.ReadOnlyMemory`1[int],byref):ubyte ; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[int](System.ReadOnlyMemory`1[int],byref):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
-; rbp based frame
-; partially interruptible
+; rsp based frame
+; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 5 ) struct (16) [rbp-0x28] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[int]>
-; V01 arg1 [V01,T00] ( 10, 6 ) byref -> rbx single-def
-; V02 loc0 [V02,T06] ( 7, 4.50) ref -> rdi class-hnd single-def <System.Object>
-; V03 loc1 [V03,T07] ( 3, 2 ) int -> r15 ld-addr-op
-; V04 loc2 [V04,T05] ( 8, 4.50) int -> r14 ld-addr-op
-; V05 loc3 [V05 ] ( 3, 1.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[int]>
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;* V07 tmp1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[int]>
-; V08 tmp2 [V08,T02] ( 5, 5 ) ref -> rdi class-hnd single-def "impAppendStmt" <int[]>
-;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[int]>
-;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <int[]>
-;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[int]>
-; V12 tmp6 [V12,T08] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V13 tmp7 [V13,T03] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V15 tmp9 [V15,T04] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp11 [V17 ] ( 2, 1 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp12 [V18 ] ( 2, 1 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp13 [V19 ] ( 1, 0.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp14 [V20,T12] ( 2, 1 ) ref -> rsi single-def "field V09._array (fldOffset=0x0)" P-INDEP
-; V21 tmp15 [V21,T14] ( 2, 1 ) int -> r15 "field V09._offset (fldOffset=0x8)" P-INDEP
-; V22 tmp16 [V22,T15] ( 2, 1 ) int -> r14 "field V09._count (fldOffset=0xc)" P-INDEP
-; V23 tmp17 [V23,T13] ( 2, 1 ) ref -> [rbp-0x40] spill-single-def "field V11._array (fldOffset=0x0)" P-INDEP
-; V24 tmp18 [V24,T16] ( 2, 1 ) int -> r15 "field V11._offset (fldOffset=0x8)" P-INDEP
-; V25 tmp19 [V25,T17] ( 2, 1 ) int -> r14 "field V11._count (fldOffset=0xc)" P-INDEP
-; V26 cse0 [V26,T09] ( 3, 1.50) int -> rsi "CSE #01: moderate"
-; V27 cse1 [V27,T10] ( 3, 1.50) long -> rax "CSE #02: moderate"
-; V28 cse2 [V28,T11] ( 3, 1.50) int -> rsi "CSE #03: moderate"
+; V00 arg0 [V00,T00] ( 5, 5 ) struct (16) [rsp+0x08] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[int]>
+; V01 arg1 [V01,T01] ( 3, 3 ) byref -> rcx single-def
+;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M28356_IG01:
- push rbp
- push r15
- push r14
- push rbx
- sub rsp, 40
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
- mov gword ptr [rbp-0x28], rdi
- mov qword ptr [rbp-0x20], rsi
- mov rbx, rdx
- ;; size=32 bbWeight=1 PerfScore 8.25
+ sub rsp, 24
+ mov gword ptr [rsp+0x08], rdi
+ mov qword ptr [rsp+0x10], rsi
+ mov rcx, rdx
+ ;; size=17 bbWeight=1 PerfScore 2.50
G_M28356_IG02:
- mov r15d, dword ptr [rbp-0x20]
- mov r14d, dword ptr [rbp-0x1C]
- mov rdi, gword ptr [rbp-0x28]
- test rdi, rdi
- je SHORT G_M28356_IG04
- ;; size=17 bbWeight=1 PerfScore 4.25
+ mov rdi, gword ptr [rsp+0x08]
+ mov esi, dword ptr [rsp+0x10]
+ mov edx, dword ptr [rsp+0x14]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[int](System.Object,int,int,byref):ubyte
+ ;; size=23 bbWeight=1 PerfScore 3.25
G_M28356_IG03:
- mov rax, qword ptr [rdi]
- mov rsi, rax
- test dword ptr [rsi], 0xD1FFAB1E
- jne G_M28356_IG09
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rax+0x48]
- call [rax]System.Buffers.MemoryManager`1[int]:TryGetArray(byref):ubyte:this
- test eax, eax
- jne SHORT G_M28356_IG07
- ;; size=32 bbWeight=0.50 PerfScore 6.50
-G_M28356_IG04:
- test r14d, r14d
- je SHORT G_M28356_IG06
- xor eax, eax
- mov qword ptr [rbx], rax
- mov qword ptr [rbx+0x08], rax
- ;; size=14 bbWeight=0.50 PerfScore 1.75
-G_M28356_IG05:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M28356_IG06:
- mov rdi, 0xD1FFAB1E ; box for System.ArraySegment`1[int]:<Empty>k__BackingField
- mov rsi, gword ptr [rdi]
- add rsi, 8
- mov rdi, rbx
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- jmp SHORT G_M28356_IG10
- ;; size=29 bbWeight=0.50 PerfScore 3.38
-G_M28356_IG07:
- mov rdi, gword ptr [rbp-0x38]
- add r15d, dword ptr [rbp-0x30]
- test rdi, rdi
- je SHORT G_M28356_IG08
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M28356_IG08
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M28356_IG08
- mov rsi, rdi
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- jmp SHORT G_M28356_IG10
- ;; size=50 bbWeight=0.50 PerfScore 7.25
-G_M28356_IG08:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
-G_M28356_IG09:
- and r15d, 0xD1FFAB1E
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M28356_IG12
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M28356_IG12
- mov gword ptr [rbp-0x40], rdi
- mov rsi, gword ptr [rbp-0x40]
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- ;; size=47 bbWeight=0.50 PerfScore 5.12
-G_M28356_IG10:
- mov eax, 1
- ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M28356_IG11:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M28356_IG12:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
+ add rsp, 24
+ tail.jmp [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[int](System.Object,int,int,byref):ubyte
+ ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 286, prolog size 21, PerfScore 43.88, instruction count 89, allocated bytes for code 286 (MethodHash=d8b2913b) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[int](System.ReadOnlyMemory`1[int],byref):ubyte (FullOpts)
+; Total bytes of code 47, prolog size 17, PerfScore 8.00, instruction count 10, allocated bytes for code 47 (MethodHash=d8b2913b) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[int](System.ReadOnlyMemory`1[int],byref):ubyte (FullOpts)
; ============================================================ -239 (-83.57 % of base) - System.Runtime.InteropServices.MemoryMarshal:TryGetArray[long](System.ReadOnlyMemory`1[long],byref):ubyte ; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[long](System.ReadOnlyMemory`1[long],byref):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
-; rbp based frame
-; partially interruptible
+; rsp based frame
+; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 5 ) struct (16) [rbp-0x28] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[long]>
-; V01 arg1 [V01,T00] ( 10, 6 ) byref -> rbx single-def
-; V02 loc0 [V02,T06] ( 7, 4.50) ref -> rdi class-hnd single-def <System.Object>
-; V03 loc1 [V03,T07] ( 3, 2 ) int -> r15 ld-addr-op
-; V04 loc2 [V04,T05] ( 8, 4.50) int -> r14 ld-addr-op
-; V05 loc3 [V05 ] ( 3, 1.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[long]>
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;* V07 tmp1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[long]>
-; V08 tmp2 [V08,T02] ( 5, 5 ) ref -> rdi class-hnd single-def "impAppendStmt" <long[]>
-;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[long]>
-;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <long[]>
-;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[long]>
-; V12 tmp6 [V12,T08] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V13 tmp7 [V13,T03] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V15 tmp9 [V15,T04] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp11 [V17 ] ( 2, 1 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp12 [V18 ] ( 2, 1 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp13 [V19 ] ( 1, 0.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp14 [V20,T12] ( 2, 1 ) ref -> rsi single-def "field V09._array (fldOffset=0x0)" P-INDEP
-; V21 tmp15 [V21,T14] ( 2, 1 ) int -> r15 "field V09._offset (fldOffset=0x8)" P-INDEP
-; V22 tmp16 [V22,T15] ( 2, 1 ) int -> r14 "field V09._count (fldOffset=0xc)" P-INDEP
-; V23 tmp17 [V23,T13] ( 2, 1 ) ref -> [rbp-0x40] spill-single-def "field V11._array (fldOffset=0x0)" P-INDEP
-; V24 tmp18 [V24,T16] ( 2, 1 ) int -> r15 "field V11._offset (fldOffset=0x8)" P-INDEP
-; V25 tmp19 [V25,T17] ( 2, 1 ) int -> r14 "field V11._count (fldOffset=0xc)" P-INDEP
-; V26 cse0 [V26,T09] ( 3, 1.50) int -> rsi "CSE #01: moderate"
-; V27 cse1 [V27,T10] ( 3, 1.50) long -> rax "CSE #02: moderate"
-; V28 cse2 [V28,T11] ( 3, 1.50) int -> rsi "CSE #03: moderate"
+; V00 arg0 [V00,T00] ( 5, 5 ) struct (16) [rsp+0x08] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[long]>
+; V01 arg1 [V01,T01] ( 3, 3 ) byref -> rcx single-def
+;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M50116_IG01:
- push rbp
- push r15
- push r14
- push rbx
- sub rsp, 40
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
- mov gword ptr [rbp-0x28], rdi
- mov qword ptr [rbp-0x20], rsi
- mov rbx, rdx
- ;; size=32 bbWeight=1 PerfScore 8.25
+ sub rsp, 24
+ mov gword ptr [rsp+0x08], rdi
+ mov qword ptr [rsp+0x10], rsi
+ mov rcx, rdx
+ ;; size=17 bbWeight=1 PerfScore 2.50
G_M50116_IG02:
- mov r15d, dword ptr [rbp-0x20]
- mov r14d, dword ptr [rbp-0x1C]
- mov rdi, gword ptr [rbp-0x28]
- test rdi, rdi
- je SHORT G_M50116_IG04
- ;; size=17 bbWeight=1 PerfScore 4.25
+ mov rdi, gword ptr [rsp+0x08]
+ mov esi, dword ptr [rsp+0x10]
+ mov edx, dword ptr [rsp+0x14]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[long](System.Object,int,int,byref):ubyte
+ ;; size=23 bbWeight=1 PerfScore 3.25
G_M50116_IG03:
- mov rax, qword ptr [rdi]
- mov rsi, rax
- test dword ptr [rsi], 0xD1FFAB1E
- jne G_M50116_IG09
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rax+0x48]
- call [rax]System.Buffers.MemoryManager`1[long]:TryGetArray(byref):ubyte:this
- test eax, eax
- jne SHORT G_M50116_IG07
- ;; size=32 bbWeight=0.50 PerfScore 6.50
-G_M50116_IG04:
- test r14d, r14d
- je SHORT G_M50116_IG06
- xor eax, eax
- mov qword ptr [rbx], rax
- mov qword ptr [rbx+0x08], rax
- ;; size=14 bbWeight=0.50 PerfScore 1.75
-G_M50116_IG05:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M50116_IG06:
- mov rdi, 0xD1FFAB1E ; box for System.ArraySegment`1[long]:<Empty>k__BackingField
- mov rsi, gword ptr [rdi]
- add rsi, 8
- mov rdi, rbx
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- jmp SHORT G_M50116_IG10
- ;; size=29 bbWeight=0.50 PerfScore 3.38
-G_M50116_IG07:
- mov rdi, gword ptr [rbp-0x38]
- add r15d, dword ptr [rbp-0x30]
- test rdi, rdi
- je SHORT G_M50116_IG08
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M50116_IG08
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M50116_IG08
- mov rsi, rdi
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- jmp SHORT G_M50116_IG10
- ;; size=50 bbWeight=0.50 PerfScore 7.25
-G_M50116_IG08:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
-G_M50116_IG09:
- and r15d, 0xD1FFAB1E
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M50116_IG12
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M50116_IG12
- mov gword ptr [rbp-0x40], rdi
- mov rsi, gword ptr [rbp-0x40]
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- ;; size=47 bbWeight=0.50 PerfScore 5.12
-G_M50116_IG10:
- mov eax, 1
- ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M50116_IG11:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M50116_IG12:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
+ add rsp, 24
+ tail.jmp [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[long](System.Object,int,int,byref):ubyte
+ ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 286, prolog size 21, PerfScore 43.88, instruction count 89, allocated bytes for code 286 (MethodHash=0e8b3c3b) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[long](System.ReadOnlyMemory`1[long],byref):ubyte (FullOpts)
+; Total bytes of code 47, prolog size 17, PerfScore 8.00, instruction count 10, allocated bytes for code 47 (MethodHash=0e8b3c3b) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[long](System.ReadOnlyMemory`1[long],byref):ubyte (FullOpts)
; ============================================================ -239 (-83.57 % of base) - System.Runtime.InteropServices.MemoryMarshal:TryGetArray[short](System.ReadOnlyMemory`1[short],byref):ubyte ; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[short](System.ReadOnlyMemory`1[short],byref):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
-; rbp based frame
-; partially interruptible
+; rsp based frame
+; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 5 ) struct (16) [rbp-0x28] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[short]>
-; V01 arg1 [V01,T00] ( 10, 6 ) byref -> rbx single-def
-; V02 loc0 [V02,T06] ( 7, 4.50) ref -> rdi class-hnd single-def <System.Object>
-; V03 loc1 [V03,T07] ( 3, 2 ) int -> r15 ld-addr-op
-; V04 loc2 [V04,T05] ( 8, 4.50) int -> r14 ld-addr-op
-; V05 loc3 [V05 ] ( 3, 1.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[short]>
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;* V07 tmp1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[short]>
-; V08 tmp2 [V08,T02] ( 5, 5 ) ref -> rdi class-hnd single-def "impAppendStmt" <short[]>
-;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[short]>
-;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <short[]>
-;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[short]>
-; V12 tmp6 [V12,T08] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V13 tmp7 [V13,T03] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V15 tmp9 [V15,T04] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp11 [V17 ] ( 2, 1 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp12 [V18 ] ( 2, 1 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp13 [V19 ] ( 1, 0.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp14 [V20,T12] ( 2, 1 ) ref -> rsi single-def "field V09._array (fldOffset=0x0)" P-INDEP
-; V21 tmp15 [V21,T14] ( 2, 1 ) int -> r15 "field V09._offset (fldOffset=0x8)" P-INDEP
-; V22 tmp16 [V22,T15] ( 2, 1 ) int -> r14 "field V09._count (fldOffset=0xc)" P-INDEP
-; V23 tmp17 [V23,T13] ( 2, 1 ) ref -> [rbp-0x40] spill-single-def "field V11._array (fldOffset=0x0)" P-INDEP
-; V24 tmp18 [V24,T16] ( 2, 1 ) int -> r15 "field V11._offset (fldOffset=0x8)" P-INDEP
-; V25 tmp19 [V25,T17] ( 2, 1 ) int -> r14 "field V11._count (fldOffset=0xc)" P-INDEP
-; V26 cse0 [V26,T09] ( 3, 1.50) int -> rsi "CSE #01: moderate"
-; V27 cse1 [V27,T10] ( 3, 1.50) long -> rax "CSE #02: moderate"
-; V28 cse2 [V28,T11] ( 3, 1.50) int -> rsi "CSE #03: moderate"
+; V00 arg0 [V00,T00] ( 5, 5 ) struct (16) [rsp+0x08] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[short]>
+; V01 arg1 [V01,T01] ( 3, 3 ) byref -> rcx single-def
+;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M1124_IG01:
- push rbp
- push r15
- push r14
- push rbx
- sub rsp, 40
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
- mov gword ptr [rbp-0x28], rdi
- mov qword ptr [rbp-0x20], rsi
- mov rbx, rdx
- ;; size=32 bbWeight=1 PerfScore 8.25
+ sub rsp, 24
+ mov gword ptr [rsp+0x08], rdi
+ mov qword ptr [rsp+0x10], rsi
+ mov rcx, rdx
+ ;; size=17 bbWeight=1 PerfScore 2.50
G_M1124_IG02:
- mov r15d, dword ptr [rbp-0x20]
- mov r14d, dword ptr [rbp-0x1C]
- mov rdi, gword ptr [rbp-0x28]
- test rdi, rdi
- je SHORT G_M1124_IG04
- ;; size=17 bbWeight=1 PerfScore 4.25
+ mov rdi, gword ptr [rsp+0x08]
+ mov esi, dword ptr [rsp+0x10]
+ mov edx, dword ptr [rsp+0x14]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[short](System.Object,int,int,byref):ubyte
+ ;; size=23 bbWeight=1 PerfScore 3.25
G_M1124_IG03:
- mov rax, qword ptr [rdi]
- mov rsi, rax
- test dword ptr [rsi], 0xD1FFAB1E
- jne G_M1124_IG09
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rax+0x48]
- call [rax]System.Buffers.MemoryManager`1[short]:TryGetArray(byref):ubyte:this
- test eax, eax
- jne SHORT G_M1124_IG07
- ;; size=32 bbWeight=0.50 PerfScore 6.50
-G_M1124_IG04:
- test r14d, r14d
- je SHORT G_M1124_IG06
- xor eax, eax
- mov qword ptr [rbx], rax
- mov qword ptr [rbx+0x08], rax
- ;; size=14 bbWeight=0.50 PerfScore 1.75
-G_M1124_IG05:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M1124_IG06:
- mov rdi, 0xD1FFAB1E ; box for System.ArraySegment`1[short]:<Empty>k__BackingField
- mov rsi, gword ptr [rdi]
- add rsi, 8
- mov rdi, rbx
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- jmp SHORT G_M1124_IG10
- ;; size=29 bbWeight=0.50 PerfScore 3.38
-G_M1124_IG07:
- mov rdi, gword ptr [rbp-0x38]
- add r15d, dword ptr [rbp-0x30]
- test rdi, rdi
- je SHORT G_M1124_IG08
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M1124_IG08
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M1124_IG08
- mov rsi, rdi
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- jmp SHORT G_M1124_IG10
- ;; size=50 bbWeight=0.50 PerfScore 7.25
-G_M1124_IG08:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
-G_M1124_IG09:
- and r15d, 0xD1FFAB1E
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M1124_IG12
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M1124_IG12
- mov gword ptr [rbp-0x40], rdi
- mov rsi, gword ptr [rbp-0x40]
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- ;; size=47 bbWeight=0.50 PerfScore 5.12
-G_M1124_IG10:
- mov eax, 1
- ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M1124_IG11:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M1124_IG12:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
+ add rsp, 24
+ tail.jmp [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[short](System.Object,int,int,byref):ubyte
+ ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 286, prolog size 21, PerfScore 43.88, instruction count 89, allocated bytes for code 286 (MethodHash=01f5fb9b) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[short](System.ReadOnlyMemory`1[short],byref):ubyte (FullOpts)
+; Total bytes of code 47, prolog size 17, PerfScore 8.00, instruction count 10, allocated bytes for code 47 (MethodHash=01f5fb9b) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[short](System.ReadOnlyMemory`1[short],byref):ubyte (FullOpts)
; ============================================================ -239 (-83.57 % of base) - System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.Nullable`1[int]](System.ReadOnlyMemory`1[System.Nullable`1[int]],byref):ubyte ; Assembly listing for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.Nullable`1[int]](System.ReadOnlyMemory`1[System.Nullable`1[int]],byref):ubyte (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
-; rbp based frame
-; partially interruptible
+; rsp based frame
+; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 6 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T01] ( 5, 5 ) struct (16) [rbp-0x28] do-not-enreg[SFA] multireg-arg ld-addr-op single-def <System.ReadOnlyMemory`1[System.Nullable`1[int]]>
-; V01 arg1 [V01,T00] ( 10, 6 ) byref -> rbx single-def
-; V02 loc0 [V02,T06] ( 7, 4.50) ref -> rdi class-hnd single-def <System.Object>
-; V03 loc1 [V03,T07] ( 3, 2 ) int -> r15 ld-addr-op
-; V04 loc2 [V04,T05] ( 8, 4.50) int -> r14 ld-addr-op
-; V05 loc3 [V05 ] ( 3, 1.50) struct (16) [rbp-0x38] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.ArraySegment`1[System.Nullable`1[int]]>
-;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-;* V07 tmp1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[System.Nullable`1[int]]>
-; V08 tmp2 [V08,T02] ( 5, 5 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Nullable`1[int][]>
-;* V09 tmp3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[System.Nullable`1[int]]>
-;* V10 tmp4 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <System.Nullable`1[int][]>
-;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ArraySegment`1[System.Nullable`1[int]]>
-; V12 tmp6 [V12,T08] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V13 tmp7 [V13,T03] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V14 tmp8 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V15 tmp9 [V15,T04] ( 5, 5 ) int -> r15 "Inlining Arg"
-;* V16 tmp10 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V17 tmp11 [V17 ] ( 2, 1 ) ref -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V05._array (fldOffset=0x0)" P-DEP
-; V18 tmp12 [V18 ] ( 2, 1 ) int -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V05._offset (fldOffset=0x8)" P-DEP
-; V19 tmp13 [V19 ] ( 1, 0.50) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V05._count (fldOffset=0xc)" P-DEP
-; V20 tmp14 [V20,T12] ( 2, 1 ) ref -> rsi single-def "field V09._array (fldOffset=0x0)" P-INDEP
-; V21 tmp15 [V21,T14] ( 2, 1 ) int -> r15 "field V09._offset (fldOffset=0x8)" P-INDEP
-; V22 tmp16 [V22,T15] ( 2, 1 ) int -> r14 "field V09._count (fldOffset=0xc)" P-INDEP
-; V23 tmp17 [V23,T13] ( 2, 1 ) ref -> [rbp-0x40] spill-single-def "field V11._array (fldOffset=0x0)" P-INDEP
-; V24 tmp18 [V24,T16] ( 2, 1 ) int -> r15 "field V11._offset (fldOffset=0x8)" P-INDEP
-; V25 tmp19 [V25,T17] ( 2, 1 ) int -> r14 "field V11._count (fldOffset=0xc)" P-INDEP
-; V26 cse0 [V26,T09] ( 3, 1.50) int -> rsi "CSE #01: moderate"
-; V27 cse1 [V27,T10] ( 3, 1.50) long -> rax "CSE #02: moderate"
-; V28 cse2 [V28,T11] ( 3, 1.50) int -> rsi "CSE #03: moderate"
+; V00 arg0 [V00,T00] ( 5, 5 ) struct (16) [rsp+0x08] do-not-enreg[SFA] multireg-arg single-def <System.ReadOnlyMemory`1[System.Nullable`1[int]]>
+; V01 arg1 [V01,T01] ( 3, 3 ) byref -> rcx single-def
+;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
;
-; Lcl frame size = 40
+; Lcl frame size = 24
G_M26372_IG01:
- push rbp
- push r15
- push r14
- push rbx
- sub rsp, 40
- lea rbp, [rsp+0x40]
- xor eax, eax
- mov qword ptr [rbp-0x38], rax
- mov gword ptr [rbp-0x28], rdi
- mov qword ptr [rbp-0x20], rsi
- mov rbx, rdx
- ;; size=32 bbWeight=1 PerfScore 8.25
+ sub rsp, 24
+ mov gword ptr [rsp+0x08], rdi
+ mov qword ptr [rsp+0x10], rsi
+ mov rcx, rdx
+ ;; size=17 bbWeight=1 PerfScore 2.50
G_M26372_IG02:
- mov r15d, dword ptr [rbp-0x20]
- mov r14d, dword ptr [rbp-0x1C]
- mov rdi, gword ptr [rbp-0x28]
- test rdi, rdi
- je SHORT G_M26372_IG04
- ;; size=17 bbWeight=1 PerfScore 4.25
+ mov rdi, gword ptr [rsp+0x08]
+ mov esi, dword ptr [rsp+0x10]
+ mov edx, dword ptr [rsp+0x14]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[System.Nullable`1[int]](System.Object,int,int,byref):ubyte
+ ;; size=23 bbWeight=1 PerfScore 3.25
G_M26372_IG03:
- mov rax, qword ptr [rdi]
- mov rsi, rax
- test dword ptr [rsi], 0xD1FFAB1E
- jne G_M26372_IG09
- lea rsi, [rbp-0x38]
- mov rax, qword ptr [rax+0x48]
- call [rax]System.Buffers.MemoryManager`1[System.Nullable`1[int]]:TryGetArray(byref):ubyte:this
- test eax, eax
- jne SHORT G_M26372_IG07
- ;; size=32 bbWeight=0.50 PerfScore 6.50
-G_M26372_IG04:
- test r14d, r14d
- je SHORT G_M26372_IG06
- xor eax, eax
- mov qword ptr [rbx], rax
- mov qword ptr [rbx+0x08], rax
- ;; size=14 bbWeight=0.50 PerfScore 1.75
-G_M26372_IG05:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M26372_IG06:
- mov rdi, 0xD1FFAB1E ; box for System.ArraySegment`1[System.Nullable`1[int]]:<Empty>k__BackingField
- mov rsi, gword ptr [rdi]
- add rsi, 8
- mov rdi, rbx
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- jmp SHORT G_M26372_IG10
- ;; size=29 bbWeight=0.50 PerfScore 3.38
-G_M26372_IG07:
- mov rdi, gword ptr [rbp-0x38]
- add r15d, dword ptr [rbp-0x30]
- test rdi, rdi
- je SHORT G_M26372_IG08
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M26372_IG08
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M26372_IG08
- mov rsi, rdi
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- jmp SHORT G_M26372_IG10
- ;; size=50 bbWeight=0.50 PerfScore 7.25
-G_M26372_IG08:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
-G_M26372_IG09:
- and r15d, 0xD1FFAB1E
- mov esi, dword ptr [rdi+0x08]
- cmp esi, r15d
- jb SHORT G_M26372_IG12
- sub esi, r15d
- cmp esi, r14d
- jb SHORT G_M26372_IG12
- mov gword ptr [rbp-0x40], rdi
- mov rsi, gword ptr [rbp-0x40]
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x08], r15d
- mov dword ptr [rbx+0x0C], r14d
- ;; size=47 bbWeight=0.50 PerfScore 5.12
-G_M26372_IG10:
- mov eax, 1
- ;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M26372_IG11:
- add rsp, 40
- pop rbx
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M26372_IG12:
- mov esi, r15d
- mov edx, r14d
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- call [rax]System.ThrowHelper:ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
- int3
- ;; size=19 bbWeight=0.50 PerfScore 2.00
+ add rsp, 24
+ tail.jmp [rax]System.Runtime.InteropServices.MemoryMarshal:TryGetArrayCore[System.Nullable`1[int]](System.Object,int,int,byref):ubyte
+ ;; size=7 bbWeight=1 PerfScore 2.25
-; Total bytes of code 286, prolog size 21, PerfScore 43.88, instruction count 89, allocated bytes for code 286 (MethodHash=2aed98fb) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.Nullable`1[int]](System.ReadOnlyMemory`1[System.Nullable`1[int]],byref):ubyte (FullOpts)
+; Total bytes of code 47, prolog size 17, PerfScore 8.00, instruction count 10, allocated bytes for code 47 (MethodHash=2aed98fb) for method System.Runtime.InteropServices.MemoryMarshal:TryGetArray[System.Nullable`1[int]](System.ReadOnlyMemory`1[System.Nullable`1[int]],byref):ubyte (FullOpts)
; ============================================================ Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/5addeb2b819c8311c6d14497525e5893 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 15 minutes 20 seconds (remote runner delay: 1 minute 21 seconds).
Using arguments:
-NoPRLink
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: