forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JitDiff X64] xtqqczze/dotnet-runtime/GetPinnableReference #819
Comments
xtqqczze
referenced
this issue
in xtqqczze/dotnet-runtime
Dec 14, 2024
Top method regressions7 (5.22 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:GetPinnableReference():byref:this ; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:GetPinnableReference():byref: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; 8 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T05] ( 4, 3.50) byref -> rdi this single-def
-; V01 loc0 [V01,T09] ( 3, 2.50) byref -> rax
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
-;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V07 tmp5 [V07,T07] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
-; V08 tmp6 [V08,T12] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V09 tmp7 [V09,T13] ( 2, 2 ) int -> rdx "Inlining Arg"
-;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V11 tmp9 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V13 tmp11 [V13,T08] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V14 tmp12 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V16 tmp14 [V16,T17] ( 2, 1 ) long -> rcx "Inline return value spill temp"
-;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V18 tmp16 [V18,T02] ( 5, 9.25) long -> rsi "Inline stloc first use temp"
-;* V19 tmp17 [V19,T20] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T10] ( 3, 2 ) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T11] ( 3, 2 ) int -> rdx "field V05._length (fldOffset=0x8)" P-INDEP
-;* V24 tmp22 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP
-; V26 tmp24 [V26,T14] ( 2, 1 ) byref -> rcx single-def "field V10._reference (fldOffset=0x0)" P-INDEP
-; V27 tmp25 [V27,T18] ( 2, 1 ) int -> rdx single-def "field V10._length (fldOffset=0x8)" P-INDEP
-; V28 tmp26 [V28,T15] ( 2, 1 ) byref -> rcx single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref single-def "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T16] ( 2, 1 ) byref -> rcx single-def "field V14._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T19] ( 2, 1 ) int -> rdx single-def "field V14._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T06] ( 2, 5 ) byref -> rcx single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T04] ( 3, 6 ) int -> rdx single-def "field V17._length (fldOffset=0x8)" P-INDEP
-; V34 cse0 [V34,T01] ( 3, 12 ) long -> r9 "CSE #05: aggressive"
-; V35 rat0 [V35,T00] ( 5, 16.25) long -> r8 "Widened IV V19"
+;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V02 tmp1 [V02,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
+;* V03 tmp2 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
+;* V04 tmp3 [V04 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
+;* V05 tmp4 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
+; V06 tmp5 [V06,T07] ( 3, 3 ) ref -> rax single-def "MemoryMarshal.GetArrayDataReference array"
+; V07 tmp6 [V07,T11] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V08 tmp7 [V08,T12] ( 2, 2 ) int -> rcx "Inlining Arg"
+;* V09 tmp8 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V10 tmp9 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V11 tmp10 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+; V12 tmp11 [V12,T08] ( 3, 3 ) int -> rcx "Inlining Arg"
+;* V13 tmp12 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V14 tmp13 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+; V15 tmp14 [V15,T16] ( 2, 1 ) long -> rax "Inline return value spill temp"
+;* V16 tmp15 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
+; V17 tmp16 [V17,T02] ( 5, 9.25) long -> rdx "Inline stloc first use temp"
+;* V18 tmp17 [V18,T19] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V19 tmp18 [V19 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+; V21 tmp20 [V21,T09] ( 3, 2 ) byref -> rax "field V04._reference (fldOffset=0x0)" P-INDEP
+; V22 tmp21 [V22,T10] ( 3, 2 ) int -> rcx "field V04._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp22 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp23 [V24 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+; V25 tmp24 [V25,T13] ( 2, 1 ) byref -> rax single-def "field V09._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp25 [V26,T17] ( 2, 1 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP
+; V27 tmp26 [V27,T14] ( 2, 1 ) byref -> rax single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V28 tmp27 [V28 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V29 tmp28 [V29,T15] ( 2, 1 ) byref -> rax single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V30 tmp29 [V30,T18] ( 2, 1 ) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V31 tmp30 [V31,T06] ( 2, 5 ) byref -> rax single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V32 tmp31 [V32,T04] ( 3, 6 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V33 cse0 [V33,T01] ( 3, 12 ) long -> r8 "CSE #05: aggressive"
+; V34 rat0 [V34,T00] ( 5, 16.25) long -> rsi "Widened IV V18"
;
; Lcl frame size = 8
G_M31979_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M31979_IG02:
- xor rax, rax
lea rbx, bword ptr [rdi+0x08]
cmp gword ptr [rbx], 0
jne SHORT G_M31979_IG04
- ;; size=12 bbWeight=1 PerfScore 4.75
+ ;; size=10 bbWeight=1 PerfScore 4.50
G_M31979_IG03:
- lea rcx, bword ptr [rbx+0x18]
- mov edx, dword ptr [rbx+0x10]
- cmp edx, 5
- ja SHORT G_M31979_IG10
+ lea rax, bword ptr [rbx+0x18]
+ mov ecx, dword ptr [rbx+0x10]
+ cmp ecx, 5
+ ja SHORT G_M31979_IG13
jmp SHORT G_M31979_IG05
- align [6 bytes for IG07]
- ;; size=20 bbWeight=0.50 PerfScore 2.88
+ align [9 bytes for IG07]
+ ;; size=23 bbWeight=0.50 PerfScore 2.88
G_M31979_IG04:
- mov rcx, gword ptr [rbx]
- cmp byte ptr [rcx], cl
- add rcx, 16
- mov edx, dword ptr [rbx+0x10]
+ mov rax, gword ptr [rbx]
+ cmp byte ptr [rax], al
+ add rax, 16
+ mov ecx, dword ptr [rbx+0x10]
;; size=12 bbWeight=0.50 PerfScore 3.62
G_M31979_IG05:
- test edx, edx
+ test ecx, ecx
je SHORT G_M31979_IG09
;; size=4 bbWeight=1 PerfScore 1.25
G_M31979_IG06:
- mov esi, 1
- xor r8d, r8d
- ;; size=8 bbWeight=0.25 PerfScore 0.12
+ mov edx, 1
+ xor esi, esi
+ ;; size=7 bbWeight=0.25 PerfScore 0.12
G_M31979_IG07:
- mov r9, qword ptr [rcx+8*r8]
- test r9, r9
- jl SHORT G_M31979_IG11
- imul rsi, r9
- inc r8d
- cmp r8d, edx
+ mov r8, qword ptr [rax+8*rsi]
+ test r8, r8
+ jl SHORT G_M31979_IG14
+ imul rdx, r8
+ inc esi
+ cmp esi, ecx
jl SHORT G_M31979_IG07
- ;; size=21 bbWeight=4 PerfScore 27.00
+ ;; size=19 bbWeight=4 PerfScore 27.00
G_M31979_IG08:
- test rsi, rsi
- jl SHORT G_M31979_IG11
- mov rcx, rsi
- test rcx, rcx
- je SHORT G_M31979_IG09
- mov rax, bword ptr [rdi]
- ;; size=16 bbWeight=0.50 PerfScore 2.38
+ test rdx, rdx
+ jl SHORT G_M31979_IG14
+ mov rax, rdx
+ test rax, rax
+ jne SHORT G_M31979_IG11
+ ;; size=13 bbWeight=0.50 PerfScore 1.38
G_M31979_IG09:
+ xor rax, rax
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M31979_IG10:
add rsp, 8
pop rbx
pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
-G_M31979_IG10:
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M31979_IG11:
+ mov rax, bword ptr [rdi]
+ ;; size=3 bbWeight=0.50 PerfScore 1.00
+G_M31979_IG12:
+ add rsp, 8
+ pop rbx
+ pop rbp
+ ret
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M31979_IG13:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M31979_IG11:
+G_M31979_IG14:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 134, prolog size 8, PerfScore 47.75, instruction count 45, allocated bytes for code 134 (MethodHash=9bd28314) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:GetPinnableReference():byref:this (FullOpts)
+; Total bytes of code 141, prolog size 8, PerfScore 47.62, instruction count 49, allocated bytes for code 141 (MethodHash=9bd28314) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[double]:GetPinnableReference():byref:this (FullOpts)
; ============================================================ 7 (5.22 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:GetPinnableReference():byref:this ; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:GetPinnableReference():byref: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; 8 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T05] ( 4, 3.50) byref -> rdi this single-def
-; V01 loc0 [V01,T09] ( 3, 2.50) byref -> rax
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
-;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V07 tmp5 [V07,T07] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
-; V08 tmp6 [V08,T12] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V09 tmp7 [V09,T13] ( 2, 2 ) int -> rdx "Inlining Arg"
-;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V11 tmp9 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V13 tmp11 [V13,T08] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V14 tmp12 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V16 tmp14 [V16,T17] ( 2, 1 ) long -> rcx "Inline return value spill temp"
-;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V18 tmp16 [V18,T02] ( 5, 9.25) long -> rsi "Inline stloc first use temp"
-;* V19 tmp17 [V19,T20] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T10] ( 3, 2 ) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T11] ( 3, 2 ) int -> rdx "field V05._length (fldOffset=0x8)" P-INDEP
-;* V24 tmp22 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP
-; V26 tmp24 [V26,T14] ( 2, 1 ) byref -> rcx single-def "field V10._reference (fldOffset=0x0)" P-INDEP
-; V27 tmp25 [V27,T18] ( 2, 1 ) int -> rdx single-def "field V10._length (fldOffset=0x8)" P-INDEP
-; V28 tmp26 [V28,T15] ( 2, 1 ) byref -> rcx single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref single-def "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T16] ( 2, 1 ) byref -> rcx single-def "field V14._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T19] ( 2, 1 ) int -> rdx single-def "field V14._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T06] ( 2, 5 ) byref -> rcx single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T04] ( 3, 6 ) int -> rdx single-def "field V17._length (fldOffset=0x8)" P-INDEP
-; V34 cse0 [V34,T01] ( 3, 12 ) long -> r9 "CSE #05: aggressive"
-; V35 rat0 [V35,T00] ( 5, 16.25) long -> r8 "Widened IV V19"
+;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V02 tmp1 [V02,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
+;* V03 tmp2 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
+;* V04 tmp3 [V04 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
+;* V05 tmp4 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
+; V06 tmp5 [V06,T07] ( 3, 3 ) ref -> rax single-def "MemoryMarshal.GetArrayDataReference array"
+; V07 tmp6 [V07,T11] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V08 tmp7 [V08,T12] ( 2, 2 ) int -> rcx "Inlining Arg"
+;* V09 tmp8 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V10 tmp9 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V11 tmp10 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+; V12 tmp11 [V12,T08] ( 3, 3 ) int -> rcx "Inlining Arg"
+;* V13 tmp12 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V14 tmp13 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+; V15 tmp14 [V15,T16] ( 2, 1 ) long -> rax "Inline return value spill temp"
+;* V16 tmp15 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
+; V17 tmp16 [V17,T02] ( 5, 9.25) long -> rdx "Inline stloc first use temp"
+;* V18 tmp17 [V18,T19] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V19 tmp18 [V19 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+; V21 tmp20 [V21,T09] ( 3, 2 ) byref -> rax "field V04._reference (fldOffset=0x0)" P-INDEP
+; V22 tmp21 [V22,T10] ( 3, 2 ) int -> rcx "field V04._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp22 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp23 [V24 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+; V25 tmp24 [V25,T13] ( 2, 1 ) byref -> rax single-def "field V09._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp25 [V26,T17] ( 2, 1 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP
+; V27 tmp26 [V27,T14] ( 2, 1 ) byref -> rax single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V28 tmp27 [V28 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V29 tmp28 [V29,T15] ( 2, 1 ) byref -> rax single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V30 tmp29 [V30,T18] ( 2, 1 ) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V31 tmp30 [V31,T06] ( 2, 5 ) byref -> rax single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V32 tmp31 [V32,T04] ( 3, 6 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V33 cse0 [V33,T01] ( 3, 12 ) long -> r8 "CSE #05: aggressive"
+; V34 rat0 [V34,T00] ( 5, 16.25) long -> rsi "Widened IV V18"
;
; Lcl frame size = 8
G_M11405_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M11405_IG02:
- xor rax, rax
lea rbx, bword ptr [rdi+0x08]
cmp gword ptr [rbx], 0
jne SHORT G_M11405_IG04
- ;; size=12 bbWeight=1 PerfScore 4.75
+ ;; size=10 bbWeight=1 PerfScore 4.50
G_M11405_IG03:
- lea rcx, bword ptr [rbx+0x18]
- mov edx, dword ptr [rbx+0x10]
- cmp edx, 5
- ja SHORT G_M11405_IG10
+ lea rax, bword ptr [rbx+0x18]
+ mov ecx, dword ptr [rbx+0x10]
+ cmp ecx, 5
+ ja SHORT G_M11405_IG13
jmp SHORT G_M11405_IG05
- align [6 bytes for IG07]
- ;; size=20 bbWeight=0.50 PerfScore 2.88
+ align [9 bytes for IG07]
+ ;; size=23 bbWeight=0.50 PerfScore 2.88
G_M11405_IG04:
- mov rcx, gword ptr [rbx]
- cmp byte ptr [rcx], cl
- add rcx, 16
- mov edx, dword ptr [rbx+0x10]
+ mov rax, gword ptr [rbx]
+ cmp byte ptr [rax], al
+ add rax, 16
+ mov ecx, dword ptr [rbx+0x10]
;; size=12 bbWeight=0.50 PerfScore 3.62
G_M11405_IG05:
- test edx, edx
+ test ecx, ecx
je SHORT G_M11405_IG09
;; size=4 bbWeight=1 PerfScore 1.25
G_M11405_IG06:
- mov esi, 1
- xor r8d, r8d
- ;; size=8 bbWeight=0.25 PerfScore 0.12
+ mov edx, 1
+ xor esi, esi
+ ;; size=7 bbWeight=0.25 PerfScore 0.12
G_M11405_IG07:
- mov r9, qword ptr [rcx+8*r8]
- test r9, r9
- jl SHORT G_M11405_IG11
- imul rsi, r9
- inc r8d
- cmp r8d, edx
+ mov r8, qword ptr [rax+8*rsi]
+ test r8, r8
+ jl SHORT G_M11405_IG14
+ imul rdx, r8
+ inc esi
+ cmp esi, ecx
jl SHORT G_M11405_IG07
- ;; size=21 bbWeight=4 PerfScore 27.00
+ ;; size=19 bbWeight=4 PerfScore 27.00
G_M11405_IG08:
- test rsi, rsi
- jl SHORT G_M11405_IG11
- mov rcx, rsi
- test rcx, rcx
- je SHORT G_M11405_IG09
- mov rax, bword ptr [rdi]
- ;; size=16 bbWeight=0.50 PerfScore 2.38
+ test rdx, rdx
+ jl SHORT G_M11405_IG14
+ mov rax, rdx
+ test rax, rax
+ jne SHORT G_M11405_IG11
+ ;; size=13 bbWeight=0.50 PerfScore 1.38
G_M11405_IG09:
+ xor rax, rax
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M11405_IG10:
add rsp, 8
pop rbx
pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
-G_M11405_IG10:
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M11405_IG11:
+ mov rax, bword ptr [rdi]
+ ;; size=3 bbWeight=0.50 PerfScore 1.00
+G_M11405_IG12:
+ add rsp, 8
+ pop rbx
+ pop rbp
+ ret
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M11405_IG13:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M11405_IG11:
+G_M11405_IG14:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 134, prolog size 8, PerfScore 47.75, instruction count 45, allocated bytes for code 134 (MethodHash=0f72d372) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:GetPinnableReference():byref:this (FullOpts)
+; Total bytes of code 141, prolog size 8, PerfScore 47.62, instruction count 49, allocated bytes for code 141 (MethodHash=0f72d372) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[int]:GetPinnableReference():byref:this (FullOpts)
; ============================================================ 7 (5.22 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:GetPinnableReference():byref:this ; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:GetPinnableReference():byref: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; 8 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T05] ( 4, 3.50) byref -> rdi this single-def
-; V01 loc0 [V01,T09] ( 3, 2.50) byref -> rax
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
-;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V07 tmp5 [V07,T07] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
-; V08 tmp6 [V08,T12] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V09 tmp7 [V09,T13] ( 2, 2 ) int -> rdx "Inlining Arg"
-;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V11 tmp9 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V13 tmp11 [V13,T08] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V14 tmp12 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V16 tmp14 [V16,T17] ( 2, 1 ) long -> rcx "Inline return value spill temp"
-;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V18 tmp16 [V18,T02] ( 5, 9.25) long -> rsi "Inline stloc first use temp"
-;* V19 tmp17 [V19,T20] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T10] ( 3, 2 ) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T11] ( 3, 2 ) int -> rdx "field V05._length (fldOffset=0x8)" P-INDEP
-;* V24 tmp22 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP
-; V26 tmp24 [V26,T14] ( 2, 1 ) byref -> rcx single-def "field V10._reference (fldOffset=0x0)" P-INDEP
-; V27 tmp25 [V27,T18] ( 2, 1 ) int -> rdx single-def "field V10._length (fldOffset=0x8)" P-INDEP
-; V28 tmp26 [V28,T15] ( 2, 1 ) byref -> rcx single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref single-def "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T16] ( 2, 1 ) byref -> rcx single-def "field V14._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T19] ( 2, 1 ) int -> rdx single-def "field V14._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T06] ( 2, 5 ) byref -> rcx single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T04] ( 3, 6 ) int -> rdx single-def "field V17._length (fldOffset=0x8)" P-INDEP
-; V34 cse0 [V34,T01] ( 3, 12 ) long -> r9 "CSE #05: aggressive"
-; V35 rat0 [V35,T00] ( 5, 16.25) long -> r8 "Widened IV V19"
+;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V02 tmp1 [V02,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
+;* V03 tmp2 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
+;* V04 tmp3 [V04 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
+;* V05 tmp4 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
+; V06 tmp5 [V06,T07] ( 3, 3 ) ref -> rax single-def "MemoryMarshal.GetArrayDataReference array"
+; V07 tmp6 [V07,T11] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V08 tmp7 [V08,T12] ( 2, 2 ) int -> rcx "Inlining Arg"
+;* V09 tmp8 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V10 tmp9 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V11 tmp10 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+; V12 tmp11 [V12,T08] ( 3, 3 ) int -> rcx "Inlining Arg"
+;* V13 tmp12 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V14 tmp13 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+; V15 tmp14 [V15,T16] ( 2, 1 ) long -> rax "Inline return value spill temp"
+;* V16 tmp15 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
+; V17 tmp16 [V17,T02] ( 5, 9.25) long -> rdx "Inline stloc first use temp"
+;* V18 tmp17 [V18,T19] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V19 tmp18 [V19 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+; V21 tmp20 [V21,T09] ( 3, 2 ) byref -> rax "field V04._reference (fldOffset=0x0)" P-INDEP
+; V22 tmp21 [V22,T10] ( 3, 2 ) int -> rcx "field V04._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp22 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp23 [V24 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+; V25 tmp24 [V25,T13] ( 2, 1 ) byref -> rax single-def "field V09._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp25 [V26,T17] ( 2, 1 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP
+; V27 tmp26 [V27,T14] ( 2, 1 ) byref -> rax single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V28 tmp27 [V28 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V29 tmp28 [V29,T15] ( 2, 1 ) byref -> rax single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V30 tmp29 [V30,T18] ( 2, 1 ) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V31 tmp30 [V31,T06] ( 2, 5 ) byref -> rax single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V32 tmp31 [V32,T04] ( 3, 6 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V33 cse0 [V33,T01] ( 3, 12 ) long -> r8 "CSE #05: aggressive"
+; V34 rat0 [V34,T00] ( 5, 16.25) long -> rsi "Widened IV V18"
;
; Lcl frame size = 8
G_M53748_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M53748_IG02:
- xor rax, rax
lea rbx, bword ptr [rdi+0x08]
cmp gword ptr [rbx], 0
jne SHORT G_M53748_IG04
- ;; size=12 bbWeight=1 PerfScore 4.75
+ ;; size=10 bbWeight=1 PerfScore 4.50
G_M53748_IG03:
- lea rcx, bword ptr [rbx+0x18]
- mov edx, dword ptr [rbx+0x10]
- cmp edx, 5
- ja SHORT G_M53748_IG10
+ lea rax, bword ptr [rbx+0x18]
+ mov ecx, dword ptr [rbx+0x10]
+ cmp ecx, 5
+ ja SHORT G_M53748_IG13
jmp SHORT G_M53748_IG05
- align [6 bytes for IG07]
- ;; size=20 bbWeight=0.50 PerfScore 2.88
+ align [9 bytes for IG07]
+ ;; size=23 bbWeight=0.50 PerfScore 2.88
G_M53748_IG04:
- mov rcx, gword ptr [rbx]
- cmp byte ptr [rcx], cl
- add rcx, 16
- mov edx, dword ptr [rbx+0x10]
+ mov rax, gword ptr [rbx]
+ cmp byte ptr [rax], al
+ add rax, 16
+ mov ecx, dword ptr [rbx+0x10]
;; size=12 bbWeight=0.50 PerfScore 3.62
G_M53748_IG05:
- test edx, edx
+ test ecx, ecx
je SHORT G_M53748_IG09
;; size=4 bbWeight=1 PerfScore 1.25
G_M53748_IG06:
- mov esi, 1
- xor r8d, r8d
- ;; size=8 bbWeight=0.25 PerfScore 0.12
+ mov edx, 1
+ xor esi, esi
+ ;; size=7 bbWeight=0.25 PerfScore 0.12
G_M53748_IG07:
- mov r9, qword ptr [rcx+8*r8]
- test r9, r9
- jl SHORT G_M53748_IG11
- imul rsi, r9
- inc r8d
- cmp r8d, edx
+ mov r8, qword ptr [rax+8*rsi]
+ test r8, r8
+ jl SHORT G_M53748_IG14
+ imul rdx, r8
+ inc esi
+ cmp esi, ecx
jl SHORT G_M53748_IG07
- ;; size=21 bbWeight=4 PerfScore 27.00
+ ;; size=19 bbWeight=4 PerfScore 27.00
G_M53748_IG08:
- test rsi, rsi
- jl SHORT G_M53748_IG11
- mov rcx, rsi
- test rcx, rcx
- je SHORT G_M53748_IG09
- mov rax, bword ptr [rdi]
- ;; size=16 bbWeight=0.50 PerfScore 2.38
+ test rdx, rdx
+ jl SHORT G_M53748_IG14
+ mov rax, rdx
+ test rax, rax
+ jne SHORT G_M53748_IG11
+ ;; size=13 bbWeight=0.50 PerfScore 1.38
G_M53748_IG09:
+ xor rax, rax
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M53748_IG10:
add rsp, 8
pop rbx
pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
-G_M53748_IG10:
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M53748_IG11:
+ mov rax, bword ptr [rdi]
+ ;; size=3 bbWeight=0.50 PerfScore 1.00
+G_M53748_IG12:
+ add rsp, 8
+ pop rbx
+ pop rbp
+ ret
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M53748_IG13:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M53748_IG11:
+G_M53748_IG14:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 134, prolog size 8, PerfScore 47.75, instruction count 45, allocated bytes for code 134 (MethodHash=a4002e0b) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:GetPinnableReference():byref:this (FullOpts)
+; Total bytes of code 141, prolog size 8, PerfScore 47.62, instruction count 49, allocated bytes for code 141 (MethodHash=a4002e0b) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[long]:GetPinnableReference():byref:this (FullOpts)
; ============================================================ 7 (5.22 % of base) - System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:GetPinnableReference():byref:this ; Assembly listing for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:GetPinnableReference():byref: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; 8 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T05] ( 4, 3.50) byref -> rdi this single-def
-; V01 loc0 [V01,T09] ( 3, 2.50) byref -> rax
-;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
-;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V07 tmp5 [V07,T07] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
-; V08 tmp6 [V08,T12] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V09 tmp7 [V09,T13] ( 2, 2 ) int -> rdx "Inlining Arg"
-;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V11 tmp9 [V11 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V13 tmp11 [V13,T08] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V14 tmp12 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V16 tmp14 [V16,T17] ( 2, 1 ) long -> rcx "Inline return value spill temp"
-;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V18 tmp16 [V18,T02] ( 5, 9.25) long -> rsi "Inline stloc first use temp"
-;* V19 tmp17 [V19,T20] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T10] ( 3, 2 ) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T11] ( 3, 2 ) int -> rdx "field V05._length (fldOffset=0x8)" P-INDEP
-;* V24 tmp22 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP
-; V26 tmp24 [V26,T14] ( 2, 1 ) byref -> rcx single-def "field V10._reference (fldOffset=0x0)" P-INDEP
-; V27 tmp25 [V27,T18] ( 2, 1 ) int -> rdx single-def "field V10._length (fldOffset=0x8)" P-INDEP
-; V28 tmp26 [V28,T15] ( 2, 1 ) byref -> rcx single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V29 tmp27 [V29 ] ( 0, 0 ) int -> zero-ref single-def "field V12._length (fldOffset=0x8)" P-INDEP
-; V30 tmp28 [V30,T16] ( 2, 1 ) byref -> rcx single-def "field V14._reference (fldOffset=0x0)" P-INDEP
-; V31 tmp29 [V31,T19] ( 2, 1 ) int -> rdx single-def "field V14._length (fldOffset=0x8)" P-INDEP
-; V32 tmp30 [V32,T06] ( 2, 5 ) byref -> rcx single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-; V33 tmp31 [V33,T04] ( 3, 6 ) int -> rdx single-def "field V17._length (fldOffset=0x8)" P-INDEP
-; V34 cse0 [V34,T01] ( 3, 12 ) long -> r9 "CSE #05: aggressive"
-; V35 rat0 [V35,T00] ( 5, 16.25) long -> r8 "Widened IV V19"
+;# V01 OutArgs [V01 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V02 tmp1 [V02,T03] ( 6, 8 ) byref -> rbx single-def "Inlining Arg"
+;* V03 tmp2 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
+;* V04 tmp3 [V04 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
+;* V05 tmp4 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
+; V06 tmp5 [V06,T07] ( 3, 3 ) ref -> rax single-def "MemoryMarshal.GetArrayDataReference array"
+; V07 tmp6 [V07,T11] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
+; V08 tmp7 [V08,T12] ( 2, 2 ) int -> rcx "Inlining Arg"
+;* V09 tmp8 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V10 tmp9 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V11 tmp10 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+; V12 tmp11 [V12,T08] ( 3, 3 ) int -> rcx "Inlining Arg"
+;* V13 tmp12 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;* V14 tmp13 [V14 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+; V15 tmp14 [V15,T16] ( 2, 1 ) long -> rax "Inline return value spill temp"
+;* V16 tmp15 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
+; V17 tmp16 [V17,T02] ( 5, 9.25) long -> rdx "Inline stloc first use temp"
+;* V18 tmp17 [V18,T19] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V19 tmp18 [V19 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp19 [V20 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
+; V21 tmp20 [V21,T09] ( 3, 2 ) byref -> rax "field V04._reference (fldOffset=0x0)" P-INDEP
+; V22 tmp21 [V22,T10] ( 3, 2 ) int -> rcx "field V04._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp22 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp23 [V24 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+; V25 tmp24 [V25,T13] ( 2, 1 ) byref -> rax single-def "field V09._reference (fldOffset=0x0)" P-INDEP
+; V26 tmp25 [V26,T17] ( 2, 1 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP
+; V27 tmp26 [V27,T14] ( 2, 1 ) byref -> rax single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V28 tmp27 [V28 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V29 tmp28 [V29,T15] ( 2, 1 ) byref -> rax single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V30 tmp29 [V30,T18] ( 2, 1 ) int -> rcx "field V13._length (fldOffset=0x8)" P-INDEP
+; V31 tmp30 [V31,T06] ( 2, 5 ) byref -> rax single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+; V32 tmp31 [V32,T04] ( 3, 6 ) int -> rcx "field V16._length (fldOffset=0x8)" P-INDEP
+; V33 cse0 [V33,T01] ( 3, 12 ) long -> r8 "CSE #05: aggressive"
+; V34 rat0 [V34,T00] ( 5, 16.25) long -> rsi "Widened IV V18"
;
; Lcl frame size = 8
G_M16620_IG01:
push rbp
push rbx
push rax
lea rbp, [rsp+0x10]
;; size=8 bbWeight=1 PerfScore 3.50
G_M16620_IG02:
- xor rax, rax
lea rbx, bword ptr [rdi+0x08]
cmp gword ptr [rbx], 0
jne SHORT G_M16620_IG04
- ;; size=12 bbWeight=1 PerfScore 4.75
+ ;; size=10 bbWeight=1 PerfScore 4.50
G_M16620_IG03:
- lea rcx, bword ptr [rbx+0x18]
- mov edx, dword ptr [rbx+0x10]
- cmp edx, 5
- ja SHORT G_M16620_IG10
+ lea rax, bword ptr [rbx+0x18]
+ mov ecx, dword ptr [rbx+0x10]
+ cmp ecx, 5
+ ja SHORT G_M16620_IG13
jmp SHORT G_M16620_IG05
- align [6 bytes for IG07]
- ;; size=20 bbWeight=0.50 PerfScore 2.88
+ align [9 bytes for IG07]
+ ;; size=23 bbWeight=0.50 PerfScore 2.88
G_M16620_IG04:
- mov rcx, gword ptr [rbx]
- cmp byte ptr [rcx], cl
- add rcx, 16
- mov edx, dword ptr [rbx+0x10]
+ mov rax, gword ptr [rbx]
+ cmp byte ptr [rax], al
+ add rax, 16
+ mov ecx, dword ptr [rbx+0x10]
;; size=12 bbWeight=0.50 PerfScore 3.62
G_M16620_IG05:
- test edx, edx
+ test ecx, ecx
je SHORT G_M16620_IG09
;; size=4 bbWeight=1 PerfScore 1.25
G_M16620_IG06:
- mov esi, 1
- xor r8d, r8d
- ;; size=8 bbWeight=0.25 PerfScore 0.12
+ mov edx, 1
+ xor esi, esi
+ ;; size=7 bbWeight=0.25 PerfScore 0.12
G_M16620_IG07:
- mov r9, qword ptr [rcx+8*r8]
- test r9, r9
- jl SHORT G_M16620_IG11
- imul rsi, r9
- inc r8d
- cmp r8d, edx
+ mov r8, qword ptr [rax+8*rsi]
+ test r8, r8
+ jl SHORT G_M16620_IG14
+ imul rdx, r8
+ inc esi
+ cmp esi, ecx
jl SHORT G_M16620_IG07
- ;; size=21 bbWeight=4 PerfScore 27.00
+ ;; size=19 bbWeight=4 PerfScore 27.00
G_M16620_IG08:
- test rsi, rsi
- jl SHORT G_M16620_IG11
- mov rcx, rsi
- test rcx, rcx
- je SHORT G_M16620_IG09
- mov rax, bword ptr [rdi]
- ;; size=16 bbWeight=0.50 PerfScore 2.38
+ test rdx, rdx
+ jl SHORT G_M16620_IG14
+ mov rax, rdx
+ test rax, rax
+ jne SHORT G_M16620_IG11
+ ;; size=13 bbWeight=0.50 PerfScore 1.38
G_M16620_IG09:
+ xor rax, rax
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
+G_M16620_IG10:
add rsp, 8
pop rbx
pop rbp
ret
- ;; size=7 bbWeight=1 PerfScore 2.25
-G_M16620_IG10:
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M16620_IG11:
+ mov rax, bword ptr [rdi]
+ ;; size=3 bbWeight=0.50 PerfScore 1.00
+G_M16620_IG12:
+ add rsp, 8
+ pop rbx
+ pop rbp
+ ret
+ ;; size=7 bbWeight=0.50 PerfScore 1.12
+G_M16620_IG13:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M16620_IG11:
+G_M16620_IG14:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 134, prolog size 8, PerfScore 47.75, instruction count 45, allocated bytes for code 134 (MethodHash=a7a9bf13) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:GetPinnableReference():byref:this (FullOpts)
+; Total bytes of code 141, prolog size 8, PerfScore 47.62, instruction count 49, allocated bytes for code 141 (MethodHash=a7a9bf13) for method System.Numerics.Tensors.ReadOnlyTensorSpan`1[short]:GetPinnableReference():byref:this (FullOpts)
; ============================================================ Larger list of diffs: https://gist.github.com/MihuBot/271b6fbbe4ea38cba208fd323484670d |
Top method improvements-348 (-28.38 % of base) - System.Numerics.Tensors.Tensor:SequenceEqual[ubyte](byref,byref):ubyte ; Assembly listing for method System.Numerics.Tensors.Tensor:SequenceEqual[ubyte](byref,byref):ubyte (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; 62 single block inlinees; 20 inlinees without PGO data
+; 0 inlinees with PGO data; 46 single block inlinees; 12 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T12] ( 8, 5.50) byref -> rbx single-def
-; V01 arg1 [V01,T13] ( 8, 5.50) byref -> r15 single-def
+; V00 arg0 [V00,T06] ( 7, 5 ) byref -> rbx single-def
+; V01 arg1 [V01,T07] ( 7, 5 ) byref -> r15 single-def
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T26] ( 2, 4 ) long -> rdx "impAppendStmt"
+; V03 tmp1 [V03,T14] ( 2, 4 ) long -> r13 "impAppendStmt"
;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[long]>
;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ubyte]>
;* V07 tmp5 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-; V08 tmp6 [V08,T14] ( 5, 7 ) byref -> rdx single-def "Inlining Arg"
+; V08 tmp6 [V08,T08] ( 5, 7 ) byref -> rax single-def "Inlining Arg"
;* V09 tmp7 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V12 tmp10 [V12,T31] ( 3, 3 ) ref -> rsi single-def "MemoryMarshal.GetArrayDataReference array"
-; V13 tmp11 [V13,T51] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
-; V14 tmp12 [V14,T59] ( 2, 2 ) int -> rcx "Inlining Arg"
+; V12 tmp10 [V12,T19] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
+; V13 tmp11 [V13,T35] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
+; V14 tmp12 [V14,T43] ( 2, 2 ) int -> rdx "Inlining Arg"
;* V15 tmp13 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V17 tmp15 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V18 tmp16 [V18,T37] ( 3, 3 ) int -> rcx "Inlining Arg"
+; V18 tmp16 [V18,T23] ( 3, 3 ) int -> rdx "Inlining Arg"
;* V19 tmp17 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V21 tmp19 [V21,T47] ( 3, 2 ) long -> rdx "Inline return value spill temp"
+; V21 tmp19 [V21,T31] ( 3, 2 ) long -> r13 "Inline return value spill temp"
;* V22 tmp20 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V23 tmp21 [V23,T08] ( 5, 9.25) long -> rdx "Inline stloc first use temp"
-;* V24 tmp22 [V24,T113] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V25 tmp23 [V25,T15] ( 5, 7 ) byref -> rsi single-def "Inlining Arg"
+; V23 tmp21 [V23,T04] ( 5, 9.25) long -> rax "Inline stloc first use temp"
+;* V24 tmp22 [V24,T73] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+; V25 tmp23 [V25,T09] ( 5, 7 ) byref -> rax single-def "Inlining Arg"
;* V26 tmp24 [V26 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
;* V27 tmp25 [V27 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
;* V28 tmp26 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V29 tmp27 [V29,T32] ( 3, 3 ) ref -> r8 single-def "MemoryMarshal.GetArrayDataReference array"
-; V30 tmp28 [V30,T52] ( 2, 2 ) byref -> r8 single-def "Inlining Arg"
-; V31 tmp29 [V31,T60] ( 2, 2 ) int -> r10 "Inlining Arg"
+; V29 tmp27 [V29,T20] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
+; V30 tmp28 [V30,T36] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
+; V31 tmp29 [V31,T44] ( 2, 2 ) int -> rdx "Inlining Arg"
;* V32 tmp30 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V33 tmp31 [V33 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V34 tmp32 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V35 tmp33 [V35,T38] ( 3, 3 ) int -> r10 "Inlining Arg"
+; V35 tmp33 [V35,T24] ( 3, 3 ) int -> rdx "Inlining Arg"
;* V36 tmp34 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V37 tmp35 [V37 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V38 tmp36 [V38,T48] ( 3, 2 ) long -> rsi "Inline return value spill temp"
+; V38 tmp36 [V38,T32] ( 3, 2 ) long -> rax "Inline return value spill temp"
;* V39 tmp37 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V40 tmp38 [V40,T09] ( 5, 9.25) long -> rsi "Inline stloc first use temp"
-;* V41 tmp39 [V41,T114] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+; V40 tmp38 [V40,T05] ( 5, 9.25) long -> rax "Inline stloc first use temp"
+;* V41 tmp39 [V41,T74] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V42 tmp40 [V42 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-; V43 tmp41 [V43,T53] ( 2, 2 ) byref -> rdx single-def "Inlining Arg"
+; V43 tmp41 [V43,T37] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
;* V44 tmp42 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V45 tmp43 [V45,T33] ( 3, 3 ) ref -> rdi single-def "MemoryMarshal.GetArrayDataReference array"
-; V46 tmp44 [V46,T54] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
-; V47 tmp45 [V47,T61] ( 2, 2 ) int -> rax "Inlining Arg"
+; V45 tmp43 [V45,T21] ( 3, 3 ) ref -> rdi single-def "MemoryMarshal.GetArrayDataReference array"
+; V46 tmp44 [V46,T38] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V47 tmp45 [V47,T45] ( 2, 2 ) int -> r14 "Inlining Arg"
;* V48 tmp46 [V48 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V49 tmp47 [V49 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V50 tmp48 [V50 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V51 tmp49 [V51,T39] ( 3, 3 ) int -> rax "Inlining Arg"
+; V51 tmp49 [V51,T25] ( 3, 3 ) int -> r14 "Inlining Arg"
;* V52 tmp50 [V52 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V53 tmp51 [V53 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V54 tmp52 [V54 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-; V55 tmp53 [V55,T55] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V55 tmp53 [V55,T39] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
;* V56 tmp54 [V56 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V57 tmp55 [V57,T34] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
-; V58 tmp56 [V58,T56] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V59 tmp57 [V59,T62] ( 2, 2 ) int -> r9 "Inlining Arg"
+; V57 tmp55 [V57,T22] ( 3, 3 ) ref -> rsi single-def "MemoryMarshal.GetArrayDataReference array"
+; V58 tmp56 [V58,T40] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V59 tmp57 [V59,T46] ( 2, 2 ) int -> r12 "Inlining Arg"
;* V60 tmp58 [V60 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V61 tmp59 [V61 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V62 tmp60 [V62 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V63 tmp61 [V63,T40] ( 3, 3 ) int -> r9 "Inlining Arg"
+; V63 tmp61 [V63,T26] ( 3, 3 ) int -> r12 "Inlining Arg"
;* V64 tmp62 [V64 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
;* V65 tmp63 [V65 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V66 tmp64 [V66,T96] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
+; V66 tmp64 [V66,T64] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
;* V67 tmp65 [V67 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V68 tmp66 [V68 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V69 tmp67 [V69 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V70 tmp68 [V70 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V71 tmp69 [V71 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
;* V72 tmp70 [V72 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
;* V73 tmp71 [V73 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V74 tmp72 [V74 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V75 tmp73 [V75 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
;* V76 tmp74 [V76 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-;* V77 tmp75 [V77 ] ( 0, 0 ) byref -> zero-ref single-def "Inline return value spill temp"
-; V78 tmp76 [V78,T66] ( 3, 1.50) byref -> rdi "Inline stloc first use temp"
-; V79 tmp77 [V79,T16] ( 6, 6 ) byref -> rax single-def "Inlining Arg"
-;* V80 tmp78 [V80 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
-;* V81 tmp79 [V81 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-;* V82 tmp80 [V82 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V83 tmp81 [V83,T35] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
-; V84 tmp82 [V84,T57] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V85 tmp83 [V85,T63] ( 2, 2 ) int -> rdx "Inlining Arg"
-;* V86 tmp84 [V86 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V87 tmp85 [V87 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V88 tmp86 [V88 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V89 tmp87 [V89,T41] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V90 tmp88 [V90 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V91 tmp89 [V91 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V92 tmp90 [V92,T97] ( 2, 1 ) long -> rax "Inline return value spill temp"
-;* V93 tmp91 [V93 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V94 tmp92 [V94,T10] ( 5, 9.25) long -> rax "Inline stloc first use temp"
-;* V95 tmp93 [V95,T115] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V96 tmp94 [V96,T64] ( 2, 2 ) int -> rax "Inlining Arg"
-;* V97 tmp95 [V97 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V98 tmp96 [V98 ] ( 0, 0 ) byref -> zero-ref single-def "Inline return value spill temp"
-; V99 tmp97 [V99,T67] ( 3, 1.50) byref -> rsi "Inline stloc first use temp"
-; V100 tmp98 [V100,T17] ( 6, 6 ) byref -> rbx single-def "Inlining Arg"
-;* V101 tmp99 [V101 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[long]>
-;* V102 tmp100 [V102 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[long]>
-;* V103 tmp101 [V103 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[long]>
-; V104 tmp102 [V104,T36] ( 3, 3 ) ref -> rcx single-def "MemoryMarshal.GetArrayDataReference array"
-; V105 tmp103 [V105,T58] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V106 tmp104 [V106,T65] ( 2, 2 ) int -> rdx "Inlining Arg"
-;* V107 tmp105 [V107 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V108 tmp106 [V108 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V109 tmp107 [V109 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-; V110 tmp108 [V110,T42] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V111 tmp109 [V111 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
-;* V112 tmp110 [V112 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V113 tmp111 [V113,T98] ( 2, 1 ) long -> rdx "Inline return value spill temp"
-;* V114 tmp112 [V114 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[long]>
-; V115 tmp113 [V115,T11] ( 5, 9.25) long -> r8 "Inline stloc first use temp"
-;* V116 tmp114 [V116,T116] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V117 tmp115 [V117,T43] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V118 tmp116 [V118 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-; V119 tmp117 [V119,T72] ( 3, 1.50) ubyte -> rax "Inline return value spill temp"
-;* V120 tmp118 [V120 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V121 tmp119 [V121 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V122 tmp120 [V122 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V123 tmp121 [V123 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
-;* V124 tmp122 [V124 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
-;* V125 tmp123 [V125 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
-;* V126 tmp124 [V126 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V127 tmp125 [V127 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V128 tmp126 [V128 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V129 tmp127 [V129 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V130 tmp128 [V130 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V131 tmp129 [V131 ] ( 0, 0 ) int -> zero-ref single-def "field V04._length (fldOffset=0x8)" P-INDEP
-;* V132 tmp130 [V132 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
-;* V133 tmp131 [V133 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x8)" P-INDEP
-; V134 tmp132 [V134,T76] ( 2, 1 ) byref -> rdi single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-; V135 tmp133 [V135,T99] ( 2, 1 ) int -> rax single-def "field V06._length (fldOffset=0x8)" P-INDEP
-;* V136 tmp134 [V136 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V137 tmp135 [V137 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP
-;* V138 tmp136 [V138 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP
-;* V139 tmp137 [V139 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
-; V140 tmp138 [V140,T45] ( 3, 2 ) byref -> rsi "field V10._reference (fldOffset=0x0)" P-INDEP
-; V141 tmp139 [V141,T49] ( 3, 2 ) int -> rcx "field V10._length (fldOffset=0x8)" P-INDEP
-;* V142 tmp140 [V142 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V143 tmp141 [V143 ] ( 0, 0 ) int -> zero-ref single-def "field V11._length (fldOffset=0x8)" P-INDEP
-; V144 tmp142 [V144,T77] ( 2, 1 ) byref -> rsi single-def "field V15._reference (fldOffset=0x0)" P-INDEP
-; V145 tmp143 [V145,T100] ( 2, 1 ) int -> rcx single-def "field V15._length (fldOffset=0x8)" P-INDEP
-; V146 tmp144 [V146,T78] ( 2, 1 ) byref -> rsi single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-;* V147 tmp145 [V147 ] ( 0, 0 ) int -> zero-ref single-def "field V17._length (fldOffset=0x8)" P-INDEP
-; V148 tmp146 [V148,T79] ( 2, 1 ) byref -> rsi single-def "field V19._reference (fldOffset=0x0)" P-INDEP
-; V149 tmp147 [V149,T101] ( 2, 1 ) int -> rcx single-def "field V19._length (fldOffset=0x8)" P-INDEP
-; V150 tmp148 [V150,T22] ( 2, 5 ) byref -> rsi single-def "field V22._reference (fldOffset=0x0)" P-INDEP
-; V151 tmp149 [V151,T18] ( 3, 6 ) int -> rcx single-def "field V22._length (fldOffset=0x8)" P-INDEP
-;* V152 tmp150 [V152 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP
-;* V153 tmp151 [V153 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
-; V154 tmp152 [V154,T46] ( 3, 2 ) byref -> r8 "field V27._reference (fldOffset=0x0)" P-INDEP
-; V155 tmp153 [V155,T50] ( 3, 2 ) int -> r10 "field V27._length (fldOffset=0x8)" P-INDEP
-;* V156 tmp154 [V156 ] ( 0, 0 ) byref -> zero-ref single-def "field V28._reference (fldOffset=0x0)" P-INDEP
-;* V157 tmp155 [V157 ] ( 0, 0 ) int -> zero-ref single-def "field V28._length (fldOffset=0x8)" P-INDEP
-; V158 tmp156 [V158,T80] ( 2, 1 ) byref -> r8 single-def "field V32._reference (fldOffset=0x0)" P-INDEP
-; V159 tmp157 [V159,T102] ( 2, 1 ) int -> r10 single-def "field V32._length (fldOffset=0x8)" P-INDEP
-; V160 tmp158 [V160,T81] ( 2, 1 ) byref -> r8 single-def "field V34._reference (fldOffset=0x0)" P-INDEP
-;* V161 tmp159 [V161 ] ( 0, 0 ) int -> zero-ref single-def "field V34._length (fldOffset=0x8)" P-INDEP
-; V162 tmp160 [V162,T82] ( 2, 1 ) byref -> r8 single-def "field V36._reference (fldOffset=0x0)" P-INDEP
-; V163 tmp161 [V163,T103] ( 2, 1 ) int -> r10 single-def "field V36._length (fldOffset=0x8)" P-INDEP
-; V164 tmp162 [V164,T23] ( 2, 5 ) byref -> r8 single-def "field V39._reference (fldOffset=0x0)" P-INDEP
-; V165 tmp163 [V165,T19] ( 3, 6 ) int -> r10 single-def "field V39._length (fldOffset=0x8)" P-INDEP
-; V166 tmp164 [V166,T68] ( 3, 1.50) byref -> rdi "field V42._reference (fldOffset=0x0)" P-INDEP
-; V167 tmp165 [V167,T73] ( 3, 1.50) int -> rax "field V42._length (fldOffset=0x8)" P-INDEP
-;* V168 tmp166 [V168 ] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
-;* V169 tmp167 [V169 ] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
-; V170 tmp168 [V170,T83] ( 2, 1 ) byref -> rdi single-def "field V48._reference (fldOffset=0x0)" P-INDEP
-; V171 tmp169 [V171,T104] ( 2, 1 ) int -> rax single-def "field V48._length (fldOffset=0x8)" P-INDEP
-; V172 tmp170 [V172,T84] ( 2, 1 ) byref -> rdx single-def "field V50._reference (fldOffset=0x0)" P-INDEP
-;* V173 tmp171 [V173 ] ( 0, 0 ) int -> zero-ref single-def "field V50._length (fldOffset=0x8)" P-INDEP
-; V174 tmp172 [V174,T85] ( 2, 1 ) byref -> rdi single-def "field V52._reference (fldOffset=0x0)" P-INDEP
-; V175 tmp173 [V175,T105] ( 2, 1 ) int -> rax single-def "field V52._length (fldOffset=0x8)" P-INDEP
-; V176 tmp174 [V176,T69] ( 3, 1.50) byref -> rsi "field V54._reference (fldOffset=0x0)" P-INDEP
-; V177 tmp175 [V177,T44] ( 4, 2 ) int -> r9 "field V54._length (fldOffset=0x8)" P-INDEP
-;* V178 tmp176 [V178 ] ( 0, 0 ) byref -> zero-ref single-def "field V56._reference (fldOffset=0x0)" P-INDEP
-;* V179 tmp177 [V179 ] ( 0, 0 ) int -> zero-ref single-def "field V56._length (fldOffset=0x8)" P-INDEP
-; V180 tmp178 [V180,T86] ( 2, 1 ) byref -> rsi single-def "field V60._reference (fldOffset=0x0)" P-INDEP
-; V181 tmp179 [V181,T106] ( 2, 1 ) int -> r9 single-def "field V60._length (fldOffset=0x8)" P-INDEP
-; V182 tmp180 [V182,T87] ( 2, 1 ) byref -> rsi single-def "field V62._reference (fldOffset=0x0)" P-INDEP
-;* V183 tmp181 [V183 ] ( 0, 0 ) int -> zero-ref single-def "field V62._length (fldOffset=0x8)" P-INDEP
-; V184 tmp182 [V184,T88] ( 2, 1 ) byref -> rsi single-def "field V64._reference (fldOffset=0x0)" P-INDEP
-; V185 tmp183 [V185,T107] ( 2, 1 ) int -> r9 single-def "field V64._length (fldOffset=0x8)" P-INDEP
-;* V186 tmp184 [V186 ] ( 0, 0 ) byref -> zero-ref single-def "field V67._reference (fldOffset=0x0)" P-INDEP
-;* V187 tmp185 [V187 ] ( 0, 0 ) int -> zero-ref single-def "field V67._length (fldOffset=0x8)" P-INDEP
-;* V188 tmp186 [V188 ] ( 0, 0 ) byref -> zero-ref single-def "field V69._reference (fldOffset=0x0)" P-INDEP
-;* V189 tmp187 [V189 ] ( 0, 0 ) int -> zero-ref single-def "field V69._length (fldOffset=0x8)" P-INDEP
-;* V190 tmp188 [V190 ] ( 0, 0 ) byref -> zero-ref single-def "field V73._reference (fldOffset=0x0)" P-INDEP
-;* V191 tmp189 [V191 ] ( 0, 0 ) int -> zero-ref "field V73._length (fldOffset=0x8)" P-INDEP
-;* V192 tmp190 [V192 ] ( 0, 0 ) byref -> zero-ref single-def "field V74._reference (fldOffset=0x0)" P-INDEP
-;* V193 tmp191 [V193 ] ( 0, 0 ) int -> zero-ref "field V74._length (fldOffset=0x8)" P-INDEP
-;* V194 tmp192 [V194 ] ( 0, 0 ) byref -> zero-ref "field V75._reference (fldOffset=0x0)" P-INDEP
-;* V195 tmp193 [V195 ] ( 0, 0 ) int -> zero-ref "field V75._length (fldOffset=0x8)" P-INDEP
-;* V196 tmp194 [V196 ] ( 0, 0 ) byref -> zero-ref "field V76._reference (fldOffset=0x0)" P-INDEP
-;* V197 tmp195 [V197 ] ( 0, 0 ) int -> zero-ref "field V76._length (fldOffset=0x8)" P-INDEP
-;* V198 tmp196 [V198 ] ( 0, 0 ) byref -> zero-ref "field V80._reference (fldOffset=0x0)" P-INDEP
-;* V199 tmp197 [V199 ] ( 0, 0 ) int -> zero-ref "field V80._length (fldOffset=0x8)" P-INDEP
-; V200 tmp198 [V200,T70] ( 3, 1.50) byref -> rcx "field V81._reference (fldOffset=0x0)" P-INDEP
-; V201 tmp199 [V201,T74] ( 3, 1.50) int -> rdx "field V81._length (fldOffset=0x8)" P-INDEP
-;* V202 tmp200 [V202 ] ( 0, 0 ) byref -> zero-ref single-def "field V82._reference (fldOffset=0x0)" P-INDEP
-;* V203 tmp201 [V203 ] ( 0, 0 ) int -> zero-ref single-def "field V82._length (fldOffset=0x8)" P-INDEP
-; V204 tmp202 [V204,T89] ( 2, 1 ) byref -> rcx single-def "field V86._reference (fldOffset=0x0)" P-INDEP
-; V205 tmp203 [V205,T108] ( 2, 1 ) int -> rdx single-def "field V86._length (fldOffset=0x8)" P-INDEP
-; V206 tmp204 [V206,T90] ( 2, 1 ) byref -> rcx single-def "field V88._reference (fldOffset=0x0)" P-INDEP
-;* V207 tmp205 [V207 ] ( 0, 0 ) int -> zero-ref single-def "field V88._length (fldOffset=0x8)" P-INDEP
-; V208 tmp206 [V208,T91] ( 2, 1 ) byref -> rcx single-def "field V90._reference (fldOffset=0x0)" P-INDEP
-; V209 tmp207 [V209,T109] ( 2, 1 ) int -> rdx single-def "field V90._length (fldOffset=0x8)" P-INDEP
-; V210 tmp208 [V210,T24] ( 2, 4.50) byref -> rcx single-def "field V93._reference (fldOffset=0x0)" P-INDEP
-; V211 tmp209 [V211,T20] ( 3, 5 ) int -> rdx single-def "field V93._length (fldOffset=0x8)" P-INDEP
-; V212 tmp210 [V212,T92] ( 2, 1 ) byref -> rdi single-def "field V97._reference (fldOffset=0x0)" P-INDEP
-; V213 tmp211 [V213,T110] ( 2, 1 ) int -> rax single-def "field V97._length (fldOffset=0x8)" P-INDEP
-;* V214 tmp212 [V214 ] ( 0, 0 ) byref -> zero-ref "field V101._reference (fldOffset=0x0)" P-INDEP
-;* V215 tmp213 [V215 ] ( 0, 0 ) int -> zero-ref "field V101._length (fldOffset=0x8)" P-INDEP
-; V216 tmp214 [V216,T71] ( 3, 1.50) byref -> rcx "field V102._reference (fldOffset=0x0)" P-INDEP
-; V217 tmp215 [V217,T75] ( 3, 1.50) int -> rdx "field V102._length (fldOffset=0x8)" P-INDEP
-;* V218 tmp216 [V218 ] ( 0, 0 ) byref -> zero-ref single-def "field V103._reference (fldOffset=0x0)" P-INDEP
-;* V219 tmp217 [V219 ] ( 0, 0 ) int -> zero-ref single-def "field V103._length (fldOffset=0x8)" P-INDEP
-; V220 tmp218 [V220,T93] ( 2, 1 ) byref -> rcx single-def "field V107._reference (fldOffset=0x0)" P-INDEP
-; V221 tmp219 [V221,T111] ( 2, 1 ) int -> rdx single-def "field V107._length (fldOffset=0x8)" P-INDEP
-; V222 tmp220 [V222,T94] ( 2, 1 ) byref -> rcx single-def "field V109._reference (fldOffset=0x0)" P-INDEP
-;* V223 tmp221 [V223 ] ( 0, 0 ) int -> zero-ref single-def "field V109._length (fldOffset=0x8)" P-INDEP
-; V224 tmp222 [V224,T95] ( 2, 1 ) byref -> rcx single-def "field V111._reference (fldOffset=0x0)" P-INDEP
-; V225 tmp223 [V225,T112] ( 2, 1 ) int -> rdx single-def "field V111._length (fldOffset=0x8)" P-INDEP
-; V226 tmp224 [V226,T25] ( 2, 4.50) byref -> rcx single-def "field V114._reference (fldOffset=0x0)" P-INDEP
-; V227 tmp225 [V227,T21] ( 3, 5 ) int -> rdx single-def "field V114._length (fldOffset=0x8)" P-INDEP
-;* V228 tmp226 [V228 ] ( 0, 0 ) byref -> zero-ref single-def "field V118._reference (fldOffset=0x0)" P-INDEP
-;* V229 tmp227 [V229 ] ( 0, 0 ) int -> zero-ref single-def "field V118._length (fldOffset=0x8)" P-INDEP
-;* V230 tmp228 [V230 ] ( 0, 0 ) byref -> zero-ref single-def "field V120._reference (fldOffset=0x0)" P-INDEP
-;* V231 tmp229 [V231 ] ( 0, 0 ) int -> zero-ref single-def "field V120._length (fldOffset=0x8)" P-INDEP
-;* V232 tmp230 [V232 ] ( 0, 0 ) byref -> zero-ref single-def "field V122._reference (fldOffset=0x0)" P-INDEP
-;* V233 tmp231 [V233 ] ( 0, 0 ) int -> zero-ref single-def "field V122._length (fldOffset=0x8)" P-INDEP
-;* V234 tmp232 [V234 ] ( 0, 0 ) byref -> zero-ref single-def "field V126._reference (fldOffset=0x0)" P-INDEP
-;* V235 tmp233 [V235 ] ( 0, 0 ) int -> zero-ref "field V126._length (fldOffset=0x8)" P-INDEP
-;* V236 tmp234 [V236 ] ( 0, 0 ) byref -> zero-ref single-def "field V127._reference (fldOffset=0x0)" P-INDEP
-;* V237 tmp235 [V237 ] ( 0, 0 ) int -> zero-ref "field V127._length (fldOffset=0x8)" P-INDEP
-;* V238 tmp236 [V238 ] ( 0, 0 ) byref -> zero-ref "field V128._reference (fldOffset=0x0)" P-INDEP
-;* V239 tmp237 [V239 ] ( 0, 0 ) int -> zero-ref "field V128._length (fldOffset=0x8)" P-INDEP
-;* V240 tmp238 [V240 ] ( 0, 0 ) byref -> zero-ref "field V129._reference (fldOffset=0x0)" P-INDEP
-;* V241 tmp239 [V241 ] ( 0, 0 ) int -> zero-ref "field V129._length (fldOffset=0x8)" P-INDEP
-; V242 cse0 [V242,T04] ( 3, 12 ) long -> r9 "CSE #05: moderate"
-; V243 cse1 [V243,T05] ( 3, 12 ) long -> r14 "CSE #10: moderate"
-; V244 cse2 [V244,T06] ( 3, 12 ) long -> r8 "CSE #19: moderate"
-; V245 cse3 [V245,T07] ( 3, 12 ) long -> r10 "CSE #24: moderate"
-; V246 cse4 [V246,T29] ( 6, 3 ) int -> rax multi-def "CSE #02: conservative"
-; V247 cse5 [V247,T30] ( 6, 3 ) int -> r9 multi-def "CSE #07: conservative"
-; V248 cse6 [V248,T27] ( 5, 3.50) ref -> rdi "CSE #01: moderate"
-; V249 cse7 [V249,T28] ( 5, 3.50) ref -> rcx "CSE #06: moderate"
-; V250 rat0 [V250,T00] ( 5, 16.25) long -> r8 "Widened IV V24"
-; V251 rat1 [V251,T01] ( 5, 16.25) long -> r11 "Widened IV V41"
-; V252 rat2 [V252,T02] ( 5, 16.25) long -> rsi "Widened IV V95"
-; V253 rat3 [V253,T03] ( 5, 16.25) long -> r9 "Widened IV V116"
+; V77 tmp75 [V77,T41] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
+; V78 tmp76 [V78,T47] ( 2, 2 ) int -> rdx "Inlining Arg"
+;* V79 tmp77 [V79 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+; V80 tmp78 [V80,T42] ( 2, 2 ) byref -> rsi single-def "Inlining Arg"
+; V81 tmp79 [V81,T27] ( 3, 3 ) int -> rax "Inlining Arg"
+;* V82 tmp80 [V82 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+; V83 tmp81 [V83,T50] ( 3, 1.50) ubyte -> rax "Inline return value spill temp"
+;* V84 tmp82 [V84 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V85 tmp83 [V85 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V86 tmp84 [V86 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V87 tmp85 [V87 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
+;* V88 tmp86 [V88 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
+;* V89 tmp87 [V89 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
+;* V90 tmp88 [V90 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V91 tmp89 [V91 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V92 tmp90 [V92 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V93 tmp91 [V93 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V94 tmp92 [V94 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
+;* V95 tmp93 [V95 ] ( 0, 0 ) int -> zero-ref single-def "field V04._length (fldOffset=0x8)" P-INDEP
+;* V96 tmp94 [V96 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V97 tmp95 [V97 ] ( 0, 0 ) int -> zero-ref single-def "field V05._length (fldOffset=0x8)" P-INDEP
+;* V98 tmp96 [V98 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V99 tmp97 [V99 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP
+;* V100 tmp98 [V100 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V101 tmp99 [V101 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP
+;* V102 tmp100 [V102 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP
+;* V103 tmp101 [V103 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
+; V104 tmp102 [V104,T29] ( 3, 2 ) byref -> rcx "field V10._reference (fldOffset=0x0)" P-INDEP
+; V105 tmp103 [V105,T33] ( 3, 2 ) int -> rdx "field V10._length (fldOffset=0x8)" P-INDEP
+;* V106 tmp104 [V106 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V107 tmp105 [V107 ] ( 0, 0 ) int -> zero-ref single-def "field V11._length (fldOffset=0x8)" P-INDEP
+; V108 tmp106 [V108,T52] ( 2, 1 ) byref -> rcx single-def "field V15._reference (fldOffset=0x0)" P-INDEP
+; V109 tmp107 [V109,T65] ( 2, 1 ) int -> rdx single-def "field V15._length (fldOffset=0x8)" P-INDEP
+; V110 tmp108 [V110,T53] ( 2, 1 ) byref -> rcx single-def "field V17._reference (fldOffset=0x0)" P-INDEP
+;* V111 tmp109 [V111 ] ( 0, 0 ) int -> zero-ref single-def "field V17._length (fldOffset=0x8)" P-INDEP
+; V112 tmp110 [V112,T54] ( 2, 1 ) byref -> rcx single-def "field V19._reference (fldOffset=0x0)" P-INDEP
+; V113 tmp111 [V113,T66] ( 2, 1 ) int -> rdx single-def "field V19._length (fldOffset=0x8)" P-INDEP
+; V114 tmp112 [V114,T12] ( 2, 5 ) byref -> rcx single-def "field V22._reference (fldOffset=0x0)" P-INDEP
+; V115 tmp113 [V115,T10] ( 3, 6 ) int -> rdx single-def "field V22._length (fldOffset=0x8)" P-INDEP
+;* V116 tmp114 [V116 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V117 tmp115 [V117 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
+; V118 tmp116 [V118,T30] ( 3, 2 ) byref -> rcx "field V27._reference (fldOffset=0x0)" P-INDEP
+; V119 tmp117 [V119,T34] ( 3, 2 ) int -> rdx "field V27._length (fldOffset=0x8)" P-INDEP
+;* V120 tmp118 [V120 ] ( 0, 0 ) byref -> zero-ref single-def "field V28._reference (fldOffset=0x0)" P-INDEP
+;* V121 tmp119 [V121 ] ( 0, 0 ) int -> zero-ref single-def "field V28._length (fldOffset=0x8)" P-INDEP
+; V122 tmp120 [V122,T55] ( 2, 1 ) byref -> rcx single-def "field V32._reference (fldOffset=0x0)" P-INDEP
+; V123 tmp121 [V123,T67] ( 2, 1 ) int -> rdx single-def "field V32._length (fldOffset=0x8)" P-INDEP
+; V124 tmp122 [V124,T56] ( 2, 1 ) byref -> rcx single-def "field V34._reference (fldOffset=0x0)" P-INDEP
+;* V125 tmp123 [V125 ] ( 0, 0 ) int -> zero-ref single-def "field V34._length (fldOffset=0x8)" P-INDEP
+; V126 tmp124 [V126,T57] ( 2, 1 ) byref -> rcx single-def "field V36._reference (fldOffset=0x0)" P-INDEP
+; V127 tmp125 [V127,T68] ( 2, 1 ) int -> rdx single-def "field V36._length (fldOffset=0x8)" P-INDEP
+; V128 tmp126 [V128,T13] ( 2, 5 ) byref -> rcx single-def "field V39._reference (fldOffset=0x0)" P-INDEP
+; V129 tmp127 [V129,T11] ( 3, 6 ) int -> rdx single-def "field V39._length (fldOffset=0x8)" P-INDEP
+; V130 tmp128 [V130,T48] ( 3, 1.50) byref -> rdi "field V42._reference (fldOffset=0x0)" P-INDEP
+; V131 tmp129 [V131,T51] ( 3, 1.50) int -> r14 "field V42._length (fldOffset=0x8)" P-INDEP
+;* V132 tmp130 [V132 ] ( 0, 0 ) byref -> zero-ref single-def "field V44._reference (fldOffset=0x0)" P-INDEP
+;* V133 tmp131 [V133 ] ( 0, 0 ) int -> zero-ref single-def "field V44._length (fldOffset=0x8)" P-INDEP
+; V134 tmp132 [V134,T58] ( 2, 1 ) byref -> rdi single-def "field V48._reference (fldOffset=0x0)" P-INDEP
+; V135 tmp133 [V135,T69] ( 2, 1 ) int -> r14 single-def "field V48._length (fldOffset=0x8)" P-INDEP
+; V136 tmp134 [V136,T59] ( 2, 1 ) byref -> rax single-def "field V50._reference (fldOffset=0x0)" P-INDEP
+;* V137 tmp135 [V137 ] ( 0, 0 ) int -> zero-ref single-def "field V50._length (fldOffset=0x8)" P-INDEP
+; V138 tmp136 [V138,T60] ( 2, 1 ) byref -> rdi single-def "field V52._reference (fldOffset=0x0)" P-INDEP
+; V139 tmp137 [V139,T70] ( 2, 1 ) int -> r14 single-def "field V52._length (fldOffset=0x8)" P-INDEP
+; V140 tmp138 [V140,T49] ( 3, 1.50) byref -> rsi "field V54._reference (fldOffset=0x0)" P-INDEP
+; V141 tmp139 [V141,T28] ( 4, 2 ) int -> r12 "field V54._length (fldOffset=0x8)" P-INDEP
+;* V142 tmp140 [V142 ] ( 0, 0 ) byref -> zero-ref single-def "field V56._reference (fldOffset=0x0)" P-INDEP
+;* V143 tmp141 [V143 ] ( 0, 0 ) int -> zero-ref single-def "field V56._length (fldOffset=0x8)" P-INDEP
+; V144 tmp142 [V144,T61] ( 2, 1 ) byref -> rsi single-def "field V60._reference (fldOffset=0x0)" P-INDEP
+; V145 tmp143 [V145,T71] ( 2, 1 ) int -> r12 single-def "field V60._length (fldOffset=0x8)" P-INDEP
+; V146 tmp144 [V146,T62] ( 2, 1 ) byref -> rax single-def "field V62._reference (fldOffset=0x0)" P-INDEP
+;* V147 tmp145 [V147 ] ( 0, 0 ) int -> zero-ref single-def "field V62._length (fldOffset=0x8)" P-INDEP
+; V148 tmp146 [V148,T63] ( 2, 1 ) byref -> rsi single-def "field V64._reference (fldOffset=0x0)" P-INDEP
+; V149 tmp147 [V149,T72] ( 2, 1 ) int -> r12 single-def "field V64._length (fldOffset=0x8)" P-INDEP
+;* V150 tmp148 [V150 ] ( 0, 0 ) byref -> zero-ref single-def "field V67._reference (fldOffset=0x0)" P-INDEP
+;* V151 tmp149 [V151 ] ( 0, 0 ) int -> zero-ref single-def "field V67._length (fldOffset=0x8)" P-INDEP
+;* V152 tmp150 [V152 ] ( 0, 0 ) byref -> zero-ref single-def "field V69._reference (fldOffset=0x0)" P-INDEP
+;* V153 tmp151 [V153 ] ( 0, 0 ) int -> zero-ref single-def "field V69._length (fldOffset=0x8)" P-INDEP
+;* V154 tmp152 [V154 ] ( 0, 0 ) byref -> zero-ref single-def "field V73._reference (fldOffset=0x0)" P-INDEP
+;* V155 tmp153 [V155 ] ( 0, 0 ) int -> zero-ref "field V73._length (fldOffset=0x8)" P-INDEP
+;* V156 tmp154 [V156 ] ( 0, 0 ) byref -> zero-ref single-def "field V74._reference (fldOffset=0x0)" P-INDEP
+;* V157 tmp155 [V157 ] ( 0, 0 ) int -> zero-ref "field V74._length (fldOffset=0x8)" P-INDEP
+;* V158 tmp156 [V158 ] ( 0, 0 ) byref -> zero-ref "field V75._reference (fldOffset=0x0)" P-INDEP
+;* V159 tmp157 [V159 ] ( 0, 0 ) int -> zero-ref "field V75._length (fldOffset=0x8)" P-INDEP
+;* V160 tmp158 [V160 ] ( 0, 0 ) byref -> zero-ref "field V76._reference (fldOffset=0x0)" P-INDEP
+;* V161 tmp159 [V161 ] ( 0, 0 ) int -> zero-ref "field V76._length (fldOffset=0x8)" P-INDEP
+;* V162 tmp160 [V162 ] ( 0, 0 ) byref -> zero-ref single-def "field V79._reference (fldOffset=0x0)" P-INDEP
+;* V163 tmp161 [V163 ] ( 0, 0 ) int -> zero-ref single-def "field V79._length (fldOffset=0x8)" P-INDEP
+;* V164 tmp162 [V164 ] ( 0, 0 ) byref -> zero-ref single-def "field V82._reference (fldOffset=0x0)" P-INDEP
+;* V165 tmp163 [V165 ] ( 0, 0 ) int -> zero-ref single-def "field V82._length (fldOffset=0x8)" P-INDEP
+;* V166 tmp164 [V166 ] ( 0, 0 ) byref -> zero-ref single-def "field V84._reference (fldOffset=0x0)" P-INDEP
+;* V167 tmp165 [V167 ] ( 0, 0 ) int -> zero-ref single-def "field V84._length (fldOffset=0x8)" P-INDEP
+;* V168 tmp166 [V168 ] ( 0, 0 ) byref -> zero-ref single-def "field V86._reference (fldOffset=0x0)" P-INDEP
+;* V169 tmp167 [V169 ] ( 0, 0 ) int -> zero-ref single-def "field V86._length (fldOffset=0x8)" P-INDEP
+;* V170 tmp168 [V170 ] ( 0, 0 ) byref -> zero-ref single-def "field V90._reference (fldOffset=0x0)" P-INDEP
+;* V171 tmp169 [V171 ] ( 0, 0 ) int -> zero-ref "field V90._length (fldOffset=0x8)" P-INDEP
+;* V172 tmp170 [V172 ] ( 0, 0 ) byref -> zero-ref single-def "field V91._reference (fldOffset=0x0)" P-INDEP
+;* V173 tmp171 [V173 ] ( 0, 0 ) int -> zero-ref "field V91._length (fldOffset=0x8)" P-INDEP
+;* V174 tmp172 [V174 ] ( 0, 0 ) byref -> zero-ref "field V92._reference (fldOffset=0x0)" P-INDEP
+;* V175 tmp173 [V175 ] ( 0, 0 ) int -> zero-ref "field V92._length (fldOffset=0x8)" P-INDEP
+;* V176 tmp174 [V176 ] ( 0, 0 ) byref -> zero-ref "field V93._reference (fldOffset=0x0)" P-INDEP
+;* V177 tmp175 [V177 ] ( 0, 0 ) int -> zero-ref "field V93._length (fldOffset=0x8)" P-INDEP
+; V178 cse0 [V178,T02] ( 3, 12 ) long -> r8 "CSE #05: aggressive"
+; V179 cse1 [V179,T03] ( 3, 12 ) long -> r9 "CSE #10: aggressive"
+; V180 cse2 [V180,T17] ( 6, 3 ) int -> r14 multi-def "CSE #02: moderate"
+; V181 cse3 [V181,T18] ( 6, 3 ) int -> r12 multi-def "CSE #07: moderate"
+; V182 cse4 [V182,T15] ( 5, 3.50) ref -> rdi "CSE #01: moderate"
+; V183 cse5 [V183,T16] ( 5, 3.50) ref -> rsi "CSE #06: moderate"
+; V184 rat0 [V184,T00] ( 5, 16.25) long -> rsi "Widened IV V24"
+; V185 rat1 [V185,T01] ( 5, 16.25) long -> r8 "Widened IV V41"
;
; Lcl frame size = 8
G_M19522_IG01:
push rbp
push r15
push r14
+ push r13
+ push r12
push rbx
push rax
- lea rbp, [rsp+0x20]
+ lea rbp, [rsp+0x30]
mov rbx, rdi
mov r15, rsi
- ;; size=18 bbWeight=1 PerfScore 6.00
+ ;; size=22 bbWeight=1 PerfScore 8.00
G_M19522_IG02:
- lea rdx, bword ptr [rbx+0x08]
- mov rdi, gword ptr [rdx]
+ lea rax, bword ptr [rbx+0x08]
+ mov rdi, gword ptr [rax]
test rdi, rdi
jne SHORT G_M19522_IG04
;; size=12 bbWeight=1 PerfScore 3.75
G_M19522_IG03:
- lea rsi, bword ptr [rdx+0x18]
- mov eax, dword ptr [rdx+0x10]
- mov ecx, eax
- cmp ecx, 5
- ja G_M19522_IG42
+ lea rcx, bword ptr [rax+0x18]
+ mov r14d, dword ptr [rax+0x10]
+ mov edx, r14d
+ cmp edx, 5
+ ja G_M19522_IG31
jmp SHORT G_M19522_IG05
- align [3 bytes for IG07]
- ;; size=23 bbWeight=0.50 PerfScore 3.00
+ align [13 bytes for IG07]
+ ;; size=35 bbWeight=0.50 PerfScore 3.00
G_M19522_IG04:
- mov rsi, rdi
- cmp byte ptr [rsi], sil
- add rsi, 16
- mov eax, dword ptr [rdx+0x10]
- mov ecx, eax
- ;; size=15 bbWeight=0.50 PerfScore 2.88
+ mov rcx, rdi
+ cmp byte ptr [rcx], cl
+ add rcx, 16
+ mov r14d, dword ptr [rax+0x10]
+ mov edx, r14d
+ ;; size=16 bbWeight=0.50 PerfScore 2.88
G_M19522_IG05:
- test ecx, ecx
+ test edx, edx
je SHORT G_M19522_IG09
;; size=4 bbWeight=1 PerfScore 1.25
G_M19522_IG06:
- mov edx, 1
- xor r8d, r8d
- ;; size=8 bbWeight=0.25 PerfScore 0.12
+ mov eax, 1
+ xor esi, esi
+ ;; size=7 bbWeight=0.25 PerfScore 0.12
G_M19522_IG07:
- mov r9, qword ptr [rsi+8*r8]
- test r9, r9
- jl G_M19522_IG43
- imul rdx, r9
- inc r8d
- cmp r8d, ecx
+ mov r8, qword ptr [rcx+8*rsi]
+ test r8, r8
+ jl G_M19522_IG30
+ imul rax, r8
+ inc esi
+ cmp esi, edx
jl SHORT G_M19522_IG07
- ;; size=25 bbWeight=4 PerfScore 27.00
+ ;; size=23 bbWeight=4 PerfScore 27.00
G_M19522_IG08:
- test rdx, rdx
- jl G_M19522_IG43
+ test rax, rax
+ jl G_M19522_IG30
+ mov r13, rax
jmp SHORT G_M19522_IG10
- align [9 bytes for IG15]
- ;; size=20 bbWeight=0.50 PerfScore 1.62
+ align [0 bytes for IG15]
+ ;; size=14 bbWeight=0.50 PerfScore 1.75
G_M19522_IG09:
- xor edx, edx
- ;; size=2 bbWeight=0.50 PerfScore 0.12
+ xor r13d, r13d
+ ;; size=3 bbWeight=0.50 PerfScore 0.12
G_M19522_IG10:
- lea rsi, bword ptr [r15+0x08]
- mov rcx, gword ptr [rsi]
- test rcx, rcx
+ lea rax, bword ptr [r15+0x08]
+ mov rsi, gword ptr [rax]
+ test rsi, rsi
jne SHORT G_M19522_IG12
;; size=12 bbWeight=1 PerfScore 3.75
G_M19522_IG11:
- lea r8, bword ptr [rsi+0x18]
- mov r9d, dword ptr [rsi+0x10]
- mov r10d, r9d
- cmp r10d, 5
- ja G_M19522_IG42
+ lea rcx, bword ptr [rax+0x18]
+ mov r12d, dword ptr [rax+0x10]
+ mov edx, r12d
+ cmp edx, 5
+ ja G_M19522_IG31
jmp SHORT G_M19522_IG13
- ;; size=23 bbWeight=0.50 PerfScore 3.00
+ ;; size=22 bbWeight=0.50 PerfScore 3.00
G_M19522_IG12:
- mov r8, rcx
- cmp byte ptr [r8], r8b
- add r8, 16
- mov r9d, dword ptr [rsi+0x10]
- mov r10d, r9d
- ;; size=17 bbWeight=0.50 PerfScore 2.88
+ mov rcx, rsi
+ cmp byte ptr [rcx], cl
+ add rcx, 16
+ mov r12d, dword ptr [rax+0x10]
+ mov edx, r12d
+ ;; size=16 bbWeight=0.50 PerfScore 2.88
G_M19522_IG13:
- test r10d, r10d
+ test edx, edx
je SHORT G_M19522_IG17
- ;; size=5 bbWeight=1 PerfScore 1.25
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M19522_IG14:
- mov esi, 1
- xor r11d, r11d
+ mov eax, 1
+ xor r8d, r8d
;; size=8 bbWeight=0.25 PerfScore 0.12
G_M19522_IG15:
- mov r14, qword ptr [r8+8*r11]
- test r14, r14
- jl G_M19522_IG43
- imul rsi, r14
- inc r11d
- cmp r11d, r10d
+ mov r9, qword ptr [rcx+8*r8]
+ test r9, r9
+ jl G_M19522_IG30
+ imul rax, r9
+ inc r8d
+ cmp r8d, edx
jl SHORT G_M19522_IG15
;; size=25 bbWeight=4 PerfScore 27.00
G_M19522_IG16:
- test rsi, rsi
- jl G_M19522_IG43
+ test rax, rax
+ jl G_M19522_IG30
jmp SHORT G_M19522_IG18
- align [9 bytes for IG30]
- ;; size=20 bbWeight=0.50 PerfScore 1.62
+ ;; size=11 bbWeight=0.50 PerfScore 1.62
G_M19522_IG17:
- xor esi, esi
+ xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M19522_IG18:
- cmp rdx, rsi
+ cmp r13, rax
jne SHORT G_M19522_IG24
;; size=5 bbWeight=1 PerfScore 1.25
G_M19522_IG19:
- mov rdx, qword ptr [rbx+0x10]
- cmp rdx, qword ptr [r15+0x10]
+ mov rax, qword ptr [rbx+0x10]
+ cmp rax, qword ptr [r15+0x10]
jne SHORT G_M19522_IG24
- lea rdx, bword ptr [rbx+0x08]
+ lea rax, bword ptr [rbx+0x08]
test rdi, rdi
jne SHORT G_M19522_IG20
- add rdx, 24
- cmp eax, 5
- ja G_M19522_IG42
- mov rdi, rdx
+ add rax, 24
+ cmp r14d, 5
+ ja G_M19522_IG31
+ mov rdi, rax
jmp SHORT G_M19522_IG21
- ;; size=37 bbWeight=0.50 PerfScore 5.75
+ ;; size=38 bbWeight=0.50 PerfScore 5.75
G_M19522_IG20:
cmp byte ptr [rdi], dil
add rdi, 16
;; size=7 bbWeight=0.50 PerfScore 1.62
G_M19522_IG21:
- lea rsi, bword ptr [r15+0x08]
- test rcx, rcx
+ lea rax, bword ptr [r15+0x08]
+ test rsi, rsi
jne SHORT G_M19522_IG22
- add rsi, 24
- cmp r9d, 5
- ja G_M19522_IG42
+ add rax, 24
+ cmp r12d, 5
+ ja SHORT G_M19522_IG31
+ mov rsi, rax
jmp SHORT G_M19522_IG23
- ;; size=25 bbWeight=0.50 PerfScore 2.62
+ ;; size=24 bbWeight=0.50 PerfScore 2.75
G_M19522_IG22:
- cmp byte ptr [rcx], cl
- add rcx, 16
- mov rsi, rcx
- ;; size=9 bbWeight=0.50 PerfScore 1.75
+ cmp byte ptr [rsi], sil
+ add rsi, 16
+ ;; size=7 bbWeight=0.50 PerfScore 1.62
G_M19522_IG23:
- cmp eax, r9d
+ cmp r14d, r12d
jne SHORT G_M19522_IG24
- mov edx, r9d
+ mov edx, r12d
shl rdx, 3
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
call [rax]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
test eax, eax
jne SHORT G_M19522_IG26
;; size=28 bbWeight=0.50 PerfScore 3.25
G_M19522_IG24:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M19522_IG25:
add rsp, 8
pop rbx
+ pop r12
+ pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
+ ;; size=15 bbWeight=0.50 PerfScore 2.12
G_M19522_IG26:
- xor rdi, rdi
- lea rax, bword ptr [rbx+0x08]
- cmp gword ptr [rax], 0
- jne SHORT G_M19522_IG27
- lea rcx, bword ptr [rax+0x18]
- mov edx, dword ptr [rax+0x10]
- cmp edx, 5
- ja G_M19522_IG42
- jmp SHORT G_M19522_IG28
- ;; size=30 bbWeight=0.50 PerfScore 5.25
-G_M19522_IG27:
- mov rcx, gword ptr [rax]
- cmp byte ptr [rcx], cl
- add rcx, 16
- mov edx, dword ptr [rax+0x10]
- ;; size=12 bbWeight=0.50 PerfScore 3.62
-G_M19522_IG28:
- test edx, edx
- je SHORT G_M19522_IG32
- ;; size=4 bbWeight=0.50 PerfScore 0.62
-G_M19522_IG29:
- mov eax, 1
- xor esi, esi
- ;; size=7 bbWeight=0.25 PerfScore 0.12
-G_M19522_IG30:
- mov r8, qword ptr [rcx+8*rsi]
- test r8, r8
- jl G_M19522_IG43
- imul rax, r8
- inc esi
- cmp esi, edx
- jl SHORT G_M19522_IG30
- ;; size=23 bbWeight=4 PerfScore 27.00
-G_M19522_IG31:
- test rax, rax
- jl G_M19522_IG43
- test rax, rax
- je SHORT G_M19522_IG32
mov rdi, bword ptr [rbx]
- ;; size=17 bbWeight=0.50 PerfScore 2.25
-G_M19522_IG32:
- mov eax, dword ptr [rbx+0x10]
- xor rsi, rsi
- lea rbx, bword ptr [r15+0x08]
- cmp gword ptr [rbx], 0
- jne SHORT G_M19522_IG33
- lea rcx, bword ptr [rbx+0x18]
mov edx, dword ptr [rbx+0x10]
- cmp edx, 5
- ja SHORT G_M19522_IG42
- jmp SHORT G_M19522_IG34
- align [2 bytes for IG36]
- ;; size=31 bbWeight=0.50 PerfScore 6.25
-G_M19522_IG33:
- mov rcx, gword ptr [rbx]
- cmp byte ptr [rcx], cl
- add rcx, 16
- mov edx, dword ptr [rbx+0x10]
- ;; size=12 bbWeight=0.50 PerfScore 3.62
-G_M19522_IG34:
- test edx, edx
- je SHORT G_M19522_IG38
- ;; size=4 bbWeight=0.50 PerfScore 0.62
-G_M19522_IG35:
- mov r8d, 1
- xor r9d, r9d
- ;; size=9 bbWeight=0.25 PerfScore 0.12
-G_M19522_IG36:
- mov r10, qword ptr [rcx+8*r9]
- test r10, r10
- jl SHORT G_M19522_IG43
- imul r8, r10
- inc r9d
- cmp r9d, edx
- jl SHORT G_M19522_IG36
- ;; size=21 bbWeight=4 PerfScore 27.00
-G_M19522_IG37:
- test r8, r8
- jl SHORT G_M19522_IG43
- mov rdx, r8
- test rdx, rdx
- je SHORT G_M19522_IG38
mov rsi, bword ptr [r15]
- ;; size=16 bbWeight=0.50 PerfScore 2.38
-G_M19522_IG38:
- mov edx, dword ptr [r15+0x10]
- cmp eax, edx
- je SHORT G_M19522_IG39
+ mov eax, dword ptr [r15+0x10]
+ cmp edx, eax
+ je SHORT G_M19522_IG27
xor eax, eax
- jmp SHORT G_M19522_IG40
- ;; size=12 bbWeight=0.50 PerfScore 2.75
-G_M19522_IG39:
- mov edx, edx
+ jmp SHORT G_M19522_IG28
+ ;; size=21 bbWeight=0.50 PerfScore 5.75
+G_M19522_IG27:
+ mov edx, eax
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
call [rax]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
;; size=14 bbWeight=0.50 PerfScore 1.75
-G_M19522_IG40:
+G_M19522_IG28:
nop
;; size=1 bbWeight=0.50 PerfScore 0.12
-G_M19522_IG41:
+G_M19522_IG29:
add rsp, 8
pop rbx
+ pop r12
+ pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M19522_IG42:
+ ;; size=15 bbWeight=0.50 PerfScore 2.12
+G_M19522_IG30:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M19522_IG43:
+G_M19522_IG31:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 613, prolog size 18, PerfScore 188.62, instruction count 193, allocated bytes for code 613 (MethodHash=a50eb3bd) for method System.Numerics.Tensors.Tensor:SequenceEqual[ubyte](byref,byref):ubyte (FullOpts)
+; Total bytes of code 439, prolog size 22, PerfScore 115.88, instruction count 141, allocated bytes for code 439 (MethodHash=a50eb3bd) for method System.Numerics.Tensors.Tensor:SequenceEqual[ubyte](byref,byref):ubyte (FullOpts)
; ============================================================ Larger list of diffs: https://gist.github.com/MihuBot/54b0d7444d6e0defc0497fb492c5e0e5 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 14 minutes 3 seconds.
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: