forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JitDiff X64] [EgorBo] Revert potential UB due to aliasing + more WB removals #929
Comments
Top method regressions69 (53.08 % of base) - System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int,int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this ; Assembly listing for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int,int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 4, 4 ) ref -> rdi this class-hnd single-def <System.Text.RegularExpressions.Regex>
-; V01 RetBuf [V01,T00] ( 11, 11 ) byref -> rsi single-def
+; V00 this [V00,T02] ( 4, 4 ) ref -> [rbp-0x38] this class-hnd single-def <System.Text.RegularExpressions.Regex>
+; V01 RetBuf [V01,T00] ( 11, 11 ) byref -> rbx single-def
;* V02 arg1 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
; V03 arg2 [V03,T01] ( 5, 5 ) int -> r8 single-def
-; V04 arg3 [V04,T03] ( 4, 4 ) int -> r9 single-def
+; V04 arg3 [V04,T03] ( 4, 4 ) int -> r15 single-def
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V06 tmp1 [V06 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V07 tmp2 [V07,T09] ( 0, 0 ) struct (48) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Text.RegularExpressions.Regex+ValueSplitEnumerator>
;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-; V09 tmp4 [V09,T06] ( 2, 4 ) ubyte -> rax "Inlining Arg"
+; V09 tmp4 [V09,T06] ( 2, 4 ) ubyte -> rsi "Inlining Arg"
;* V10 tmp5 [V10 ] ( 0, 0 ) byref -> zero-ref
;* V11 tmp6 [V11 ] ( 0, 0 ) byref -> zero-ref
-; V12 tmp7 [V12,T07] ( 2, 2 ) int -> rax
+; V12 tmp7 [V12,T07] ( 2, 2 ) int -> r12
;* V13 tmp8 [V13 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V14 tmp9 [V14 ] ( 0, 0 ) byref -> zero-ref
;* V15 tmp10 [V15 ] ( 0, 0 ) byref -> zero-ref
-; V16 tmp11 [V16,T08] ( 2, 2 ) int -> r8
-; V17 tmp12 [V17,T05] ( 2, 2 ) byref -> rdx single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-; V18 tmp13 [V18,T04] ( 4, 4 ) int -> rcx single-def "field V02._length (fldOffset=0x8)" P-INDEP
+; V16 tmp11 [V16,T08] ( 2, 2 ) int -> [rbp-0x2C] spill-single-def
+; V17 tmp12 [V17,T05] ( 2, 2 ) byref -> r13 single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+; V18 tmp13 [V18,T04] ( 4, 4 ) int -> r14 single-def "field V02._length (fldOffset=0x8)" P-INDEP
;* V19 tmp14 [V19 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP
;* V20 tmp15 [V20 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
;* V21 tmp16 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP
;* V22 tmp17 [V22 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref "field V13.Item1 (fldOffset=0x0)" P-INDEP
;* V24 tmp19 [V24 ] ( 0, 0 ) int -> zero-ref "field V13.Item2 (fldOffset=0x4)" P-INDEP
;* V25 tmp20 [V25 ] ( 0, 0 ) ref -> zero-ref single-def "V07.[000..008)"
;* V26 tmp21 [V26 ] ( 0, 0 ) int -> zero-ref "V07.[008..012)"
;* V27 tmp22 [V27 ] ( 0, 0 ) int -> zero-ref "V07.[012..016)"
;* V28 tmp23 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "V07.[016..024)"
;* V29 tmp24 [V29 ] ( 0, 0 ) int -> zero-ref "V07.[024..028)"
;* V30 tmp25 [V30 ] ( 0, 0 ) int -> zero-ref "V07.[032..036)"
;* V31 tmp26 [V31 ] ( 0, 0 ) int -> zero-ref "V07.[036..040)"
;
-; Lcl frame size = 0
+; Lcl frame size = 24
G_M22749_IG01:
push rbp
- mov rbp, rsp
- ;; size=4 bbWeight=1 PerfScore 1.25
+ push r15
+ push r14
+ push r13
+ push r12
+ push rbx
+ sub rsp, 24
+ lea rbp, [rsp+0x40]
+ mov rbx, rsi
+ mov r13, rdx
+ mov r14d, ecx
+ mov r15d, r9d
+ ;; size=31 bbWeight=1 PerfScore 7.75
G_M22749_IG02:
test r8d, r8d
- jl SHORT G_M22749_IG05
- cmp r9d, ecx
+ jl G_M22749_IG05
+ cmp r15d, r14d
ja SHORT G_M22749_IG04
+ mov gword ptr [rbp-0x38], rdi
test byte ptr [rdi+0x40], 64
- setne al
- movzx rax, al
- xor r10d, r10d
- test eax, eax
- mov eax, r10d
- cmovne eax, ecx
- mov r10d, 0xD1FFAB1E
- test r8d, r8d
- cmove r8d, r10d
- mov gword ptr [rsi], rdi
- mov dword ptr [rsi+0x08], r9d
- mov dword ptr [rsi+0x0C], r8d
- mov bword ptr [rsi+0x10], rdx
- mov dword ptr [rsi+0x18], ecx
- mov dword ptr [rsi+0x20], eax
- mov dword ptr [rsi+0x24], -1
+ setne sil
+ movzx rsi, sil
xor eax, eax
- mov qword ptr [rsi+0x28], rax
- mov rax, rsi
- ;; size=81 bbWeight=1 PerfScore 17.00
+ test esi, esi
+ mov r12d, eax
+ cmovne r12d, r14d
+ mov esi, 0xD1FFAB1E
+ test r8d, r8d
+ mov eax, esi
+ cmovne eax, r8d
+ mov dword ptr [rbp-0x2C], eax
+ mov rsi, gword ptr [rbp-0x38]
+ mov rdi, rbx
+ call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov dword ptr [rbx+0x08], r15d
+ mov r15d, dword ptr [rbp-0x2C]
+ mov dword ptr [rbx+0x0C], r15d
+ mov bword ptr [rbx+0x10], r13
+ mov dword ptr [rbx+0x18], r14d
+ mov dword ptr [rbx+0x20], r12d
+ mov dword ptr [rbx+0x24], -1
+ xor eax, eax
+ mov qword ptr [rbx+0x28], rax
+ mov rax, rbx
+ ;; size=110 bbWeight=1 PerfScore 21.50
G_M22749_IG03:
+ add rsp, 24
+ pop rbx
+ pop r12
+ pop r13
+ pop r14
+ pop r15
pop rbp
ret
- ;; size=2 bbWeight=1 PerfScore 1.50
+ ;; size=15 bbWeight=1 PerfScore 4.25
G_M22749_IG04:
mov edi, 14
xor esi, esi
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
call [rax]System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
int3
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M22749_IG05:
mov edi, 3
mov esi, 1
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
call [rax]System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
int3
;; size=23 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 130, prolog size 4, PerfScore 23.75, instruction count 38, allocated bytes for code 130 (MethodHash=9224a722) for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int,int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
+; Total bytes of code 199, prolog size 19, PerfScore 37.50, instruction count 60, allocated bytes for code 199 (MethodHash=9224a722) for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int,int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
; ============================================================ 68 (47.55 % of base) - System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this ; Assembly listing for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 3 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T03] ( 4, 4 ) ref -> rdi this class-hnd single-def <System.Text.RegularExpressions.Regex>
-; V01 RetBuf [V01,T00] ( 11, 11 ) byref -> rsi single-def
+; V00 this [V00,T03] ( 4, 4 ) ref -> [rbp-0x38] this class-hnd single-def <System.Text.RegularExpressions.Regex>
+; V01 RetBuf [V01,T00] ( 11, 11 ) byref -> rbx single-def
;* V02 arg1 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
; V03 arg2 [V03,T01] ( 5, 5 ) int -> r8 single-def
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 tmp1 [V05 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V06 tmp2 [V06 ] ( 0, 0 ) ref -> zero-ref single-def
;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref <System.ReadOnlySpan`1[ushort]>
;* V08 tmp4 [V08 ] ( 0, 0 ) int -> zero-ref
;* V09 tmp5 [V09 ] ( 0, 0 ) ref -> zero-ref single-def
;* V10 tmp6 [V10 ] ( 0, 0 ) struct (16) zero-ref <System.ReadOnlySpan`1[ushort]>
;* V11 tmp7 [V11 ] ( 0, 0 ) int -> zero-ref
-; V12 tmp8 [V12,T06] ( 3, 3 ) int -> r9
+; V12 tmp8 [V12,T06] ( 3, 3 ) int -> r13
;* V13 tmp9 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
;* V14 tmp10 [V14 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V15 tmp11 [V15,T10] ( 0, 0 ) struct (48) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Text.RegularExpressions.Regex+ValueSplitEnumerator>
;* V16 tmp12 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-; V17 tmp13 [V17,T05] ( 2, 4 ) ubyte -> rax "Inlining Arg"
+; V17 tmp13 [V17,T05] ( 2, 4 ) ubyte -> rsi "Inlining Arg"
;* V18 tmp14 [V18 ] ( 0, 0 ) byref -> zero-ref
;* V19 tmp15 [V19 ] ( 0, 0 ) byref -> zero-ref
-; V20 tmp16 [V20,T08] ( 2, 2 ) int -> rax
+; V20 tmp16 [V20,T08] ( 2, 2 ) int -> r12
;* V21 tmp17 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V22 tmp18 [V22 ] ( 0, 0 ) byref -> zero-ref
;* V23 tmp19 [V23 ] ( 0, 0 ) byref -> zero-ref
-; V24 tmp20 [V24,T09] ( 2, 2 ) int -> r8
-; V25 tmp21 [V25,T04] ( 2, 2 ) byref -> rdx single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-; V26 tmp22 [V26,T02] ( 5, 5 ) int -> rcx single-def "field V02._length (fldOffset=0x8)" P-INDEP
+; V24 tmp20 [V24,T09] ( 2, 2 ) int -> [rbp-0x2C] spill-single-def
+; V25 tmp21 [V25,T04] ( 2, 2 ) byref -> r14 single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp22 [V26,T02] ( 5, 5 ) int -> r15 single-def "field V02._length (fldOffset=0x8)" P-INDEP
;* V27 tmp23 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp24 [V28 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V29 tmp25 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp26 [V30 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;* V31 tmp27 [V31 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V32 tmp28 [V32 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
;* V33 tmp29 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V34 tmp30 [V34 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
;* V35 tmp31 [V35 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP
;* V36 tmp32 [V36 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
;* V37 tmp33 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP
;* V38 tmp34 [V38 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;* V39 tmp35 [V39 ] ( 0, 0 ) int -> zero-ref "field V21.Item1 (fldOffset=0x0)" P-INDEP
;* V40 tmp36 [V40 ] ( 0, 0 ) int -> zero-ref "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V41 tmp37 [V41 ] ( 0, 0 ) ref -> zero-ref single-def "V15.[000..008)"
;* V42 tmp38 [V42 ] ( 0, 0 ) int -> zero-ref "V15.[008..012)"
;* V43 tmp39 [V43 ] ( 0, 0 ) int -> zero-ref "V15.[012..016)"
;* V44 tmp40 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "V15.[016..024)"
;* V45 tmp41 [V45 ] ( 0, 0 ) int -> zero-ref "V15.[024..028)"
;* V46 tmp42 [V46 ] ( 0, 0 ) int -> zero-ref "V15.[032..036)"
;* V47 tmp43 [V47 ] ( 0, 0 ) int -> zero-ref "V15.[036..040)"
-; V48 cse0 [V48,T07] ( 3, 3 ) int -> rax "CSE #02: moderate"
+; V48 cse0 [V48,T07] ( 3, 3 ) int -> rsi "CSE #02: moderate"
;
-; Lcl frame size = 0
+; Lcl frame size = 24
G_M53762_IG01:
push rbp
- mov rbp, rsp
- ;; size=4 bbWeight=1 PerfScore 1.25
+ push r15
+ push r14
+ push r13
+ push r12
+ push rbx
+ sub rsp, 24
+ lea rbp, [rsp+0x40]
+ mov rbx, rsi
+ mov r14, rdx
+ mov r15d, ecx
+ ;; size=28 bbWeight=1 PerfScore 7.50
G_M53762_IG02:
- mov eax, dword ptr [rdi+0x40]
- and eax, 64
- xor r9d, r9d
- test eax, eax
- cmovne r9d, ecx
- test r8d, r8d
- jl SHORT G_M53762_IG05
- cmp r9d, ecx
- ja SHORT G_M53762_IG04
- test eax, eax
- setne al
- movzx rax, al
- xor r10d, r10d
- test eax, eax
- mov eax, r10d
- cmovne eax, ecx
- mov r10d, 0xD1FFAB1E
- test r8d, r8d
- cmove r8d, r10d
- mov gword ptr [rsi], rdi
- mov dword ptr [rsi+0x08], r9d
- mov dword ptr [rsi+0x0C], r8d
- mov bword ptr [rsi+0x10], rdx
- mov dword ptr [rsi+0x18], ecx
- mov dword ptr [rsi+0x20], eax
- mov dword ptr [rsi+0x24], -1
+ mov gword ptr [rbp-0x38], rdi
+ mov esi, dword ptr [rdi+0x40]
+ and esi, 64
xor eax, eax
- mov qword ptr [rsi+0x28], rax
- mov rax, rsi
- ;; size=94 bbWeight=1 PerfScore 17.25
+ test esi, esi
+ mov r13d, eax
+ cmovne r13d, r15d
+ test r8d, r8d
+ jl G_M53762_IG05
+ cmp r13d, r15d
+ ja SHORT G_M53762_IG04
+ test esi, esi
+ setne sil
+ movzx rsi, sil
+ xor eax, eax
+ test esi, esi
+ mov r12d, eax
+ cmovne r12d, r15d
+ mov esi, 0xD1FFAB1E
+ test r8d, r8d
+ mov eax, esi
+ cmovne eax, r8d
+ mov dword ptr [rbp-0x2C], eax
+ mov rsi, gword ptr [rbp-0x38]
+ mov rdi, rbx
+ call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov dword ptr [rbx+0x08], r13d
+ mov r13d, dword ptr [rbp-0x2C]
+ mov dword ptr [rbx+0x0C], r13d
+ mov bword ptr [rbx+0x10], r14
+ mov dword ptr [rbx+0x18], r15d
+ mov dword ptr [rbx+0x20], r12d
+ mov dword ptr [rbx+0x24], -1
+ xor eax, eax
+ mov qword ptr [rbx+0x28], rax
+ mov rax, rbx
+ ;; size=125 bbWeight=1 PerfScore 22.00
G_M53762_IG03:
+ add rsp, 24
+ pop rbx
+ pop r12
+ pop r13
+ pop r14
+ pop r15
pop rbp
ret
- ;; size=2 bbWeight=1 PerfScore 1.50
+ ;; size=15 bbWeight=1 PerfScore 4.25
G_M53762_IG04:
mov edi, 14
xor esi, esi
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
call [rax]System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
int3
;; size=20 bbWeight=0.50 PerfScore 2.00
G_M53762_IG05:
mov edi, 3
mov esi, 1
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
call [rax]System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
int3
;; size=23 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 143, prolog size 4, PerfScore 24.00, instruction count 43, allocated bytes for code 143 (MethodHash=08172dfd) for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
+; Total bytes of code 211, prolog size 19, PerfScore 37.75, instruction count 65, allocated bytes for code 211 (MethodHash=08172dfd) for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort],int):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
; ============================================================ 54 (7.68 % of base) - System.Buffers.SequenceReader`1[double]:GetNextSpan():this ; Assembly listing for method System.Buffers.SequenceReader`1[double]:GetNextSpan():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; 24 single block inlinees; 7 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 18, 46 ) byref -> rbx this single-def
;* V01 loc0 [V01 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op <System.Buffers.ReadOnlySequence`1[double]>
;* V02 loc1 [V02 ] ( 0, 0 ) struct (16) zero-ref <System.SequencePosition>
;* V03 loc2 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlyMemory`1[double]>
;* V04 loc3 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[double]>
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V06 tmp1 [V06 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[double]>
-; V07 tmp2 [V07,T02] ( 4, 28 ) byref -> [rbp-0x48] spill-single-def "Inlining Arg"
+; V07 tmp2 [V07,T02] ( 4, 28 ) byref -> [rbp-0x50] spill-single-def "Inlining Arg"
;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.SequencePosition>
-; V09 tmp4 [V09,T24] ( 2, 8 ) int -> rdx
+; V09 tmp4 [V09,T24] ( 2, 8 ) int -> [rbp-0x2C] spill-single-def
;* V10 tmp5 [V10 ] ( 0, 0 ) int -> zero-ref
; V11 tmp6 [V11,T21] ( 3, 8 ) ubyte -> registers "Inline return value spill temp"
; V12 tmp7 [V12,T10] ( 4, 12 ) ref -> rsi class-hnd "Inline stloc first use temp" <System.Object>
; V13 tmp8 [V13,T32] ( 3, 6 ) int -> rdi "Inline stloc first use temp"
;* V14 tmp9 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Object>
-; V15 tmp10 [V15,T01] ( 14, 28 ) int -> [rbp-0x2C] spill-single-def "Inline stloc first use temp"
+; V15 tmp10 [V15,T01] ( 14, 28 ) int -> [rbp-0x30] spill-single-def "Inline stloc first use temp"
; V16 tmp11 [V16,T19] ( 4, 8 ) int -> r12 "Inline stloc first use temp"
;* V17 tmp12 [V17 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SR] multireg-ret "Return value temp for multireg return" <System.Memory`1[double]>
; V18 tmp13 [V18 ] ( 4, 8 ) struct (16) [rbp-0x40] do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[double]>
;* V19 tmp14 [V19 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Memory`1[double]>
;* V20 tmp15 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[double]>
; V21 tmp16 [V21,T09] ( 6, 12 ) ref -> rax class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[double]>
;* V22 tmp17 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlyMemory`1[double]>
; V23 tmp18 [V23,T30] ( 3, 6 ) ref -> rcx class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[double]>
;* V24 tmp19 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.SequencePosition>
;* V25 tmp20 [V25 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V26 tmp21 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[double]>
;* V27 tmp22 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
-; V28 tmp23 [V28,T25] ( 2, 8 ) int -> rax "Inlining Arg"
-; V29 tmp24 [V29,T26] ( 2, 8 ) int -> rdx "Inlining Arg"
+; V28 tmp23 [V28,T25] ( 2, 8 ) int -> rdi "Inlining Arg"
+; V29 tmp24 [V29,T26] ( 2, 8 ) int -> rsi "Inlining Arg"
; V30 tmp25 [V30,T13] ( 3, 12 ) int -> r12 "Inlining Arg"
;* V31 tmp26 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[double]>
;* V32 tmp27 [V32 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
-; V33 tmp28 [V33,T27] ( 2, 8 ) int -> rcx "Inlining Arg"
-; V34 tmp29 [V34,T04] ( 4, 16 ) ref -> rdi class-hnd "Inlining Arg" <double[]>
+; V33 tmp28 [V33,T27] ( 2, 8 ) int -> rdi "Inlining Arg"
+; V34 tmp29 [V34,T04] ( 4, 16 ) ref -> r8 class-hnd "Inlining Arg" <double[]>
; V35 tmp30 [V35,T05] ( 4, 16 ) int -> r12 "Inlining Arg"
; V36 tmp31 [V36,T14] ( 3, 12 ) int -> r12 "Inlining Arg"
;* V37 tmp32 [V37 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Memory`1[double]>
;* V38 tmp33 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
; V39 tmp34 [V39,T28] ( 2, 8 ) int -> r15 "Inlining Arg"
;* V40 tmp35 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Memory`1[double]>
;* V41 tmp36 [V41 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[double]>
-; V42 tmp37 [V42,T51] ( 6, 3 ) byref -> r14 "Inline stloc first use temp"
-; V43 tmp38 [V43,T52] ( 6, 3 ) int -> r13 "Inline stloc first use temp"
+; V42 tmp37 [V42,T51] ( 6, 3 ) byref -> r13 "Inline stloc first use temp"
+; V43 tmp38 [V43,T52] ( 6, 3 ) int -> rax "Inline stloc first use temp"
;* V44 tmp39 [V44 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Object>
;* V45 tmp40 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[double]>
;* V46 tmp41 [V46 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[double]>
;* V47 tmp42 [V47 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Span`1[double]>
;* V48 tmp43 [V48 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline stloc first use temp" <System.Span`1[double]>
-; V49 tmp44 [V49,T56] ( 3, 1.50) long -> rax "Inline stloc first use temp"
+; V49 tmp44 [V49,T56] ( 3, 1.50) long -> rcx "Inline stloc first use temp"
;* V50 tmp45 [V50 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V51 tmp46 [V51 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <double[]>
;* V52 tmp47 [V52 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <double[]>
-; V53 tmp48 [V53,T53] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V53 tmp48 [V53,T53] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
;* V54 tmp49 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[double]>
;* V55 tmp50 [V55 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.ReadOnlySpan`1[double]>
; V56 tmp51 [V56,T54] ( 2, 2 ) ref -> rsi single-def "field V01._startObject (fldOffset=0x0)" P-INDEP
; V57 tmp52 [V57,T03] ( 11, 20.50) ref -> r15 "field V01._endObject (fldOffset=0x8)" P-INDEP
; V58 tmp53 [V58,T35] ( 2, 6 ) int -> rdi "field V01._startInteger (fldOffset=0x10)" P-INDEP
; V59 tmp54 [V59,T22] ( 3, 8 ) int -> r12 "field V01._endInteger (fldOffset=0x14)" P-INDEP
; V60 tmp55 [V60,T23] ( 2, 8 ) ref -> r14 "field V02._object (fldOffset=0x0)" P-INDEP
; V61 tmp56 [V61,T29] ( 2, 8 ) int -> r13 "field V02._integer (fldOffset=0x8)" P-INDEP
-; V62 tmp57 [V62,T08] ( 11, 13 ) ref -> rdi "field V03._object (fldOffset=0x0)" P-INDEP
+; V62 tmp57 [V62,T08] ( 11, 13 ) ref -> registers "field V03._object (fldOffset=0x0)" P-INDEP
; V63 tmp58 [V63,T15] ( 6, 10.50) int -> r15 "field V03._index (fldOffset=0x8)" P-INDEP
-; V64 tmp59 [V64,T06] ( 8, 15 ) int -> registers "field V03._length (fldOffset=0xc)" P-INDEP
+; V64 tmp59 [V64,T06] ( 8, 15 ) int -> [rbp-0x44] "field V03._length (fldOffset=0xc)" P-INDEP
;* V65 tmp60 [V65 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
;* V66 tmp61 [V66 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
;* V67 tmp62 [V67 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP
;* V68 tmp63 [V68 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
-; V69 tmp64 [V69,T17] ( 3, 10 ) ref -> [rbp-0x50] "field V08._object (fldOffset=0x0)" P-INDEP
+; V69 tmp64 [V69,T17] ( 3, 10 ) ref -> [rbp-0x58] "field V08._object (fldOffset=0x0)" P-INDEP
;* V70 tmp65 [V70,T36] ( 0, 0 ) int -> zero-ref "field V08._integer (fldOffset=0x8)" P-INDEP
; V71 tmp66 [V71,T38] ( 2, 4 ) ref -> [rbp-0x40] do-not-enreg[] "field V18._object (fldOffset=0x0)" P-DEP
; V72 tmp67 [V72,T43] ( 2, 4 ) int -> [rbp-0x38] do-not-enreg[] "field V18._index (fldOffset=0x8)" P-DEP
; V73 tmp68 [V73,T44] ( 2, 4 ) int -> [rbp-0x34] do-not-enreg[] "field V18._length (fldOffset=0xc)" P-DEP
;* V74 tmp69 [V74 ] ( 0, 0 ) ref -> zero-ref "field V19._object (fldOffset=0x0)" P-INDEP
;* V75 tmp70 [V75 ] ( 0, 0 ) int -> zero-ref "field V19._index (fldOffset=0x8)" P-INDEP
;* V76 tmp71 [V76 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0xc)" P-INDEP
-; V77 tmp72 [V77,T31] ( 3, 6 ) ref -> rdi "field V20._object (fldOffset=0x0)" P-INDEP
+; V77 tmp72 [V77,T31] ( 3, 6 ) ref -> r8 "field V20._object (fldOffset=0x0)" P-INDEP
; V78 tmp73 [V78,T33] ( 3, 6 ) int -> r15 "field V20._index (fldOffset=0x8)" P-INDEP
; V79 tmp74 [V79,T34] ( 3, 6 ) int -> r12 "field V20._length (fldOffset=0xc)" P-INDEP
-; V80 tmp75 [V80,T18] ( 4, 8 ) ref -> rdi "field V22._object (fldOffset=0x0)" P-INDEP
-; V81 tmp76 [V81,T20] ( 4, 8 ) int -> rcx "field V22._index (fldOffset=0x8)" P-INDEP
-; V82 tmp77 [V82,T16] ( 5, 10 ) int -> rdx "field V22._length (fldOffset=0xc)" P-INDEP
+; V80 tmp75 [V80,T18] ( 4, 8 ) ref -> r8 "field V22._object (fldOffset=0x0)" P-INDEP
+; V81 tmp76 [V81,T20] ( 4, 8 ) int -> rdi "field V22._index (fldOffset=0x8)" P-INDEP
+; V82 tmp77 [V82,T16] ( 5, 10 ) int -> rsi "field V22._length (fldOffset=0xc)" P-INDEP
; V83 tmp78 [V83,T39] ( 2, 4 ) ref -> rcx "field V24._object (fldOffset=0x0)" P-INDEP
;* V84 tmp79 [V84,T55] ( 0, 0 ) int -> zero-ref "field V24._integer (fldOffset=0x8)" P-INDEP
-; V85 tmp80 [V85,T40] ( 2, 4 ) ref -> rdi "field V26._object (fldOffset=0x0)" P-INDEP
+; V85 tmp80 [V85,T40] ( 2, 4 ) ref -> rax "field V26._object (fldOffset=0x0)" P-INDEP
; V86 tmp81 [V86,T45] ( 2, 4 ) int -> r15 "field V26._index (fldOffset=0x8)" P-INDEP
-; V87 tmp82 [V87,T46] ( 2, 4 ) int -> rdx "field V26._length (fldOffset=0xc)" P-INDEP
-; V88 tmp83 [V88,T41] ( 2, 4 ) ref -> rdi "field V31._object (fldOffset=0x0)" P-INDEP
+; V87 tmp82 [V87,T46] ( 2, 4 ) int -> rsi "field V26._length (fldOffset=0xc)" P-INDEP
+; V88 tmp83 [V88,T41] ( 2, 4 ) ref -> r8 "field V31._object (fldOffset=0x0)" P-INDEP
; V89 tmp84 [V89,T47] ( 2, 4 ) int -> r15 "field V31._index (fldOffset=0x8)" P-INDEP
; V90 tmp85 [V90,T48] ( 2, 4 ) int -> r12 "field V31._length (fldOffset=0xc)" P-INDEP
-; V91 tmp86 [V91,T42] ( 2, 4 ) ref -> rdi "field V37._object (fldOffset=0x0)" P-INDEP
+; V91 tmp86 [V91,T42] ( 2, 4 ) ref -> rax "field V37._object (fldOffset=0x0)" P-INDEP
; V92 tmp87 [V92,T49] ( 2, 4 ) int -> r15 "field V37._index (fldOffset=0x8)" P-INDEP
; V93 tmp88 [V93,T50] ( 2, 4 ) int -> r12 "field V37._length (fldOffset=0xc)" P-INDEP
;* V94 tmp89 [V94 ] ( 0, 0 ) ref -> zero-ref "field V40._object (fldOffset=0x0)" P-INDEP
;* V95 tmp90 [V95 ] ( 0, 0 ) int -> zero-ref "field V40._index (fldOffset=0x8)" P-INDEP
;* V96 tmp91 [V96 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0xc)" P-INDEP
;* V97 tmp92 [V97 ] ( 0, 0 ) byref -> zero-ref "field V41._reference (fldOffset=0x0)" P-INDEP
;* V98 tmp93 [V98 ] ( 0, 0 ) int -> zero-ref "field V41._length (fldOffset=0x8)" P-INDEP
-; V99 tmp94 [V99,T57] ( 2, 1 ) byref -> r14 single-def "field V45._reference (fldOffset=0x0)" P-INDEP
-; V100 tmp95 [V100,T59] ( 2, 1 ) int -> r13 "field V45._length (fldOffset=0x8)" P-INDEP
+; V99 tmp94 [V99,T57] ( 2, 1 ) byref -> r13 single-def "field V45._reference (fldOffset=0x0)" P-INDEP
+; V100 tmp95 [V100,T59] ( 2, 1 ) int -> rax "field V45._length (fldOffset=0x8)" P-INDEP
;* V101 tmp96 [V101 ] ( 0, 0 ) byref -> zero-ref "field V47._reference (fldOffset=0x0)" P-DEP
;* V102 tmp97 [V102 ] ( 0, 0 ) int -> zero-ref "field V47._length (fldOffset=0x8)" P-DEP
-; V103 tmp98 [V103,T58] ( 2, 1 ) byref -> r14 "field V48._reference (fldOffset=0x0)" P-INDEP
-; V104 tmp99 [V104,T60] ( 2, 1 ) int -> r13 "field V48._length (fldOffset=0x8)" P-INDEP
+; V103 tmp98 [V103,T58] ( 2, 1 ) byref -> r13 "field V48._reference (fldOffset=0x0)" P-INDEP
+; V104 tmp99 [V104,T60] ( 2, 1 ) int -> rax "field V48._length (fldOffset=0x8)" P-INDEP
;* V105 tmp100 [V105 ] ( 0, 0 ) byref -> zero-ref single-def "field V54._reference (fldOffset=0x0)" P-INDEP
;* V106 tmp101 [V106 ] ( 0, 0 ) int -> zero-ref "field V54._length (fldOffset=0x8)" P-INDEP
;* V107 tmp102 [V107 ] ( 0, 0 ) byref -> zero-ref "field V55._reference (fldOffset=0x0)" P-INDEP
;* V108 tmp103 [V108 ] ( 0, 0 ) int -> zero-ref "field V55._length (fldOffset=0x8)" P-INDEP
; V109 tmp104 [V109,T11] ( 3, 12 ) ref -> rax "argument with side effect"
; V110 cse0 [V110,T12] ( 3, 12 ) ref -> rsi "CSE #01: moderate"
-; V111 rat0 [V111,T07] ( 5, 15 ) ref -> rdi "replacement local"
-; V112 rat1 [V112,T37] ( 3, 5 ) long -> r8 "CSE for expectedClsNode"
+; V111 rat0 [V111,T07] ( 5, 15 ) ref -> r8 "replacement local"
+; V112 rat1 [V112,T37] ( 3, 5 ) long -> rdi "CSE for expectedClsNode"
;
-; Lcl frame size = 40
+; Lcl frame size = 56
G_M42350_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 40
- lea rbp, [rsp+0x50]
+ sub rsp, 56
+ lea rbp, [rsp+0x60]
xor eax, eax
mov qword ptr [rbp-0x40], rax
mov rbx, rdi
;; size=28 bbWeight=1 PerfScore 8.25
G_M42350_IG02:
mov rsi, gword ptr [rbx+0x38]
mov r15, gword ptr [rbx+0x40]
cmp rsi, r15
- jne G_M42350_IG22
+ jne G_M42350_IG24
;; size=17 bbWeight=1 PerfScore 5.25
G_M42350_IG03:
mov byte ptr [rbx+0x14], 0
jmp SHORT G_M42350_IG08
;; size=6 bbWeight=0.50 PerfScore 1.50
G_M42350_IG04:
- xor r14, r14
- xor r13d, r13d
- test rdi, rdi
+ xor r13, r13
+ xor eax, eax
+ test r12, r12
je SHORT G_M42350_IG07
- mov rax, qword ptr [rdi]
- test dword ptr [rax], 0xD1FFAB1E
+ mov rdi, qword ptr [r12]
+ test dword ptr [rdi], 0xD1FFAB1E
jne SHORT G_M42350_IG05
- mov rax, qword ptr [rdi]
+ mov rdi, r12
+ mov rax, qword ptr [r12]
mov rax, qword ptr [rax+0x40]
call [rax+0x28]System.Buffers.MemoryManager`1[double]:GetSpan():System.Span`1[double]:this
- mov r14, rax
- mov r13d, edx
+ mov r13, rax
+ mov eax, edx
jmp SHORT G_M42350_IG06
- ;; size=40 bbWeight=0.50 PerfScore 8.62
+ ;; size=43 bbWeight=0.50 PerfScore 8.75
G_M42350_IG05:
- lea r14, bword ptr [rdi+0x10]
- mov r13d, dword ptr [rdi+0x08]
- ;; size=8 bbWeight=0.50 PerfScore 1.25
+ lea r13, bword ptr [r12+0x10]
+ mov eax, dword ptr [r12+0x08]
+ ;; size=10 bbWeight=0.50 PerfScore 1.25
G_M42350_IG06:
and r15d, 0xD1FFAB1E
- mov eax, r15d
- mov ecx, r12d
- add rcx, rax
- mov edx, r13d
- cmp rcx, rdx
+ mov ecx, r15d
+ mov edx, r14d
+ add rdx, rcx
+ mov eax, eax
+ cmp rdx, rax
ja SHORT G_M42350_IG09
- lea r14, bword ptr [r14+8*rax]
- mov r13d, r12d
- ;; size=31 bbWeight=0.50 PerfScore 1.62
+ lea r13, bword ptr [r13+8*rcx]
+ mov eax, r14d
+ ;; size=31 bbWeight=0.50 PerfScore 2.38
G_M42350_IG07:
- mov bword ptr [rbx+0x50], r14
- mov dword ptr [rbx+0x58], r13d
+ mov bword ptr [rbx+0x50], r13
+ mov dword ptr [rbx+0x58], eax
xor eax, eax
mov dword ptr [rbx+0x10], eax
- ;; size=13 bbWeight=0.50 PerfScore 1.62
+ ;; size=12 bbWeight=0.50 PerfScore 1.62
G_M42350_IG08:
- add rsp, 40
+ add rsp, 56
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
G_M42350_IG09:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M42350_IG10:
- mov rdi, r15
- test rdi, rdi
+ mov r8, r15
+ test r8, r8
je SHORT G_M42350_IG13
;; size=8 bbWeight=2 PerfScore 3.00
G_M42350_IG11:
- mov r8, 0xD1FFAB1E ; double[]
- cmp qword ptr [rdi], r8
+ mov rdi, 0xD1FFAB1E ; double[]
+ cmp qword ptr [r8], rdi
je SHORT G_M42350_IG13
;; size=15 bbWeight=1 PerfScore 4.25
G_M42350_IG12:
mov rsi, r15
- mov rdi, r8
mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTARRAY
call [r8]CORINFO_HELP_CHKCASTARRAY
- mov rdi, rax
- ;; size=22 bbWeight=0.50 PerfScore 2.00
+ mov r8, rax
+ mov rax, bword ptr [rbp-0x50]
+ ;; size=23 bbWeight=0.50 PerfScore 2.38
G_M42350_IG13:
- mov edx, dword ptr [rbp-0x2C]
+ mov edx, dword ptr [rbp-0x30]
sub r12d, edx
- test rdi, rdi
+ test r8, r8
je SHORT G_M42350_IG14
mov esi, edx
- mov r8d, r12d
- add rsi, r8
- mov r8d, dword ptr [rdi+0x08]
- cmp rsi, r8
+ mov edi, r12d
+ add rsi, rdi
+ mov edi, dword ptr [r8+0x08]
+ cmp rsi, rdi
ja SHORT G_M42350_IG09
mov r15d, edx
jmp SHORT G_M42350_IG15
;; size=33 bbWeight=2 PerfScore 17.50
G_M42350_IG14:
- mov edi, edx
- or edi, r12d
+ mov r8d, edx
+ or r8d, r12d
jne SHORT G_M42350_IG09
- xor rdi, rdi
+ xor r8, r8
xor r15d, r15d
xor r12d, r12d
- ;; size=15 bbWeight=2 PerfScore 4.50
+ ;; size=17 bbWeight=2 PerfScore 4.50
G_M42350_IG15:
- mov eax, r12d
- mov r12, gword ptr [rbp-0x50]
+ mov rax, r8
+ mov ecx, r12d
+ mov r12, gword ptr [rbp-0x58]
jmp G_M42350_IG18
- ;; size=12 bbWeight=2 PerfScore 6.50
+ ;; size=15 bbWeight=2 PerfScore 7.00
G_M42350_IG16:
mov rdi, 0xD1FFAB1E ; System.Buffers.ReadOnlySequenceSegment`1[double]
mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
call [r8]CORINFO_HELP_CHKCASTCLASS
cmp rax, r15
jne SHORT G_M42350_IG17
- mov rdi, gword ptr [r15+0x18]
- mov ecx, dword ptr [r15+0x20]
- mov edx, dword ptr [r15+0x24]
- mov r15d, dword ptr [rbp-0x2C]
+ mov r8, gword ptr [r15+0x18]
+ mov edi, dword ptr [r15+0x20]
+ mov esi, dword ptr [r15+0x24]
+ mov r15d, dword ptr [rbp-0x30]
sub r12d, r15d
mov eax, r15d
- mov esi, r12d
- add rax, rsi
- cmp rax, rdx
- ja G_M42350_IG24
- add ecx, r15d
- mov r15d, ecx
- mov eax, r12d
- mov r12, gword ptr [rbp-0x50]
+ mov ecx, r12d
+ add rax, rcx
+ cmp rax, rsi
+ ja G_M42350_IG26
+ add edi, r15d
+ mov r15d, edi
+ mov rax, r8
+ mov ecx, r12d
+ mov r12, gword ptr [rbp-0x58]
jmp SHORT G_M42350_IG18
- ;; size=80 bbWeight=2 PerfScore 35.50
+ ;; size=83 bbWeight=2 PerfScore 36.00
G_M42350_IG17:
mov rcx, gword ptr [rax+0x08]
test rcx, rcx
- je G_M42350_IG25
+ je G_M42350_IG27
mov r12, rcx
- mov rdi, gword ptr [rax+0x18]
- mov ecx, dword ptr [rax+0x20]
- mov edx, dword ptr [rax+0x24]
- mov r15d, dword ptr [rbp-0x2C]
- cmp r15d, edx
- ja G_M42350_IG24
- lea eax, [rcx+r15]
- sub edx, r15d
- mov r15d, eax
- mov eax, edx
- ;; size=51 bbWeight=2 PerfScore 26.00
+ mov r8, gword ptr [rax+0x18]
+ mov edi, dword ptr [rax+0x20]
+ mov esi, dword ptr [rax+0x24]
+ mov r15d, dword ptr [rbp-0x30]
+ cmp r15d, esi
+ ja G_M42350_IG26
+ add edi, r15d
+ sub esi, r15d
+ mov rax, r8
+ mov r15d, edi
+ mov ecx, esi
+ ;; size=53 bbWeight=2 PerfScore 26.00
G_M42350_IG18:
- mov ecx, 1
- mov gword ptr [rbp-0x50], r12
- mov edx, ecx
- mov r12d, eax
- mov rax, bword ptr [rbp-0x48]
- jmp SHORT G_M42350_IG20
- ;; size=20 bbWeight=2 PerfScore 9.50
+ mov edx, 1
+ mov dword ptr [rbp-0x44], ecx
+ mov rcx, r12
+ mov r8d, edx
+ mov r12, rax
+ mov rax, bword ptr [rbp-0x50]
+ jmp SHORT G_M42350_IG22
+ ;; size=23 bbWeight=2 PerfScore 10.00
G_M42350_IG19:
- xor rdi, rdi
- xor r15d, r15d
- xor edx, edx
- xor r12d, r12d
- ;; size=10 bbWeight=2 PerfScore 2.00
+ mov rcx, gword ptr [rbp-0x58]
+ xor rdx, rdx
+ xor r12, r12
+ ;; size=9 bbWeight=2 PerfScore 3.00
G_M42350_IG20:
- mov rcx, gword ptr [rbp-0x50]
- mov gword ptr [rax], rcx
- xor ecx, ecx
- mov dword ptr [rax+0x08], ecx
- test dl, dl
+ xor r15d, r15d
+ ;; size=3 bbWeight=2 PerfScore 0.50
+G_M42350_IG21:
+ mov dword ptr [rbp-0x44], edx
+ xor edi, edi
+ xor r8d, r8d
+ ;; size=8 bbWeight=2 PerfScore 3.00
+G_M42350_IG22:
+ mov dword ptr [rbp-0x2C], r8d
+ mov rdi, rax
+ mov rsi, rcx
+ call CORINFO_HELP_CHECKED_ASSIGN_REF
+ xor edi, edi
+ mov rax, bword ptr [rbp-0x50]
+ mov dword ptr [rax+0x08], edi
+ cmp byte ptr [rbp-0x2C], 0
je G_M42350_IG03
mov gword ptr [rbx+0x18], r14
mov dword ptr [rbx+0x20], r13d
- test r12d, r12d
+ mov r14d, dword ptr [rbp-0x44]
+ test r14d, r14d
jg G_M42350_IG04
xor edi, edi
mov qword ptr [rbx+0x50], rdi
mov qword ptr [rbx+0x58], rdi
- ;; size=47 bbWeight=4 PerfScore 40.00
-G_M42350_IG21:
+ ;; size=65 bbWeight=4 PerfScore 57.00
+G_M42350_IG23:
mov dword ptr [rbx+0x10], edi
;; size=3 bbWeight=4 PerfScore 4.00
-G_M42350_IG22:
+G_M42350_IG24:
mov rsi, gword ptr [rbx+0x28]
mov r14, rsi
mov r13d, dword ptr [rbx+0x30]
mov r15, gword ptr [rbx+0x40]
mov edi, dword ptr [rbx+0x48]
mov r12d, dword ptr [rbx+0x4C]
lea rax, bword ptr [rbx+0x28]
- mov bword ptr [rbp-0x48], rax
+ mov bword ptr [rbp-0x50], rax
xor rcx, rcx
- mov gword ptr [rbp-0x50], rcx
+ mov gword ptr [rbp-0x58], rcx
test rsi, rsi
- je SHORT G_M42350_IG19
- ;; size=41 bbWeight=4 PerfScore 57.00
-G_M42350_IG23:
+ je G_M42350_IG19
+ ;; size=45 bbWeight=4 PerfScore 57.00
+G_M42350_IG25:
sar edi, 31
mov edx, r12d
sar edx, 31
lea edi, [rdx+2*rdi]
neg edi
mov edx, dword ptr [rax+0x08]
- mov dword ptr [rbp-0x2C], edx
+ mov dword ptr [rbp-0x30], edx
and r12d, 0xD1FFAB1E
test edi, edi
je G_M42350_IG16
+ mov rax, bword ptr [rbp-0x50]
cmp rsi, r15
- jne SHORT G_M42350_IG25
+ jne SHORT G_M42350_IG27
cmp edi, 1
je G_M42350_IG10
mov rsi, r15
mov rdi, 0xD1FFAB1E ; System.Buffers.MemoryManager`1[double]
mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
call [r8]CORINFO_HELP_CHKCASTCLASS
mov rdi, rax
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
call [rax+0x20]System.Buffers.MemoryManager`1[double]:get_Memory():System.Memory`1[double]:this
mov gword ptr [rbp-0x40], rax
mov qword ptr [rbp-0x38], rdx
- mov r15d, dword ptr [rbp-0x2C]
+ mov r15d, dword ptr [rbp-0x30]
sub r12d, r15d
mov esi, r15d
mov edi, r12d
add rsi, rdi
mov edi, dword ptr [rbp-0x34]
cmp rsi, rdi
ja G_M42350_IG09
add r15d, dword ptr [rbp-0x38]
- mov rdi, gword ptr [rbp-0x40]
- mov eax, r12d
- mov r12, gword ptr [rbp-0x50]
+ mov rax, gword ptr [rbp-0x40]
+ mov ecx, r12d
+ mov r12, gword ptr [rbp-0x58]
jmp G_M42350_IG18
- ;; size=144 bbWeight=2 PerfScore 65.00
-G_M42350_IG24:
+ ;; size=148 bbWeight=2 PerfScore 67.00
+G_M42350_IG26:
mov edi, 33
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
-G_M42350_IG25:
+G_M42350_IG27:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException_EndPositionNotReached()
call [rax]System.ThrowHelper:ThrowInvalidOperationException_EndPositionNotReached()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 703, prolog size 28, PerfScore 314.50, instruction count 202, allocated bytes for code 703 (MethodHash=a2155a91) for method System.Buffers.SequenceReader`1[double]:GetNextSpan():this (FullOpts)
+; Total bytes of code 757, prolog size 28, PerfScore 340.75, instruction count 215, allocated bytes for code 757 (MethodHash=a2155a91) for method System.Buffers.SequenceReader`1[double]:GetNextSpan():this (FullOpts)
; ============================================================ 53 (51.46 % of base) - System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort]):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this ; Assembly listing for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort]):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 3 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 4, 4 ) ref -> rdi this class-hnd single-def <System.Text.RegularExpressions.Regex>
-; V01 RetBuf [V01,T00] ( 11, 11 ) byref -> rsi single-def
+; V00 this [V00,T02] ( 4, 4 ) ref -> [rsp+0x08] this class-hnd single-def <System.Text.RegularExpressions.Regex>
+; V01 RetBuf [V01,T00] ( 11, 11 ) byref -> rbx single-def
;* V02 arg1 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.ReadOnlySpan`1[ushort]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref single-def
;* V07 tmp4 [V07 ] ( 0, 0 ) struct (16) zero-ref <System.ReadOnlySpan`1[ushort]>
;* V08 tmp5 [V08 ] ( 0, 0 ) int -> zero-ref
;* V09 tmp6 [V09 ] ( 0, 0 ) ref -> zero-ref single-def
;* V10 tmp7 [V10 ] ( 0, 0 ) struct (16) zero-ref <System.ReadOnlySpan`1[ushort]>
;* V11 tmp8 [V11 ] ( 0, 0 ) int -> zero-ref
-; V12 tmp9 [V12,T05] ( 3, 3 ) int -> r8
+; V12 tmp9 [V12,T05] ( 3, 3 ) int -> r13
;* V13 tmp10 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ushort]>
;* V15 tmp12 [V15,T08] ( 0, 0 ) struct (48) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Text.RegularExpressions.Regex+ValueSplitEnumerator>
;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
-; V17 tmp14 [V17,T04] ( 2, 4 ) ubyte -> rax "Inlining Arg"
+; V17 tmp14 [V17,T04] ( 2, 4 ) ubyte -> rsi "Inlining Arg"
;* V18 tmp15 [V18 ] ( 0, 0 ) byref -> zero-ref
;* V19 tmp16 [V19 ] ( 0, 0 ) byref -> zero-ref
-; V20 tmp17 [V20,T07] ( 2, 2 ) int -> rax
+; V20 tmp17 [V20,T07] ( 2, 2 ) int -> r12
;* V21 tmp18 [V21 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.ValueTuple`2[int,int]>
;* V22 tmp19 [V22 ] ( 0, 0 ) byref -> zero-ref
;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref
;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref
-; V25 tmp22 [V25,T03] ( 2, 2 ) byref -> rdx single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-; V26 tmp23 [V26,T01] ( 5, 5 ) int -> rcx single-def "field V02._length (fldOffset=0x8)" P-INDEP
+; V25 tmp22 [V25,T03] ( 2, 2 ) byref -> r14 single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp23 [V26,T01] ( 5, 5 ) int -> r15 single-def "field V02._length (fldOffset=0x8)" P-INDEP
;* V27 tmp24 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
;* V29 tmp26 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp27 [V30 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V31 tmp28 [V31 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
;* V32 tmp29 [V32 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
;* V33 tmp30 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V34 tmp31 [V34 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
;* V35 tmp32 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
;* V36 tmp33 [V36 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
;* V37 tmp34 [V37 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP
;* V38 tmp35 [V38 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
;* V39 tmp36 [V39 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP
;* V40 tmp37 [V40 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;* V41 tmp38 [V41 ] ( 0, 0 ) int -> zero-ref "field V21.Item1 (fldOffset=0x0)" P-INDEP
;* V42 tmp39 [V42 ] ( 0, 0 ) int -> zero-ref "field V21.Item2 (fldOffset=0x4)" P-INDEP
;* V43 tmp40 [V43 ] ( 0, 0 ) ref -> zero-ref single-def "V15.[000..008)"
;* V44 tmp41 [V44 ] ( 0, 0 ) int -> zero-ref "V15.[008..012)"
;* V45 tmp42 [V45 ] ( 0, 0 ) int -> zero-ref "V15.[012..016)"
;* V46 tmp43 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "V15.[016..024)"
;* V47 tmp44 [V47 ] ( 0, 0 ) int -> zero-ref "V15.[024..028)"
;* V48 tmp45 [V48 ] ( 0, 0 ) int -> zero-ref "V15.[032..036)"
;* V49 tmp46 [V49 ] ( 0, 0 ) int -> zero-ref "V15.[036..040)"
-; V50 cse0 [V50,T06] ( 3, 3 ) int -> rax "CSE #02: aggressive"
+; V50 cse0 [V50,T06] ( 3, 3 ) int -> rsi "CSE #02: aggressive"
;
-; Lcl frame size = 8
+; Lcl frame size = 16
G_M4189_IG01:
- push rax
- ;; size=1 bbWeight=1 PerfScore 1.00
+ push r15
+ push r14
+ push r13
+ push r12
+ push rbx
+ sub rsp, 16
+ mov rbx, rsi
+ mov r14, rdx
+ mov r15d, ecx
+ ;; size=22 bbWeight=1 PerfScore 6.00
G_M4189_IG02:
- mov eax, dword ptr [rdi+0x40]
- and eax, 64
- xor r8d, r8d
- test eax, eax
- cmovne r8d, ecx
- cmp r8d, ecx
- ja SHORT G_M4189_IG05
- test eax, eax
- setne al
- movzx rax, al
- xor r9d, r9d
- test eax, eax
- mov eax, r9d
- cmovne eax, ecx
- mov gword ptr [rsi], rdi
- mov dword ptr [rsi+0x08], r8d
- mov dword ptr [rsi+0x0C], 0xD1FFAB1E
- mov bword ptr [rsi+0x10], rdx
- mov dword ptr [rsi+0x18], ecx
- mov dword ptr [rsi+0x20], eax
- mov dword ptr [rsi+0x24], -1
- ;; size=70 bbWeight=1 PerfScore 13.75
+ mov gword ptr [rsp+0x08], rdi
+ mov esi, dword ptr [rdi+0x40]
+ and esi, 64
+ xor eax, eax
+ test esi, esi
+ mov r13d, eax
+ cmovne r13d, r15d
+ cmp r13d, r15d
+ ja SHORT G_M4189_IG04
+ test esi, esi
+ setne sil
+ movzx rsi, sil
+ xor eax, eax
+ test esi, esi
+ mov r12d, eax
+ cmovne r12d, r15d
+ mov rsi, gword ptr [rsp+0x08]
+ mov rdi, rbx
+ call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov dword ptr [rbx+0x08], r13d
+ mov dword ptr [rbx+0x0C], 0xD1FFAB1E
+ mov bword ptr [rbx+0x10], r14
+ mov dword ptr [rbx+0x18], r15d
+ mov dword ptr [rbx+0x20], r12d
+ mov dword ptr [rbx+0x24], -1
+ xor eax, eax
+ mov qword ptr [rbx+0x28], rax
+ mov rax, rbx
+ ;; size=100 bbWeight=1 PerfScore 17.75
G_M4189_IG03:
- mov qword ptr [rsi+0x28], r9
- mov rax, rsi
- ;; size=7 bbWeight=1 PerfScore 1.25
-G_M4189_IG04:
- add rsp, 8
+ add rsp, 16
+ pop rbx
+ pop r12
+ pop r13
+ pop r14
+ pop r15
ret
- ;; size=5 bbWeight=1 PerfScore 1.25
-G_M4189_IG05:
+ ;; size=14 bbWeight=1 PerfScore 3.75
+G_M4189_IG04:
mov edi, 14
xor esi, esi
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
call [rax]System.Text.RegularExpressions.ThrowHelper:ThrowArgumentOutOfRangeException(int,int)
int3
;; size=20 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 103, prolog size 1, PerfScore 19.25, instruction count 31, allocated bytes for code 103 (MethodHash=5bc6efa2) for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort]):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
+; Total bytes of code 156, prolog size 13, PerfScore 29.50, instruction count 49, allocated bytes for code 156 (MethodHash=5bc6efa2) for method System.Text.RegularExpressions.Regex:EnumerateSplits(System.ReadOnlySpan`1[ushort]):System.Text.RegularExpressions.Regex+ValueSplitEnumerator:this (FullOpts)
; ============================================================ Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/4567601e05ea8aff0343c58b51d1eb51 |
Top method improvements-25 (-3.92 % of base) - System.Text.Json.Utf8JsonReader:ConsumeSignMultiSegment(byref,byref,byref):ubyte:this ; Assembly listing for method System.Text.Json.Utf8JsonReader:ConsumeSignMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 3 single block inlinees; 9 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 46, 24 ) byref -> rbx this single-def
; V01 arg1 [V01,T03] ( 10, 6.50) byref -> r13 single-def
; V02 arg2 [V02,T02] ( 11, 7 ) byref -> r14 single-def
; V03 arg3 [V03,T01] ( 17, 9.50) byref -> r15 single-def
; V04 loc0 [V04,T05] ( 6, 3 ) ubyte -> rdx
;* V05 loc1 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op <System.ReadOnlySpan`1[ubyte]>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V07 tmp1 [V07,T06] ( 3, 3 ) int -> rax "Span.get_Item index"
; V08 tmp2 [V08,T07] ( 3, 3 ) int -> rax "Span.get_Item index"
; V09 tmp3 [V09,T10] ( 2, 1 ) ubyte -> rdi "Inline return value spill temp"
; V10 tmp4 [V10,T11] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
; V11 tmp5 [V11,T12] ( 2, 1 ) ubyte -> rdi "Inline return value spill temp"
-; V12 tmp6 [V12,T13] ( 2, 1 ) ubyte -> rdi "Inline return value spill temp"
+; V12 tmp6 [V12,T13] ( 2, 1 ) ubyte -> rcx "Inline return value spill temp"
; V13 tmp7 [V13,T04] ( 10, 5 ) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP
;* V14 tmp8 [V14,T08] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
; V15 cse0 [V15,T09] ( 3, 1.50) int -> rdi "CSE #03: moderate"
;
; Lcl frame size = 0
G_M61387_IG01:
push rbp
push r15
push r14
push r13
push rbx
lea rbp, [rsp+0x20]
mov rbx, rdi
mov r13, rsi
mov r14, rdx
mov r15, rcx
;; size=25 bbWeight=1 PerfScore 6.50
G_M61387_IG02:
mov edi, dword ptr [r14]
cmp edi, dword ptr [r13+0x08]
jl SHORT G_M61387_IG06
;; size=9 bbWeight=1 PerfScore 6.00
G_M61387_IG03:
cmp byte ptr [rbx+0x24], 0
je SHORT G_M61387_IG04
cmp byte ptr [rbx+0x2B], 0
- je G_M61387_IG21
+ je G_M61387_IG29
movzx rdi, byte ptr [rbx+0x2A]
test edi, edi
- jne G_M61387_IG21
+ jne G_M61387_IG29
;; size=29 bbWeight=0.50 PerfScore 5.62
G_M61387_IG04:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
call [rax]System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
test eax, eax
- je G_M61387_IG17
+ je G_M61387_IG23
movsxd rdi, dword ptr [r14]
add qword ptr [rbx+0x10], rdi
mov byte ptr [rbx+0x2D], 1
xor edi, edi
mov dword ptr [r14], edi
;; size=39 bbWeight=0.50 PerfScore 7.00
G_M61387_IG05:
vmovdqu xmm0, xmmword ptr [rbx+0x30]
vmovdqu xmmword ptr [r13], xmm0
;; size=11 bbWeight=0.50 PerfScore 3.00
G_M61387_IG06:
mov edi, dword ptr [r14]
mov eax, edi
cmp eax, dword ptr [r13+0x08]
- jae G_M61387_IG22
+ jae G_M61387_IG32
mov rcx, bword ptr [r13]
movzx rdx, byte ptr [rcx+rax]
cmp edx, 43
je SHORT G_M61387_IG07
cmp edx, 45
jne SHORT G_M61387_IG11
;; size=33 bbWeight=0.50 PerfScore 6.38
G_M61387_IG07:
inc edi
mov dword ptr [r14], edi
inc qword ptr [rbx+0x08]
mov edi, dword ptr [r14]
cmp edi, dword ptr [r13+0x08]
jl SHORT G_M61387_IG10
cmp byte ptr [rbx+0x24], 0
je SHORT G_M61387_IG08
cmp byte ptr [rbx+0x2B], 0
- je G_M61387_IG16
+ je G_M61387_IG20
movzx rdi, byte ptr [rbx+0x2A]
test edi, edi
- jne G_M61387_IG16
+ jne G_M61387_IG20
;; size=47 bbWeight=0.50 PerfScore 10.75
G_M61387_IG08:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
call [rax]System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
test eax, eax
- je G_M61387_IG14
+ je SHORT G_M61387_IG16
movsxd rax, dword ptr [r14]
add qword ptr [rbx+0x10], rax
mov byte ptr [rbx+0x2D], 1
xor eax, eax
mov dword ptr [r14], eax
- ;; size=39 bbWeight=0.50 PerfScore 7.00
+ ;; size=35 bbWeight=0.50 PerfScore 7.00
G_M61387_IG09:
vmovdqu xmm0, xmmword ptr [rbx+0x30]
vmovdqu xmmword ptr [r13], xmm0
;; size=11 bbWeight=0.50 PerfScore 3.00
G_M61387_IG10:
mov eax, dword ptr [r14]
cmp eax, dword ptr [r13+0x08]
- jae G_M61387_IG22
- mov rdi, bword ptr [r13]
- movzx rdx, byte ptr [rdi+rax]
+ jae G_M61387_IG32
+ mov rcx, bword ptr [r13]
+ movzx rdx, byte ptr [rcx+rax]
;; size=21 bbWeight=0.50 PerfScore 5.00
G_M61387_IG11:
lea eax, [rdx-0x30]
cmp eax, 9
ja SHORT G_M61387_IG13
mov eax, 1
;; size=13 bbWeight=0.50 PerfScore 1.00
G_M61387_IG12:
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=9 bbWeight=0.50 PerfScore 1.75
G_M61387_IG13:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG14:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG15:
xor rcx, rcx
xor r8d, r8d
mov rdi, rbx
mov esi, 4
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
int3
- ;; size=55 bbWeight=0.50 PerfScore 6.75
-G_M61387_IG14:
- cmp byte ptr [rbx+0x24], 0
- je G_M61387_IG18
- cmp byte ptr [rbx+0x2B], 0
- je SHORT G_M61387_IG15
- movzx rdi, byte ptr [rbx+0x2A]
- test edi, edi
- je G_M61387_IG18
- ;; size=29 bbWeight=0.50 PerfScore 5.62
-G_M61387_IG15:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- xor rcx, rcx
- xor r8d, r8d
- mov rdi, rbx
- mov esi, 5
- xor edx, edx
- mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
+ ;; size=26 bbWeight=0.50 PerfScore 2.25
G_M61387_IG16:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+ cmp byte ptr [rbx+0x24], 0
+ je G_M61387_IG24
+ cmp byte ptr [rbx+0x2B], 0
+ je SHORT G_M61387_IG17
+ movzx rcx, byte ptr [rbx+0x2A]
+ test ecx, ecx
+ je G_M61387_IG24
+ ;; size=28 bbWeight=0.50 PerfScore 5.62
+G_M61387_IG17:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG18:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG19:
xor rcx, rcx
xor r8d, r8d
mov rdi, rbx
mov esi, 5
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
-G_M61387_IG17:
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M61387_IG20:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG21:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG22:
+ xor rcx, rcx
+ xor r8d, r8d
+ mov rdi, rbx
+ mov esi, 5
+ xor edx, edx
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ int3
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M61387_IG23:
cmp byte ptr [rbx+0x24], 0
- je SHORT G_M61387_IG18
+ je SHORT G_M61387_IG24
cmp byte ptr [rbx+0x2B], 0
- je SHORT G_M61387_IG20
+ je SHORT G_M61387_IG26
movzx rax, byte ptr [rbx+0x2A]
test eax, eax
- jne SHORT G_M61387_IG20
+ jne SHORT G_M61387_IG26
;; size=20 bbWeight=0.50 PerfScore 5.62
-G_M61387_IG18:
+G_M61387_IG24:
mov eax, 2
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M61387_IG19:
+G_M61387_IG25:
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=9 bbWeight=0.50 PerfScore 1.75
-G_M61387_IG20:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+G_M61387_IG26:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG27:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG28:
xor rcx, rcx
xor r8d, r8d
mov rdi, rbx
mov esi, 5
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
-G_M61387_IG21:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M61387_IG29:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG30:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M61387_IG31:
xor rcx, rcx
xor r8d, r8d
mov rdi, rbx
mov esi, 5
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
-G_M61387_IG22:
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M61387_IG32:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 638, prolog size 13, PerfScore 110.38, instruction count 184, allocated bytes for code 638 (MethodHash=64fa1034) for method System.Text.Json.Utf8JsonReader:ConsumeSignMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
+; Total bytes of code 613, prolog size 13, PerfScore 117.88, instruction count 174, allocated bytes for code 613 (MethodHash=64fa1034) for method System.Text.Json.Utf8JsonReader:ConsumeSignMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
; ============================================================ -20 (-5.01 % of base) - System.Text.Json.Utf8JsonReader:ConsumeNegativeSignMultiSegment(byref,byref,byref):ubyte:this ; Assembly listing for method System.Text.Json.Utf8JsonReader:ConsumeNegativeSignMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 2 single block inlinees; 5 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 27, 14.50) byref -> rbx this single-def
; V01 arg1 [V01,T03] ( 8, 6 ) byref -> r13 single-def
; V02 arg2 [V02,T02] ( 9, 6 ) byref -> r14 single-def
; V03 arg3 [V03,T01] ( 11, 6.50) byref -> r15 single-def
; V04 loc0 [V04,T07] ( 3, 1.50) ubyte -> rdx
;* V05 loc1 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op <System.ReadOnlySpan`1[ubyte]>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V07 tmp1 [V07,T04] ( 3, 6 ) int -> rdi "Span.get_Item index"
; V08 tmp2 [V08,T06] ( 3, 3 ) int -> rax "Span.get_Item index"
; V09 tmp3 [V09,T09] ( 2, 1 ) ubyte -> rdi "Inline return value spill temp"
; V10 tmp4 [V10,T10] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
; V11 tmp5 [V11,T05] ( 6, 3 ) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP
;* V12 tmp6 [V12,T08] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 0
G_M28488_IG01:
push rbp
push r15
push r14
push r13
push rbx
lea rbp, [rsp+0x20]
mov rbx, rdi
mov r13, rsi
mov r14, rdx
mov r15, rcx
;; size=25 bbWeight=1 PerfScore 6.50
G_M28488_IG02:
mov edi, dword ptr [r14]
cmp edi, dword ptr [r13+0x08]
- jae G_M28488_IG15
+ jae G_M28488_IG21
mov rax, bword ptr [r13]
cmp byte ptr [rax+rdi], 45
- jne G_M28488_IG07
- ;; size=27 bbWeight=1 PerfScore 12.00
+ jne SHORT G_M28488_IG07
+ ;; size=23 bbWeight=1 PerfScore 12.00
G_M28488_IG03:
inc dword ptr [r14]
inc qword ptr [rbx+0x08]
mov edi, dword ptr [r14]
cmp edi, dword ptr [r13+0x08]
jl SHORT G_M28488_IG06
cmp byte ptr [rbx+0x24], 0
je SHORT G_M28488_IG04
cmp byte ptr [rbx+0x2B], 0
- je G_M28488_IG14
+ je G_M28488_IG18
movzx rdi, byte ptr [rbx+0x2A]
test edi, edi
- jne G_M28488_IG14
+ jne G_M28488_IG18
;; size=45 bbWeight=0.50 PerfScore 11.62
G_M28488_IG04:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
call [rax]System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
test eax, eax
- je G_M28488_IG10
+ je SHORT G_M28488_IG12
movsxd rax, dword ptr [r14]
add qword ptr [rbx+0x10], rax
mov byte ptr [rbx+0x2D], 1
xor eax, eax
mov dword ptr [r14], eax
- ;; size=39 bbWeight=0.50 PerfScore 7.00
+ ;; size=35 bbWeight=0.50 PerfScore 7.00
G_M28488_IG05:
vmovdqu xmm0, xmmword ptr [rbx+0x30]
vmovdqu xmmword ptr [r13], xmm0
;; size=11 bbWeight=0.50 PerfScore 3.00
G_M28488_IG06:
mov eax, dword ptr [r14]
cmp eax, dword ptr [r13+0x08]
- jae G_M28488_IG15
- mov rdi, bword ptr [r13]
- movzx rdx, byte ptr [rdi+rax]
+ jae G_M28488_IG21
+ mov rcx, bword ptr [r13]
+ movzx rdx, byte ptr [rcx+rax]
lea eax, [rdx-0x30]
cmp eax, 9
ja SHORT G_M28488_IG09
;; size=29 bbWeight=0.50 PerfScore 5.88
G_M28488_IG07:
mov eax, 1
;; size=5 bbWeight=0.50 PerfScore 0.12
G_M28488_IG08:
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=9 bbWeight=0.50 PerfScore 1.75
G_M28488_IG09:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M28488_IG10:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M28488_IG11:
xor rcx, rcx
xor r8d, r8d
mov rdi, rbx
mov esi, 4
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
int3
- ;; size=55 bbWeight=0.50 PerfScore 6.75
-G_M28488_IG10:
+ ;; size=26 bbWeight=0.50 PerfScore 2.25
+G_M28488_IG12:
cmp byte ptr [rbx+0x24], 0
- je SHORT G_M28488_IG11
- cmp byte ptr [rbx+0x2B], 0
je SHORT G_M28488_IG13
+ cmp byte ptr [rbx+0x2B], 0
+ je SHORT G_M28488_IG15
movzx rax, byte ptr [rbx+0x2A]
test eax, eax
- jne SHORT G_M28488_IG13
+ jne SHORT G_M28488_IG15
;; size=20 bbWeight=0.50 PerfScore 5.62
-G_M28488_IG11:
+G_M28488_IG13:
mov eax, 2
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M28488_IG12:
+G_M28488_IG14:
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=9 bbWeight=0.50 PerfScore 1.75
-G_M28488_IG13:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- xor rcx, rcx
- xor r8d, r8d
- mov rdi, rbx
- mov esi, 5
- xor edx, edx
- mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
-G_M28488_IG14:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- xor rcx, rcx
- xor r8d, r8d
- mov rdi, rbx
- mov esi, 5
- xor edx, edx
- mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
G_M28488_IG15:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M28488_IG16:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M28488_IG17:
+ xor rcx, rcx
+ xor r8d, r8d
+ mov rdi, rbx
+ mov esi, 5
+ xor edx, edx
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ int3
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M28488_IG18:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M28488_IG19:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M28488_IG20:
+ xor rcx, rcx
+ xor r8d, r8d
+ mov rdi, rbx
+ mov esi, 5
+ xor edx, edx
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ int3
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M28488_IG21:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 399, prolog size 13, PerfScore 75.88, instruction count 118, allocated bytes for code 399 (MethodHash=2b9c90b7) for method System.Text.Json.Utf8JsonReader:ConsumeNegativeSignMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
+; Total bytes of code 379, prolog size 13, PerfScore 80.38, instruction count 112, allocated bytes for code 379 (MethodHash=2b9c90b7) for method System.Text.Json.Utf8JsonReader:ConsumeNegativeSignMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
; ============================================================ -12 (-3.06 % of base) - System.Text.Json.Utf8JsonReader:ConsumeDecimalDigitsMultiSegment(byref,byref,byref):ubyte:this ; Assembly listing for method System.Text.Json.Utf8JsonReader:ConsumeDecimalDigitsMultiSegment(byref,byref,byref):ubyte: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; 2 single block inlinees; 5 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 28, 15 ) byref -> rbx this single-def
; V01 arg1 [V01,T03] ( 7, 5 ) byref -> r13 single-def
; V02 arg2 [V02,T02] ( 8, 5.50) byref -> r14 single-def
; V03 arg3 [V03,T01] ( 11, 6.50) byref -> r15 single-def
; V04 loc0 [V04,T06] ( 3, 1.50) ubyte -> rdx
;* V05 loc1 [V05 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op <System.ReadOnlySpan`1[ubyte]>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V07 tmp1 [V07,T05] ( 3, 3 ) int -> rsi "Span.get_Item index"
; V08 tmp2 [V08,T09] ( 2, 1 ) ubyte -> rdi "Inline return value spill temp"
; V09 tmp3 [V09,T10] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
; V10 tmp4 [V10,T04] ( 6, 3 ) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP
;* V11 tmp5 [V11,T07] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
; V12 cse0 [V12,T08] ( 3, 1.50) int -> rdi "CSE #03: moderate"
;
; Lcl frame size = 0
G_M49655_IG01:
push rbp
push r15
push r14
push r13
push rbx
lea rbp, [rsp+0x20]
mov rbx, rdi
mov r13, rsi
mov r14, rdx
mov r15, rcx
;; size=25 bbWeight=1 PerfScore 6.50
G_M49655_IG02:
mov edi, dword ptr [r14]
cmp edi, dword ptr [r13+0x08]
jl SHORT G_M49655_IG06
;; size=9 bbWeight=1 PerfScore 6.00
G_M49655_IG03:
cmp byte ptr [rbx+0x24], 0
je SHORT G_M49655_IG04
cmp byte ptr [rbx+0x2B], 0
- je G_M49655_IG13
+ je G_M49655_IG17
movzx rdi, byte ptr [rbx+0x2A]
test edi, edi
- jne G_M49655_IG13
+ jne G_M49655_IG17
;; size=29 bbWeight=0.50 PerfScore 5.62
G_M49655_IG04:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
call [rax]System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this
test eax, eax
- je G_M49655_IG09
+ je G_M49655_IG11
movsxd rdi, dword ptr [r14]
add qword ptr [rbx+0x10], rdi
mov byte ptr [rbx+0x2D], 1
xor edi, edi
mov dword ptr [r14], edi
;; size=39 bbWeight=0.50 PerfScore 7.00
G_M49655_IG05:
vmovdqu xmm0, xmmword ptr [rbx+0x30]
vmovdqu xmmword ptr [r13], xmm0
;; size=11 bbWeight=0.50 PerfScore 3.00
G_M49655_IG06:
mov edi, dword ptr [r14]
mov esi, edi
cmp esi, dword ptr [r13+0x08]
- jae G_M49655_IG14
+ jae G_M49655_IG20
mov rdx, bword ptr [r13]
movzx rdx, byte ptr [rdx+rsi]
lea esi, [rdx-0x30]
cmp esi, 9
ja SHORT G_M49655_IG08
inc edi
mov dword ptr [r14], edi
inc qword ptr [rbx+0x08]
mov rdi, rbx
mov rsi, r13
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Utf8JsonReader:ConsumeIntegerDigitsMultiSegment(byref,byref):ubyte:this
;; size=59 bbWeight=0.50 PerfScore 8.62
G_M49655_IG07:
pop rbx
pop r13
pop r14
pop r15
pop rbp
tail.jmp [rax]System.Text.Json.Utf8JsonReader:ConsumeIntegerDigitsMultiSegment(byref,byref):ubyte:this
;; size=11 bbWeight=0.50 PerfScore 2.25
G_M49655_IG08:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M49655_IG09:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M49655_IG10:
xor rcx, rcx
xor r8d, r8d
mov rdi, rbx
mov esi, 3
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
int3
- ;; size=55 bbWeight=0.50 PerfScore 6.75
-G_M49655_IG09:
+ ;; size=26 bbWeight=0.50 PerfScore 2.25
+G_M49655_IG11:
cmp byte ptr [rbx+0x24], 0
- je SHORT G_M49655_IG10
- cmp byte ptr [rbx+0x2B], 0
je SHORT G_M49655_IG12
+ cmp byte ptr [rbx+0x2B], 0
+ je SHORT G_M49655_IG14
movzx rax, byte ptr [rbx+0x2A]
test eax, eax
- jne SHORT G_M49655_IG12
+ jne SHORT G_M49655_IG14
;; size=20 bbWeight=0.50 PerfScore 5.62
-G_M49655_IG10:
+G_M49655_IG12:
mov eax, 2
;; size=5 bbWeight=0.50 PerfScore 0.12
-G_M49655_IG11:
+G_M49655_IG13:
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=9 bbWeight=0.50 PerfScore 1.75
-G_M49655_IG12:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- xor rcx, rcx
- xor r8d, r8d
- mov rdi, rbx
- mov esi, 5
- xor edx, edx
- mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
-G_M49655_IG13:
- mov rdi, qword ptr [r15]
- mov qword ptr [rbx+0x10], rdi
- mov edi, dword ptr [r15+0x10]
- mov dword ptr [rbx+0x20], edi
- lea rsi, bword ptr [r15+0x18]
- lea rdi, bword ptr [rbx+0x70]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- xor rcx, rcx
- xor r8d, r8d
- mov rdi, rbx
- mov esi, 5
- xor edx, edx
- mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
- int3
- ;; size=57 bbWeight=0.50 PerfScore 6.88
G_M49655_IG14:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M49655_IG15:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M49655_IG16:
+ xor rcx, rcx
+ xor r8d, r8d
+ mov rdi, rbx
+ mov esi, 5
+ xor edx, edx
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ int3
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M49655_IG17:
+ mov rcx, qword ptr [r15]
+ mov qword ptr [rbx+0x10], rcx
+ mov ecx, dword ptr [r15+0x10]
+ mov dword ptr [rbx+0x20], ecx
+ ;; size=14 bbWeight=0.50 PerfScore 3.00
+G_M49655_IG18:
+ vmovdqu xmm0, xmmword ptr [r15+0x18]
+ vmovdqu xmmword ptr [rbx+0x70], xmm0
+ ;; size=11 bbWeight=0.50 PerfScore 3.00
+G_M49655_IG19:
+ xor rcx, rcx
+ xor r8d, r8d
+ mov rdi, rbx
+ mov esi, 5
+ xor edx, edx
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ call [rax]System.Text.Json.ThrowHelper:ThrowJsonReaderException(byref,int,ubyte,System.ReadOnlySpan`1[ubyte])
+ int3
+ ;; size=28 bbWeight=0.50 PerfScore 2.38
+G_M49655_IG20:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 392, prolog size 25, PerfScore 67.00, instruction count 117, allocated bytes for code 392 (MethodHash=27983e08) for method System.Text.Json.Utf8JsonReader:ConsumeDecimalDigitsMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
+; Total bytes of code 380, prolog size 25, PerfScore 71.50, instruction count 111, allocated bytes for code 380 (MethodHash=27983e08) for method System.Text.Json.Utf8JsonReader:ConsumeDecimalDigitsMultiSegment(byref,byref,byref):ubyte:this (FullOpts)
; ============================================================ -5 (-3.21 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],long):this ; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],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; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T05] ( 4, 4 ) byref -> rbx this single-def
; V01 arg1 [V01,T06] ( 3, 3 ) byref -> r15 single-def
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.ReadOnlySpan`1[long]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.ReadOnlySpan`1[long]>
; V04 arg4 [V04,T11] ( 1, 1 ) long -> [rbp+0x10] single-def
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V06 tmp1 [V06 ] ( 2, 4 ) struct (104) [rbp-0x78] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V09 tmp4 [V09,T04] ( 4, 8.75) long -> rdi "Inline stloc first use temp"
;* V10 tmp5 [V10,T12] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V11 tmp6 [V11,T02] ( 3, 6 ) byref -> rdx single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V12 tmp7 [V12,T03] ( 4, 7 ) int -> rcx single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V13 tmp8 [V13,T07] ( 2, 2 ) byref -> r8 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V14 tmp9 [V14,T08] ( 2, 2 ) int -> r9 single-def "field V03._length (fldOffset=0x8)" P-INDEP
;* V15 tmp10 [V15,T10] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP
; V16 tmp11 [V16,T09] ( 2, 2 ) int -> rdi "field V08._length (fldOffset=0x8)" P-INDEP
; V17 cse0 [V17,T01] ( 3, 12 ) long -> rax "CSE #03: aggressive"
; V18 rat0 [V18,T00] ( 5, 16.25) long -> rsi "Widened IV V10"
;
; Lcl frame size = 112
G_M38717_IG01:
push rbp
push r15
push rbx
sub rsp, 112
lea rbp, [rsp+0x80]
xor eax, eax
mov qword ptr [rbp-0x78], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x70], zmm8
vmovdqa xmmword ptr [rbp-0x30], xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov rbx, rdi
mov r15, rsi
;; size=53 bbWeight=1 PerfScore 11.83
G_M38717_IG02:
mov edi, ecx
test edi, edi
je SHORT G_M38717_IG06
;; size=6 bbWeight=1 PerfScore 1.50
G_M38717_IG03:
mov edi, 1
xor esi, esi
align [0 bytes for IG04]
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M38717_IG04:
mov rax, qword ptr [rdx+8*rsi]
test rax, rax
jl SHORT G_M38717_IG08
imul rdi, rax
inc esi
cmp esi, ecx
jl SHORT G_M38717_IG04
;; size=19 bbWeight=4 PerfScore 27.00
G_M38717_IG05:
test rdi, rdi
jl SHORT G_M38717_IG08
;; size=5 bbWeight=0.50 PerfScore 0.62
G_M38717_IG06:
lea rdi, [rbp-0x78]
mov rsi, qword ptr [rbp+0x10]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [rax]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x78]
- call CORINFO_HELP_ASSIGN_BYREF
- mov ecx, 12
+ mov ecx, 13
rep movsq
mov bword ptr [rbx], r15
- ;; size=44 bbWeight=1 PerfScore 33.00
+ ;; size=39 bbWeight=1 PerfScore 32.00
G_M38717_IG07:
add rsp, 112
pop rbx
pop r15
pop rbp
ret
;; size=9 bbWeight=1 PerfScore 2.75
G_M38717_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 156, prolog size 53, PerfScore 78.58, instruction count 46, allocated bytes for code 156 (MethodHash=04f268c2) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],long):this (FullOpts)
+; Total bytes of code 151, prolog size 53, PerfScore 77.58, instruction count 45, allocated bytes for code 151 (MethodHash=04f268c2) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],long):this (FullOpts)
; ============================================================ -5 (-0.98 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(double[],int,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this ; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(double[],int,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; 6 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T12] ( 5, 3.50) byref -> [rbp-0xA8] this single-def
; V01 arg1 [V01,T08] ( 7, 5 ) ref -> r14 class-hnd single-def <double[]>
; V02 arg2 [V02,T11] ( 6, 4 ) int -> [rbp-0x2C] single-def
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <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 ] ( 0, 0 ) long -> zero-ref single-def
; V07 loc2 [V07 ] ( 2, 1 ) long -> [rbp-0x38] do-not-enreg[X] must-init addr-exposed ld-addr-op
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V09 tmp1 [V09 ] ( 0, 0 ) struct (16) zero-ref multireg-arg <System.ReadOnlySpan`1[long]>
; V10 tmp2 [V10 ] ( 2, 2 ) struct (104) [rbp-0xA0] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
;* V11 tmp3 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V12 tmp4 [V12,T15] ( 4, 2 ) long -> rdx "Inline return value spill temp"
;* V13 tmp5 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V14 tmp6 [V14,T06] ( 5, 9.25) long -> rdi "Inline stloc first use temp"
;* V15 tmp7 [V15,T28] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V16 tmp8 [V16,T13] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <long[]>
;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
; V18 tmp10 [V18,T07] ( 4, 9 ) long -> rsi "Inline stloc first use temp"
; V19 tmp11 [V19,T00] ( 6, 20.50) int -> rdx "Inline stloc first use temp"
;* V20 tmp12 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V21 tmp13 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V22 tmp14 [V22,T03] ( 7, 11 ) byref -> r15 "field V03._reference (fldOffset=0x0)" P-INDEP
; V23 tmp15 [V23,T02] ( 10, 13.50) int -> rbx "field V03._length (fldOffset=0x8)" P-INDEP
; V24 tmp16 [V24,T10] ( 5, 6 ) byref -> r12 "field V04._reference (fldOffset=0x0)" P-INDEP
; V25 tmp17 [V25,T09] ( 6, 6.50) int -> r13 "field V04._length (fldOffset=0x8)" P-INDEP
; V26 tmp18 [V26,T17] ( 3, 1.50) byref -> rdi "field V09._reference (fldOffset=0x0)" P-INDEP
; V27 tmp19 [V27,T19] ( 3, 1.50) int -> rsi "field V09._length (fldOffset=0x8)" P-INDEP
;* V28 tmp20 [V28,T22] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V29 tmp21 [V29,T25] ( 0, 0 ) int -> zero-ref single-def "field V11._length (fldOffset=0x8)" P-INDEP
;* V30 tmp22 [V30,T21] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
; V31 tmp23 [V31,T16] ( 2, 2 ) int -> rdi single-def "field V13._length (fldOffset=0x8)" P-INDEP
; V32 tmp24 [V32,T18] ( 3, 1.50) byref -> rdi "field V17._reference (fldOffset=0x0)" P-INDEP
; V33 tmp25 [V33,T20] ( 3, 1.50) int -> rsi "field V17._length (fldOffset=0x8)" P-INDEP
;* V34 tmp26 [V34,T23] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
;* V35 tmp27 [V35,T26] ( 0, 0 ) int -> zero-ref single-def "field V20._length (fldOffset=0x8)" P-INDEP
;* V36 tmp28 [V36,T24] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V37 tmp29 [V37,T27] ( 0, 0 ) int -> zero-ref single-def "field V21._length (fldOffset=0x8)" P-INDEP
; V38 cse0 [V38,T04] ( 3, 12 ) long -> rdx "CSE #03: aggressive"
; V39 cse1 [V39,T14] ( 6, 3 ) int -> r8 multi-def "CSE #05: moderate"
; V40 cse2 [V40,T05] ( 3, 12 ) long -> rcx "CSE #04: aggressive"
; V41 rat0 [V41,T01] ( 5, 16.25) long -> rsi "Widened IV V15"
;
; Lcl frame size = 136
G_M63805_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 136
lea rbp, [rsp+0xB0]
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0xA0], zmm8
vmovdqa xmmword ptr [rbp-0x60], xmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
vmovdqa xmmword ptr [rbp-0x40], xmm8
mov bword ptr [rbp-0xA8], rdi
mov dword ptr [rbp-0x2C], edx
mov r14, rsi
mov r15, rcx
mov ebx, r8d
mov r12, bword ptr [rbp+0x10]
mov r13d, dword ptr [rbp+0x18]
;; size=82 bbWeight=1 PerfScore 19.83
G_M63805_IG02:
test ebx, ebx
jne SHORT G_M63805_IG04
;; size=4 bbWeight=1 PerfScore 1.25
G_M63805_IG03:
test r14, r14
je SHORT G_M63805_IG04
mov r8d, dword ptr [r14+0x08]
mov edi, r8d
mov qword ptr [rbp-0x38], rdi
lea r15, bword ptr [rbp-0x38]
mov ebx, 1
;; size=25 bbWeight=0.50 PerfScore 2.62
G_M63805_IG04:
mov edi, ebx
test edi, edi
je SHORT G_M63805_IG08
;; size=6 bbWeight=1 PerfScore 1.50
G_M63805_IG05:
mov edi, 1
xor esi, esi
align [4 bytes for IG06]
;; size=11 bbWeight=0.25 PerfScore 0.19
G_M63805_IG06:
mov rdx, qword ptr [r15+8*rsi]
test rdx, rdx
jl G_M63805_IG21
imul rdi, rdx
inc esi
cmp esi, ebx
jl SHORT G_M63805_IG06
;; size=23 bbWeight=4 PerfScore 27.00
G_M63805_IG07:
test rdi, rdi
jl G_M63805_IG21
mov rdx, rdi
jmp SHORT G_M63805_IG09
align [0 bytes for IG15]
;; size=14 bbWeight=0.50 PerfScore 1.75
G_M63805_IG08:
xor edx, edx
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M63805_IG09:
test r14, r14
je G_M63805_IG19
;; size=9 bbWeight=1 PerfScore 1.25
G_M63805_IG10:
test r13d, r13d
jne SHORT G_M63805_IG13
mov rdi, r15
mov esi, ebx
mov r8, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
call [r8]System.Numerics.Tensors.TensorSpanHelpers:CalculateStrides(System.ReadOnlySpan`1[long],long):long[]
test rax, rax
je SHORT G_M63805_IG11
lea rdi, bword ptr [rax+0x10]
mov esi, dword ptr [rax+0x08]
jmp SHORT G_M63805_IG12
;; size=37 bbWeight=0.50 PerfScore 5.38
G_M63805_IG11:
xor rdi, rdi
xor esi, esi
;; size=4 bbWeight=0.50 PerfScore 0.25
G_M63805_IG12:
jmp SHORT G_M63805_IG14
;; size=2 bbWeight=0.50 PerfScore 1.00
G_M63805_IG13:
mov rdi, r12
mov esi, r13d
;; size=6 bbWeight=0.50 PerfScore 0.25
G_M63805_IG14:
mov r12, rdi
mov r13d, esi
mov rdi, r12
mov esi, r13d
mov rdx, r15
mov ecx, ebx
mov r8, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
call [r8]System.Numerics.Tensors.TensorSpanHelpers:ValidateStrides(System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long])
xor esi, esi
xor edx, edx
test ebx, ebx
jle SHORT G_M63805_IG16
;; size=38 bbWeight=0.50 PerfScore 3.25
G_M63805_IG15:
cmp edx, r13d
jae G_M63805_IG22
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_M63805_IG15
;; size=35 bbWeight=4 PerfScore 38.00
G_M63805_IG16:
mov eax, dword ptr [rbp-0x2C]
mov edx, eax
mov esi, esi
add rsi, rdx
mov r8d, dword ptr [r14+0x08]
mov edx, r8d
cmp rsi, rdx
jb SHORT G_M63805_IG17
test r8d, r8d
jne SHORT G_M63805_IG18
;; size=27 bbWeight=0.50 PerfScore 3.25
G_M63805_IG17:
mov dword ptr [rbp-0x2C], eax
sub r8d, eax
movsxd rsi, r8d
mov rdx, r15
mov ecx, ebx
mov r8, r12
mov r9d, r13d
lea rdi, [rbp-0xA0]
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-0xA8]
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0xA0]
- call CORINFO_HELP_ASSIGN_BYREF
- mov ecx, 12
+ mov ecx, 13
rep movsq
add r14, 16
mov eax, dword ptr [rbp-0x2C]
shl rax, 3
add rax, r14
mov bword ptr [rbx], rax
jmp SHORT G_M63805_IG20
- ;; size=90 bbWeight=0.50 PerfScore 19.75
+ ;; size=85 bbWeight=0.50 PerfScore 19.25
G_M63805_IG18:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgument_InvalidStridesAndLengths()
call [rax]System.ThrowHelper:ThrowArgument_InvalidStridesAndLengths()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M63805_IG19:
cmp dword ptr [rbp-0x2C], 0
jne SHORT G_M63805_IG21
test rdx, rdx
jne SHORT G_M63805_IG21
xor eax, eax
mov rcx, bword ptr [rbp-0xA8]
mov qword ptr [rcx], rax
mov qword ptr [rcx+0x08], rax
vxorps xmm0, xmm0, xmm0
vmovdqu32 zmmword ptr [rcx+0x10], zmm0
vmovdqu ymmword ptr [rcx+0x50], ymm0
;; size=46 bbWeight=0.50 PerfScore 5.92
G_M63805_IG20:
add rsp, 136
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=18 bbWeight=1 PerfScore 4.25
G_M63805_IG21:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
G_M63805_IG22:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 511, prolog size 82, PerfScore 140.31, instruction count 148, allocated bytes for code 511 (MethodHash=1a3806c2) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(double[],int,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
+; Total bytes of code 506, prolog size 82, PerfScore 139.81, instruction count 147, allocated bytes for code 506 (MethodHash=1a3806c2) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:.ctor(double[],int,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this (FullOpts)
; ============================================================ -5 (-3.21 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],long):this ; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],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; 1 single block inlinees; 1 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T05] ( 4, 4 ) byref -> rbx this single-def
; V01 arg1 [V01,T06] ( 3, 3 ) byref -> r15 single-def
;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.ReadOnlySpan`1[long]>
;* V03 arg3 [V03 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def <System.ReadOnlySpan`1[long]>
; V04 arg4 [V04,T11] ( 1, 1 ) long -> [rbp+0x10] single-def
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V06 tmp1 [V06 ] ( 2, 4 ) struct (104) [rbp-0x78] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Numerics.Tensors.TensorShape>
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
; V09 tmp4 [V09,T04] ( 4, 8.75) long -> rdi "Inline stloc first use temp"
;* V10 tmp5 [V10,T12] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V11 tmp6 [V11,T02] ( 3, 6 ) byref -> rdx single-def "field V02._reference (fldOffset=0x0)" P-INDEP
; V12 tmp7 [V12,T03] ( 4, 7 ) int -> rcx single-def "field V02._length (fldOffset=0x8)" P-INDEP
; V13 tmp8 [V13,T07] ( 2, 2 ) byref -> r8 single-def "field V03._reference (fldOffset=0x0)" P-INDEP
; V14 tmp9 [V14,T08] ( 2, 2 ) int -> r9 single-def "field V03._length (fldOffset=0x8)" P-INDEP
;* V15 tmp10 [V15,T10] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP
; V16 tmp11 [V16,T09] ( 2, 2 ) int -> rdi "field V08._length (fldOffset=0x8)" P-INDEP
; V17 cse0 [V17,T01] ( 3, 12 ) long -> rax "CSE #03: aggressive"
; V18 rat0 [V18,T00] ( 5, 16.25) long -> rsi "Widened IV V10"
;
; Lcl frame size = 112
G_M12315_IG01:
push rbp
push r15
push rbx
sub rsp, 112
lea rbp, [rsp+0x80]
xor eax, eax
mov qword ptr [rbp-0x78], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x70], zmm8
vmovdqa xmmword ptr [rbp-0x30], xmm8
vmovdqa xmmword ptr [rbp-0x20], xmm8
mov rbx, rdi
mov r15, rsi
;; size=53 bbWeight=1 PerfScore 11.83
G_M12315_IG02:
mov edi, ecx
test edi, edi
je SHORT G_M12315_IG06
;; size=6 bbWeight=1 PerfScore 1.50
G_M12315_IG03:
mov edi, 1
xor esi, esi
align [0 bytes for IG04]
;; size=7 bbWeight=0.25 PerfScore 0.12
G_M12315_IG04:
mov rax, qword ptr [rdx+8*rsi]
test rax, rax
jl SHORT G_M12315_IG08
imul rdi, rax
inc esi
cmp esi, ecx
jl SHORT G_M12315_IG04
;; size=19 bbWeight=4 PerfScore 27.00
G_M12315_IG05:
test rdi, rdi
jl SHORT G_M12315_IG08
;; size=5 bbWeight=0.50 PerfScore 0.62
G_M12315_IG06:
lea rdi, [rbp-0x78]
mov rsi, qword ptr [rbp+0x10]
mov rax, 0xD1FFAB1E ; code for System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
call [rax]System.Numerics.Tensors.TensorShape:.ctor(long,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long]):this
lea rdi, bword ptr [rbx+0x08]
lea rsi, bword ptr [rbp-0x78]
- call CORINFO_HELP_ASSIGN_BYREF
- mov ecx, 12
+ mov ecx, 13
rep movsq
mov bword ptr [rbx], r15
- ;; size=44 bbWeight=1 PerfScore 33.00
+ ;; size=39 bbWeight=1 PerfScore 32.00
G_M12315_IG07:
add rsp, 112
pop rbx
pop r15
pop rbp
ret
;; size=9 bbWeight=1 PerfScore 2.75
G_M12315_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
-; Total bytes of code 156, prolog size 53, PerfScore 78.58, instruction count 46, allocated bytes for code 156 (MethodHash=8acacfe4) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],long):this (FullOpts)
+; Total bytes of code 151, prolog size 53, PerfScore 77.58, instruction count 45, allocated bytes for code 151 (MethodHash=8acacfe4) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:.ctor(byref,System.ReadOnlySpan`1[long],System.ReadOnlySpan`1[long],long):this (FullOpts)
; ============================================================ Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/f6c9468f1686c033cdecdd07602283f7 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 14 minutes 22 seconds.
dotnet/runtime#111733
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: