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] Use Unsafe.BitCast
for generic span casting
#752
Comments
Top method regressionsNote: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/ff49f60f1de570e9a97a5ca7f254f660 |
Top method improvements-24 (-17.39 % of base) - System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this ; Assembly listing for method System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Enum+EnumInfo`1[double]>
-;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[int]>
+;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[int]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[double]>
-; V04 tmp2 [V04,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <double[]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[double]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[double]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V10 tmp8 [V10,T02] ( 4, 3 ) int -> r15 "Inline stloc first use temp"
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V13 tmp11 [V13,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <int[]>
-; V14 tmp12 [V14,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <int[]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V17 tmp15 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T05] ( 3, 2 ) byref -> rbx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T06] ( 3, 2 ) int -> rsi "field V05._length (fldOffset=0x8)" P-INDEP
-; V24 tmp22 [V24,T07] ( 2, 1.50) byref -> rbx single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <double[]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[double]>
+; V05 tmp3 [V05,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <int[]>
+; V06 tmp4 [V06,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <int[]>
+;* V07 tmp5 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
+; V12 tmp10 [V12,T05] ( 3, 1.50) byref -> rbx "field V04._reference (fldOffset=0x0)" P-INDEP
+; V13 tmp11 [V13,T02] ( 5, 3 ) int -> r15 "field V04._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M792_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
;; size=12 bbWeight=1 PerfScore 5.50
G_M792_IG02:
mov rsi, gword ptr [rdi+0x08]
test rsi, rsi
je SHORT G_M792_IG04
;; size=9 bbWeight=1 PerfScore 3.25
G_M792_IG03:
lea rbx, bword ptr [rsi+0x10]
- mov esi, dword ptr [rsi+0x08]
+ mov r15d, dword ptr [rsi+0x08]
jmp SHORT G_M792_IG05
- ;; size=9 bbWeight=0.50 PerfScore 2.25
+ ;; size=10 bbWeight=0.50 PerfScore 2.25
G_M792_IG04:
xor rbx, rbx
- xor esi, esi
- ;; size=4 bbWeight=0.50 PerfScore 0.25
+ xor r15d, r15d
+ ;; size=5 bbWeight=0.50 PerfScore 0.25
G_M792_IG05:
- mov r15d, esi
- shl r15, 3
- shr r15, 2
- cmp r15, 0xD1FFAB1E
- ja SHORT G_M792_IG09
test r15d, r15d
je SHORT G_M792_IG07
- ;; size=25 bbWeight=1 PerfScore 3.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
G_M792_IG06:
- movsxd rsi, r15d
+ mov esi, r15d
mov rdi, 0xD1FFAB1E ; int[]
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
mov edx, r15d
shl rdx, 2
lea rdi, bword ptr [r14+0x10]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rax, r14
jmp SHORT G_M792_IG08
;; size=52 bbWeight=0.50 PerfScore 4.38
G_M792_IG07:
mov rax, 0xD1FFAB1E ; 'System.Int32[]'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M792_IG08:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M792_IG09:
- call CORINFO_HELP_OVERFLOW
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=7719fce7) for method System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=7719fce7) for method System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
; ============================================================ -24 (-17.39 % of base) - System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this ; Assembly listing for method System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Enum+EnumInfo`1[double]>
-;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[System.Numerics.Vector`1[float]]>
+;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[System.Numerics.Vector`1[float]]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[double]>
-; V04 tmp2 [V04,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <double[]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[double]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[double]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V10 tmp8 [V10,T02] ( 4, 3 ) int -> r15 "Inline stloc first use temp"
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.Numerics.Vector`1[float]]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V13 tmp11 [V13,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
-; V14 tmp12 [V14,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V17 tmp15 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T05] ( 3, 2 ) byref -> rbx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T06] ( 3, 2 ) int -> rsi "field V05._length (fldOffset=0x8)" P-INDEP
-; V24 tmp22 [V24,T07] ( 2, 1.50) byref -> rbx single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <double[]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[double]>
+; V05 tmp3 [V05,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
+; V06 tmp4 [V06,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
+;* V07 tmp5 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
+; V12 tmp10 [V12,T05] ( 3, 1.50) byref -> rbx "field V04._reference (fldOffset=0x0)" P-INDEP
+; V13 tmp11 [V13,T02] ( 5, 3 ) int -> r15 "field V04._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M34328_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
;; size=12 bbWeight=1 PerfScore 5.50
G_M34328_IG02:
mov rsi, gword ptr [rdi+0x08]
test rsi, rsi
je SHORT G_M34328_IG04
;; size=9 bbWeight=1 PerfScore 3.25
G_M34328_IG03:
lea rbx, bword ptr [rsi+0x10]
- mov esi, dword ptr [rsi+0x08]
+ mov r15d, dword ptr [rsi+0x08]
jmp SHORT G_M34328_IG05
- ;; size=9 bbWeight=0.50 PerfScore 2.25
+ ;; size=10 bbWeight=0.50 PerfScore 2.25
G_M34328_IG04:
xor rbx, rbx
- xor esi, esi
- ;; size=4 bbWeight=0.50 PerfScore 0.25
+ xor r15d, r15d
+ ;; size=5 bbWeight=0.50 PerfScore 0.25
G_M34328_IG05:
- mov r15d, esi
- shl r15, 3
- shr r15, 5
- cmp r15, 0xD1FFAB1E
- ja SHORT G_M34328_IG09
test r15d, r15d
je SHORT G_M34328_IG07
- ;; size=25 bbWeight=1 PerfScore 3.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
G_M34328_IG06:
- movsxd rsi, r15d
+ mov esi, r15d
mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float][]
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
mov edx, r15d
shl rdx, 5
lea rdi, bword ptr [r14+0x10]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rax, r14
jmp SHORT G_M34328_IG08
;; size=52 bbWeight=0.50 PerfScore 4.38
G_M34328_IG07:
mov rax, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single][]'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M34328_IG08:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M34328_IG09:
- call CORINFO_HELP_OVERFLOW
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=9f3479e7) for method System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=9f3479e7) for method System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
; ============================================================ -24 (-17.39 % of base) - System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this ; Assembly listing for method System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Enum+EnumInfo`1[int]>
-;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[double]>
+;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[double]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[int]>
-; V04 tmp2 [V04,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <int[]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V10 tmp8 [V10,T02] ( 4, 3 ) int -> r15 "Inline stloc first use temp"
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[double]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V13 tmp11 [V13,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <double[]>
-; V14 tmp12 [V14,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <double[]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V17 tmp15 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T05] ( 3, 2 ) byref -> rbx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T06] ( 3, 2 ) int -> rsi "field V05._length (fldOffset=0x8)" P-INDEP
-; V24 tmp22 [V24,T07] ( 2, 1.50) byref -> rbx single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <int[]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
+; V05 tmp3 [V05,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <double[]>
+; V06 tmp4 [V06,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <double[]>
+;* V07 tmp5 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
+; V12 tmp10 [V12,T05] ( 3, 1.50) byref -> rbx "field V04._reference (fldOffset=0x0)" P-INDEP
+; V13 tmp11 [V13,T02] ( 5, 3 ) int -> r15 "field V04._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M44254_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
;; size=12 bbWeight=1 PerfScore 5.50
G_M44254_IG02:
mov rsi, gword ptr [rdi+0x08]
test rsi, rsi
je SHORT G_M44254_IG04
;; size=9 bbWeight=1 PerfScore 3.25
G_M44254_IG03:
lea rbx, bword ptr [rsi+0x10]
- mov esi, dword ptr [rsi+0x08]
+ mov r15d, dword ptr [rsi+0x08]
jmp SHORT G_M44254_IG05
- ;; size=9 bbWeight=0.50 PerfScore 2.25
+ ;; size=10 bbWeight=0.50 PerfScore 2.25
G_M44254_IG04:
xor rbx, rbx
- xor esi, esi
- ;; size=4 bbWeight=0.50 PerfScore 0.25
+ xor r15d, r15d
+ ;; size=5 bbWeight=0.50 PerfScore 0.25
G_M44254_IG05:
- mov r15d, esi
- shl r15, 2
- shr r15, 3
- cmp r15, 0xD1FFAB1E
- ja SHORT G_M44254_IG09
test r15d, r15d
je SHORT G_M44254_IG07
- ;; size=25 bbWeight=1 PerfScore 3.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
G_M44254_IG06:
- movsxd rsi, r15d
+ mov esi, r15d
mov rdi, 0xD1FFAB1E ; double[]
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
mov edx, r15d
shl rdx, 3
lea rdi, bword ptr [r14+0x10]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rax, r14
jmp SHORT G_M44254_IG08
;; size=52 bbWeight=0.50 PerfScore 4.38
G_M44254_IG07:
mov rax, 0xD1FFAB1E ; 'System.Double[]'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M44254_IG08:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M44254_IG09:
- call CORINFO_HELP_OVERFLOW
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=6bb45321) for method System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=6bb45321) for method System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
; ============================================================ -24 (-17.39 % of base) - System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this ; Assembly listing for method System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Enum+EnumInfo`1[int]>
-;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[long]>
+;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[long]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[int]>
-; V04 tmp2 [V04,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <int[]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V10 tmp8 [V10,T02] ( 4, 3 ) int -> r15 "Inline stloc first use temp"
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V13 tmp11 [V13,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <long[]>
-; V14 tmp12 [V14,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <long[]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V17 tmp15 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T05] ( 3, 2 ) byref -> rbx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T06] ( 3, 2 ) int -> rsi "field V05._length (fldOffset=0x8)" P-INDEP
-; V24 tmp22 [V24,T07] ( 2, 1.50) byref -> rbx single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <int[]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
+; V05 tmp3 [V05,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <long[]>
+; V06 tmp4 [V06,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <long[]>
+;* V07 tmp5 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
+; V12 tmp10 [V12,T05] ( 3, 1.50) byref -> rbx "field V04._reference (fldOffset=0x0)" P-INDEP
+; V13 tmp11 [V13,T02] ( 5, 3 ) int -> r15 "field V04._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M64478_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
;; size=12 bbWeight=1 PerfScore 5.50
G_M64478_IG02:
mov rsi, gword ptr [rdi+0x08]
test rsi, rsi
je SHORT G_M64478_IG04
;; size=9 bbWeight=1 PerfScore 3.25
G_M64478_IG03:
lea rbx, bword ptr [rsi+0x10]
- mov esi, dword ptr [rsi+0x08]
+ mov r15d, dword ptr [rsi+0x08]
jmp SHORT G_M64478_IG05
- ;; size=9 bbWeight=0.50 PerfScore 2.25
+ ;; size=10 bbWeight=0.50 PerfScore 2.25
G_M64478_IG04:
xor rbx, rbx
- xor esi, esi
- ;; size=4 bbWeight=0.50 PerfScore 0.25
+ xor r15d, r15d
+ ;; size=5 bbWeight=0.50 PerfScore 0.25
G_M64478_IG05:
- mov r15d, esi
- shl r15, 2
- shr r15, 3
- cmp r15, 0xD1FFAB1E
- ja SHORT G_M64478_IG09
test r15d, r15d
je SHORT G_M64478_IG07
- ;; size=25 bbWeight=1 PerfScore 3.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
G_M64478_IG06:
- movsxd rsi, r15d
+ mov esi, r15d
mov rdi, 0xD1FFAB1E ; long[]
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
mov edx, r15d
shl rdx, 3
lea rdi, bword ptr [r14+0x10]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rax, r14
jmp SHORT G_M64478_IG08
;; size=52 bbWeight=0.50 PerfScore 4.38
G_M64478_IG07:
mov rax, 0xD1FFAB1E ; 'System.Int64[]'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M64478_IG08:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M64478_IG09:
- call CORINFO_HELP_OVERFLOW
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=10b20421) for method System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=10b20421) for method System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
; ============================================================ -24 (-17.39 % of base) - System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this ; Assembly listing for method System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Enum+EnumInfo`1[int]>
-;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[System.Numerics.Vector`1[float]]>
+;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[System.Numerics.Vector`1[float]]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[int]>
-; V04 tmp2 [V04,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <int[]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V10 tmp8 [V10,T02] ( 4, 3 ) int -> r15 "Inline stloc first use temp"
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.Numerics.Vector`1[float]]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V13 tmp11 [V13,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
-; V14 tmp12 [V14,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V17 tmp15 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T05] ( 3, 2 ) byref -> rbx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T06] ( 3, 2 ) int -> rsi "field V05._length (fldOffset=0x8)" P-INDEP
-; V24 tmp22 [V24,T07] ( 2, 1.50) byref -> rbx single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <int[]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
+; V05 tmp3 [V05,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
+; V06 tmp4 [V06,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
+;* V07 tmp5 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
+; V12 tmp10 [V12,T05] ( 3, 1.50) byref -> rbx "field V04._reference (fldOffset=0x0)" P-INDEP
+; V13 tmp11 [V13,T02] ( 5, 3 ) int -> r15 "field V04._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M4350_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
;; size=12 bbWeight=1 PerfScore 5.50
G_M4350_IG02:
mov rsi, gword ptr [rdi+0x08]
test rsi, rsi
je SHORT G_M4350_IG04
;; size=9 bbWeight=1 PerfScore 3.25
G_M4350_IG03:
lea rbx, bword ptr [rsi+0x10]
- mov esi, dword ptr [rsi+0x08]
+ mov r15d, dword ptr [rsi+0x08]
jmp SHORT G_M4350_IG05
- ;; size=9 bbWeight=0.50 PerfScore 2.25
+ ;; size=10 bbWeight=0.50 PerfScore 2.25
G_M4350_IG04:
xor rbx, rbx
- xor esi, esi
- ;; size=4 bbWeight=0.50 PerfScore 0.25
+ xor r15d, r15d
+ ;; size=5 bbWeight=0.50 PerfScore 0.25
G_M4350_IG05:
- mov r15d, esi
- shl r15, 2
- shr r15, 5
- cmp r15, 0xD1FFAB1E
- ja SHORT G_M4350_IG09
test r15d, r15d
je SHORT G_M4350_IG07
- ;; size=25 bbWeight=1 PerfScore 3.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
G_M4350_IG06:
- movsxd rsi, r15d
+ mov esi, r15d
mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float][]
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
mov edx, r15d
shl rdx, 5
lea rdi, bword ptr [r14+0x10]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rax, r14
jmp SHORT G_M4350_IG08
;; size=52 bbWeight=0.50 PerfScore 4.38
G_M4350_IG07:
mov rax, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single][]'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M4350_IG08:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M4350_IG09:
- call CORINFO_HELP_OVERFLOW
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=4129ef01) for method System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=4129ef01) for method System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
; ============================================================ -24 (-17.39 % of base) - System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this ; Assembly listing for method System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Enum+EnumInfo`1[long]>
-;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[int]>
+;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[int]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[long]>
-; V04 tmp2 [V04,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <long[]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[long]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V10 tmp8 [V10,T02] ( 4, 3 ) int -> r15 "Inline stloc first use temp"
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V13 tmp11 [V13,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <int[]>
-; V14 tmp12 [V14,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <int[]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V17 tmp15 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T05] ( 3, 2 ) byref -> rbx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T06] ( 3, 2 ) int -> rsi "field V05._length (fldOffset=0x8)" P-INDEP
-; V24 tmp22 [V24,T07] ( 2, 1.50) byref -> rbx single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <long[]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+; V05 tmp3 [V05,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <int[]>
+; V06 tmp4 [V06,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <int[]>
+;* V07 tmp5 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
+; V12 tmp10 [V12,T05] ( 3, 1.50) byref -> rbx "field V04._reference (fldOffset=0x0)" P-INDEP
+; V13 tmp11 [V13,T02] ( 5, 3 ) int -> r15 "field V04._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M41863_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
;; size=12 bbWeight=1 PerfScore 5.50
G_M41863_IG02:
mov rsi, gword ptr [rdi+0x08]
test rsi, rsi
je SHORT G_M41863_IG04
;; size=9 bbWeight=1 PerfScore 3.25
G_M41863_IG03:
lea rbx, bword ptr [rsi+0x10]
- mov esi, dword ptr [rsi+0x08]
+ mov r15d, dword ptr [rsi+0x08]
jmp SHORT G_M41863_IG05
- ;; size=9 bbWeight=0.50 PerfScore 2.25
+ ;; size=10 bbWeight=0.50 PerfScore 2.25
G_M41863_IG04:
xor rbx, rbx
- xor esi, esi
- ;; size=4 bbWeight=0.50 PerfScore 0.25
+ xor r15d, r15d
+ ;; size=5 bbWeight=0.50 PerfScore 0.25
G_M41863_IG05:
- mov r15d, esi
- shl r15, 3
- shr r15, 2
- cmp r15, 0xD1FFAB1E
- ja SHORT G_M41863_IG09
test r15d, r15d
je SHORT G_M41863_IG07
- ;; size=25 bbWeight=1 PerfScore 3.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
G_M41863_IG06:
- movsxd rsi, r15d
+ mov esi, r15d
mov rdi, 0xD1FFAB1E ; int[]
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
mov edx, r15d
shl rdx, 2
lea rdi, bword ptr [r14+0x10]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rax, r14
jmp SHORT G_M41863_IG08
;; size=52 bbWeight=0.50 PerfScore 4.38
G_M41863_IG07:
mov rax, 0xD1FFAB1E ; 'System.Int32[]'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M41863_IG08:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M41863_IG09:
- call CORINFO_HELP_OVERFLOW
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=d1c45c78) for method System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=d1c45c78) for method System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
; ============================================================ -24 (-17.39 % of base) - System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this ; Assembly listing for method System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 3 single block inlinees; 4 inlinees without PGO data
+; 0 inlinees with PGO data; 2 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 3, 3 ) ref -> rdi this class-hnd single-def <System.Enum+EnumInfo`1[long]>
-;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[System.Numerics.Vector`1[float]]>
+;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[System.Numerics.Vector`1[float]]>
;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[long]>
-; V04 tmp2 [V04,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <long[]>
-;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
-;* V06 tmp4 [V06 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[long]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-; V10 tmp8 [V10,T02] ( 4, 3 ) int -> r15 "Inline stloc first use temp"
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.Numerics.Vector`1[float]]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V13 tmp11 [V13,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
-; V14 tmp12 [V14,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
-;* V15 tmp13 [V15 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V16 tmp14 [V16 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V17 tmp15 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V18 tmp16 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17 [V19 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19 [V21 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
-; V22 tmp20 [V22,T05] ( 3, 2 ) byref -> rbx "field V05._reference (fldOffset=0x0)" P-INDEP
-; V23 tmp21 [V23,T06] ( 3, 2 ) int -> rsi "field V05._length (fldOffset=0x8)" P-INDEP
-; V24 tmp22 [V24,T07] ( 2, 1.50) byref -> rbx single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25 [V27 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V03 tmp1 [V03,T00] ( 4, 6 ) ref -> rsi class-hnd single-def "Inlining Arg" <long[]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+; V05 tmp3 [V05,T04] ( 3, 2 ) ref -> rax class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
+; V06 tmp4 [V06,T03] ( 3, 3 ) ref -> r14 class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
+;* V07 tmp5 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
+; V12 tmp10 [V12,T05] ( 3, 1.50) byref -> rbx "field V04._reference (fldOffset=0x0)" P-INDEP
+; V13 tmp11 [V13,T02] ( 5, 3 ) int -> r15 "field V04._length (fldOffset=0x8)" P-INDEP
;
; Lcl frame size = 8
G_M51399_IG01:
push rbp
push r15
push r14
push rbx
push rax
lea rbp, [rsp+0x20]
;; size=12 bbWeight=1 PerfScore 5.50
G_M51399_IG02:
mov rsi, gword ptr [rdi+0x08]
test rsi, rsi
je SHORT G_M51399_IG04
;; size=9 bbWeight=1 PerfScore 3.25
G_M51399_IG03:
lea rbx, bword ptr [rsi+0x10]
- mov esi, dword ptr [rsi+0x08]
+ mov r15d, dword ptr [rsi+0x08]
jmp SHORT G_M51399_IG05
- ;; size=9 bbWeight=0.50 PerfScore 2.25
+ ;; size=10 bbWeight=0.50 PerfScore 2.25
G_M51399_IG04:
xor rbx, rbx
- xor esi, esi
- ;; size=4 bbWeight=0.50 PerfScore 0.25
+ xor r15d, r15d
+ ;; size=5 bbWeight=0.50 PerfScore 0.25
G_M51399_IG05:
- mov r15d, esi
- shl r15, 3
- shr r15, 5
- cmp r15, 0xD1FFAB1E
- ja SHORT G_M51399_IG09
test r15d, r15d
je SHORT G_M51399_IG07
- ;; size=25 bbWeight=1 PerfScore 3.75
+ ;; size=5 bbWeight=1 PerfScore 1.25
G_M51399_IG06:
- movsxd rsi, r15d
+ mov esi, r15d
mov rdi, 0xD1FFAB1E ; System.Numerics.Vector`1[float][]
call CORINFO_HELP_NEWARR_1_VC
mov r14, rax
mov edx, r15d
shl rdx, 5
lea rdi, bword ptr [r14+0x10]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov rax, r14
jmp SHORT G_M51399_IG08
;; size=52 bbWeight=0.50 PerfScore 4.38
G_M51399_IG07:
mov rax, 0xD1FFAB1E ; 'System.Numerics.Vector`1[System.Single][]'
;; size=10 bbWeight=0.50 PerfScore 0.12
G_M51399_IG08:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=1 PerfScore 3.25
-G_M51399_IG09:
- call CORINFO_HELP_OVERFLOW
- int3
- ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=54963738) for method System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=54963738) for method System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
; ============================================================ Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/8cc02d7779e3111066f9ef13614cd674 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 18 minutes 53 seconds.
dotnet/runtime#109136
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: