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] [stephentoub] Apply OverloadResolutionPriority to Span-based delegating to ROS co ... #778
Comments
Top method regressions5 (4.90 % of base) - System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this ; Assembly listing for method System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte: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; 10 single block inlinees; 3 inlinees without PGO data
+; 0 inlinees with PGO data; 9 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 9, 6 ) byref -> rdi this single-def
; V01 arg1 [V01,T01] ( 7, 4 ) struct (24) [rbp+0x10] do-not-enreg[SF] single-def <System.Net.Security.SslSessionsCache+SslCredKey>
-; V02 loc0 [V02,T02] ( 3, 2.50) ref -> rdx class-hnd single-def <ubyte[]>
-; V03 loc1 [V03,T03] ( 3, 2.50) ref -> rsi class-hnd single-def <ubyte[]>
+; V02 loc0 [V02,T02] ( 4, 3 ) ref -> rdx class-hnd single-def <ubyte[]>
+; V03 loc1 [V03,T03] ( 4, 3 ) ref -> rsi class-hnd single-def <ubyte[]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V05 tmp1 [V05 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ubyte]>
-;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V09 tmp5 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V10 tmp6 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V11 tmp7 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V12 tmp8 [V12 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
-;* V13 tmp9 [V13 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V14 tmp10 [V14,T08] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
+;* V05 tmp1 [V05 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ubyte]>
+;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V09 tmp5 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V10 tmp6 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V11 tmp7 [V11 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V13 tmp9 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+; V14 tmp10 [V14,T06] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
;* V15 tmp11 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V16 tmp12 [V16 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V17 tmp13 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V18 tmp14 [V18 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V19 tmp15 [V19 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
;* V20 tmp16 [V20 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
;* V21 tmp17 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V22 tmp18 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V23 tmp19 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V24 tmp20 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V25 tmp21 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V25 tmp21 [V25 ] ( 0, 0 ) byref -> zero-ref "field V05._reference (fldOffset=0x0)" P-INDEP
;* V26 tmp22 [V26 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
;* V27 tmp23 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp24 [V28 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
-; V29 tmp25 [V29,T06] ( 2, 1 ) byref -> rdi single-def "field V07._reference (fldOffset=0x0)" P-INDEP
-;* V30 tmp26 [V30,T10] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
-; V31 tmp27 [V31,T07] ( 2, 1 ) byref -> rsi single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-; V32 tmp28 [V32,T09] ( 2, 1 ) int -> rcx "field V08._length (fldOffset=0x8)" P-INDEP
-;* V33 tmp29 [V33 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP
+;* V29 tmp25 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP
+;* V30 tmp26 [V30 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP
+; V31 tmp27 [V31,T04] ( 2, 1 ) byref -> rdi single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V32 tmp28 [V32,T08] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+;* V33 tmp29 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP
;* V34 tmp30 [V34 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
;* V35 tmp31 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V36 tmp32 [V36 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
-;* V37 tmp33 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V38 tmp34 [V38 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+; V37 tmp33 [V37,T05] ( 2, 1 ) byref -> rax single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+; V38 tmp34 [V38,T07] ( 2, 1 ) int -> rdx "field V13._length (fldOffset=0x8)" P-INDEP
;* V39 tmp35 [V39 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP
;* V40 tmp36 [V40 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP
;* V41 tmp37 [V41 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
;* V42 tmp38 [V42 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
;* V43 tmp39 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V44 tmp40 [V44 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
;* V45 tmp41 [V45 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP
;* V46 tmp42 [V46 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
;* V47 tmp43 [V47 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP
;* V48 tmp44 [V48 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP
;* V49 tmp45 [V49 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP
;* V50 tmp46 [V50 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
-; V51 cse0 [V51,T04] ( 2, 2 ) int -> rax "CSE #01: aggressive"
-; V52 cse1 [V52,T05] ( 3, 2.50) int -> rcx "CSE #02: aggressive"
;
; Lcl frame size = 0
G_M32327_IG01:
push rbp
mov rbp, rsp
;; size=4 bbWeight=1 PerfScore 1.25
G_M32327_IG02:
mov rdx, gword ptr [rdi]
mov rsi, gword ptr [rbp+0x10]
mov eax, dword ptr [rdx+0x08]
- mov ecx, dword ptr [rsi+0x08]
- cmp eax, ecx
+ cmp eax, dword ptr [rsi+0x08]
jne SHORT G_M32327_IG04
- ;; size=17 bbWeight=1 PerfScore 8.25
+ ;; size=15 bbWeight=1 PerfScore 9.00
G_M32327_IG03:
mov eax, dword ptr [rdi+0x0C]
cmp eax, dword ptr [rbp+0x1C]
jne SHORT G_M32327_IG04
mov eax, dword ptr [rdi+0x08]
cmp eax, dword ptr [rbp+0x18]
jne SHORT G_M32327_IG04
movzx rax, byte ptr [rdi+0x10]
cmp al, byte ptr [rbp+0x20]
jne SHORT G_M32327_IG04
movzx rax, byte ptr [rdi+0x11]
cmp al, byte ptr [rbp+0x21]
jne SHORT G_M32327_IG04
movzx rax, byte ptr [rdi+0x12]
cmp al, byte ptr [rbp+0x22]
jne SHORT G_M32327_IG04
movzx rax, byte ptr [rdi+0x13]
cmp al, byte ptr [rbp+0x23]
je SHORT G_M32327_IG06
;; size=52 bbWeight=0.50 PerfScore 15.00
G_M32327_IG04:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M32327_IG05:
pop rbp
ret
;; size=2 bbWeight=0.50 PerfScore 0.75
G_M32327_IG06:
lea rdi, bword ptr [rdx+0x10]
- add rsi, 16
- mov edx, ecx
+ mov edx, dword ptr [rdx+0x08]
+ lea rax, bword ptr [rsi+0x10]
+ mov edx, dword ptr [rsi+0x08]
+ mov rsi, rax
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
call [rax]System.SpanHelpers:SequenceEqual(byref,byref,ulong):ubyte
nop
- ;; size=23 bbWeight=0.50 PerfScore 2.25
+ ;; size=30 bbWeight=0.50 PerfScore 4.38
G_M32327_IG07:
pop rbp
ret
;; size=2 bbWeight=0.50 PerfScore 0.75
-; Total bytes of code 102, prolog size 4, PerfScore 28.38, instruction count 37, allocated bytes for code 102 (MethodHash=541c81b8) for method System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this (FullOpts)
+; Total bytes of code 107, prolog size 4, PerfScore 31.25, instruction count 38, allocated bytes for code 107 (MethodHash=541c81b8) for method System.Net.Security.SslSessionsCache+SslCredKey:Equals(System.Net.Security.SslSessionsCache+SslCredKey):ubyte:this (FullOpts)
; ============================================================ 3 (2.34 % of base) - System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this ; Assembly listing for method System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():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; 12 single block inlinees; 5 inlinees without PGO data
+; 0 inlinees with PGO data; 11 single block inlinees; 5 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 12, 8.50) byref -> rdi this single-def
+; V00 this [V00,T00] ( 13, 9 ) byref -> rdi this single-def
;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[ubyte]>
;# 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 "impAppendStmt" <System.Span`1[ubyte]>
-;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-; V05 tmp3 [V05,T06] ( 2, 2 ) int -> rax "impAppendStmt"
-; V06 tmp4 [V06,T01] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[]>
-; V07 tmp5 [V07,T02] ( 4, 4 ) int -> rcx "Inlining Arg"
-;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-;* V09 tmp7 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V12 tmp10 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V13 tmp11 [V13 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
-;* V14 tmp12 [V14 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V15 tmp13 [V15,T09] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
+;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.ReadOnlySpan`1[ubyte]>
+;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+; V06 tmp4 [V06,T05] ( 2, 2 ) int -> rax "impAppendStmt"
+; V07 tmp5 [V07,T01] ( 4, 4 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[]>
+; V08 tmp6 [V08,T02] ( 4, 4 ) int -> rcx "Inlining Arg"
+;* V09 tmp7 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;* V11 tmp9 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+;* V13 tmp11 [V13 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V14 tmp12 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+; V15 tmp13 [V15,T08] ( 2, 1 ) ubyte -> rax "Inline return value spill temp"
;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V17 tmp15 [V17 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V18 tmp16 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V19 tmp17 [V19 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
;* V20 tmp18 [V20 ] ( 0, 0 ) byref -> zero-ref single-def "impAppendStmt"
;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V22 tmp20 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V23 tmp21 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V24 tmp22 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V25 tmp23 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V26 tmp24 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V27 tmp25 [V27 ] ( 0, 0 ) byref -> zero-ref "field V01._reference (fldOffset=0x0)" P-INDEP
;* V28 tmp26 [V28 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP
-;* V29 tmp27 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V29 tmp27 [V29 ] ( 0, 0 ) byref -> zero-ref "field V03._reference (fldOffset=0x0)" P-INDEP
;* V30 tmp28 [V30 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP
;* V31 tmp29 [V31 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
;* V32 tmp30 [V32 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-; V33 tmp31 [V33,T07] ( 3, 1.50) byref -> rax "field V08._reference (fldOffset=0x0)" P-INDEP
-; V34 tmp32 [V34,T08] ( 3, 1.50) int -> rcx "field V08._length (fldOffset=0x8)" P-INDEP
-;* V35 tmp33 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP
-;* V36 tmp34 [V36 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
-;* V37 tmp35 [V37 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V33 tmp31 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
+;* V34 tmp32 [V34 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
+; V35 tmp33 [V35,T06] ( 3, 1.50) byref -> rax "field V09._reference (fldOffset=0x0)" P-INDEP
+; V36 tmp34 [V36,T07] ( 3, 1.50) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP
+;* V37 tmp35 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP
;* V38 tmp36 [V38 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
;* V39 tmp37 [V39 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
;* V40 tmp38 [V40 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
-;* V41 tmp39 [V41 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V42 tmp40 [V42 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
+;* V41 tmp39 [V41 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V42 tmp40 [V42 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
;* V43 tmp41 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP
;* V44 tmp42 [V44 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
;* V45 tmp43 [V45 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP
;* V46 tmp44 [V46 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
;* V47 tmp45 [V47 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP
;* V48 tmp46 [V48 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
;* V49 tmp47 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP
;* V50 tmp48 [V50 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
;* V51 tmp49 [V51 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP
;* V52 tmp50 [V52 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP
;* V53 tmp51 [V53 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP
;* V54 tmp52 [V54 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
;* V55 tmp53 [V55 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP
;* V56 tmp54 [V56 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
;* V57 tmp55 [V57 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP
;* V58 tmp56 [V58 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
-; V59 cse0 [V59,T05] ( 3, 2.50) int -> rax "CSE #01: aggressive"
-; V60 rat0 [V60,T03] ( 3, 3 ) byref -> rax "ReplaceWithLclVar is creating a new local variable"
-; V61 rat1 [V61,T04] ( 3, 3 ) long -> rcx "ReplaceWithLclVar is creating a new local variable"
+; V59 rat0 [V59,T03] ( 3, 3 ) byref -> rax "ReplaceWithLclVar is creating a new local variable"
+; V60 rat1 [V60,T04] ( 3, 3 ) long -> rcx "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 0
G_M23478_IG01:
push rbp
mov rbp, rsp
;; size=4 bbWeight=1 PerfScore 1.25
G_M23478_IG02:
mov eax, dword ptr [rdi+0x08]
cmp eax, dword ptr [rdi+0x0C]
jle SHORT G_M23478_IG04
;; size=8 bbWeight=1 PerfScore 6.00
G_M23478_IG03:
+ mov eax, dword ptr [rdi+0x08]
mov dword ptr [rdi+0x0C], eax
- ;; size=3 bbWeight=0.50 PerfScore 0.50
+ ;; size=6 bbWeight=0.50 PerfScore 1.50
G_M23478_IG04:
cmp byte ptr [rdi+0x15], 0
je SHORT G_M23478_IG08
;; size=6 bbWeight=1 PerfScore 4.00
G_M23478_IG05:
mov byte ptr [rdi+0x15], 0
mov rax, gword ptr [rdi]
mov ecx, dword ptr [rdi+0x08]
test rax, rax
je SHORT G_M23478_IG06
cmp dword ptr [rax+0x08], ecx
jb SHORT G_M23478_IG09
add rax, 16
jmp SHORT G_M23478_IG07
;; size=26 bbWeight=0.50 PerfScore 6.25
G_M23478_IG06:
test ecx, ecx
jne SHORT G_M23478_IG09
xor rax, rax
xor ecx, ecx
;; size=8 bbWeight=0.50 PerfScore 0.88
G_M23478_IG07:
cmp ecx, 3
jl SHORT G_M23478_IG08
mov rcx, 0xD1FFAB1E ; static handle
movzx rdx, word ptr [rax]
movzx rax, word ptr [rax+0x01]
movzx rsi, word ptr [rcx]
movzx rcx, word ptr [rcx+0x01]
xor edx, esi
xor eax, ecx
or eax, edx
sete al
movzx rax, al
test eax, eax
je SHORT G_M23478_IG08
mov byte ptr [rdi+0x14], 3
mov eax, dword ptr [rdi+0x08]
add eax, -3
mov dword ptr [rdi+0x08], eax
;; size=58 bbWeight=0.50 PerfScore 8.50
G_M23478_IG08:
pop rbp
ret
;; size=2 bbWeight=1 PerfScore 1.50
G_M23478_IG09:
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 128, prolog size 4, PerfScore 28.88, instruction count 44, allocated bytes for code 128 (MethodHash=3ab0a449) for method System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this (FullOpts)
+; Total bytes of code 131, prolog size 4, PerfScore 29.88, instruction count 45, allocated bytes for code 131 (MethodHash=3ab0a449) for method System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this (FullOpts)
; ============================================================ |
Top method improvements-247 (-25.81 % of base) - System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] ; Assembly listing for method System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (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; 8 single block inlinees; 2 inlinees without PGO data
+; 0 inlinees with PGO data; 4 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T08] ( 15, 10.71) long -> rbx single-def
-; V01 arg0 [V01,T11] ( 5, 7 ) ref -> r15 class-hnd single-def <System.__Canon[]>
-; V02 loc0 [V02,T18] ( 7, 7.29) ref -> r13 class-hnd exact single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon][]>
-; V03 loc1 [V03,T35] ( 7, 1.24) int -> r12
+; V00 TypeCtx [V00,T11] ( 11, 5.91) long -> r15 single-def
+; V01 arg0 [V01,T07] ( 5, 7 ) ref -> rbx class-hnd single-def <System.__Canon[]>
+; V02 loc0 [V02,T12] ( 7, 7.29) ref -> r13 class-hnd exact single-def <System.Collections.Immutable.ImmutableArray`1[System.__Canon][]>
+; V03 loc1 [V03,T29] ( 7, 1.24) int -> r12
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V05 tmp1 [V05 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V06 tmp2 [V06 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V07 tmp3 [V07,T03] ( 8, 17.60) long -> rdi "spilling helperCall"
-;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[System.__Canon]>
+;* V07 tmp3 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[System.__Canon]>
;* V09 tmp5 [V09 ] ( 0, 0 ) struct ( 8) zero-ref "Strict ordering of exceptions for Array store" <System.Collections.Immutable.ImmutableArray`1[System.__Canon]>
;* V10 tmp6 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V11 tmp7 [V11,T23] ( 4, 4.40) long -> rdi "spilling helperCall"
-;* V12 tmp8 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-; V13 tmp9 [V13,T00] ( 10, 28 ) ref -> [rbp-0x48] class-hnd "Inlining Arg" <System.__Canon>
-;* V14 tmp10 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.__Canon]>
-; V15 tmp11 [V15,T07] ( 6, 12.80) long -> rdi "Inlining Arg"
+;* V11 tmp7 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V12 tmp8 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
+; V13 tmp9 [V13,T00] ( 8, 24 ) ref -> rcx class-hnd "Inlining Arg" <System.__Canon>
+;* V14 tmp10 [V14 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.__Canon]>
+;* V15 tmp11 [V15 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V16 tmp12 [V16 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V17 tmp13 [V17,T13] ( 6, 8 ) long -> rdx "spilling helperCall"
-;* V18 tmp14 [V18 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V19 tmp15 [V19 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V20 tmp16 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V21 tmp17 [V21 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[System.__Canon]>
-;* V22 tmp18 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[System.__Canon]>
-;* V23 tmp19 [V23 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.__Canon]>
-;* V24 tmp20 [V24 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V25 tmp21 [V25 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V26 tmp22 [V26 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V27 tmp23 [V27 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-;* V28 tmp24 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V29 tmp25 [V29 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V30 tmp26 [V30 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V31 tmp27 [V31 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V32 tmp28 [V32 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V33 tmp29 [V33 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V34 tmp30 [V34 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V35 tmp31 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V36 tmp32 [V36 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
-;* V37 tmp33 [V37 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-;* V38 tmp34 [V38 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-;* V39 tmp35 [V39 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
-;* V40 tmp36 [V40 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-;* V41 tmp37 [V41 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V42 tmp38 [V42 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-; V43 tmp39 [V43,T15] ( 4, 8 ) ref -> rax "field V09.array (fldOffset=0x0)" P-INDEP
-;* V44 tmp40 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V45 tmp41 [V45 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-; V46 tmp42 [V46,T12] ( 6, 8 ) byref -> [rbp-0x50] "field V14._reference (fldOffset=0x0)" P-INDEP
-; V47 tmp43 [V47,T14] ( 6, 8 ) int -> [rbp-0x34] "field V14._length (fldOffset=0x8)" P-INDEP
-;* V48 tmp44 [V48 ] ( 0, 0 ) byref -> zero-ref "field V21._reference (fldOffset=0x0)" P-INDEP
-;* V49 tmp45 [V49 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
-;* V50 tmp46 [V50 ] ( 0, 0 ) byref -> zero-ref "field V22._reference (fldOffset=0x0)" P-INDEP
-;* V51 tmp47 [V51 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
-; V52 tmp48 [V52,T16] ( 4, 8 ) byref -> [rbp-0x58] "field V23._reference (fldOffset=0x0)" P-INDEP
-; V53 tmp49 [V53,T17] ( 4, 8 ) int -> [rbp-0x38] "field V23._length (fldOffset=0x8)" P-INDEP
-; V54 tmp50 [V54,T30] ( 2, 2 ) byref -> r15 "field V28._reference (fldOffset=0x0)" P-INDEP
-; V55 tmp51 [V55,T32] ( 2, 2 ) int -> r14 "field V28._length (fldOffset=0x8)" P-INDEP
-;* V56 tmp52 [V56 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP
-;* V57 tmp53 [V57 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x8)" P-INDEP
-;* V58 tmp54 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V35._reference (fldOffset=0x0)" P-INDEP
-;* V59 tmp55 [V59 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP
-; V60 tmp56 [V60,T31] ( 2, 2 ) byref -> r15 single-def "field V36._reference (fldOffset=0x0)" P-INDEP
-; V61 tmp57 [V61,T33] ( 2, 2 ) int -> r14 "field V36._length (fldOffset=0x8)" P-INDEP
-; V62 tmp58 [V62,T27] ( 2, 4 ) long -> rdi "argument with side effect"
-; V63 tmp59 [V63,T05] ( 4, 16 ) long -> rdi "argument with side effect"
-; V64 tmp60 [V64,T28] ( 2, 4 ) long -> rdi "argument with side effect"
-; V65 cse0 [V65,T24] ( 4, 4.29) long -> registers hoist multi-def "CSE #02: moderate"
-; V66 cse1 [V66,T29] ( 6, 3.54) int -> r14 "CSE #01: moderate"
-; V67 rat0 [V67,T04] ( 5, 16.09) long -> [rbp-0x40] "Strength reduced derived IV"
-; V68 rat1 [V68,T09] ( 4, 12.13) int -> r14 "Trip count IV"
-; V69 rat2 [V69,T25] ( 3, 4 ) long -> rdi "runtime lookup"
-; V70 rat3 [V70,T19] ( 3, 5.60) long -> rdi "fgMakeTemp is creating a new local variable"
-; V71 rat4 [V71,T36] ( 3, 1 ) long -> r12 "runtime lookup"
-; V72 rat5 [V72,T34] ( 3, 1.40) long -> r12 "fgMakeTemp is creating a new local variable"
-; V73 rat6 [V73,T10] ( 3, 11.09) long -> rdx "fgMakeTemp is creating a new local variable"
-; V74 rat7 [V74,T01] ( 3, 22.18) long -> rdi "fgMakeTemp is creating a new local variable"
-; V75 rat8 [V75,T06] ( 3, 15.84) long -> rdi "runtime lookup"
-; V76 rat9 [V76,T02] ( 3, 22.18) long -> r8 "fgMakeTemp is creating a new local variable"
-; V77 rat10 [V77,T40] ( 3, 0.16) long -> rax "runtime lookup"
-; V78 rat11 [V78,T37] ( 3, 0.22) long -> rax "fgMakeTemp is creating a new local variable"
-; V79 rat12 [V79,T42] ( 3, 0.11) long -> rdx "fgMakeTemp is creating a new local variable"
-; V80 rat13 [V80,T38] ( 3, 0.22) long -> rdi "fgMakeTemp is creating a new local variable"
-; V81 rat14 [V81,T41] ( 3, 0.16) long -> rdi "runtime lookup"
-; V82 rat15 [V82,T39] ( 3, 0.22) long -> rdx "fgMakeTemp is creating a new local variable"
-; V83 rat16 [V83,T20] ( 3, 5.60) long -> rdi "spilling expr"
-; V84 rat17 [V84,T22] ( 3, 4.48) long -> rdi "fgMakeTemp is creating a new local variable"
-; V85 rat18 [V85,T26] ( 3, 4 ) long -> rdi "runtime lookup"
-; V86 rat19 [V86,T21] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
+;* V17 tmp13 [V17 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V18 tmp14 [V18 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]>
+;* V19 tmp15 [V19 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V20 tmp16 [V20 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V21 tmp17 [V21 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V22 tmp18 [V22 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V23 tmp19 [V23 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+; V24 tmp20 [V24,T10] ( 4, 8 ) ref -> rax "field V09.array (fldOffset=0x0)" P-INDEP
+;* V25 tmp21 [V25 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp22 [V26 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
+; V27 tmp23 [V27,T08] ( 6, 8 ) byref -> [rbp-0x48] "field V14._reference (fldOffset=0x0)" P-INDEP
+; V28 tmp24 [V28,T09] ( 6, 8 ) int -> [rbp-0x34] "field V14._length (fldOffset=0x8)" P-INDEP
+; V29 tmp25 [V29,T26] ( 2, 2 ) byref -> rbx "field V18._reference (fldOffset=0x0)" P-INDEP
+; V30 tmp26 [V30,T27] ( 2, 2 ) int -> r14 "field V18._length (fldOffset=0x8)" P-INDEP
+; V31 tmp27 [V31,T22] ( 2, 4 ) long -> rdi "argument with side effect"
+; V32 tmp28 [V32,T02] ( 6, 17.60) long -> rdi "argument with side effect"
+; V33 tmp29 [V33,T04] ( 4, 16 ) long -> rdi "argument with side effect"
+; V34 tmp30 [V34,T17] ( 3, 4.40) long -> rdi "argument with side effect"
+; V35 tmp31 [V35,T23] ( 2, 4 ) long -> rdi "argument with side effect"
+; V36 cse0 [V36,T18] ( 4, 4.29) long -> registers hoist multi-def "CSE #02: moderate"
+; V37 cse1 [V37,T25] ( 6, 3.54) int -> r14 "CSE #01: moderate"
+;* V38 cse2 [V38,T24] ( 0, 0 ) long -> zero-ref "CSE #03: aggressive"
+; V39 rat0 [V39,T03] ( 5, 16.09) long -> [rbp-0x40] "Strength reduced derived IV"
+; V40 rat1 [V40,T06] ( 4, 12.13) int -> r14 "Trip count IV"
+; V41 rat2 [V41,T19] ( 3, 4 ) long -> rdi "runtime lookup"
+; V42 rat3 [V42,T13] ( 3, 5.60) long -> rdi "fgMakeTemp is creating a new local variable"
+; V43 rat4 [V43,T30] ( 3, 1 ) long -> r12 "runtime lookup"
+; V44 rat5 [V44,T28] ( 3, 1.40) long -> r12 "fgMakeTemp is creating a new local variable"
+; V45 rat6 [V45,T05] ( 3, 15.84) long -> rdi "runtime lookup"
+; V46 rat7 [V46,T01] ( 3, 22.18) long -> rcx "fgMakeTemp is creating a new local variable"
+; V47 rat8 [V47,T33] ( 3, 0.16) long -> rdx "runtime lookup"
+; V48 rat9 [V48,T31] ( 3, 0.22) long -> rdx "fgMakeTemp is creating a new local variable"
+; V49 rat10 [V49,T34] ( 3, 0.16) long -> rdi "runtime lookup"
+; V50 rat11 [V50,T32] ( 3, 0.22) long -> rdx "fgMakeTemp is creating a new local variable"
+; V51 rat12 [V51,T20] ( 3, 4 ) long -> rdi "runtime lookup"
+; V52 rat13 [V52,T14] ( 3, 5.60) long -> rdi "spilling expr"
+; V53 rat14 [V53,T16] ( 3, 4.48) long -> rdi "fgMakeTemp is creating a new local variable"
+; V54 rat15 [V54,T21] ( 3, 4 ) long -> rdi "runtime lookup"
+; V55 rat16 [V55,T15] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 56
+; Lcl frame size = 40
G_M768_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 56
- lea rbp, [rsp+0x60]
+ sub rsp, 40
+ lea rbp, [rsp+0x50]
mov qword ptr [rbp-0x30], rdi
- mov rbx, rdi
- mov r15, rsi
+ mov r15, rdi
+ mov rbx, rsi
;; size=29 bbWeight=1 PerfScore 8.25
G_M768_IG02:
- mov rdi, qword ptr [rbx+0x18]
+ mov rdi, qword ptr [r15+0x18]
mov rdi, qword ptr [rdi+0x10]
test rdi, rdi
je SHORT G_M768_IG08
;; size=13 bbWeight=1 PerfScore 5.25
G_M768_IG03:
- mov r14d, dword ptr [r15+0x08]
+ mov r14d, dword ptr [rbx+0x08]
mov esi, r14d
call CORINFO_HELP_NEWARR_1_VC
mov r13, rax
xor r12d, r12d
test r14d, r14d
- jle G_M768_IG16
+ jle G_M768_IG14
;; size=27 bbWeight=1 PerfScore 5.00
G_M768_IG04:
cmp dword ptr [r13+0x08], r14d
- jl G_M768_IG24
- mov rdi, qword ptr [rbx+0x18]
- mov r12, qword ptr [rdi+0x18]
+ jl G_M768_IG21
+ mov rdi, qword ptr [r15+0x18]
+ mov r12, qword ptr [rdi+0x20]
test r12, r12
je SHORT G_M768_IG09
;; size=23 bbWeight=0.25 PerfScore 2.31
G_M768_IG05:
mov eax, 16
;; size=5 bbWeight=0.25 PerfScore 0.06
G_M768_IG06:
- mov rdi, r12
mov qword ptr [rbp-0x40], rax
- mov rcx, gword ptr [r15+rax]
- mov gword ptr [rbp-0x48], rcx
+ mov rcx, gword ptr [rbx+rax]
test rcx, rcx
jne SHORT G_M768_IG10
- ;; size=20 bbWeight=3.96 PerfScore 21.78
+ ;; size=13 bbWeight=3.96 PerfScore 16.83
G_M768_IG07:
- xor r8, r8
- mov bword ptr [rbp-0x50], r8
- xor r9d, r9d
- mov dword ptr [rbp-0x34], r9d
- jmp SHORT G_M768_IG12
- ;; size=16 bbWeight=1.98 PerfScore 8.91
+ xor rdx, rdx
+ mov bword ptr [rbp-0x48], rdx
+ xor r8d, r8d
+ mov dword ptr [rbp-0x34], r8d
+ mov rdx, bword ptr [rbp-0x48]
+ mov r8d, dword ptr [rbp-0x34]
+ jmp SHORT G_M768_IG11
+ ;; size=23 bbWeight=1.98 PerfScore 12.87
G_M768_IG08:
- mov rdi, rbx
+ mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rdi, rax
jmp SHORT G_M768_IG03
;; size=30 bbWeight=0.20 PerfScore 1.20
G_M768_IG09:
- mov rdi, rbx
+ mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov r12, rax
jmp SHORT G_M768_IG05
;; size=30 bbWeight=0.05 PerfScore 0.30
G_M768_IG10:
- mov rsi, qword ptr [rdi+0x30]
- mov rsi, qword ptr [rsi]
- mov rdx, qword ptr [rsi+0x10]
- test rdx, rdx
- je G_M768_IG38
- ;; size=20 bbWeight=1.98 PerfScore 14.35
+ lea rdx, bword ptr [rcx+0x10]
+ mov r8d, dword ptr [rcx+0x08]
+ ;; size=8 bbWeight=1.98 PerfScore 4.95
G_M768_IG11:
- mov rcx, gword ptr [rbp-0x48]
- cmp qword ptr [rcx], rdx
- jne G_M768_IG40
- lea r8, bword ptr [rcx+0x10]
- mov r9d, dword ptr [rcx+0x08]
- mov bword ptr [rbp-0x50], r8
- mov dword ptr [rbp-0x34], r9d
- ;; size=29 bbWeight=1.98 PerfScore 18.81
-G_M768_IG12:
- mov rdi, qword ptr [rbx+0x18]
- mov rdi, qword ptr [rdi+0x20]
- test rdi, rdi
- je G_M768_IG22
- ;; size=17 bbWeight=3.96 PerfScore 20.79
-G_M768_IG13:
- mov r8, bword ptr [rbp-0x50]
- mov bword ptr [rbp-0x58], r8
- mov r9d, dword ptr [rbp-0x34]
- mov dword ptr [rbp-0x38], r9d
+ mov rdi, r12
mov rsi, qword ptr [rdi+0x18]
- mov r8, qword ptr [rsi+0x18]
- test r8, r8
- je G_M768_IG23
- ;; size=33 bbWeight=3.96 PerfScore 36.63
-G_M768_IG14:
- mov rcx, bword ptr [rbp-0x58]
- mov rdi, r8
- ;; size=7 bbWeight=3.17 PerfScore 3.96
-G_M768_IG15:
- mov rsi, rcx
- mov edx, dword ptr [rbp-0x38]
+ mov rcx, qword ptr [rsi+0x10]
+ test rcx, rcx
+ je G_M768_IG20
+ ;; size=20 bbWeight=3.96 PerfScore 21.78
+G_M768_IG12:
+ mov rdi, rcx
+ ;; size=3 bbWeight=3.17 PerfScore 0.79
+G_M768_IG13:
+ mov rsi, rdx
+ mov edx, r8d
mov rcx, 0xD1FFAB1E ; code for System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
call [rcx]System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
mov rcx, qword ptr [rbp-0x40]
lea rdi, bword ptr [rcx+r13]
mov rsi, rax
call CORINFO_HELP_ASSIGN_REF
mov rcx, qword ptr [rbp-0x40]
add rcx, 8
dec r14d
mov rax, rcx
jne G_M768_IG06
- ;; size=54 bbWeight=3.96 PerfScore 39.60
-G_M768_IG16:
- lea r15, bword ptr [r13+0x10]
+ ;; size=54 bbWeight=3.96 PerfScore 36.63
+G_M768_IG14:
+ lea rbx, bword ptr [r13+0x10]
mov r14d, dword ptr [r13+0x08]
- mov rdi, qword ptr [rbx+0x18]
+ mov rdi, qword ptr [r15+0x18]
cmp qword ptr [rdi+0x08], 48
- jle G_M768_IG36
+ jle G_M768_IG30
;; size=23 bbWeight=1 PerfScore 8.50
-G_M768_IG17:
+G_M768_IG15:
mov rdi, qword ptr [rdi+0x30]
test rdi, rdi
- je G_M768_IG36
+ je G_M768_IG30
;; size=13 bbWeight=0.80 PerfScore 2.60
-G_M768_IG18:
+G_M768_IG16:
mov rsi, qword ptr [rdi+0x18]
- mov rax, qword ptr [rsi+0x18]
+ mov rax, qword ptr [rsi+0x10]
test rax, rax
- je G_M768_IG37
+ je G_M768_IG31
;; size=17 bbWeight=1 PerfScore 5.25
-G_M768_IG19:
+G_M768_IG17:
mov rdi, rax
;; size=3 bbWeight=0.80 PerfScore 0.20
-G_M768_IG20:
- mov rsi, r15
+G_M768_IG18:
+ mov rsi, rbx
mov edx, r14d
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.ImmutableArray:Create[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]
call [rax]System.Collections.Immutable.ImmutableArray:Create[System.Collections.Immutable.ImmutableArray`1[System.__Canon]](System.ReadOnlySpan`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]]
nop
;; size=19 bbWeight=1 PerfScore 4.00
-G_M768_IG21:
- add rsp, 56
+G_M768_IG19:
+ add rsp, 40
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
-G_M768_IG22:
- mov rdi, rbx
+G_M768_IG20:
+ mov bword ptr [rbp-0x48], rdx
+ mov dword ptr [rbp-0x34], r8d
mov rsi, 0xD1FFAB1E ; global ptr
mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
call [rcx]CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rdi, rax
+ mov rdx, bword ptr [rbp-0x48]
+ mov r8d, dword ptr [rbp-0x34]
jmp G_M768_IG13
- ;; size=33 bbWeight=0.79 PerfScore 4.75
+ ;; size=46 bbWeight=0.79 PerfScore 7.72
+G_M768_IG21:
+ mov edi, r12d
+ mov rcx, gword ptr [rbx+8*rdi+0x10]
+ test rcx, rcx
+ je SHORT G_M768_IG23
+ ;; size=13 bbWeight=0.04 PerfScore 0.14
+G_M768_IG22:
+ lea rdx, bword ptr [rcx+0x10]
+ mov rax, rdx
+ mov r8d, dword ptr [rcx+0x08]
+ mov ecx, r8d
+ jmp SHORT G_M768_IG24
+ ;; size=16 bbWeight=0.02 PerfScore 0.10
G_M768_IG23:
- mov rsi, 0xD1FFAB1E ; global ptr
- mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
- call [r8]CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rdi, rax
- mov rcx, bword ptr [rbp-0x58]
- jmp G_M768_IG15
- ;; size=35 bbWeight=0.79 PerfScore 5.35
+ xor rax, rax
+ mov bword ptr [rbp-0x48], rax
+ xor ecx, ecx
+ mov dword ptr [rbp-0x34], ecx
+ mov rax, bword ptr [rbp-0x48]
+ mov ecx, dword ptr [rbp-0x34]
+ ;; size=18 bbWeight=0.02 PerfScore 0.09
G_M768_IG24:
- mov rdi, qword ptr [rbx+0x18]
- mov rax, qword ptr [rdi+0x18]
- test rax, rax
- je SHORT G_M768_IG27
+ mov rdi, qword ptr [r15+0x18]
+ mov rdx, qword ptr [rdi+0x20]
+ test rdx, rdx
+ je SHORT G_M768_IG28
;; size=13 bbWeight=0.04 PerfScore 0.21
G_M768_IG25:
- mov rdi, rax
- mov esi, r12d
- mov rcx, gword ptr [r15+8*rsi+0x10]
- mov rax, rcx
- mov gword ptr [rbp-0x48], rax
- test rax, rax
- jne SHORT G_M768_IG28
- ;; size=23 bbWeight=0.04 PerfScore 0.20
-G_M768_IG26:
- xor rcx, rcx
- mov bword ptr [rbp-0x50], rcx
- xor edx, edx
- mov dword ptr [rbp-0x34], edx
- jmp SHORT G_M768_IG30
- ;; size=13 bbWeight=0.02 PerfScore 0.09
-G_M768_IG27:
- mov rdi, rbx
- mov rsi, 0xD1FFAB1E ; global ptr
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
- call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
- jmp SHORT G_M768_IG25
- ;; size=27 bbWeight=0.01 PerfScore 0.05
-G_M768_IG28:
- mov rsi, qword ptr [rdi+0x30]
- mov rsi, qword ptr [rsi]
+ mov rdi, rdx
+ mov rsi, qword ptr [rdi+0x18]
mov rdx, qword ptr [rsi+0x10]
test rdx, rdx
- je G_M768_IG39
- ;; size=20 bbWeight=0.02 PerfScore 0.15
-G_M768_IG29:
- mov rax, gword ptr [rbp-0x48]
- cmp qword ptr [rax], rdx
- jne G_M768_IG40
- lea r8, bword ptr [rax+0x10]
- mov rcx, r8
- mov r9d, dword ptr [rax+0x08]
- mov edx, r9d
- mov bword ptr [rbp-0x50], rcx
- mov dword ptr [rbp-0x34], edx
- ;; size=34 bbWeight=0.02 PerfScore 0.20
-G_M768_IG30:
- mov rdi, qword ptr [rbx+0x18]
- mov rdi, qword ptr [rdi+0x20]
- test rdi, rdi
- je SHORT G_M768_IG34
- ;; size=13 bbWeight=0.04 PerfScore 0.21
-G_M768_IG31:
- mov rcx, bword ptr [rbp-0x50]
- mov bword ptr [rbp-0x58], rcx
- mov edx, dword ptr [rbp-0x34]
- mov dword ptr [rbp-0x38], edx
- mov rsi, qword ptr [rdi+0x18]
- mov rdx, qword ptr [rsi+0x18]
- test rdx, rdx
- je SHORT G_M768_IG35
- ;; size=27 bbWeight=0.04 PerfScore 0.37
-G_M768_IG32:
- mov rax, bword ptr [rbp-0x58]
- mov ecx, dword ptr [rbp-0x38]
+ je SHORT G_M768_IG29
+ ;; size=16 bbWeight=0.04 PerfScore 0.22
+G_M768_IG26:
mov rdi, rdx
- ;; size=10 bbWeight=0.03 PerfScore 0.07
-G_M768_IG33:
+ ;; size=3 bbWeight=0.03 PerfScore 0.01
+G_M768_IG27:
mov rsi, rax
mov edx, ecx
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
call [rax]System.Collections.Immutable.ImmutableArray:Create[System.__Canon](System.ReadOnlySpan`1[System.__Canon]):System.Collections.Immutable.ImmutableArray`1[System.__Canon]
cmp r12d, dword ptr [r13+0x08]
- jae G_M768_IG41
+ jae G_M768_IG32
mov edi, r12d
lea rdi, bword ptr [r13+8*rdi+0x10]
mov rsi, rax
call CORINFO_HELP_ASSIGN_REF
inc r12d
cmp r14d, r12d
- jg G_M768_IG24
- jmp G_M768_IG16
+ jg G_M768_IG21
+ jmp G_M768_IG14
;; size=60 bbWeight=0.04 PerfScore 0.59
-G_M768_IG34:
- mov rdi, rbx
+G_M768_IG28:
+ mov bword ptr [rbp-0x48], rax
+ mov dword ptr [rbp-0x34], ecx
+ mov rdi, r15
mov rsi, 0xD1FFAB1E ; global ptr
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
- call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rdi, rax
- jmp SHORT G_M768_IG31
- ;; size=30 bbWeight=0.01 PerfScore 0.05
-G_M768_IG35:
+ mov rdx, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call [rdx]CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rdx, rax
+ mov rax, bword ptr [rbp-0x48]
+ mov ecx, dword ptr [rbp-0x34]
+ jmp SHORT G_M768_IG25
+ ;; size=44 bbWeight=0.01 PerfScore 0.08
+G_M768_IG29:
+ mov bword ptr [rbp-0x48], rax
+ mov dword ptr [rbp-0x34], ecx
mov rsi, 0xD1FFAB1E ; global ptr
mov rdx, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
call [rdx]CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rdi, rax
- mov rax, bword ptr [rbp-0x58]
- mov ecx, dword ptr [rbp-0x38]
- jmp SHORT G_M768_IG33
- ;; size=34 bbWeight=0.01 PerfScore 0.06
-G_M768_IG36:
- mov rdi, rbx
+ mov rax, bword ptr [rbp-0x48]
+ mov ecx, dword ptr [rbp-0x34]
+ jmp G_M768_IG27
+ ;; size=44 bbWeight=0.01 PerfScore 0.08
+G_M768_IG30:
+ mov rdi, r15
+ mov rsi, 0xD1FFAB1E ; global ptr
+ mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rdi, rax
+ jmp G_M768_IG16
+ ;; size=33 bbWeight=0.36 PerfScore 2.16
+G_M768_IG31:
mov rsi, 0xD1FFAB1E ; global ptr
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
mov rdi, rax
jmp G_M768_IG18
- ;; size=33 bbWeight=0.36 PerfScore 2.16
-G_M768_IG37:
- mov rsi, 0xD1FFAB1E ; global ptr
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_METHOD
- call [rax]CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rdi, rax
- jmp G_M768_IG20
;; size=30 bbWeight=0.20 PerfScore 1.15
-G_M768_IG38:
- mov rsi, 0xD1FFAB1E ; global ptr
- mov rdx, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
- call [rdx]CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov rdx, rax
- jmp G_M768_IG11
- ;; size=30 bbWeight=0.40 PerfScore 2.28
-G_M768_IG39:
- mov rsi, 0xD1FFAB1E ; global ptr
- mov rcx, 0xD1FFAB1E ; code for CORINFO_HELP_RUNTIMEHANDLE_CLASS
- call [rcx]CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov rdx, rax
- jmp G_M768_IG29
- ;; size=30 bbWeight=0.00 PerfScore 0.02
-G_M768_IG40:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArrayTypeMismatchException()
- call [rax]System.ThrowHelper:ThrowArrayTypeMismatchException()
- int3
- ;; size=13 bbWeight=0 PerfScore 0.00
-G_M768_IG41:
+G_M768_IG32:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 957, prolog size 23, PerfScore 229.96, instruction count 232, allocated bytes for code 957 (MethodHash=b577fcff) for method System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
+; Total bytes of code 710, prolog size 23, PerfScore 153.58, instruction count 179, allocated bytes for code 710 (MethodHash=b577fcff) for method System.Reflection.Metadata.Ecma335.MetadataAggregator:ToImmutable[System.__Canon](System.__Canon[]):System.Collections.Immutable.ImmutableArray`1[System.Collections.Immutable.ImmutableArray`1[System.__Canon]] (FullOpts)
; ============================================================ -135 (-22.84 % of base) - System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this ; Assembly listing for method System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
-; 0 inlinees with PGO data; 16 single block inlinees; 8 inlinees without PGO data
+; 0 inlinees with PGO data; 4 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T13] ( 5, 12 ) ref -> r15 this class-hnd single-def <System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]>
+; V00 this [V00,T08] ( 5, 12 ) ref -> r15 this class-hnd single-def <System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]>
; V01 arg1 [V01,T03] ( 4, 34 ) ref -> rbx class-hnd single-def <System.IO.Stream>
-; V02 loc0 [V02,T21] ( 3, 3 ) ref -> r14 class-hnd exact single-def <System.Text.Json.JsonSerializerOptions>
-; V03 loc1 [V03 ] ( 22,158 ) struct (24) [rbp-0x30] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.Json.Serialization.ReadBufferState>
+; V02 loc0 [V02,T13] ( 3, 3 ) ref -> r14 class-hnd exact single-def <System.Text.Json.JsonSerializerOptions>
+; V03 loc1 [V03 ] ( 12, 86 ) struct (24) [rbp-0x30] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.Json.Serialization.ReadBufferState>
; V04 loc2 [V04 ] ( 2, 9 ) struct (160) [rbp-0xD0] do-not-enreg[XS] must-init addr-exposed ld-addr-op <System.Text.Json.ReadStack>
; V05 loc3 [V05 ] ( 3, 10 ) struct (56) [rbp-0x108] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Text.Json.JsonReaderState>
; V06 loc4 [V06 ] ( 2, 9 ) double -> [rbp-0x110] do-not-enreg[X] addr-exposed ld-addr-op
-; V07 loc5 [V07,T23] ( 2, 2 ) double -> [rbp-0x118] spill-single-def
+; V07 loc5 [V07,T15] ( 2, 2 ) double -> [rbp-0x118] spill-single-def
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V09 tmp1 [V09,T20] ( 2, 4 ) struct ( 8) rax "spilled call-like call argument" <System.Text.Json.JsonReaderOptions>
+; V09 tmp1 [V09,T12] ( 2, 4 ) struct ( 8) rax "spilled call-like call argument" <System.Text.Json.JsonReaderOptions>
;* V10 tmp2 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
; V11 tmp3 [V11,T02] ( 3, 40 ) int -> rax "Inline stloc first use temp"
;* V12 tmp4 [V12 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "Inline return value spill temp" <System.Span`1[ubyte]>
; V13 tmp5 [V13,T00] ( 4, 80 ) ref -> rsi class-hnd "Inlining Arg" <ubyte[]>
; V14 tmp6 [V14,T01] ( 5, 64 ) int -> rdx "Inlining Arg"
;* V15 tmp7 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V16 tmp8 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
-; V17 tmp9 [V17,T10] ( 2, 16 ) byref -> rsi "Inlining Arg"
-; V18 tmp10 [V18,T11] ( 2, 16 ) int -> rdi "Inlining Arg"
-;* V19 tmp11 [V19 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ubyte]>
-;* V20 tmp12 [V20 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V21 tmp13 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
-; V22 tmp14 [V22,T12] ( 2, 16 ) int -> r8 "impAppendStmt"
-; V23 tmp15 [V23,T04] ( 4, 32 ) ref -> r8 class-hnd "Inlining Arg" <ubyte[]>
-; V24 tmp16 [V24,T05] ( 4, 32 ) int -> rsi "Inlining Arg"
-;* V25 tmp17 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-;* V26 tmp18 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V27 tmp19 [V27 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V28 tmp20 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V29 tmp21 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V30 tmp22 [V30 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V31 tmp23 [V31 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V32 tmp24 [V32,T18] ( 2, 8 ) ubyte -> r8 "Inline return value spill temp"
-;* V33 tmp25 [V33 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V34 tmp26 [V34 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V35 tmp27 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V36 tmp28 [V36 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
-;* V37 tmp29 [V37 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
-;* V38 tmp30 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V39 tmp31 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V40 tmp32 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V41 tmp33 [V41 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V42 tmp34 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V43 tmp35 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V44 tmp36 [V44 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP
-;* V45 tmp37 [V45 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
-; V46 tmp38 [V46,T06] ( 3, 24 ) byref -> rsi "field V12._reference (fldOffset=0x0)" P-INDEP
-; V47 tmp39 [V47,T08] ( 3, 24 ) int -> rdx "field V12._length (fldOffset=0x8)" P-INDEP
-; V48 tmp40 [V48,T17] ( 2, 8 ) byref -> rsi "field V15._reference (fldOffset=0x0)" P-INDEP
-; V49 tmp41 [V49,T19] ( 2, 8 ) int -> rdx "field V15._length (fldOffset=0x8)" P-INDEP
-;* V50 tmp42 [V50 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP
-;* V51 tmp43 [V51 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
-;* V52 tmp44 [V52 ] ( 0, 0 ) byref -> zero-ref "field V19._reference (fldOffset=0x0)" P-INDEP
-;* V53 tmp45 [V53 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
-;* V54 tmp46 [V54 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP
-;* V55 tmp47 [V55 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
-;* V56 tmp48 [V56 ] ( 0, 0 ) byref -> zero-ref "field V21._reference (fldOffset=0x0)" P-INDEP
-;* V57 tmp49 [V57 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
-; V58 tmp50 [V58,T14] ( 3, 12 ) byref -> r8 "field V25._reference (fldOffset=0x0)" P-INDEP
-; V59 tmp51 [V59,T15] ( 3, 12 ) int -> rsi "field V25._length (fldOffset=0x8)" P-INDEP
-;* V60 tmp52 [V60 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP
-;* V61 tmp53 [V61 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
-;* V62 tmp54 [V62 ] ( 0, 0 ) byref -> zero-ref "field V27._reference (fldOffset=0x0)" P-INDEP
-;* V63 tmp55 [V63 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
-;* V64 tmp56 [V64 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP
-;* V65 tmp57 [V65 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x8)" P-INDEP
-;* V66 tmp58 [V66 ] ( 0, 0 ) byref -> zero-ref "field V29._reference (fldOffset=0x0)" P-INDEP
-;* V67 tmp59 [V67 ] ( 0, 0 ) int -> zero-ref "field V29._length (fldOffset=0x8)" P-INDEP
-;* V68 tmp60 [V68 ] ( 0, 0 ) byref -> zero-ref "field V33._reference (fldOffset=0x0)" P-INDEP
-;* V69 tmp61 [V69 ] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP
-;* V70 tmp62 [V70 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
-;* V71 tmp63 [V71 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP
-;* V72 tmp64 [V72 ] ( 0, 0 ) byref -> zero-ref "field V38._reference (fldOffset=0x0)" P-INDEP
-;* V73 tmp65 [V73 ] ( 0, 0 ) int -> zero-ref "field V38._length (fldOffset=0x8)" P-INDEP
-;* V74 tmp66 [V74 ] ( 0, 0 ) byref -> zero-ref "field V39._reference (fldOffset=0x0)" P-INDEP
-;* V75 tmp67 [V75 ] ( 0, 0 ) int -> zero-ref "field V39._length (fldOffset=0x8)" P-INDEP
-;* V76 tmp68 [V76 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP
-;* V77 tmp69 [V77 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP
-;* V78 tmp70 [V78 ] ( 0, 0 ) byref -> zero-ref "field V41._reference (fldOffset=0x0)" P-INDEP
-;* V79 tmp71 [V79 ] ( 0, 0 ) int -> zero-ref "field V41._length (fldOffset=0x8)" P-INDEP
-;* V80 tmp72 [V80 ] ( 0, 0 ) byref -> zero-ref "field V42._reference (fldOffset=0x0)" P-INDEP
-;* V81 tmp73 [V81 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP
-;* V82 tmp74 [V82 ] ( 0, 0 ) byref -> zero-ref "field V43._reference (fldOffset=0x0)" P-INDEP
-;* V83 tmp75 [V83 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP
-; V84 PSPSym [V84,T22] ( 1, 1 ) long -> [rbp-0x120] do-not-enreg[V] "PSPSym"
-; V85 cse0 [V85,T16] ( 3, 12 ) int -> rdi "CSE #01: moderate"
-; V86 rat0 [V86,T07] ( 3, 24 ) byref -> r8 "ReplaceWithLclVar is creating a new local variable"
-; V87 rat1 [V87,T09] ( 3, 24 ) long -> rsi "ReplaceWithLclVar is creating a new local variable"
+; V17 tmp9 [V17,T06] ( 2, 16 ) byref -> rsi "Inlining Arg"
+; V18 tmp10 [V18,T07] ( 2, 16 ) int -> rdi "Inlining Arg"
+;* V19 tmp11 [V19 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp12 [V20 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
+; V21 tmp13 [V21,T04] ( 3, 24 ) byref -> rsi "field V12._reference (fldOffset=0x0)" P-INDEP
+; V22 tmp14 [V22,T05] ( 3, 24 ) int -> rdx "field V12._length (fldOffset=0x8)" P-INDEP
+; V23 tmp15 [V23,T10] ( 2, 8 ) byref -> rsi "field V15._reference (fldOffset=0x0)" P-INDEP
+; V24 tmp16 [V24,T11] ( 2, 8 ) int -> rdx "field V15._length (fldOffset=0x8)" P-INDEP
+;* V25 tmp17 [V25 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp18 [V26 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
+; V27 PSPSym [V27,T14] ( 1, 1 ) long -> [rbp-0x120] do-not-enreg[V] "PSPSym"
+; V28 cse0 [V28,T09] ( 3, 12 ) int -> rdi "CSE #01: moderate"
;
; Lcl frame size = 264
G_M33243_IG01:
push rbp
push r15
push r14
push rbx
sub rsp, 264
lea rbp, [rsp+0x120]
xor eax, eax
mov qword ptr [rbp-0x108], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x100], xmm8
vmovdqa xmmword ptr [rbp-0xF0], xmm8
mov rax, -192
vmovdqa xmmword ptr [rbp+rax-0x20], xmm8
vmovdqa xmmword ptr [rbp+rax-0x10], xmm8
vmovdqa xmmword ptr [rax+rbp], xmm8
add rax, 48
jne SHORT -5 instr
mov qword ptr [rbp-0x20], rax
mov qword ptr [rbp-0x120], rsp
mov r15, rdi
mov rbx, rsi
;; size=101 bbWeight=1 PerfScore 20.33
G_M33243_IG02:
mov r14, gword ptr [r15+0xB0]
mov esi, dword ptr [r14+0x7C]
lea rdi, [rbp-0x30]
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Serialization.ReadBufferState:.ctor(int):this
call [rax]System.Text.Json.Serialization.ReadBufferState:.ctor(int):this
lea rdi, [rbp-0xD0]
mov rsi, r15
mov edx, 1
mov rax, 0xD1FFAB1E ; code for System.Text.Json.ReadStack:Initialize(System.Text.Json.Serialization.Metadata.JsonTypeInfo,ubyte):this
call [rax]System.Text.Json.ReadStack:Initialize(System.Text.Json.Serialization.Metadata.JsonTypeInfo,ubyte):this
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Text.Json.JsonSerializerOptions:GetReaderOptions():System.Text.Json.JsonReaderOptions:this
call [rax]System.Text.Json.JsonSerializerOptions:GetReaderOptions():System.Text.Json.JsonReaderOptions:this
mov qword ptr [rbp-0xF0], rax
vxorps xmm0, xmm0, xmm0
vmovdqu xmmword ptr [rbp-0xE8], xmm0
vmovdqu xmmword ptr [rbp-0xE0], xmm0
;; size=96 bbWeight=1 PerfScore 18.83
G_M33243_IG03:
jmp SHORT G_M33243_IG05
;; size=2 bbWeight=1 PerfScore 2.00
G_M33243_IG04:
add eax, dword ptr [rbp-0x28]
mov dword ptr [rbp-0x28], eax
- mov r8d, dword ptr [rbp-0x28]
- mov rsi, gword ptr [rbp-0x30]
- cmp r8d, dword ptr [rsi+0x08]
+ mov edi, dword ptr [rbp-0x28]
+ mov rax, gword ptr [rbp-0x30]
+ cmp edi, dword ptr [rax+0x08]
jge SHORT G_M33243_IG10
- ;; size=20 bbWeight=8 PerfScore 72.00
+ ;; size=18 bbWeight=8 PerfScore 72.00
G_M33243_IG05:
mov rsi, gword ptr [rbp-0x30]
mov edx, dword ptr [rbp-0x28]
test rsi, rsi
je SHORT G_M33243_IG07
;; size=12 bbWeight=16 PerfScore 52.00
G_M33243_IG06:
mov edi, dword ptr [rsi+0x08]
cmp edi, edx
- jb G_M33243_IG18
+ jb SHORT G_M33243_IG12
mov eax, edx
lea rsi, bword ptr [rsi+rax+0x10]
sub edi, edx
mov edx, edi
jmp SHORT G_M33243_IG08
- ;; size=24 bbWeight=4 PerfScore 28.00
+ ;; size=20 bbWeight=4 PerfScore 28.00
G_M33243_IG07:
test edx, edx
- jne G_M33243_IG18
+ jne SHORT G_M33243_IG12
xor rsi, rsi
xor edx, edx
- ;; size=12 bbWeight=4 PerfScore 7.00
+ ;; size=8 bbWeight=4 PerfScore 7.00
G_M33243_IG08:
mov rdi, rbx
mov rax, qword ptr [rbx]
mov rax, qword ptr [rax+0x60]
call [rax+0x20]System.IO.Stream:Read(System.Span`1[ubyte]):int:this
test eax, eax
jne SHORT G_M33243_IG04
;; size=17 bbWeight=16 PerfScore 136.00
G_M33243_IG09:
mov byte ptr [rbp-0x1A], 1
;; size=4 bbWeight=4 PerfScore 4.00
G_M33243_IG10:
- mov r8d, dword ptr [rbp-0x28]
- cmp r8d, dword ptr [rbp-0x24]
- jle SHORT G_M33243_IG12
- ;; size=10 bbWeight=16 PerfScore 64.00
-G_M33243_IG11:
- mov r8d, dword ptr [rbp-0x28]
- mov dword ptr [rbp-0x24], r8d
- ;; size=8 bbWeight=4 PerfScore 8.00
-G_M33243_IG12:
- cmp byte ptr [rbp-0x1B], 0
- je SHORT G_M33243_IG16
- ;; size=6 bbWeight=16 PerfScore 48.00
-G_M33243_IG13:
- mov byte ptr [rbp-0x1B], 0
- mov r8, gword ptr [rbp-0x30]
- mov esi, dword ptr [rbp-0x28]
- test r8, r8
- je SHORT G_M33243_IG14
- cmp dword ptr [r8+0x08], esi
- jb G_M33243_IG18
- add r8, 16
- jmp SHORT G_M33243_IG15
- ;; size=32 bbWeight=4 PerfScore 42.00
-G_M33243_IG14:
- test esi, esi
- jne G_M33243_IG18
- xor r8, r8
- xor esi, esi
- ;; size=13 bbWeight=4 PerfScore 7.00
-G_M33243_IG15:
- cmp esi, 3
- jl SHORT G_M33243_IG16
- mov rsi, 0xD1FFAB1E ; static handle
- movzx rdx, word ptr [r8]
- movzx r8, word ptr [r8+0x01]
- movzx rcx, word ptr [rsi]
- movzx rsi, word ptr [rsi+0x01]
- xor edx, ecx
- xor r8d, esi
- or r8d, edx
- sete r8b
- movzx r8, r8b
- test r8d, r8d
- je SHORT G_M33243_IG16
- mov byte ptr [rbp-0x1C], 3
- mov r8d, dword ptr [rbp-0x28]
- add r8d, -3
- mov dword ptr [rbp-0x28], r8d
- ;; size=68 bbWeight=4 PerfScore 64.00
-G_M33243_IG16:
+ lea rdi, [rbp-0x30]
+ mov rax, 0xD1FFAB1E ; code for System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this
+ call [rax]System.Text.Json.Serialization.ReadBufferState:ProcessReadBytes():this
lea r8, [rbp-0x110]
lea rsi, [rbp-0x30]
lea rdx, [rbp-0x108]
lea rcx, [rbp-0xD0]
mov rdi, r15
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:ContinueDeserialize(byref,byref,byref,byref):ubyte:this
call [rax]System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:ContinueDeserialize(byref,byref,byref,byref):ubyte:this
test eax, eax
- je G_M33243_IG05
- ;; size=48 bbWeight=8 PerfScore 54.00
-G_M33243_IG17:
+ je SHORT G_M33243_IG05
+ ;; size=60 bbWeight=8 PerfScore 84.00
+G_M33243_IG11:
vmovsd xmm0, qword ptr [rbp-0x110]
vmovsd qword ptr [rbp-0x118], xmm0
- jmp SHORT G_M33243_IG19
+ jmp SHORT G_M33243_IG13
;; size=18 bbWeight=1 PerfScore 6.00
-G_M33243_IG18:
+G_M33243_IG12:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M33243_IG19:
+G_M33243_IG13:
lea rdi, [rbp-0x30]
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Serialization.ReadBufferState:Dispose():this
call [rax]System.Text.Json.Serialization.ReadBufferState:Dispose():this
vmovsd xmm0, qword ptr [rbp-0x118]
;; size=24 bbWeight=1 PerfScore 6.75
-G_M33243_IG20:
+G_M33243_IG14:
add rsp, 264
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=14 bbWeight=1 PerfScore 3.25
-G_M33243_IG21:
+G_M33243_IG15:
push rbp
push r15
push r14
push rbx
push rax
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x120]
;; size=21 bbWeight=0 PerfScore 0.00
-G_M33243_IG22:
+G_M33243_IG16:
lea rdi, [rbp-0x30]
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Serialization.ReadBufferState:Dispose():this
call [rax]System.Text.Json.Serialization.ReadBufferState:Dispose():this
nop
;; size=17 bbWeight=0 PerfScore 0.00
-G_M33243_IG23:
+G_M33243_IG17:
add rsp, 8
pop rbx
pop r14
pop r15
pop rbp
ret
;; size=11 bbWeight=0 PerfScore 0.00
-; Total bytes of code 591, prolog size 101, PerfScore 643.17, instruction count 149, allocated bytes for code 591 (MethodHash=675d7e24) for method System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double:this (FullOpts)
+; Total bytes of code 456, prolog size 101, PerfScore 440.17, instruction count 114, allocated bytes for code 456 (MethodHash=675d7e24) for method System.Text.Json.Serialization.Metadata.JsonTypeInfo`1[double]:Deserialize(System.IO.Stream):double: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/082b9d2f6c57df32a6bd0dd4b0d6aa18 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 19 minutes 13 seconds.
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: