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 #822
Comments
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/3241c2f5188df9e2ce49c13094a2b24e |
Top method improvementsNote: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/38c3b9c51c309aa71debf2d707e3764c |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 13 minutes 49 seconds.
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: