-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T21] ( 4, 2 ) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T28] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T29] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T23] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V34 tmp24 [V34,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V35 tmp25 [V35,T24] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V36 tmp26 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V37 tmp27 [V37,T27] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V38 tmp28 [V38,T20] ( 4, 2 ) ref -> rax
; V39 tmp29 [V39,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11 ) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T02] ( 10, 13.50) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T31] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T34] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T32] ( 3, 1.50) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T35] ( 3, 1.50) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T30] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V40._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V40._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T01] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M55583_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M55583_IG02:
test ebx, ebx
jne G_M55583_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M55583_IG03:
test r14, r14
je G_M55583_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M55583_IG04
cmp edi, 8
jle SHORT G_M55583_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M55583_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M55583_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M55583_IG30
mov rdi, rax
test rdi, rdi
je SHORT G_M55583_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M55583_IG05:
push 0
push 0
dec rdi
jne SHORT G_M55583_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M55583_IG06:
test esi, esi
jl G_M55583_IG28
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M55583_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M55583_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M55583_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M55583_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M55583_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M55583_IG27
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M55583_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M55583_IG11:
test rdi, rdi
jl G_M55583_IG27
mov rsi, rdi
mov qword ptr [rbp-0xA0], rsi
jmp SHORT G_M55583_IG13
align [0 bytes for IG20]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M55583_IG12:
xor esi, esi
mov qword ptr [rbp-0xA0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M55583_IG13:
test r14, r14
je G_M55583_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M55583_IG14:
mov rdi, r14
mov r8, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r8]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M55583_IG26
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M55583_IG15
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=80 bbWeight=0.50 PerfScore 8.25
G_M55583_IG15:
mov rdi, 0xD1FFAB1E ; 'System.Double'
cmp rax, rdi
jne G_M55583_IG26
test r13d, r13d
jne SHORT G_M55583_IG18
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xA0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M55583_IG16
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M55583_IG17
;; size=62 bbWeight=0.50 PerfScore 6.62
G_M55583_IG16:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M55583_IG17:
jmp SHORT G_M55583_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M55583_IG18:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M55583_IG19:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M55583_IG21
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M55583_IG20:
cmp edx, r13d
jae G_M55583_IG29
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M55583_IG20
;; size=35 bbWeight=4 PerfScore 38.00
G_M55583_IG21:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M55583_IG30
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M55583_IG27
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M55583_IG23
- ;; size=129 bbWeight=0.50 PerfScore 24.38
+ ;; size=128 bbWeight=0.50 PerfScore 24.25
G_M55583_IG22:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M55583_IG27
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M55583_IG27
xor ecx, ecx
mov rax, bword ptr [rbp-0xB8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M55583_IG23:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M55583_IG24
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M55583_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M55583_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M55583_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M55583_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M55583_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M55583_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M55583_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 876, prolog size 107, PerfScore 171.63, instruction count 225, allocated bytes for code 876 (MethodHash=a96926e0) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 875, prolog size 107, PerfScore 171.50, instruction count 224, allocated bytes for code 875 (MethodHash=a96926e0) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T21] ( 4, 2 ) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T28] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T29] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T23] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V34 tmp24 [V34,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V35 tmp25 [V35,T24] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V36 tmp26 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V37 tmp27 [V37,T27] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V38 tmp28 [V38,T20] ( 4, 2 ) ref -> rax
; V39 tmp29 [V39,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11 ) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T02] ( 10, 13.50) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T31] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T34] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T32] ( 3, 1.50) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T35] ( 3, 1.50) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T30] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V40._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V40._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T01] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M51193_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M51193_IG02:
test ebx, ebx
jne G_M51193_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M51193_IG03:
test r14, r14
je G_M51193_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M51193_IG04
cmp edi, 8
jle SHORT G_M51193_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M51193_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M51193_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M51193_IG30
mov rdi, rax
test rdi, rdi
je SHORT G_M51193_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M51193_IG05:
push 0
push 0
dec rdi
jne SHORT G_M51193_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M51193_IG06:
test esi, esi
jl G_M51193_IG28
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M51193_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M51193_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M51193_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M51193_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M51193_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M51193_IG27
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M51193_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M51193_IG11:
test rdi, rdi
jl G_M51193_IG27
mov rsi, rdi
mov qword ptr [rbp-0xA0], rsi
jmp SHORT G_M51193_IG13
align [0 bytes for IG20]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M51193_IG12:
xor esi, esi
mov qword ptr [rbp-0xA0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M51193_IG13:
test r14, r14
je G_M51193_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M51193_IG14:
mov rdi, r14
mov r8, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r8]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M51193_IG26
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M51193_IG15
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=80 bbWeight=0.50 PerfScore 8.25
G_M51193_IG15:
mov rdi, 0xD1FFAB1E ; 'System.Int32'
cmp rax, rdi
jne G_M51193_IG26
test r13d, r13d
jne SHORT G_M51193_IG18
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xA0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M51193_IG16
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M51193_IG17
;; size=62 bbWeight=0.50 PerfScore 6.62
G_M51193_IG16:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M51193_IG17:
jmp SHORT G_M51193_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M51193_IG18:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M51193_IG19:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M51193_IG21
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M51193_IG20:
cmp edx, r13d
jae G_M51193_IG29
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M51193_IG20
;; size=35 bbWeight=4 PerfScore 38.00
G_M51193_IG21:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M51193_IG30
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M51193_IG27
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 2
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M51193_IG23
- ;; size=129 bbWeight=0.50 PerfScore 24.38
+ ;; size=128 bbWeight=0.50 PerfScore 24.25
G_M51193_IG22:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M51193_IG27
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M51193_IG27
xor ecx, ecx
mov rax, bword ptr [rbp-0xB8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M51193_IG23:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M51193_IG24
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M51193_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M51193_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M51193_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M51193_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M51193_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M51193_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M51193_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 876, prolog size 107, PerfScore 171.63, instruction count 225, allocated bytes for code 876 (MethodHash=f2973806) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 875, prolog size 107, PerfScore 171.50, instruction count 224, allocated bytes for code 875 (MethodHash=f2973806) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T21] ( 4, 2 ) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T28] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T29] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T23] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V34 tmp24 [V34,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V35 tmp25 [V35,T24] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V36 tmp26 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V37 tmp27 [V37,T27] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V38 tmp28 [V38,T20] ( 4, 2 ) ref -> rax
; V39 tmp29 [V39,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11 ) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T02] ( 10, 13.50) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T31] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T34] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T32] ( 3, 1.50) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T35] ( 3, 1.50) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T30] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V40._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V40._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T01] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M60672_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M60672_IG02:
test ebx, ebx
jne G_M60672_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M60672_IG03:
test r14, r14
je G_M60672_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M60672_IG04
cmp edi, 8
jle SHORT G_M60672_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M60672_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M60672_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M60672_IG30
mov rdi, rax
test rdi, rdi
je SHORT G_M60672_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M60672_IG05:
push 0
push 0
dec rdi
jne SHORT G_M60672_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M60672_IG06:
test esi, esi
jl G_M60672_IG28
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M60672_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M60672_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M60672_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M60672_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M60672_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M60672_IG27
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M60672_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M60672_IG11:
test rdi, rdi
jl G_M60672_IG27
mov rsi, rdi
mov qword ptr [rbp-0xA0], rsi
jmp SHORT G_M60672_IG13
align [0 bytes for IG20]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M60672_IG12:
xor esi, esi
mov qword ptr [rbp-0xA0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M60672_IG13:
test r14, r14
je G_M60672_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M60672_IG14:
mov rdi, r14
mov r8, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r8]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M60672_IG26
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M60672_IG15
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=80 bbWeight=0.50 PerfScore 8.25
G_M60672_IG15:
mov rdi, 0xD1FFAB1E ; 'System.Int64'
cmp rax, rdi
jne G_M60672_IG26
test r13d, r13d
jne SHORT G_M60672_IG18
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xA0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M60672_IG16
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M60672_IG17
;; size=62 bbWeight=0.50 PerfScore 6.62
G_M60672_IG16:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M60672_IG17:
jmp SHORT G_M60672_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M60672_IG18:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M60672_IG19:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M60672_IG21
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M60672_IG20:
cmp edx, r13d
jae G_M60672_IG29
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M60672_IG20
;; size=35 bbWeight=4 PerfScore 38.00
G_M60672_IG21:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M60672_IG30
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M60672_IG27
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M60672_IG23
- ;; size=129 bbWeight=0.50 PerfScore 24.38
+ ;; size=128 bbWeight=0.50 PerfScore 24.25
G_M60672_IG22:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M60672_IG27
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M60672_IG27
xor ecx, ecx
mov rax, bword ptr [rbp-0xB8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M60672_IG23:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M60672_IG24
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M60672_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M60672_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M60672_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M60672_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M60672_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M60672_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M60672_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 876, prolog size 107, PerfScore 171.63, instruction count 225, allocated bytes for code 876 (MethodHash=5b2012ff) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 875, prolog size 107, PerfScore 171.50, instruction count 224, allocated bytes for code 875 (MethodHash=5b2012ff) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T21] ( 4, 2 ) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T28] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T29] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T23] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V34 tmp24 [V34,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V35 tmp25 [V35,T24] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V36 tmp26 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V37 tmp27 [V37,T27] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V38 tmp28 [V38,T20] ( 4, 2 ) ref -> rax
; V39 tmp29 [V39,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11 ) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T02] ( 10, 13.50) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T31] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T34] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T32] ( 3, 1.50) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T35] ( 3, 1.50) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T30] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V40._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V40._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T01] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M23576_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M23576_IG02:
test ebx, ebx
jne G_M23576_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M23576_IG03:
test r14, r14
je G_M23576_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M23576_IG04
cmp edi, 8
jle SHORT G_M23576_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M23576_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M23576_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M23576_IG30
mov rdi, rax
test rdi, rdi
je SHORT G_M23576_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M23576_IG05:
push 0
push 0
dec rdi
jne SHORT G_M23576_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M23576_IG06:
test esi, esi
jl G_M23576_IG28
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M23576_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M23576_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M23576_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M23576_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M23576_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M23576_IG27
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M23576_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M23576_IG11:
test rdi, rdi
jl G_M23576_IG27
mov rsi, rdi
mov qword ptr [rbp-0xA0], rsi
jmp SHORT G_M23576_IG13
align [0 bytes for IG20]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M23576_IG12:
xor esi, esi
mov qword ptr [rbp-0xA0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M23576_IG13:
test r14, r14
je G_M23576_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M23576_IG14:
mov rdi, r14
mov r8, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r8]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M23576_IG26
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M23576_IG15
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=80 bbWeight=0.50 PerfScore 8.25
G_M23576_IG15:
mov rdi, 0xD1FFAB1E ; 'System.Int16'
cmp rax, rdi
jne G_M23576_IG26
test r13d, r13d
jne SHORT G_M23576_IG18
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xA0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M23576_IG16
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M23576_IG17
;; size=62 bbWeight=0.50 PerfScore 6.62
G_M23576_IG16:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M23576_IG17:
jmp SHORT G_M23576_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M23576_IG18:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M23576_IG19:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M23576_IG21
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M23576_IG20:
cmp edx, r13d
jae G_M23576_IG29
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M23576_IG20
;; size=35 bbWeight=4 PerfScore 38.00
G_M23576_IG21:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M23576_IG30
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M23576_IG27
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
add rcx, rcx
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M23576_IG23
- ;; size=128 bbWeight=0.50 PerfScore 24.25
+ ;; size=127 bbWeight=0.50 PerfScore 24.12
G_M23576_IG22:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M23576_IG27
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M23576_IG27
xor ecx, ecx
mov rax, bword ptr [rbp-0xB8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M23576_IG23:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M23576_IG24
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M23576_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M23576_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M23576_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M23576_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M23576_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M23576_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M23576_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 875, prolog size 107, PerfScore 171.50, instruction count 225, allocated bytes for code 875 (MethodHash=07dda3e7) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 874, prolog size 107, PerfScore 171.38, instruction count 224, allocated bytes for code 874 (MethodHash=07dda3e7) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xC8] this single-def
; V01 TypeCtx [V01,T12] ( 4, 3.50) long -> [rbp-0x38] single-def
; V02 arg1 [V02,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V03 arg2 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V04 arg3 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V05 arg4 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V06 loc0 [V06 ] ( 0, 0 ) long -> zero-ref single-def
; V07 loc1 [V07,T22] ( 4, 2 ) long -> [rbp-0x40] spill-single-def
;* V08 loc2 [V08 ] ( 0, 0 ) long -> zero-ref single-def
;* V09 loc3 [V09 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V10 loc4 [V10 ] ( 0, 0 ) int -> zero-ref single-def
;# V11 OutArgs [V11 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V12 tmp1 [V12 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V13 tmp2 [V13 ] ( 2, 2 ) struct (104) [rbp-0xA8] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V14 tmp3 [V14,T17] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V15 tmp4 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V16 tmp5 [V16,T42] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V17 tmp6 [V17 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V18 tmp7 [V18,T19] ( 3, 3 ) int -> rdi "impAppendStmt"
; V19 tmp8 [V19,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V20 tmp9 [V20,T23] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V21 tmp10 [V21 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V22 tmp11 [V22,T20] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V23 tmp12 [V23,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V24 tmp13 [V24,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V25 tmp14 [V25,T43] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V26 tmp15 [V26 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V27 tmp16 [V27,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V28 tmp17 [V28,T47] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V29 tmp18 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V30 tmp19 [V30,T24] ( 4, 2 ) long -> [rbp-0xB0] "Inline return value spill temp"
;* V31 tmp20 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V32 tmp21 [V32,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V33 tmp22 [V33,T53] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V34 tmp23 [V34,T18] ( 3, 3 ) ref -> [rbp-0xD0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V35 tmp24 [V35,T32] ( 3, 1.50) ref -> [rbp-0xD8] class-hnd "Inline return value spill temp" <System.RuntimeType>
; V36 tmp25 [V36,T25] ( 4, 2 ) long -> [rbp-0xB8] spill-single-def "Inline stloc first use temp"
;* V37 tmp26 [V37 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V38 tmp27 [V38,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V39 tmp28 [V39,T21] ( 4, 2 ) ref -> rax
; V40 tmp29 [V40,T13] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V41 tmp30 [V41 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V42 tmp31 [V42,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V43 tmp32 [V43,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V44 tmp33 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V45 tmp34 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V46 tmp35 [V46,T15] ( 2, 1.50) byref -> [rbp-0xE0] single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V47 tmp36 [V47,T14] ( 3, 2 ) int -> [rbp-0xBC] single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V48 tmp37 [V48,T05] ( 6, 10 ) byref -> r15 single-def "field V04._reference (fldOffset=0x0)" P-INDEP
; V49 tmp38 [V49,T02] ( 9, 12.50) int -> rbx single-def "field V04._length (fldOffset=0x8)" P-INDEP
; V50 tmp39 [V50,T10] ( 5, 6 ) byref -> r12 "field V05._reference (fldOffset=0x0)" P-INDEP
; V51 tmp40 [V51,T09] ( 6, 6.50) int -> r13 "field V05._length (fldOffset=0x8)" P-INDEP
; V52 tmp41 [V52,T33] ( 3, 1.50) byref -> rdi "field V09._reference (fldOffset=0x0)" P-INDEP
; V53 tmp42 [V53,T36] ( 3, 1.50) int -> rsi "field V09._length (fldOffset=0x8)" P-INDEP
; V54 tmp43 [V54,T34] ( 3, 1.50) byref -> rdi "field V12._reference (fldOffset=0x0)" P-INDEP
; V55 tmp44 [V55,T37] ( 3, 1.50) int -> rsi "field V12._length (fldOffset=0x8)" P-INDEP
; V56 tmp45 [V56,T40] ( 2, 1 ) byref -> rdi single-def "field V15._reference (fldOffset=0x0)" P-INDEP
; V57 tmp46 [V57,T44] ( 2, 1 ) int -> rsi single-def "field V15._length (fldOffset=0x8)" P-INDEP
; V58 tmp47 [V58,T41] ( 2, 1 ) byref -> rdi "field V29._reference (fldOffset=0x0)" P-INDEP
; V59 tmp48 [V59,T45] ( 2, 1 ) int -> rsi "field V29._length (fldOffset=0x8)" P-INDEP
;* V60 tmp49 [V60,T48] ( 0, 0 ) byref -> zero-ref single-def "field V31._reference (fldOffset=0x0)" P-INDEP
; V61 tmp50 [V61,T31] ( 2, 2 ) int -> rdi single-def "field V31._length (fldOffset=0x8)" P-INDEP
; V62 tmp51 [V62,T35] ( 3, 1.50) byref -> rdi "field V41._reference (fldOffset=0x0)" P-INDEP
; V63 tmp52 [V63,T38] ( 3, 1.50) int -> rsi "field V41._length (fldOffset=0x8)" P-INDEP
;* V64 tmp53 [V64,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp54 [V65,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
;* V66 tmp55 [V66,T50] ( 0, 0 ) byref -> zero-ref single-def "field V45._reference (fldOffset=0x0)" P-INDEP
;* V67 tmp56 [V67,T52] ( 0, 0 ) int -> zero-ref single-def "field V45._length (fldOffset=0x8)" P-INDEP
; V68 GsCookie [V68 ] ( 1, 1 ) long -> [rbp-0xE8] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V69 cse0 [V69,T26] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V70 cse1 [V70,T03] ( 3, 12 ) long -> r9 "CSE #07: aggressive"
-; V71 cse2 [V71,T39] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V71 cse2 [V71,T39] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V72 cse3 [V72,T16] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V73 cse4 [V73,T04] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V74 rat0 [V74,T01] ( 5, 16.25) long -> rsi "Widened IV V33"
;
; Lcl frame size = 200
G_M62476_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 200
lea rbp, [rsp+0xF0]
xor eax, eax
mov qword ptr [rbp-0xA8], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0xA0], zmm8
vmovdqa xmmword ptr [rbp-0x60], xmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
mov qword ptr [rbp-0x30], rsi
mov qword ptr [rbp-0xE8], 0xD1FFAB1E
mov bword ptr [rbp-0xC8], rdi
mov qword ptr [rbp-0x38], rsi
mov bword ptr [rbp-0xE0], rcx
mov dword ptr [rbp-0xBC], r8d
mov r14, rdx
mov r15, bword ptr [rbp+0x10]
mov ebx, dword ptr [rbp+0x18]
mov r12, bword ptr [rbp+0x20]
mov r13d, dword ptr [rbp+0x28]
;; size=117 bbWeight=1 PerfScore 24.58
G_M62476_IG02:
test ebx, ebx
jne G_M62476_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M62476_IG03:
test r14, r14
je G_M62476_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M62476_IG04
cmp edi, 8
jle SHORT G_M62476_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M62476_IG07
align [4 bytes for IG10]
;; size=63 bbWeight=0.50 PerfScore 7.38
G_M62476_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r9d, 8
mov rax, rdi
mul rdx:rax, r9
jb G_M62476_IG32
mov rdi, rax
test rdi, rdi
je SHORT G_M62476_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M62476_IG05:
push 0
push 0
dec rdi
jne SHORT G_M62476_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M62476_IG06:
test esi, esi
jl G_M62476_IG30
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M62476_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M62476_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M62476_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M62476_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M62476_IG10:
mov r9, qword ptr [r15+8*rsi]
test r9, r9
jl G_M62476_IG29
imul rdi, r9
inc esi
cmp esi, ebx
jl SHORT G_M62476_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M62476_IG11:
test rdi, rdi
jl G_M62476_IG29
mov rsi, rdi
mov qword ptr [rbp-0xB0], rsi
jmp SHORT G_M62476_IG13
align [0 bytes for IG22]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M62476_IG12:
xor esi, esi
mov qword ptr [rbp-0xB0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M62476_IG13:
test r14, r14
je G_M62476_IG24
;; size=9 bbWeight=1 PerfScore 1.25
G_M62476_IG14:
mov rdi, r14
mov r9, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r9]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xD0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xB8], rax
test rax, rax
je SHORT G_M62476_IG16
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M62476_IG15
mov rdi, qword ptr [rbp-0xB8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=76 bbWeight=0.50 PerfScore 8.25
G_M62476_IG15:
mov gword ptr [rbp-0xD8], rax
jmp SHORT G_M62476_IG17
;; size=9 bbWeight=0.50 PerfScore 1.50
G_M62476_IG16:
xor rax, rax
mov gword ptr [rbp-0xD8], rax
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M62476_IG17:
mov rdi, qword ptr [rbp-0x38]
mov rdi, qword ptr [rdi+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE
cmp rax, gword ptr [rbp-0xD8]
jne G_M62476_IG28
test r13d, r13d
jne SHORT G_M62476_IG20
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xB0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M62476_IG18
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M62476_IG19
;; size=75 bbWeight=0.50 PerfScore 11.38
G_M62476_IG18:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M62476_IG19:
jmp SHORT G_M62476_IG21
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M62476_IG20:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M62476_IG21:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xE0]
mov edx, dword ptr [rbp-0xBC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x40], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M62476_IG23
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M62476_IG22:
cmp edx, r13d
jae G_M62476_IG31
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M62476_IG22
;; size=35 bbWeight=4 PerfScore 38.00
G_M62476_IG23:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M62476_IG32
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M62476_IG29
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0xA8]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xC8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0xA8]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x40]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M62476_IG25
- ;; size=129 bbWeight=0.50 PerfScore 24.38
+ ;; size=128 bbWeight=0.50 PerfScore 24.25
G_M62476_IG24:
cmp dword ptr [rbp-0xBC], 0
jne SHORT G_M62476_IG29
cmp qword ptr [rbp-0xB0], 0
jne SHORT G_M62476_IG29
xor ecx, ecx
mov rax, bword ptr [rbp-0xC8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M62476_IG25:
cmp qword ptr [rbp-0xE8], 0xD1FFAB1E
je SHORT G_M62476_IG26
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M62476_IG26:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M62476_IG27:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M62476_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M62476_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M62476_IG30:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M62476_IG31:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M62476_IG32:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 903, prolog size 117, PerfScore 182.00, instruction count 235, allocated bytes for code 903 (MethodHash=5ce20bf3) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 902, prolog size 117, PerfScore 181.88, instruction count 234, allocated bytes for code 902 (MethodHash=5ce20bf3) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T21] ( 4, 2 ) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T28] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T29] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T23] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V34 tmp24 [V34,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V35 tmp25 [V35,T24] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V36 tmp26 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V37 tmp27 [V37,T27] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V38 tmp28 [V38,T20] ( 4, 2 ) ref -> rax
; V39 tmp29 [V39,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11 ) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T02] ( 10, 13.50) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T31] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T34] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T32] ( 3, 1.50) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T35] ( 3, 1.50) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T30] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V40._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V40._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T01] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M13044_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M13044_IG02:
test ebx, ebx
jne G_M13044_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M13044_IG03:
test r14, r14
je G_M13044_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M13044_IG04
cmp edi, 8
jle SHORT G_M13044_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M13044_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M13044_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M13044_IG30
mov rdi, rax
test rdi, rdi
je SHORT G_M13044_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M13044_IG05:
push 0
push 0
dec rdi
jne SHORT G_M13044_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M13044_IG06:
test esi, esi
jl G_M13044_IG28
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M13044_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M13044_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M13044_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M13044_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M13044_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M13044_IG27
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M13044_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M13044_IG11:
test rdi, rdi
jl G_M13044_IG27
mov rsi, rdi
mov qword ptr [rbp-0xA0], rsi
jmp SHORT G_M13044_IG13
align [0 bytes for IG20]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M13044_IG12:
xor esi, esi
mov qword ptr [rbp-0xA0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M13044_IG13:
test r14, r14
je G_M13044_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M13044_IG14:
mov rdi, r14
mov r8, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r8]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M13044_IG26
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M13044_IG15
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=80 bbWeight=0.50 PerfScore 8.25
G_M13044_IG15:
mov rdi, 0xD1FFAB1E ; 'System.Nullable`1[System.Int32]'
cmp rax, rdi
jne G_M13044_IG26
test r13d, r13d
jne SHORT G_M13044_IG18
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xA0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M13044_IG16
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M13044_IG17
;; size=62 bbWeight=0.50 PerfScore 6.62
G_M13044_IG16:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M13044_IG17:
jmp SHORT G_M13044_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M13044_IG18:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M13044_IG19:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M13044_IG21
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M13044_IG20:
cmp edx, r13d
jae G_M13044_IG29
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M13044_IG20
;; size=35 bbWeight=4 PerfScore 38.00
G_M13044_IG21:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M13044_IG30
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M13044_IG27
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M13044_IG23
- ;; size=129 bbWeight=0.50 PerfScore 24.38
+ ;; size=128 bbWeight=0.50 PerfScore 24.25
G_M13044_IG22:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M13044_IG27
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M13044_IG27
xor ecx, ecx
mov rax, bword ptr [rbp-0xB8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M13044_IG23:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M13044_IG24
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M13044_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M13044_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M13044_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M13044_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M13044_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M13044_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M13044_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 876, prolog size 107, PerfScore 171.63, instruction count 225, allocated bytes for code 876 (MethodHash=4a59cd0b) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 875, prolog size 107, PerfScore 171.50, instruction count 224, allocated bytes for code 875 (MethodHash=4a59cd0b) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T21] ( 4, 2 ) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T28] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T29] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T23] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V34 tmp24 [V34,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V35 tmp25 [V35,T24] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V36 tmp26 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V37 tmp27 [V37,T27] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V38 tmp28 [V38,T20] ( 4, 2 ) ref -> rax
; V39 tmp29 [V39,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11 ) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T02] ( 10, 13.50) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T31] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T34] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T32] ( 3, 1.50) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T35] ( 3, 1.50) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T30] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V40._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V40._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T01] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M56937_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M56937_IG02:
test ebx, ebx
jne G_M56937_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M56937_IG03:
test r14, r14
je G_M56937_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M56937_IG04
cmp edi, 8
jle SHORT G_M56937_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M56937_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M56937_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M56937_IG30
mov rdi, rax
test rdi, rdi
je SHORT G_M56937_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M56937_IG05:
push 0
push 0
dec rdi
jne SHORT G_M56937_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M56937_IG06:
test esi, esi
jl G_M56937_IG28
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M56937_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M56937_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M56937_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M56937_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M56937_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M56937_IG27
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M56937_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M56937_IG11:
test rdi, rdi
jl G_M56937_IG27
mov rsi, rdi
mov qword ptr [rbp-0xA0], rsi
jmp SHORT G_M56937_IG13
align [0 bytes for IG20]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M56937_IG12:
xor esi, esi
mov qword ptr [rbp-0xA0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M56937_IG13:
test r14, r14
je G_M56937_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M56937_IG14:
mov rdi, r14
mov r8, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r8]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M56937_IG26
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M56937_IG15
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=80 bbWeight=0.50 PerfScore 8.25
G_M56937_IG15:
mov rdi, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single]'
cmp rax, rdi
jne G_M56937_IG26
test r13d, r13d
jne SHORT G_M56937_IG18
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xA0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M56937_IG16
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M56937_IG17
;; size=62 bbWeight=0.50 PerfScore 6.62
G_M56937_IG16:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M56937_IG17:
jmp SHORT G_M56937_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M56937_IG18:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M56937_IG19:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M56937_IG21
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M56937_IG20:
cmp edx, r13d
jae G_M56937_IG29
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M56937_IG20
;; size=35 bbWeight=4 PerfScore 38.00
G_M56937_IG21:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M56937_IG30
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M56937_IG27
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 5
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M56937_IG23
- ;; size=129 bbWeight=0.50 PerfScore 24.38
+ ;; size=128 bbWeight=0.50 PerfScore 24.25
G_M56937_IG22:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M56937_IG27
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M56937_IG27
xor ecx, ecx
mov rax, bword ptr [rbp-0xB8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M56937_IG23:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M56937_IG24
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M56937_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M56937_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M56937_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M56937_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M56937_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M56937_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M56937_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 876, prolog size 107, PerfScore 171.63, instruction count 225, allocated bytes for code 876 (MethodHash=3fb62196) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 875, prolog size 107, PerfScore 171.50, instruction count 224, allocated bytes for code 875 (MethodHash=3fb62196) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T21] ( 4, 2 ) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T26] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T28] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T29] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T23] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V34 tmp24 [V34,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V35 tmp25 [V35,T24] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V36 tmp26 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V37 tmp27 [V37,T27] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V38 tmp28 [V38,T20] ( 4, 2 ) ref -> rax
; V39 tmp29 [V39,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11 ) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T02] ( 10, 13.50) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T31] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T34] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T32] ( 3, 1.50) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T35] ( 3, 1.50) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T30] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V40._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V40._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T01] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M3189_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M3189_IG02:
test ebx, ebx
jne G_M3189_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M3189_IG03:
test r14, r14
je G_M3189_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M3189_IG04
cmp edi, 8
jle SHORT G_M3189_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M3189_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M3189_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M3189_IG30
mov rdi, rax
test rdi, rdi
je SHORT G_M3189_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M3189_IG05:
push 0
push 0
dec rdi
jne SHORT G_M3189_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M3189_IG06:
test esi, esi
jl G_M3189_IG28
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M3189_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M3189_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M3189_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M3189_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M3189_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M3189_IG27
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M3189_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M3189_IG11:
test rdi, rdi
jl G_M3189_IG27
mov rsi, rdi
mov qword ptr [rbp-0xA0], rsi
jmp SHORT G_M3189_IG13
align [0 bytes for IG20]
;; size=21 bbWeight=0.50 PerfScore 2.25
G_M3189_IG12:
xor esi, esi
mov qword ptr [rbp-0xA0], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M3189_IG13:
test r14, r14
je G_M3189_IG22
;; size=9 bbWeight=1 PerfScore 1.25
G_M3189_IG14:
mov rdi, r14
mov r8, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [r8]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M3189_IG26
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M3189_IG15
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=80 bbWeight=0.50 PerfScore 8.25
G_M3189_IG15:
mov rdi, 0xD1FFAB1E ; 'System.Byte'
cmp rax, rdi
jne G_M3189_IG26
test r13d, r13d
jne SHORT G_M3189_IG18
mov rdi, r15
mov esi, ebx
mov rdx, qword ptr [rbp-0xA0]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M3189_IG16
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M3189_IG17
;; size=62 bbWeight=0.50 PerfScore 6.62
G_M3189_IG16:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M3189_IG17:
jmp SHORT G_M3189_IG19
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M3189_IG18:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M3189_IG19:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M3189_IG21
;; size=69 bbWeight=0.50 PerfScore 6.50
G_M3189_IG20:
cmp edx, r13d
jae G_M3189_IG29
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M3189_IG20
;; size=35 bbWeight=4 PerfScore 38.00
G_M3189_IG21:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M3189_IG30
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M3189_IG27
- mov esi, edx
+ mov rsi, rdx
sub rsi, rax
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M3189_IG23
- ;; size=125 bbWeight=0.50 PerfScore 24.12
+ ;; size=124 bbWeight=0.50 PerfScore 24.00
G_M3189_IG22:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M3189_IG27
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M3189_IG27
xor ecx, ecx
mov rax, bword ptr [rbp-0xB8]
mov qword ptr [rax], rcx
mov qword ptr [rax+0x08], rcx
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rax+0x10], zmm0
vmovdqu ymmword ptr [rax+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M3189_IG23:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M3189_IG24
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M3189_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M3189_IG25:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M3189_IG26:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M3189_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M3189_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M3189_IG29:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M3189_IG30:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 872, prolog size 107, PerfScore 171.38, instruction count 224, allocated bytes for code 872 (MethodHash=2c80f38a) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 871, prolog size 107, PerfScore 171.25, instruction count 223, allocated bytes for code 871 (MethodHash=2c80f38a) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.TensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T34] ( 3, 1.50) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T21] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T22] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V35 tmp25 [V35,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V36 tmp26 [V36,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V37 tmp27 [V37,T23] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V38 tmp28 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V39 tmp29 [V39,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V40 tmp30 [V40,T20] ( 4, 2 ) ref -> rax
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11.50) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T01] ( 10, 14 ) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 7 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 8 ) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T32] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T35] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T25] ( 3, 2 ) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T26] ( 3, 2 ) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T31] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V34._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V34._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T24] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T02] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M30553_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M30553_IG02:
test ebx, ebx
jne G_M30553_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M30553_IG03:
test r14, r14
je G_M30553_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M30553_IG04
cmp edi, 8
jle SHORT G_M30553_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M30553_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M30553_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M30553_IG31
mov rdi, rax
test rdi, rdi
je SHORT G_M30553_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M30553_IG05:
push 0
push 0
dec rdi
jne SHORT G_M30553_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M30553_IG06:
test esi, esi
jl G_M30553_IG29
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M30553_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M30553_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M30553_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M30553_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M30553_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M30553_IG28
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M30553_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M30553_IG11:
test rdi, rdi
jl G_M30553_IG28
mov r8, rdi
jmp SHORT G_M30553_IG13
align [0 bytes for IG21]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M30553_IG12:
xor r8d, r8d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M30553_IG13:
test r13d, r13d
jne SHORT G_M30553_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M30553_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xA0], r8
mov rdx, r8
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r9]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M30553_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M30553_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M30553_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M30553_IG16:
jmp SHORT G_M30553_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M30553_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xA0], r8
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M30553_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r9]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M30553_IG23
;; size=39 bbWeight=1 PerfScore 6.00
G_M30553_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M30553_IG27
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M30553_IG20
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=79 bbWeight=0.50 PerfScore 8.25
G_M30553_IG20:
mov rsi, 0xD1FFAB1E ; 'System.Double'
cmp rax, rsi
jne G_M30553_IG27
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M30553_IG22
;; size=59 bbWeight=0.50 PerfScore 4.88
G_M30553_IG21:
cmp edx, r13d
jae G_M30553_IG30
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M30553_IG21
;; size=35 bbWeight=4 PerfScore 38.00
G_M30553_IG22:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M30553_IG31
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M30553_IG28
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M30553_IG24
- ;; size=126 bbWeight=0.50 PerfScore 24.25
+ ;; size=125 bbWeight=0.50 PerfScore 24.12
G_M30553_IG23:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M30553_IG28
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M30553_IG28
xor eax, eax
mov rbx, bword ptr [rbp-0xB8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M30553_IG24:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M30553_IG25
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M30553_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M30553_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M30553_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M30553_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M30553_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M30553_IG30:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M30553_IG31:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 871, prolog size 107, PerfScore 174.13, instruction count 224, allocated bytes for code 871 (MethodHash=4e6a88a6) for method System.Numerics.Tensors.TensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 870, prolog size 107, PerfScore 174.00, instruction count 223, allocated bytes for code 870 (MethodHash=4e6a88a6) for method System.Numerics.Tensors.TensorSpan`1[double]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.TensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T34] ( 3, 1.50) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T21] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T22] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V35 tmp25 [V35,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V36 tmp26 [V36,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V37 tmp27 [V37,T23] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V38 tmp28 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V39 tmp29 [V39,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V40 tmp30 [V40,T20] ( 4, 2 ) ref -> rax
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11.50) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T01] ( 10, 14 ) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 7 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 8 ) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T32] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T35] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T25] ( 3, 2 ) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T26] ( 3, 2 ) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T31] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V34._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V34._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T24] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T02] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M25087_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M25087_IG02:
test ebx, ebx
jne G_M25087_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M25087_IG03:
test r14, r14
je G_M25087_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M25087_IG04
cmp edi, 8
jle SHORT G_M25087_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M25087_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M25087_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M25087_IG31
mov rdi, rax
test rdi, rdi
je SHORT G_M25087_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M25087_IG05:
push 0
push 0
dec rdi
jne SHORT G_M25087_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M25087_IG06:
test esi, esi
jl G_M25087_IG29
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M25087_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M25087_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M25087_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M25087_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M25087_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M25087_IG28
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M25087_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M25087_IG11:
test rdi, rdi
jl G_M25087_IG28
mov r8, rdi
jmp SHORT G_M25087_IG13
align [0 bytes for IG21]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M25087_IG12:
xor r8d, r8d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M25087_IG13:
test r13d, r13d
jne SHORT G_M25087_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M25087_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xA0], r8
mov rdx, r8
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r9]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M25087_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M25087_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M25087_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M25087_IG16:
jmp SHORT G_M25087_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M25087_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xA0], r8
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M25087_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r9]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M25087_IG23
;; size=39 bbWeight=1 PerfScore 6.00
G_M25087_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M25087_IG27
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M25087_IG20
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=79 bbWeight=0.50 PerfScore 8.25
G_M25087_IG20:
mov rsi, 0xD1FFAB1E ; 'System.Int32'
cmp rax, rsi
jne G_M25087_IG27
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M25087_IG22
;; size=59 bbWeight=0.50 PerfScore 4.88
G_M25087_IG21:
cmp edx, r13d
jae G_M25087_IG30
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M25087_IG21
;; size=35 bbWeight=4 PerfScore 38.00
G_M25087_IG22:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M25087_IG31
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M25087_IG28
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 2
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M25087_IG24
- ;; size=126 bbWeight=0.50 PerfScore 24.25
+ ;; size=125 bbWeight=0.50 PerfScore 24.12
G_M25087_IG23:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M25087_IG28
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M25087_IG28
xor eax, eax
mov rbx, bword ptr [rbp-0xB8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M25087_IG24:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M25087_IG25
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M25087_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M25087_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M25087_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M25087_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M25087_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M25087_IG30:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M25087_IG31:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 871, prolog size 107, PerfScore 174.13, instruction count 224, allocated bytes for code 871 (MethodHash=e49d9e00) for method System.Numerics.Tensors.TensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 870, prolog size 107, PerfScore 174.00, instruction count 223, allocated bytes for code 870 (MethodHash=e49d9e00) for method System.Numerics.Tensors.TensorSpan`1[int]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.TensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T34] ( 3, 1.50) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T21] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T22] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V35 tmp25 [V35,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V36 tmp26 [V36,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V37 tmp27 [V37,T23] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V38 tmp28 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V39 tmp29 [V39,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V40 tmp30 [V40,T20] ( 4, 2 ) ref -> rax
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11.50) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T01] ( 10, 14 ) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 7 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 8 ) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T32] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T35] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T25] ( 3, 2 ) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T26] ( 3, 2 ) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T31] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V34._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V34._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T24] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T02] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M9798_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M9798_IG02:
test ebx, ebx
jne G_M9798_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M9798_IG03:
test r14, r14
je G_M9798_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M9798_IG04
cmp edi, 8
jle SHORT G_M9798_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M9798_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M9798_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M9798_IG31
mov rdi, rax
test rdi, rdi
je SHORT G_M9798_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M9798_IG05:
push 0
push 0
dec rdi
jne SHORT G_M9798_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M9798_IG06:
test esi, esi
jl G_M9798_IG29
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M9798_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M9798_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M9798_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M9798_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M9798_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M9798_IG28
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M9798_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M9798_IG11:
test rdi, rdi
jl G_M9798_IG28
mov r8, rdi
jmp SHORT G_M9798_IG13
align [0 bytes for IG21]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M9798_IG12:
xor r8d, r8d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M9798_IG13:
test r13d, r13d
jne SHORT G_M9798_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M9798_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xA0], r8
mov rdx, r8
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r9]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M9798_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M9798_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M9798_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M9798_IG16:
jmp SHORT G_M9798_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M9798_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xA0], r8
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M9798_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r9]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M9798_IG23
;; size=39 bbWeight=1 PerfScore 6.00
G_M9798_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M9798_IG27
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M9798_IG20
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=79 bbWeight=0.50 PerfScore 8.25
G_M9798_IG20:
mov rsi, 0xD1FFAB1E ; 'System.Int64'
cmp rax, rsi
jne G_M9798_IG27
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M9798_IG22
;; size=59 bbWeight=0.50 PerfScore 4.88
G_M9798_IG21:
cmp edx, r13d
jae G_M9798_IG30
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M9798_IG21
;; size=35 bbWeight=4 PerfScore 38.00
G_M9798_IG22:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M9798_IG31
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M9798_IG28
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M9798_IG24
- ;; size=126 bbWeight=0.50 PerfScore 24.25
+ ;; size=125 bbWeight=0.50 PerfScore 24.12
G_M9798_IG23:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M9798_IG28
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M9798_IG28
xor eax, eax
mov rbx, bword ptr [rbp-0xB8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M9798_IG24:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M9798_IG25
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M9798_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M9798_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M9798_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M9798_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M9798_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M9798_IG30:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M9798_IG31:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 871, prolog size 107, PerfScore 174.13, instruction count 224, allocated bytes for code 871 (MethodHash=985ed9b9) for method System.Numerics.Tensors.TensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 870, prolog size 107, PerfScore 174.00, instruction count 223, allocated bytes for code 870 (MethodHash=985ed9b9) for method System.Numerics.Tensors.TensorSpan`1[long]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.TensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T34] ( 3, 1.50) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T21] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T22] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V35 tmp25 [V35,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V36 tmp26 [V36,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V37 tmp27 [V37,T23] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V38 tmp28 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V39 tmp29 [V39,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V40 tmp30 [V40,T20] ( 4, 2 ) ref -> rax
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11.50) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T01] ( 10, 14 ) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 7 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 8 ) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T32] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T35] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T25] ( 3, 2 ) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T26] ( 3, 2 ) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T31] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V34._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V34._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T24] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T02] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M47902_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M47902_IG02:
test ebx, ebx
jne G_M47902_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M47902_IG03:
test r14, r14
je G_M47902_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M47902_IG04
cmp edi, 8
jle SHORT G_M47902_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M47902_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M47902_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M47902_IG31
mov rdi, rax
test rdi, rdi
je SHORT G_M47902_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M47902_IG05:
push 0
push 0
dec rdi
jne SHORT G_M47902_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M47902_IG06:
test esi, esi
jl G_M47902_IG29
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M47902_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M47902_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M47902_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M47902_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M47902_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M47902_IG28
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M47902_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M47902_IG11:
test rdi, rdi
jl G_M47902_IG28
mov r8, rdi
jmp SHORT G_M47902_IG13
align [0 bytes for IG21]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M47902_IG12:
xor r8d, r8d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M47902_IG13:
test r13d, r13d
jne SHORT G_M47902_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M47902_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xA0], r8
mov rdx, r8
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r9]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M47902_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M47902_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M47902_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M47902_IG16:
jmp SHORT G_M47902_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M47902_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xA0], r8
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M47902_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r9]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M47902_IG23
;; size=39 bbWeight=1 PerfScore 6.00
G_M47902_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M47902_IG27
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M47902_IG20
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=79 bbWeight=0.50 PerfScore 8.25
G_M47902_IG20:
mov rsi, 0xD1FFAB1E ; 'System.Int16'
cmp rax, rsi
jne G_M47902_IG27
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M47902_IG22
;; size=59 bbWeight=0.50 PerfScore 4.88
G_M47902_IG21:
cmp edx, r13d
jae G_M47902_IG30
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M47902_IG21
;; size=35 bbWeight=4 PerfScore 38.00
G_M47902_IG22:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M47902_IG31
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M47902_IG28
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
add rcx, rcx
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M47902_IG24
- ;; size=125 bbWeight=0.50 PerfScore 24.12
+ ;; size=124 bbWeight=0.50 PerfScore 24.00
G_M47902_IG23:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M47902_IG28
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M47902_IG28
xor eax, eax
mov rbx, bword ptr [rbp-0xB8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M47902_IG24:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M47902_IG25
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M47902_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M47902_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M47902_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M47902_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M47902_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M47902_IG30:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M47902_IG31:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 870, prolog size 107, PerfScore 174.00, instruction count 224, allocated bytes for code 870 (MethodHash=c6f944e1) for method System.Numerics.Tensors.TensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 869, prolog size 107, PerfScore 173.88, instruction count 223, allocated bytes for code 869 (MethodHash=c6f944e1) for method System.Numerics.Tensors.TensorSpan`1[short]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.TensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xC8] this single-def
; V01 TypeCtx [V01,T12] ( 4, 3.50) long -> [rbp-0x38] single-def
; V02 arg1 [V02,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V03 arg2 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V04 arg3 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V05 arg4 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V06 loc0 [V06 ] ( 0, 0 ) long -> zero-ref single-def
; V07 loc1 [V07,T36] ( 3, 1.50) long -> [rbp-0x40] spill-single-def
;* V08 loc2 [V08 ] ( 0, 0 ) long -> zero-ref single-def
;* V09 loc3 [V09 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V10 loc4 [V10 ] ( 0, 0 ) int -> zero-ref single-def
;# V11 OutArgs [V11 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V12 tmp1 [V12 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V13 tmp2 [V13 ] ( 2, 2 ) struct (104) [rbp-0xA8] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V14 tmp3 [V14,T17] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V15 tmp4 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V16 tmp5 [V16,T42] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V17 tmp6 [V17 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V18 tmp7 [V18,T19] ( 3, 3 ) int -> rdi "impAppendStmt"
; V19 tmp8 [V19,T28] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V20 tmp9 [V20,T22] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V21 tmp10 [V21 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V22 tmp11 [V22,T20] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V23 tmp12 [V23,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V24 tmp13 [V24,T30] ( 2, 2 ) long -> rdi "Inlining Arg"
; V25 tmp14 [V25,T43] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V26 tmp15 [V26 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V27 tmp16 [V27,T31] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V28 tmp17 [V28,T47] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V29 tmp18 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V30 tmp19 [V30,T23] ( 4, 2 ) long -> [rbp-0xB0] "Inline return value spill temp"
;* V31 tmp20 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V32 tmp21 [V32,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V33 tmp22 [V33,T53] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V34 tmp23 [V34,T13] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V35 tmp24 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V36 tmp25 [V36,T18] ( 3, 3 ) ref -> [rbp-0xD0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V37 tmp26 [V37,T33] ( 3, 1.50) ref -> [rbp-0xD8] class-hnd "Inline return value spill temp" <System.RuntimeType>
; V38 tmp27 [V38,T24] ( 4, 2 ) long -> [rbp-0xB8] spill-single-def "Inline stloc first use temp"
;* V39 tmp28 [V39 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V40 tmp29 [V40,T29] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V41 tmp30 [V41,T21] ( 4, 2 ) ref -> rax
; V42 tmp31 [V42,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V43 tmp32 [V43,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V44 tmp33 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V45 tmp34 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V46 tmp35 [V46,T15] ( 2, 1.50) byref -> [rbp-0xE0] single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V47 tmp36 [V47,T14] ( 3, 2 ) int -> [rbp-0xBC] single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V48 tmp37 [V48,T03] ( 6, 10.50) byref -> r15 single-def "field V04._reference (fldOffset=0x0)" P-INDEP
; V49 tmp38 [V49,T02] ( 9, 13 ) int -> rbx single-def "field V04._length (fldOffset=0x8)" P-INDEP
; V50 tmp39 [V50,T10] ( 5, 7 ) byref -> r12 "field V05._reference (fldOffset=0x0)" P-INDEP
; V51 tmp40 [V51,T09] ( 6, 8 ) int -> r13 "field V05._length (fldOffset=0x8)" P-INDEP
; V52 tmp41 [V52,T34] ( 3, 1.50) byref -> rdi "field V09._reference (fldOffset=0x0)" P-INDEP
; V53 tmp42 [V53,T37] ( 3, 1.50) int -> rsi "field V09._length (fldOffset=0x8)" P-INDEP
; V54 tmp43 [V54,T26] ( 3, 2 ) byref -> rdi "field V12._reference (fldOffset=0x0)" P-INDEP
; V55 tmp44 [V55,T27] ( 3, 2 ) int -> rsi "field V12._length (fldOffset=0x8)" P-INDEP
; V56 tmp45 [V56,T40] ( 2, 1 ) byref -> rdi single-def "field V15._reference (fldOffset=0x0)" P-INDEP
; V57 tmp46 [V57,T44] ( 2, 1 ) int -> rsi single-def "field V15._length (fldOffset=0x8)" P-INDEP
; V58 tmp47 [V58,T41] ( 2, 1 ) byref -> rdi "field V29._reference (fldOffset=0x0)" P-INDEP
; V59 tmp48 [V59,T45] ( 2, 1 ) int -> rsi "field V29._length (fldOffset=0x8)" P-INDEP
;* V60 tmp49 [V60,T48] ( 0, 0 ) byref -> zero-ref single-def "field V31._reference (fldOffset=0x0)" P-INDEP
; V61 tmp50 [V61,T32] ( 2, 2 ) int -> rdi single-def "field V31._length (fldOffset=0x8)" P-INDEP
; V62 tmp51 [V62,T35] ( 3, 1.50) byref -> rdi "field V35._reference (fldOffset=0x0)" P-INDEP
; V63 tmp52 [V63,T38] ( 3, 1.50) int -> rsi "field V35._length (fldOffset=0x8)" P-INDEP
;* V64 tmp53 [V64,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V65 tmp54 [V65,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
;* V66 tmp55 [V66,T50] ( 0, 0 ) byref -> zero-ref single-def "field V45._reference (fldOffset=0x0)" P-INDEP
;* V67 tmp56 [V67,T52] ( 0, 0 ) int -> zero-ref single-def "field V45._length (fldOffset=0x8)" P-INDEP
; V68 GsCookie [V68 ] ( 1, 1 ) long -> [rbp-0xE8] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V69 cse0 [V69,T25] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V70 cse1 [V70,T04] ( 3, 12 ) long -> r9 "CSE #07: aggressive"
-; V71 cse2 [V71,T39] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V71 cse2 [V71,T39] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V72 cse3 [V72,T16] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V73 cse4 [V73,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V74 rat0 [V74,T01] ( 5, 16.25) long -> rsi "Widened IV V33"
;
; Lcl frame size = 200
G_M37322_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 200
lea rbp, [rsp+0xF0]
xor eax, eax
mov qword ptr [rbp-0xA8], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0xA0], zmm8
vmovdqa xmmword ptr [rbp-0x60], xmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
mov qword ptr [rbp-0x30], rsi
mov qword ptr [rbp-0xE8], 0xD1FFAB1E
mov bword ptr [rbp-0xC8], rdi
mov qword ptr [rbp-0x38], rsi
mov bword ptr [rbp-0xE0], rcx
mov dword ptr [rbp-0xBC], r8d
mov r14, rdx
mov r15, bword ptr [rbp+0x10]
mov ebx, dword ptr [rbp+0x18]
mov r12, bword ptr [rbp+0x20]
mov r13d, dword ptr [rbp+0x28]
;; size=117 bbWeight=1 PerfScore 24.58
G_M37322_IG02:
test ebx, ebx
jne G_M37322_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M37322_IG03:
test r14, r14
je G_M37322_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M37322_IG04
cmp edi, 8
jle SHORT G_M37322_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M37322_IG07
align [4 bytes for IG10]
;; size=63 bbWeight=0.50 PerfScore 7.38
G_M37322_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r9d, 8
mov rax, rdi
mul rdx:rax, r9
jb G_M37322_IG33
mov rdi, rax
test rdi, rdi
je SHORT G_M37322_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M37322_IG05:
push 0
push 0
dec rdi
jne SHORT G_M37322_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M37322_IG06:
test esi, esi
jl G_M37322_IG31
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M37322_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M37322_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M37322_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M37322_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M37322_IG10:
mov r9, qword ptr [r15+8*rsi]
test r9, r9
jl G_M37322_IG30
imul rdi, r9
inc esi
cmp esi, ebx
jl SHORT G_M37322_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M37322_IG11:
test rdi, rdi
jl G_M37322_IG30
mov r9, rdi
jmp SHORT G_M37322_IG13
align [0 bytes for IG23]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M37322_IG12:
xor r9d, r9d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M37322_IG13:
test r13d, r13d
jne SHORT G_M37322_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M37322_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xB0], r9
mov rdx, r9
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r10]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M37322_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M37322_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M37322_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M37322_IG16:
jmp SHORT G_M37322_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M37322_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xB0], r9
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M37322_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r10]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M37322_IG25
;; size=39 bbWeight=1 PerfScore 6.00
G_M37322_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xD0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xB8], rax
test rax, rax
je SHORT G_M37322_IG21
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M37322_IG20
mov rdi, qword ptr [rbp-0xB8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=75 bbWeight=0.50 PerfScore 8.25
G_M37322_IG20:
mov gword ptr [rbp-0xD8], rax
jmp SHORT G_M37322_IG22
;; size=9 bbWeight=0.50 PerfScore 1.50
G_M37322_IG21:
xor rax, rax
mov gword ptr [rbp-0xD8], rax
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M37322_IG22:
mov rdi, qword ptr [rbp-0x38]
mov rdi, qword ptr [rdi+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi]
call CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE
cmp rax, gword ptr [rbp-0xD8]
jne G_M37322_IG29
mov rsi, bword ptr [rbp-0xE0]
mov edx, dword ptr [rbp-0xBC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x40], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M37322_IG24
;; size=72 bbWeight=0.50 PerfScore 9.62
G_M37322_IG23:
cmp edx, r13d
jae G_M37322_IG32
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M37322_IG23
;; size=35 bbWeight=4 PerfScore 38.00
G_M37322_IG24:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M37322_IG33
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M37322_IG30
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0xA8]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xC8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0xA8]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x40]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M37322_IG26
- ;; size=126 bbWeight=0.50 PerfScore 24.25
+ ;; size=125 bbWeight=0.50 PerfScore 24.12
G_M37322_IG25:
cmp dword ptr [rbp-0xBC], 0
jne SHORT G_M37322_IG30
cmp qword ptr [rbp-0xB0], 0
jne SHORT G_M37322_IG30
xor eax, eax
mov rbx, bword ptr [rbp-0xC8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M37322_IG26:
cmp qword ptr [rbp-0xE8], 0xD1FFAB1E
je SHORT G_M37322_IG27
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M37322_IG27:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M37322_IG28:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M37322_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M37322_IG30:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M37322_IG31:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M37322_IG32:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M37322_IG33:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 898, prolog size 117, PerfScore 184.50, instruction count 234, allocated bytes for code 898 (MethodHash=62196e35) for method System.Numerics.Tensors.TensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 897, prolog size 117, PerfScore 184.38, instruction count 233, allocated bytes for code 897 (MethodHash=62196e35) for method System.Numerics.Tensors.TensorSpan`1[System.__Canon]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.TensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T34] ( 3, 1.50) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T21] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T22] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V35 tmp25 [V35,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V36 tmp26 [V36,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V37 tmp27 [V37,T23] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V38 tmp28 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V39 tmp29 [V39,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V40 tmp30 [V40,T20] ( 4, 2 ) ref -> rax
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11.50) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T01] ( 10, 14 ) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 7 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 8 ) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T32] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T35] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T25] ( 3, 2 ) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T26] ( 3, 2 ) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T31] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V34._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V34._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T24] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T02] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M15282_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M15282_IG02:
test ebx, ebx
jne G_M15282_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M15282_IG03:
test r14, r14
je G_M15282_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M15282_IG04
cmp edi, 8
jle SHORT G_M15282_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M15282_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M15282_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M15282_IG31
mov rdi, rax
test rdi, rdi
je SHORT G_M15282_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M15282_IG05:
push 0
push 0
dec rdi
jne SHORT G_M15282_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M15282_IG06:
test esi, esi
jl G_M15282_IG29
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M15282_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M15282_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M15282_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M15282_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M15282_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M15282_IG28
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M15282_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M15282_IG11:
test rdi, rdi
jl G_M15282_IG28
mov r8, rdi
jmp SHORT G_M15282_IG13
align [0 bytes for IG21]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M15282_IG12:
xor r8d, r8d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M15282_IG13:
test r13d, r13d
jne SHORT G_M15282_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M15282_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xA0], r8
mov rdx, r8
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r9]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M15282_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M15282_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M15282_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M15282_IG16:
jmp SHORT G_M15282_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M15282_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xA0], r8
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M15282_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r9]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M15282_IG23
;; size=39 bbWeight=1 PerfScore 6.00
G_M15282_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M15282_IG27
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M15282_IG20
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=79 bbWeight=0.50 PerfScore 8.25
G_M15282_IG20:
mov rsi, 0xD1FFAB1E ; 'System.Nullable`1[System.Int32]'
cmp rax, rsi
jne G_M15282_IG27
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M15282_IG22
;; size=59 bbWeight=0.50 PerfScore 4.88
G_M15282_IG21:
cmp edx, r13d
jae G_M15282_IG30
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M15282_IG21
;; size=35 bbWeight=4 PerfScore 38.00
G_M15282_IG22:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M15282_IG31
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M15282_IG28
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 3
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M15282_IG24
- ;; size=126 bbWeight=0.50 PerfScore 24.25
+ ;; size=125 bbWeight=0.50 PerfScore 24.12
G_M15282_IG23:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M15282_IG28
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M15282_IG28
xor eax, eax
mov rbx, bword ptr [rbp-0xB8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M15282_IG24:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M15282_IG25
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M15282_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M15282_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M15282_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M15282_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M15282_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M15282_IG30:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M15282_IG31:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 871, prolog size 107, PerfScore 174.13, instruction count 224, allocated bytes for code 871 (MethodHash=2cf0c44d) for method System.Numerics.Tensors.TensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 870, prolog size 107, PerfScore 174.00, instruction count 223, allocated bytes for code 870 (MethodHash=2cf0c44d) for method System.Numerics.Tensors.TensorSpan`1[System.Nullable`1[int]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.11 % of base) - System.Numerics.Tensors.TensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T34] ( 3, 1.50) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T21] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T22] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V35 tmp25 [V35,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V36 tmp26 [V36,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V37 tmp27 [V37,T23] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V38 tmp28 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V39 tmp29 [V39,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V40 tmp30 [V40,T20] ( 4, 2 ) ref -> rax
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11.50) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T01] ( 10, 14 ) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 7 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 8 ) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T32] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T35] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T25] ( 3, 2 ) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T26] ( 3, 2 ) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T31] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V34._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V34._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T24] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T02] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M39151_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M39151_IG02:
test ebx, ebx
jne G_M39151_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M39151_IG03:
test r14, r14
je G_M39151_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M39151_IG04
cmp edi, 8
jle SHORT G_M39151_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M39151_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M39151_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M39151_IG31
mov rdi, rax
test rdi, rdi
je SHORT G_M39151_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M39151_IG05:
push 0
push 0
dec rdi
jne SHORT G_M39151_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M39151_IG06:
test esi, esi
jl G_M39151_IG29
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M39151_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M39151_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M39151_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M39151_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M39151_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M39151_IG28
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M39151_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M39151_IG11:
test rdi, rdi
jl G_M39151_IG28
mov r8, rdi
jmp SHORT G_M39151_IG13
align [0 bytes for IG21]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M39151_IG12:
xor r8d, r8d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M39151_IG13:
test r13d, r13d
jne SHORT G_M39151_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M39151_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xA0], r8
mov rdx, r8
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r9]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M39151_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M39151_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M39151_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M39151_IG16:
jmp SHORT G_M39151_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M39151_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xA0], r8
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M39151_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r9]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M39151_IG23
;; size=39 bbWeight=1 PerfScore 6.00
G_M39151_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M39151_IG27
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M39151_IG20
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=79 bbWeight=0.50 PerfScore 8.25
G_M39151_IG20:
mov rsi, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single]'
cmp rax, rsi
jne G_M39151_IG27
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M39151_IG22
;; size=59 bbWeight=0.50 PerfScore 4.88
G_M39151_IG21:
cmp edx, r13d
jae G_M39151_IG30
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M39151_IG21
;; size=35 bbWeight=4 PerfScore 38.00
G_M39151_IG22:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M39151_IG31
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M39151_IG28
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
shl rcx, 5
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M39151_IG24
- ;; size=126 bbWeight=0.50 PerfScore 24.25
+ ;; size=125 bbWeight=0.50 PerfScore 24.12
G_M39151_IG23:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M39151_IG28
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M39151_IG28
xor eax, eax
mov rbx, bword ptr [rbp-0xB8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M39151_IG24:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M39151_IG25
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M39151_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M39151_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M39151_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M39151_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M39151_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M39151_IG30:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M39151_IG31:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 871, prolog size 107, PerfScore 174.13, instruction count 224, allocated bytes for code 871 (MethodHash=cd296710) for method System.Numerics.Tensors.TensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 870, prolog size 107, PerfScore 174.00, instruction count 223, allocated bytes for code 870 (MethodHash=cd296710) for method System.Numerics.Tensors.TensorSpan`1[System.Numerics.Vector`1[float]]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================
-1 (-0.12 % of base) - System.Numerics.Tensors.TensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
; Assembly listing for method System.Numerics.Tensors.TensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 20 single block inlinees; 10 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T11] ( 5, 3.50) byref -> [rbp-0xB8] this single-def
; V01 arg1 [V01,T06] ( 14, 8.50) ref -> r14 class-hnd single-def <System.Array>
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[System.Buffers.NIndex]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg multireg-ret ld-addr-op <System.ReadOnlySpan`1[long]>
;* V04 arg4 [V04 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[long]>
;* V05 loc0 [V05 ] ( 0, 0 ) long -> zero-ref single-def
; V06 loc1 [V06,T34] ( 3, 1.50) long -> [rbp-0x30] spill-single-def
;* V07 loc2 [V07 ] ( 0, 0 ) long -> zero-ref single-def
;* V08 loc3 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.Span`1[long]>
;* V09 loc4 [V09 ] ( 0, 0 ) int -> zero-ref single-def
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V12 tmp2 [V12 ] ( 2, 2 ) struct (104) [rbp-0x98] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
; V13 tmp3 [V13,T16] ( 3, 3 ) ref -> rax class-hnd exact single-def "NewArr temp" <long[]>
;* V14 tmp4 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V15 tmp5 [V15,T41] ( 2, 1 ) int -> rdi "Inline return value spill temp"
;* V16 tmp6 [V16 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V17 tmp7 [V17,T18] ( 3, 3 ) int -> rdi "impAppendStmt"
; V18 tmp8 [V18,T27] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
; V19 tmp9 [V19,T21] ( 4, 2 ) int -> rsi "Inline return value spill temp"
;* V20 tmp10 [V20 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V21 tmp11 [V21,T19] ( 3, 3 ) int -> rsi "impAppendStmt"
;* V22 tmp12 [V22,T45] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
; V23 tmp13 [V23,T29] ( 2, 2 ) long -> rdi "Inlining Arg"
; V24 tmp14 [V24,T42] ( 2, 1 ) int -> rsi "Inline return value spill temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
; V26 tmp16 [V26,T30] ( 2, 2 ) int -> rsi "impAppendStmt"
;* V27 tmp17 [V27,T46] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
; V29 tmp19 [V29,T22] ( 4, 2 ) long -> [rbp-0xA0] "Inline return value spill temp"
;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V31 tmp21 [V31,T07] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V32 tmp22 [V32,T52] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V33 tmp23 [V33,T12] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V34 tmp24 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V35 tmp25 [V35,T17] ( 3, 3 ) ref -> [rbp-0xC0] class-hnd exact spill-single-def "Inlining Arg" <System.RuntimeType>
; V36 tmp26 [V36,T38] ( 2, 1 ) ref -> rax class-hnd "Inline return value spill temp" <System.RuntimeType>
; V37 tmp27 [V37,T23] ( 4, 2 ) long -> [rbp-0xA8] spill-single-def "Inline stloc first use temp"
;* V38 tmp28 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "impAppendStmt" <System.RuntimeType>
; V39 tmp29 [V39,T28] ( 2, 2 ) ref -> rax class-hnd exact single-def "dup spill" <System.RuntimeType>
; V40 tmp30 [V40,T20] ( 4, 2 ) ref -> rax
; V41 tmp31 [V41,T08] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V42 tmp32 [V42,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V43 tmp33 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V45 tmp35 [V45,T14] ( 2, 1.50) byref -> [rbp-0xC8] single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V46 tmp36 [V46,T13] ( 3, 2 ) int -> [rbp-0xAC] single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V47 tmp37 [V47,T03] ( 7, 11.50) byref -> r15 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V48 tmp38 [V48,T01] ( 10, 14 ) int -> rbx single-def "field V03._length (fldOffset=0x8)" P-INDEP
; V49 tmp39 [V49,T10] ( 5, 7 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V50 tmp40 [V50,T09] ( 6, 8 ) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V51 tmp41 [V51,T32] ( 3, 1.50) byref -> rdi "field V08._reference (fldOffset=0x0)" P-INDEP
; V52 tmp42 [V52,T35] ( 3, 1.50) int -> rsi "field V08._length (fldOffset=0x8)" P-INDEP
; V53 tmp43 [V53,T25] ( 3, 2 ) byref -> rdi "field V11._reference (fldOffset=0x0)" P-INDEP
; V54 tmp44 [V54,T26] ( 3, 2 ) int -> rsi "field V11._length (fldOffset=0x8)" P-INDEP
; V55 tmp45 [V55,T39] ( 2, 1 ) byref -> rdi single-def "field V14._reference (fldOffset=0x0)" P-INDEP
; V56 tmp46 [V56,T43] ( 2, 1 ) int -> rsi single-def "field V14._length (fldOffset=0x8)" P-INDEP
; V57 tmp47 [V57,T40] ( 2, 1 ) byref -> rdi "field V28._reference (fldOffset=0x0)" P-INDEP
; V58 tmp48 [V58,T44] ( 2, 1 ) int -> rsi "field V28._length (fldOffset=0x8)" P-INDEP
;* V59 tmp49 [V59,T47] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP
; V60 tmp50 [V60,T31] ( 2, 2 ) int -> rdi single-def "field V30._length (fldOffset=0x8)" P-INDEP
; V61 tmp51 [V61,T33] ( 3, 1.50) byref -> rdi "field V34._reference (fldOffset=0x0)" P-INDEP
; V62 tmp52 [V62,T36] ( 3, 1.50) int -> rsi "field V34._length (fldOffset=0x8)" P-INDEP
;* V63 tmp53 [V63,T48] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V64 tmp54 [V64,T50] ( 0, 0 ) int -> zero-ref single-def "field V43._length (fldOffset=0x8)" P-INDEP
;* V65 tmp55 [V65,T49] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp56 [V66,T51] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
; V67 GsCookie [V67 ] ( 1, 1 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "GSSecurityCookie"
; V68 cse0 [V68,T24] ( 4, 2 ) int -> rsi "CSE #04: conservative"
; V69 cse1 [V69,T04] ( 3, 12 ) long -> r8 "CSE #07: aggressive"
-; V70 cse2 [V70,T37] ( 3, 1.50) int -> rdx "CSE #10: conservative"
+; V70 cse2 [V70,T37] ( 3, 1.50) long -> rdx "CSE #11: conservative"
; V71 cse3 [V71,T15] ( 4, 2 ) long -> rsi multi-def "CSE #01: moderate"
; V72 cse4 [V72,T05] ( 3, 12 ) long -> rcx "CSE #08: aggressive"
; V73 rat0 [V73,T02] ( 5, 16.25) long -> rsi "Widened IV V32"
;
; Lcl frame size = 168
G_M42867_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 168
lea rbp, [rsp+0xD0]
xor eax, eax
mov qword ptr [rbp-0x98], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0xD0], 0xD1FFAB1E
mov bword ptr [rbp-0xB8], rdi
mov bword ptr [rbp-0xC8], rdx
mov dword ptr [rbp-0xAC], ecx
mov r14, rsi
mov r15, r8
mov ebx, r9d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=107 bbWeight=1 PerfScore 21.08
G_M42867_IG02:
test ebx, ebx
jne G_M42867_IG08
;; size=8 bbWeight=1 PerfScore 1.25
G_M42867_IG03:
test r14, r14
je G_M42867_IG08
mov rsi, qword ptr [r14]
mov esi, dword ptr [rsi+0x04]
add esi, -24
shr esi, 3
mov edi, esi
test edi, edi
je SHORT G_M42867_IG04
cmp edi, 8
jle SHORT G_M42867_IG04
movsxd rsi, esi
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M42867_IG07
align [14 bytes for IG10]
;; size=73 bbWeight=0.50 PerfScore 7.38
G_M42867_IG04:
mov edi, 1
test esi, esi
cmove esi, edi
mov edi, esi
mov r8d, 8
mov rax, rdi
mul rdx:rax, r8
jb G_M42867_IG31
mov rdi, rax
test rdi, rdi
je SHORT G_M42867_IG06
add rdi, 15
shr rdi, 4
;; size=46 bbWeight=0.50 PerfScore 3.88
G_M42867_IG05:
push 0
push 0
dec rdi
jne SHORT G_M42867_IG05
lea rdi, [rsp]
;; size=13 bbWeight=0.50 PerfScore 1.88
G_M42867_IG06:
test esi, esi
jl G_M42867_IG29
;; size=8 bbWeight=0.50 PerfScore 0.62
G_M42867_IG07:
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
call [rax]System.Numerics.Tensors.TensorSpanHelpers:FillLengths(System.Span`1[long],System.Array):System.ReadOnlySpan`1[long]
mov r15, rax
mov ebx, edx
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M42867_IG08:
mov edi, ebx
test edi, edi
je SHORT G_M42867_IG12
;; size=6 bbWeight=1 PerfScore 1.50
G_M42867_IG09:
mov edi, 1
xor esi, esi
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M42867_IG10:
mov r8, qword ptr [r15+8*rsi]
test r8, r8
jl G_M42867_IG28
imul rdi, r8
inc esi
cmp esi, ebx
jl SHORT G_M42867_IG10
;; size=23 bbWeight=4 PerfScore 27.00
G_M42867_IG11:
test rdi, rdi
jl G_M42867_IG28
mov r8, rdi
jmp SHORT G_M42867_IG13
align [0 bytes for IG21]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M42867_IG12:
xor r8d, r8d
;; size=3 bbWeight=0.50 PerfScore 0.12
G_M42867_IG13:
test r13d, r13d
jne SHORT G_M42867_IG17
;; size=5 bbWeight=1 PerfScore 1.25
G_M42867_IG14:
mov rdi, r15
mov esi, ebx
mov qword ptr [rbp-0xA0], r8
mov rdx, r8
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r9]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M42867_IG15
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M42867_IG16
;; size=42 bbWeight=0.50 PerfScore 5.38
G_M42867_IG15:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M42867_IG16:
jmp SHORT G_M42867_IG18
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M42867_IG17:
mov rdi, r12
mov esi, r13d
mov qword ptr [rbp-0xA0], r8
;; size=13 bbWeight=0.50 PerfScore 0.75
G_M42867_IG18:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r9, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r9]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
test r14, r14
je G_M42867_IG23
;; size=39 bbWeight=1 PerfScore 6.00
G_M42867_IG19:
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Object:GetType():System.Type:this
call [rax]System.Object:GetType():System.Type:this
mov gword ptr [rbp-0xC0], rax
mov rdi, qword ptr [rax+0x18]
call System.RuntimeTypeHandle:GetElementTypeHandle(long):long
mov qword ptr [rbp-0xA8], rax
test rax, rax
je G_M42867_IG27
mov rdi, rax
call System.RuntimeTypeHandle:GetRuntimeTypeFromHandleIfExists(long):System.RuntimeType
test rax, rax
jne SHORT G_M42867_IG20
mov rdi, qword ptr [rbp-0xA8]
mov rax, 0xD1FFAB1E ; code for System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
call [rax]System.RuntimeTypeHandle:GetRuntimeTypeFromHandleSlow(long):System.RuntimeType
;; size=79 bbWeight=0.50 PerfScore 8.25
G_M42867_IG20:
mov rsi, 0xD1FFAB1E ; 'System.Byte'
cmp rax, rsi
jne G_M42867_IG27
mov rsi, bword ptr [rbp-0xC8]
mov edx, dword ptr [rbp-0xAC]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
call [rax]System.Numerics.Tensors.TensorSpanHelpers:ComputeStartOffsetSystemArray(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex]):long
mov qword ptr [rbp-0x30], rax
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M42867_IG22
;; size=59 bbWeight=0.50 PerfScore 4.88
G_M42867_IG21:
cmp edx, r13d
jae G_M42867_IG30
mov ecx, edx
mov r8, qword ptr [r12+8*rcx]
mov rcx, qword ptr [r15+8*rcx]
dec rcx
imul rcx, r8
add rsi, rcx
inc edx
cmp edx, ebx
jl SHORT G_M42867_IG21
;; size=35 bbWeight=4 PerfScore 38.00
G_M42867_IG22:
mov edx, eax
mov esi, esi
add rsi, rdx
mov edx, dword ptr [r14+0x08]
test edx, edx
jl G_M42867_IG31
- mov ecx, edx
- cmp rsi, rcx
+ cmp rsi, rdx
ja G_M42867_IG28
- mov esi, edx
+ mov rsi, rdx
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0x98]
mov r10, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [r10]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
mov rbx, bword ptr [rbp-0xB8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x98]
call CORINFO_HELP_ASSIGN_BYREF
mov ecx, 12
rep movsq
lea rax, bword ptr [r14+0x08]
mov rsi, qword ptr [r14]
mov ecx, dword ptr [rsi+0x04]
add rcx, -16
add rax, rcx
mov ecx, dword ptr [rbp-0x30]
add rax, rcx
mov bword ptr [rbx], rax
jmp SHORT G_M42867_IG24
- ;; size=122 bbWeight=0.50 PerfScore 24.00
+ ;; size=121 bbWeight=0.50 PerfScore 23.88
G_M42867_IG23:
cmp dword ptr [rbp-0xAC], 0
jne SHORT G_M42867_IG28
cmp qword ptr [rbp-0xA0], 0
jne SHORT G_M42867_IG28
xor eax, eax
mov rbx, bword ptr [rbp-0xB8]
mov qword ptr [rbx], rax
mov qword ptr [rbx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rbx+0x10], zmm0
vmovdqu ymmword ptr [rbx+0x50], ymm0
;; size=54 bbWeight=0.50 PerfScore 6.79
G_M42867_IG24:
cmp qword ptr [rbp-0xD0], 0xD1FFAB1E
je SHORT G_M42867_IG25
call CORINFO_HELP_FAIL_FAST
;; size=18 bbWeight=1 PerfScore 4.00
G_M42867_IG25:
nop
;; size=1 bbWeight=1 PerfScore 0.25
G_M42867_IG26:
lea rsp, [rbp-0x28]
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.50
G_M42867_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M42867_IG28:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M42867_IG29:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
G_M42867_IG30:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
G_M42867_IG31:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 867, prolog size 107, PerfScore 173.88, instruction count 223, allocated bytes for code 867 (MethodHash=7e5e588c) for method System.Numerics.Tensors.TensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 866, prolog size 107, PerfScore 173.75, instruction count 222, allocated bytes for code 866 (MethodHash=7e5e588c) for method System.Numerics.Tensors.TensorSpan`1[ubyte]:.ctor(System.Array,System.ReadOnlySpan`1[System.Buffers.NIndex],System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================