forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JitDiff X64] [EgorBo] JIT: Relax unrolling for structs with gc refs #986
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/d0ef41251683d11c8b71f2905eacb863 |
Top method improvements-104 (-7.61 % of base) - System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest:CreateFromHash(System.ReadOnlyMemory`1[ubyte],System.Security.Cryptography.Oid,System.Security.Cryptography.Oid,System.Nullable`1[System.ReadOnlyMemory`1[ubyte]],ubyte,System.Security.Cryptography.X509Certificates.X509ExtensionCollection):System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest ; Assembly listing for method System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest:CreateFromHash(System.ReadOnlyMemory`1[ubyte],System.Security.Cryptography.Oid,System.Security.Cryptography.Oid,System.Nullable`1[System.ReadOnlyMemory`1[ubyte]],ubyte,System.Security.Cryptography.X509Certificates.X509ExtensionCollection):System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 27 single block inlinees; 11 inlinees without PGO data
; Final local variable assignments
;
; V00 arg0 [V00,T24] ( 3, 3 ) struct (16) [rbp-0x38] do-not-enreg[SA] multireg-arg single-def <System.ReadOnlyMemory`1[ubyte]>
; V01 arg1 [V01,T23] ( 3, 3 ) ref -> r14 class-hnd single-def <System.Security.Cryptography.Oid>
; V02 arg2 [V02,T16] ( 4, 3.50) ref -> r15 class-hnd single-def <System.Security.Cryptography.Oid>
; V03 arg3 [V03,T28] ( 4, 4 ) struct (24) [rbp+0x10] do-not-enreg[SF] ld-addr-op single-def <System.Nullable`1[System.ReadOnlyMemory`1[ubyte]]>
; V04 arg4 [V04,T25] ( 3, 3 ) ubyte -> r13 single-def
; V05 arg5 [V05,T05] ( 6, 11.50) ref -> rbx class-hnd single-def <System.Security.Cryptography.X509Certificates.X509ExtensionCollection>
; V06 loc0 [V06 ] ( 15, 17.50) struct (96) [rbp-0x98] do-not-enreg[XHS] must-init addr-exposed hidden-struct-arg ld-addr-op <System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq>
;* V07 loc1 [V07 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def <System.Formats.Asn1.AsnWriter>
;* V08 loc2 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlyMemory`1[ubyte]>
;* V09 loc3 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlySpan`1[ubyte]>
; V10 loc4 [V10,T35] ( 6, 3 ) ref -> r12 class-hnd exact single-def <ubyte[]>
; V11 loc5 [V11,T18] ( 9, 4.50) int -> rax
; V12 loc6 [V12,T36] ( 3, 3 ) struct (96) [rbp-0xF8] do-not-enreg[SF] must-init ld-addr-op <System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq>
; V13 loc7 [V13,T29] ( 4, 4 ) struct (48) [rbp-0x128] do-not-enreg[SF] must-init ld-addr-op <System.Security.Cryptography.Pkcs.Asn1.MessageImprint>
;* V14 loc8 [V14,T53] ( 0, 0 ) int -> zero-ref
;# V15 OutArgs [V15 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
; V16 tmp1 [V16,T30] ( 2, 4 ) struct (24) [rbp-0x140] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Nullable`1[System.ReadOnlyMemory`1[ubyte]]>
;* V17 tmp2 [V17 ] ( 0, 0 ) byref -> zero-ref
;* V18 tmp3 [V18 ] ( 0, 0 ) byref -> zero-ref
-; V19 tmp4 [V19,T38] ( 3, 2 ) ref -> r15
+; V19 tmp4 [V19,T38] ( 3, 2 ) ref -> rdi
; V20 tmp5 [V20,T07] ( 5, 10 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.Formats.Asn1.AsnWriter>
;* V21 tmp6 [V21 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlyMemory`1[ubyte]>
; V22 tmp7 [V22,T09] ( 4, 8 ) ref -> r15 class-hnd exact single-def "NewObj constructor temp" <System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest>
;* V23 tmp8 [V23 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewArr temp" <System.Security.Cryptography.Asn1.X509ExtensionAsn[]>
; V24 tmp9 [V24,T03] ( 3, 24 ) ref -> r15 class-hnd exact "impAppendStmt" <System.Security.Cryptography.Asn1.X509ExtensionAsn[]>
;* V25 tmp10 [V25 ] ( 0, 0 ) struct (32) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Security.Cryptography.Asn1.X509ExtensionAsn>
;* V26 tmp11 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewArr temp" <ubyte[]>
;* V27 tmp12 [V27 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
;* V28 tmp13 [V28 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlyMemory`1[ubyte]>
;* V29 tmp14 [V29 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlyMemory`1[ubyte]>
;* V30 tmp15 [V30 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ubyte]>
-; V31 tmp16 [V31,T26] ( 7, 3.50) byref -> [rbp-0x178] "Inline stloc first use temp"
+; V31 tmp16 [V31,T26] ( 7, 3.50) byref -> [rbp-0x170] "Inline stloc first use temp"
; V32 tmp17 [V32,T19] ( 9, 4.50) int -> [rbp-0x144] "Inline stloc first use temp"
;* V33 tmp18 [V33 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Object>
;* V34 tmp19 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V35 tmp20 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[ubyte]>
;* V36 tmp21 [V36 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Span`1[ubyte]>
;* V37 tmp22 [V37 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op single-def "Inline stloc first use temp" <System.Span`1[ubyte]>
; V38 tmp23 [V38,T46] ( 3, 1.50) long -> rsi single-def "Inline stloc first use temp"
;* V39 tmp24 [V39 ] ( 0, 0 ) int -> zero-ref single-def "Inline stloc first use temp"
;* V40 tmp25 [V40 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <ubyte[]>
;* V41 tmp26 [V41 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <ubyte[]>
; V42 tmp27 [V42,T39] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
;* V43 tmp28 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V44 tmp29 [V44 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.Span`1[ubyte]>
;* V45 tmp30 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
;* V46 tmp31 [V46 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.Span`1[ubyte]>
; V47 tmp32 [V47,T40] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
; V48 tmp33 [V48,T42] ( 2, 2 ) int -> rax "Inlining Arg"
;* V49 tmp34 [V49 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
;* V50 tmp35 [V50 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V51 tmp36 [V51 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V52 tmp37 [V52 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
;* V53 tmp38 [V53 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
;* V54 tmp39 [V54 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
;* V55 tmp40 [V55 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" <System.Object>
; V56 tmp41 [V56,T43] ( 2, 2 ) int -> rcx "Inlining Arg"
; V57 tmp42 [V57,T44] ( 2, 2 ) int -> rdx "Inlining Arg"
;* V58 tmp43 [V58 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.ReadOnlyMemory`1[ubyte]>
;* V59 tmp44 [V59 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Collections.Generic.List`1[System.Security.Cryptography.X509Certificates.X509Extension]>
; V60 tmp45 [V60,T01] ( 5, 40 ) ref -> rax class-hnd "Inlining Arg" <System.Security.Cryptography.X509Certificates.X509Extension>
;* V61 tmp46 [V61 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Security.Cryptography.Oid>
; V62 tmp47 [V62,T04] ( 3, 20 ) ref -> r12 class-hnd "Inlining Arg" <ubyte[]>
;* V63 tmp48 [V63 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
;* V64 tmp49 [V64 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Collections.Generic.List`1[System.Security.Cryptography.X509Certificates.X509Extension]>
; V65 tmp50 [V65,T14] ( 4, 6 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[]>
; V66 tmp51 [V66 ] ( 8, 10 ) struct (16) [rbp-0x158] do-not-enreg[SFA] multireg-arg must-init ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
; V67 tmp52 [V67,T27] ( 8, 4 ) ref -> r12 single-def "field V08._object (fldOffset=0x0)" P-INDEP
; V68 tmp53 [V68,T47] ( 3, 1.50) int -> [rbp-0x15C] spill-single-def "field V08._index (fldOffset=0x8)" P-INDEP
; V69 tmp54 [V69,T37] ( 5, 2.50) int -> [rbp-0x160] spill-single-def "field V08._length (fldOffset=0xc)" P-INDEP
; V70 tmp55 [V70,T17] ( 4, 5.50) byref -> rdi single-def "field V09._reference (fldOffset=0x0)" P-INDEP
; V71 tmp56 [V71,T13] ( 5, 6 ) int -> r8 single-def "field V09._length (fldOffset=0x8)" P-INDEP
;* V72 tmp57 [V72 ] ( 0, 0 ) ref -> zero-ref "field V21._object (fldOffset=0x0)" P-INDEP
;* V73 tmp58 [V73 ] ( 0, 0 ) int -> zero-ref "field V21._index (fldOffset=0x8)" P-INDEP
;* V74 tmp59 [V74 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0xc)" P-INDEP
;* V75 tmp60 [V75 ] ( 0, 0 ) byref -> zero-ref "field V27._reference (fldOffset=0x0)" P-INDEP
;* V76 tmp61 [V76 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
;* V77 tmp62 [V77 ] ( 0, 0 ) ref -> zero-ref "field V28._object (fldOffset=0x0)" P-INDEP
;* V78 tmp63 [V78 ] ( 0, 0 ) int -> zero-ref "field V28._index (fldOffset=0x8)" P-INDEP
;* V79 tmp64 [V79 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0xc)" P-INDEP
;* V80 tmp65 [V80 ] ( 0, 0 ) ref -> zero-ref "field V29._object (fldOffset=0x0)" P-INDEP
;* V81 tmp66 [V81 ] ( 0, 0 ) int -> zero-ref "field V29._index (fldOffset=0x8)" P-INDEP
;* V82 tmp67 [V82 ] ( 0, 0 ) int -> zero-ref "field V29._length (fldOffset=0xc)" P-INDEP
;* V83 tmp68 [V83 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP
;* V84 tmp69 [V84 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP
;* V85 tmp70 [V85,T52] ( 0, 0 ) byref -> zero-ref single-def "field V34._reference (fldOffset=0x0)" P-INDEP
;* V86 tmp71 [V86,T54] ( 0, 0 ) int -> zero-ref single-def "field V34._length (fldOffset=0x8)" P-INDEP
;* V87 tmp72 [V87 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-DEP
;* V88 tmp73 [V88 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-DEP
; V89 tmp74 [V89,T49] ( 2, 1 ) byref -> rax "field V37._reference (fldOffset=0x0)" P-INDEP
; V90 tmp75 [V90,T50] ( 2, 1 ) int -> rsi "field V37._length (fldOffset=0x8)" P-INDEP
;* V91 tmp76 [V91 ] ( 0, 0 ) byref -> zero-ref single-def "field V43._reference (fldOffset=0x0)" P-INDEP
;* V92 tmp77 [V92 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP
;* V93 tmp78 [V93 ] ( 0, 0 ) byref -> zero-ref "field V44._reference (fldOffset=0x0)" P-INDEP
;* V94 tmp79 [V94 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP
;* V95 tmp80 [V95 ] ( 0, 0 ) byref -> zero-ref single-def "field V45._reference (fldOffset=0x0)" P-INDEP
;* V96 tmp81 [V96 ] ( 0, 0 ) int -> zero-ref single-def "field V45._length (fldOffset=0x8)" P-INDEP
;* V97 tmp82 [V97 ] ( 0, 0 ) byref -> zero-ref "field V46._reference (fldOffset=0x0)" P-INDEP
;* V98 tmp83 [V98 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x8)" P-INDEP
;* V99 tmp84 [V99 ] ( 0, 0 ) byref -> zero-ref single-def "field V49._reference (fldOffset=0x0)" P-INDEP
;* V100 tmp85 [V100 ] ( 0, 0 ) int -> zero-ref single-def "field V49._length (fldOffset=0x8)" P-INDEP
;* V101 tmp86 [V101 ] ( 0, 0 ) ref -> zero-ref single-def "field V53._object (fldOffset=0x0)" P-INDEP
;* V102 tmp87 [V102 ] ( 0, 0 ) int -> zero-ref single-def "field V53._index (fldOffset=0x8)" P-INDEP
; V103 tmp88 [V103,T51] ( 2, 1 ) int -> rcx single-def "field V53._length (fldOffset=0xc)" P-INDEP
;* V104 tmp89 [V104 ] ( 0, 0 ) ref -> zero-ref single-def "field V54._object (fldOffset=0x0)" P-INDEP
;* V105 tmp90 [V105 ] ( 0, 0 ) int -> zero-ref single-def "field V54._index (fldOffset=0x8)" P-INDEP
;* V106 tmp91 [V106 ] ( 0, 0 ) int -> zero-ref single-def "field V54._length (fldOffset=0xc)" P-INDEP
;* V107 tmp92 [V107 ] ( 0, 0 ) ref -> zero-ref "field V58._object (fldOffset=0x0)" P-INDEP
;* V108 tmp93 [V108 ] ( 0, 0 ) int -> zero-ref "field V58._index (fldOffset=0x8)" P-INDEP
;* V109 tmp94 [V109 ] ( 0, 0 ) int -> zero-ref "field V58._length (fldOffset=0xc)" P-INDEP
; V110 tmp95 [V110,T08] ( 4, 10 ) ref -> r12 "field V63._object (fldOffset=0x0)" P-INDEP
;* V111 tmp96 [V111 ] ( 0, 0 ) int -> zero-ref "field V63._index (fldOffset=0x8)" P-INDEP
; V112 tmp97 [V112,T10] ( 3, 8 ) int -> [rbp-0x164] "field V63._length (fldOffset=0xc)" P-INDEP
; V113 tmp98 [V113,T20] ( 4, 5 ) ref -> [rbp-0x158] do-not-enreg[] "field V66._object (fldOffset=0x0)" P-DEP
; V114 tmp99 [V114,T21] ( 4, 5 ) int -> [rbp-0x150] do-not-enreg[] "field V66._index (fldOffset=0x8)" P-DEP
; V115 tmp100 [V115,T22] ( 4, 5 ) int -> [rbp-0x14C] do-not-enreg[] "field V66._length (fldOffset=0xc)" P-DEP
; V116 tmp101 [V116,T34] ( 4, 3.50) ubyte -> registers "V03.[000..001)"
-; V117 tmp102 [V117,T31] ( 5, 3.50) ref -> [rbp-0x180] "V03.[008..016)"
-; V118 tmp103 [V118,T32] ( 5, 3.50) int -> [rbp-0x168] "V03.[016..020)"
-; V119 tmp104 [V119,T33] ( 5, 3.50) int -> [rbp-0x16C] "V03.[020..024)"
+; V117 tmp102 [V117,T31] ( 5, 3.50) ref -> registers "V03.[008..016)"
+; V118 tmp103 [V118,T32] ( 5, 3.50) int -> registers "V03.[016..020)"
+; V119 tmp104 [V119,T33] ( 5, 3.50) int -> registers "V03.[020..024)"
;* V120 tmp105 [V120 ] ( 0, 0 ) ref -> zero-ref single-def "V12.[000..008)"
;* V121 tmp106 [V121 ] ( 0, 0 ) int -> zero-ref single-def "V12.[016..020)"
-; V122 tmp107 [V122,T45] ( 2, 2 ) ubyte -> r13 single-def "V12.[020..021)"
+; V122 tmp107 [V122,T45] ( 2, 2 ) ubyte -> r8 single-def "V12.[020..021)"
;* V123 tmp108 [V123 ] ( 0, 0 ) ref -> zero-ref single-def "V12.[024..032)"
;* V124 tmp109 [V124 ] ( 0, 0 ) ubyte -> zero-ref single-def "V12.[032..033)"
;* V125 tmp110 [V125 ] ( 0, 0 ) ubyte -> zero-ref single-def "V12.[072..073)"
;* V126 tmp111 [V126 ] ( 0, 0 ) ref -> zero-ref single-def "V12.[080..088)"
;* V127 tmp112 [V127 ] ( 0, 0 ) int -> zero-ref single-def "V12.[088..092)"
;* V128 tmp113 [V128 ] ( 0, 0 ) int -> zero-ref single-def "V12.[092..096)"
-; V129 tmp114 [V129,T41] ( 2, 2 ) ref -> r14 single-def "V13.[000..008)"
+; V129 tmp114 [V129,T41] ( 2, 2 ) ref -> rsi single-def "V13.[000..008)"
;* V130 tmp115 [V130 ] ( 0, 0 ) ubyte -> zero-ref single-def "V13.[008..009)"
;* V131 tmp116 [V131 ] ( 0, 0 ) ubyte -> zero-ref "V16.[000..001)"
; V132 tmp117 [V132,T11] ( 2, 8 ) ref -> rsi "V25.[000..008)"
; V133 tmp118 [V133,T12] ( 2, 8 ) ubyte -> r13 "V25.[008..009)"
;* V134 tmp119 [V134 ] ( 0, 0 ) ref -> zero-ref "V25.[016..024)"
;* V135 tmp120 [V135 ] ( 0, 0 ) int -> zero-ref "V25.[024..028)"
;* V136 tmp121 [V136 ] ( 0, 0 ) int -> zero-ref "V25.[028..032)"
; V137 tmp122 [V137,T00] ( 6, 48 ) byref -> r15 "Spilling address for field-by-field copy"
; V138 cse0 [V138,T48] ( 3, 1.50) int -> r15 "CSE #07: conservative"
; V139 rat0 [V139,T06] ( 6, 13 ) long -> rax "Widened IV V11"
; V140 rat1 [V140,T02] ( 7, 24.50) long -> r14 "Widened IV V14"
; V141 rat2 [V141,T15] ( 3, 6 ) byref -> rdi "ReplaceWithLclVar is creating a new local variable"
;
-; Lcl frame size = 344
+; Lcl frame size = 328
G_M29481_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 344
- lea rbp, [rsp+0x180]
+ sub rsp, 328
+ lea rbp, [rsp+0x170]
xor eax, eax
mov qword ptr [rbp-0x158], rax
vxorps xmm8, xmm8, xmm8
vmovdqu32 zmmword ptr [rbp-0x150], zmm8
vmovdqu32 zmmword ptr [rbp-0x110], zmm8
vmovdqu32 zmmword ptr [rbp-0xD0], zmm8
vmovdqu32 zmmword ptr [rbp-0x90], zmm8
vmovdqa xmmword ptr [rbp-0x50], xmm8
mov qword ptr [rbp-0x40], rax
mov gword ptr [rbp-0x38], rdi
mov qword ptr [rbp-0x30], rsi
mov r14, rdx
mov r15, rcx
mov r13d, r8d
mov rbx, r9
;; size=108 bbWeight=1 PerfScore 22.33
G_M29481_IG02:
movzx r12, byte ptr [rbp+0x10]
mov rax, gword ptr [rbp+0x18]
mov ecx, dword ptr [rbp+0x20]
mov edx, dword ptr [rbp+0x24]
test r12d, r12d
je G_M29481_IG16
;; size=24 bbWeight=1 PerfScore 5.25
G_M29481_IG03:
mov r12, rax
mov dword ptr [rbp-0x15C], ecx
mov dword ptr [rbp-0x160], edx
xor rax, rax
xor esi, esi
test r12, r12
je SHORT G_M29481_IG06
mov rdi, qword ptr [r12]
test dword ptr [rdi], 0xD1FFAB1E
jne SHORT G_M29481_IG04
mov rdi, r12
mov rax, qword ptr [r12]
mov rax, qword ptr [rax+0x40]
call [rax+0x28]System.Buffers.MemoryManager`1[ubyte]:GetSpan():System.Span`1[ubyte]:this
mov esi, edx
mov ecx, esi
mov rdi, rax
mov eax, ecx
jmp SHORT G_M29481_IG05
;; size=61 bbWeight=0.50 PerfScore 10.12
G_M29481_IG04:
lea rax, bword ptr [r12+0x10]
mov rdi, rax
mov eax, dword ptr [r12+0x08]
;; size=13 bbWeight=0.50 PerfScore 1.38
G_M29481_IG05:
mov ecx, dword ptr [rbp-0x15C]
mov esi, ecx
and esi, 0xD1FFAB1E
mov edx, dword ptr [rbp-0x160]
mov r8d, edx
add r8, rsi
mov eax, eax
cmp r8, rax
- ja G_M29481_IG38
+ ja G_M29481_IG40
add rdi, rsi
mov eax, edx
mov esi, eax
mov rax, rdi
;; size=47 bbWeight=0.50 PerfScore 2.75
G_M29481_IG06:
- mov bword ptr [rbp-0x178], rax
+ mov bword ptr [rbp-0x170], rax
mov rdi, rax
mov r8d, esi
test r8d, r8d
je SHORT G_M29481_IG13
cmp byte ptr [rdi], 128
jae SHORT G_M29481_IG13
xor eax, eax
jmp SHORT G_M29481_IG08
;; size=27 bbWeight=0.50 PerfScore 4.50
G_M29481_IG07:
inc eax
;; size=2 bbWeight=2 PerfScore 0.50
G_M29481_IG08:
cmp eax, r8d
jge SHORT G_M29481_IG09
cmp byte ptr [rdi+rax], 0
je SHORT G_M29481_IG07
;; size=11 bbWeight=4 PerfScore 21.00
G_M29481_IG09:
cmp eax, r8d
je SHORT G_M29481_IG10
cmp eax, r8d
- jae G_M29481_IG39
+ jae G_M29481_IG41
mov esi, eax
cmp byte ptr [rdi+rsi], 128
jb SHORT G_M29481_IG11
;; size=22 bbWeight=0.50 PerfScore 3.38
G_M29481_IG10:
dec eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M29481_IG11:
mov edx, dword ptr [rbp-0x160]
cmp eax, edx
ja SHORT G_M29481_IG12
mov ecx, eax
add ecx, dword ptr [rbp-0x15C]
sub edx, eax
mov eax, ecx
mov ecx, edx
- mov gword ptr [rbp-0x180], r12
- mov dword ptr [rbp-0x168], eax
- mov dword ptr [rbp-0x16C], ecx
+ mov esi, eax
+ mov edi, ecx
jmp G_M29481_IG15
- ;; size=48 bbWeight=0.50 PerfScore 5.12
+ ;; size=33 bbWeight=0.50 PerfScore 3.88
G_M29481_IG12:
mov edi, 33
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M29481_IG13:
mov dword ptr [rbp-0x144], esi
lea edi, [rsi+0x01]
movsxd rsi, edi
mov rdi, 0xD1FFAB1E ; ubyte[]
call CORINFO_HELP_NEWARR_1_VC
mov r12, rax
cmp dword ptr [r12+0x08], 0
- je G_M29481_IG38
+ je G_M29481_IG40
lea rdi, bword ptr [r12+0x11]
mov eax, dword ptr [r12+0x08]
dec eax
mov ecx, dword ptr [rbp-0x144]
cmp ecx, eax
jbe SHORT G_M29481_IG14
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
call [rax]System.ThrowHelper:ThrowArgumentException_DestinationTooShort()
int3
;; size=77 bbWeight=0.50 PerfScore 7.88
G_M29481_IG14:
mov edx, ecx
- mov rsi, bword ptr [rbp-0x178]
+ mov rsi, bword ptr [rbp-0x170]
mov rax, 0xD1FFAB1E ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
call [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
mov ecx, dword ptr [r12+0x08]
- mov gword ptr [rbp-0x180], r12
xor eax, eax
- mov dword ptr [rbp-0x168], eax
- mov dword ptr [rbp-0x16C], ecx
- ;; size=47 bbWeight=0.50 PerfScore 4.88
+ xor esi, esi
+ mov edi, ecx
+ ;; size=32 bbWeight=0.50 PerfScore 3.62
G_M29481_IG15:
- mov r8d, 1
+ mov eax, 1
+ mov ecx, esi
+ mov edx, edi
+ mov r8d, eax
+ mov rax, r12
mov r12d, r8d
- mov rax, gword ptr [rbp-0x180]
- mov ecx, dword ptr [rbp-0x168]
- mov edx, dword ptr [rbp-0x16C]
- ;; size=28 bbWeight=0.50 PerfScore 1.75
+ ;; size=18 bbWeight=0.50 PerfScore 0.75
G_M29481_IG16:
vxorps ymm0, ymm0, ymm0
vmovdqu32 zmmword ptr [rbp-0xF8], zmm0
vmovdqu ymmword ptr [rbp-0xB8], ymm0
vxorps ymm0, ymm0, ymm0
vmovdqu ymmword ptr [rbp-0x128], ymm0
vmovdqu xmmword ptr [rbp-0x108], xmm0
- mov r14, gword ptr [r14+0x08]
+ mov rsi, gword ptr [r14+0x08]
mov rdi, 0xD1FFAB1E ; box for System.Security.Cryptography.Asn1.AlgorithmIdentifierAsn:ExplicitDerNull
mov rdi, gword ptr [rdi]
;; size=59 bbWeight=1 PerfScore 8.92
G_M29481_IG17:
vmovdqu xmm0, xmmword ptr [rdi+0x08]
vmovdqu xmmword ptr [rbp-0x138], xmm0
;; size=13 bbWeight=1 PerfScore 5.00
G_M29481_IG18:
vmovdqu xmm0, xmmword ptr [rbp-0x140]
vmovdqu xmmword ptr [rbp-0x120], xmm0
mov rdi, qword ptr [rbp-0x130]
mov qword ptr [rbp-0x110], rdi
;; size=30 bbWeight=1 PerfScore 6.00
G_M29481_IG19:
vmovdqu xmm0, xmmword ptr [rbp-0x38]
vmovdqu xmmword ptr [rbp-0x108], xmm0
;; size=13 bbWeight=1 PerfScore 4.00
G_M29481_IG20:
vmovdqu ymm0, ymmword ptr [rbp-0x128]
vmovdqu ymmword ptr [rbp-0xE0], ymm0
vmovdqu xmm0, xmmword ptr [rbp-0x108]
vmovdqu xmmword ptr [rbp-0xC0], xmm0
;; size=32 bbWeight=1 PerfScore 9.00
G_M29481_IG21:
test r15, r15
je SHORT G_M29481_IG23
;; size=5 bbWeight=1 PerfScore 1.25
G_M29481_IG22:
- mov r15, gword ptr [r15+0x08]
- mov gword ptr [rbp-0x180], rax
- mov dword ptr [rbp-0x168], ecx
- mov dword ptr [rbp-0x16C], edx
+ mov rdi, gword ptr [r15+0x08]
jmp SHORT G_M29481_IG24
- ;; size=25 bbWeight=0.50 PerfScore 3.50
+ ;; size=6 bbWeight=0.50 PerfScore 2.00
G_M29481_IG23:
- xor r15, r15
- mov gword ptr [rbp-0x180], rax
- mov dword ptr [rbp-0x168], ecx
- mov dword ptr [rbp-0x16C], edx
- ;; size=22 bbWeight=0.50 PerfScore 1.62
+ xor rdi, rdi
+ ;; size=2 bbWeight=0.50 PerfScore 0.12
G_M29481_IG24:
- movzx r13, r13b
- mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_BULK_WRITEBARRIER
- lea rdi, bword ptr [rbp-0x98]
- lea rsi, [rbp-0xF8]
- mov edx, 96
- vzeroupper
- call [r8]CORINFO_HELP_BULK_WRITEBARRIER
- mov gword ptr [rbp-0x98], r15
+ movzx r8, r13b
+ ;; size=4 bbWeight=1 PerfScore 0.25
+G_M29481_IG25:
+ vmovdqu32 zmm0, zmmword ptr [rbp-0xF8]
+ vmovdqu32 zmmword ptr [rbp-0x98], zmm0
+ vmovdqu ymm0, ymmword ptr [rbp-0xB8]
+ vmovdqu ymmword ptr [rbp-0x58], ymm0
+ ;; size=33 bbWeight=1 PerfScore 9.00
+G_M29481_IG26:
+ mov gword ptr [rbp-0x98], rdi
mov dword ptr [rbp-0x88], 1
- mov byte ptr [rbp-0x84], r13b
- mov gword ptr [rbp-0x80], r14
+ mov byte ptr [rbp-0x84], r8b
+ mov gword ptr [rbp-0x80], rsi
mov byte ptr [rbp-0x78], 1
mov byte ptr [rbp-0x50], r12b
- mov r12, gword ptr [rbp-0x180]
- mov gword ptr [rbp-0x48], r12
- mov r15d, dword ptr [rbp-0x168]
- mov dword ptr [rbp-0x40], r15d
- mov r15d, dword ptr [rbp-0x16C]
- mov dword ptr [rbp-0x3C], r15d
+ mov gword ptr [rbp-0x48], rax
+ mov dword ptr [rbp-0x40], ecx
+ mov dword ptr [rbp-0x3C], edx
test rbx, rbx
- je G_M29481_IG30
- ;; size=117 bbWeight=1 PerfScore 19.00
-G_M29481_IG25:
+ je G_M29481_IG32
+ ;; size=55 bbWeight=1 PerfScore 10.25
+G_M29481_IG27:
mov rsi, gword ptr [rbx+0x08]
mov r15d, dword ptr [rsi+0x10]
movsxd rsi, r15d
mov rdi, 0xD1FFAB1E ; System.Security.Cryptography.Asn1.X509ExtensionAsn[]
call CORINFO_HELP_NEWARR_1_VC
mov gword ptr [rbp-0x90], rax
xor r14d, r14d
test r15d, r15d
- jle G_M29481_IG30
+ jle G_M29481_IG32
;; size=45 bbWeight=0.50 PerfScore 4.00
-G_M29481_IG26:
+G_M29481_IG28:
mov r15, gword ptr [rbp-0x90]
mov rdi, rbx
mov esi, r14d
mov rax, 0xD1FFAB1E ; code for System.Security.Cryptography.X509Certificates.X509ExtensionCollection:get_Item(int):System.Security.Cryptography.X509Certificates.X509Extension:this
call [rax]System.Security.Cryptography.X509Certificates.X509ExtensionCollection:get_Item(int):System.Security.Cryptography.X509Certificates.X509Extension:this
test rax, rax
- je G_M29481_IG37
+ je G_M29481_IG39
mov rdi, gword ptr [rax+0x08]
mov rsi, gword ptr [rdi+0x08]
movzx r13, byte ptr [rax+0x18]
mov r12, gword ptr [rax+0x10]
test r12, r12
- je SHORT G_M29481_IG28
+ je SHORT G_M29481_IG30
;; size=56 bbWeight=4 PerfScore 61.00
-G_M29481_IG27:
+G_M29481_IG29:
mov eax, dword ptr [r12+0x08]
mov dword ptr [rbp-0x164], eax
- jmp SHORT G_M29481_IG29
+ jmp SHORT G_M29481_IG31
;; size=13 bbWeight=2 PerfScore 10.00
-G_M29481_IG28:
+G_M29481_IG30:
xor r12, r12
xor eax, eax
mov dword ptr [rbp-0x164], eax
;; size=11 bbWeight=2 PerfScore 3.00
-G_M29481_IG29:
+G_M29481_IG31:
cmp r14d, dword ptr [r15+0x08]
- jae G_M29481_IG39
+ jae G_M29481_IG41
mov rdi, r14
shl rdi, 5
lea r15, bword ptr [r15+rdi+0x10]
mov rdi, r15
call CORINFO_HELP_ASSIGN_REF
mov byte ptr [r15+0x08], r13b
lea rdi, bword ptr [r15+0x10]
mov rsi, r12
call CORINFO_HELP_ASSIGN_REF
xor edi, edi
mov dword ptr [r15+0x18], edi
mov r13d, dword ptr [rbp-0x164]
mov dword ptr [r15+0x1C], r13d
inc r14d
mov rdi, gword ptr [rbx+0x08]
cmp r14d, dword ptr [rdi+0x10]
- jl G_M29481_IG26
+ jl G_M29481_IG28
;; size=80 bbWeight=4 PerfScore 77.00
-G_M29481_IG30:
+G_M29481_IG32:
mov rdi, 0xD1FFAB1E ; System.Formats.Asn1.AsnWriter
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov dword ptr [rbx+0x20], 2
lea rdi, [rbp-0x98]
mov rsi, rbx
mov rax, 0xD1FFAB1E ; code for System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq:Encode(System.Formats.Asn1.AsnWriter):this
call [rax]System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq:Encode(System.Formats.Asn1.AsnWriter):this
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Formats.Asn1.AsnWriter:Encode():ubyte[]:this
call [rax]System.Formats.Asn1.AsnWriter:Encode():ubyte[]:this
test rax, rax
- je SHORT G_M29481_IG32
+ je SHORT G_M29481_IG34
;; size=67 bbWeight=1 PerfScore 11.25
-G_M29481_IG31:
+G_M29481_IG33:
mov gword ptr [rbp-0x158], rax
xor esi, esi
mov dword ptr [rbp-0x150], esi
mov esi, dword ptr [rax+0x08]
mov dword ptr [rbp-0x14C], esi
- jmp SHORT G_M29481_IG35
+ jmp SHORT G_M29481_IG37
;; size=26 bbWeight=0.50 PerfScore 3.62
-G_M29481_IG32:
+G_M29481_IG34:
xor rsi, rsi
mov gword ptr [rbp-0x158], rsi
;; size=9 bbWeight=0.50 PerfScore 0.62
-G_M29481_IG33:
+G_M29481_IG35:
mov dword ptr [rbp-0x150], esi
;; size=6 bbWeight=0.50 PerfScore 0.50
-G_M29481_IG34:
+G_M29481_IG36:
mov dword ptr [rbp-0x14C], esi
;; size=6 bbWeight=0.50 PerfScore 0.50
-G_M29481_IG35:
+G_M29481_IG37:
mov rsi, gword ptr [rbp-0x158]
mov rdx, qword ptr [rbp-0x150]
lea rdi, [rbp-0x98]
mov ecx, 2
mov rax, 0xD1FFAB1E ; code for System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq:Decode(System.ReadOnlyMemory`1[ubyte],int):System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq
call [rax]System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq:Decode(System.ReadOnlyMemory`1[ubyte],int):System.Security.Cryptography.Pkcs.Asn1.Rfc3161TimeStampReq
mov rdi, 0xD1FFAB1E ; System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Formats.Asn1.AsnWriter:Encode():ubyte[]:this
call [rax]System.Formats.Asn1.AsnWriter:Encode():ubyte[]:this
lea rdi, bword ptr [r15+0x08]
mov rsi, rax
call CORINFO_HELP_ASSIGN_REF
lea rdi, bword ptr [r15+0x20]
cmp byte ptr [rdi], dil
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_BULK_WRITEBARRIER
lea rsi, [rbp-0x98]
mov edx, 96
vzeroupper
call [rax]CORINFO_HELP_BULK_WRITEBARRIER
mov rax, r15
;; size=120 bbWeight=1 PerfScore 21.50
-G_M29481_IG36:
+G_M29481_IG38:
vzeroupper
- add rsp, 344
+ add rsp, 328
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=21 bbWeight=1 PerfScore 5.25
-G_M29481_IG37:
+G_M29481_IG39:
mov edi, 0x2308
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.ArgumentNullException:Throw(System.String)
call [rax]System.ArgumentNullException:Throw(System.String)
int3
;; size=36 bbWeight=0.50 PerfScore 2.62
-G_M29481_IG38:
+G_M29481_IG40:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0.50 PerfScore 1.75
-G_M29481_IG39:
+G_M29481_IG41:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1366, prolog size 108, PerfScore 353.75, instruction count 300, allocated bytes for code 1366 (MethodHash=62718cd6) for method System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest:CreateFromHash(System.ReadOnlyMemory`1[ubyte],System.Security.Cryptography.Oid,System.Security.Cryptography.Oid,System.Nullable`1[System.ReadOnlyMemory`1[ubyte]],ubyte,System.Security.Cryptography.X509Certificates.X509ExtensionCollection):System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest (FullOpts)
+; Total bytes of code 1262, prolog size 108, PerfScore 347.75, instruction count 288, allocated bytes for code 1262 (MethodHash=62718cd6) for method System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest:CreateFromHash(System.ReadOnlyMemory`1[ubyte],System.Security.Cryptography.Oid,System.Security.Cryptography.Oid,System.Nullable`1[System.ReadOnlyMemory`1[ubyte]],ubyte,System.Security.Cryptography.X509Certificates.X509ExtensionCollection):System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest (FullOpts)
; ============================================================ -20 (-2.42 % of base) - System.Text.Json.ReadStack:Push():this ; Assembly listing for method System.Text.Json.ReadStack:Push():this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 14 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 34, 19 ) byref -> rbx this single-def
;* V01 loc0 [V01 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.Text.Json.Serialization.Metadata.JsonTypeInfo>
;* V02 loc1 [V02 ] ( 0, 0 ) struct ( 8) zero-ref <System.Nullable`1[int]>
;* V03 loc2 [V03 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
-; V04 loc3 [V04,T29] ( 3, 1.50) int -> rdi
+; V04 loc3 [V04,T27] ( 3, 1.50) int -> rdi
;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" <Empty>
-; V06 tmp1 [V06,T05] ( 3, 3 ) ref -> r15 class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame[]>
-; V07 tmp2 [V07,T18] ( 3, 3 ) int -> r14 "Strict ordering of exceptions for Array store"
-; V08 tmp3 [V08,T25] ( 2, 2 ) struct (112) [rbp-0x98] do-not-enreg[S] must-init "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame>
+; V06 tmp1 [V06,T05] ( 3, 3 ) ref -> rdi class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame[]>
+; V07 tmp2 [V07,T16] ( 3, 3 ) int -> rsi "Strict ordering of exceptions for Array store"
+; V08 tmp3 [V08,T23] ( 2, 2 ) struct (112) [rbp-0x98] do-not-enreg[S] must-init "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame>
; V09 tmp4 [V09,T06] ( 3, 3 ) ref -> rdi class-hnd single-def "dup spill" <System.Text.Json.Serialization.Metadata.JsonPropertyInfo>
;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref single-def
-; V11 tmp6 [V11,T27] ( 3, 1.50) ref -> r15
-; V12 tmp7 [V12,T04] ( 6, 3 ) ref -> r15
-; V13 tmp8 [V13,T07] ( 3, 3 ) ref -> r13 class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame[]>
-; V14 tmp9 [V14,T19] ( 3, 3 ) int -> [rbp-0x9C] spill-single-def "Strict ordering of exceptions for Array store"
-; V15 tmp10 [V15,T26] ( 2, 2 ) struct (112) [rbp-0x110] do-not-enreg[S] must-init "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame>
+; V11 tmp6 [V11,T25] ( 3, 1.50) ref -> r14
+; V12 tmp7 [V12,T04] ( 6, 3 ) ref -> r14
+; V13 tmp8 [V13,T07] ( 3, 3 ) ref -> rdi class-hnd exact single-def "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame[]>
+; V14 tmp9 [V14,T17] ( 3, 3 ) int -> rsi "Strict ordering of exceptions for Array store"
+; V15 tmp10 [V15,T24] ( 2, 2 ) struct (112) [rbp-0x108] do-not-enreg[S] must-init "Strict ordering of exceptions for Array store" <System.Text.Json.ReadStackFrame>
;* V16 tmp11 [V16 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
; V17 tmp12 [V17,T08] ( 3, 3 ) byref -> rdi single-def "impAppendStmt"
;* V18 tmp13 [V18 ] ( 0, 0 ) byref -> zero-ref single-def
;* V19 tmp14 [V19 ] ( 0, 0 ) byref -> zero-ref
;* V20 tmp15 [V20 ] ( 0, 0 ) struct ( 8) zero-ref <System.Nullable`1[int]>
;* V21 tmp16 [V21 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt"
-; V22 tmp17 [V22,T33] ( 2, 1 ) byref -> rdi single-def
+; V22 tmp17 [V22,T31] ( 2, 1 ) byref -> rdi single-def
;* V23 tmp18 [V23 ] ( 0, 0 ) byref -> zero-ref
-; V24 tmp19 [V24,T22] ( 4, 2 ) int -> rax
+; V24 tmp19 [V24,T20] ( 4, 2 ) int -> rax
; V25 tmp20 [V25,T09] ( 3, 3 ) ref -> rax class-hnd exact single-def "dup spill" <System.Text.Json.Serialization.Metadata.PolymorphicTypeResolver>
;* V26 tmp21 [V26 ] ( 0, 0 ) byref -> zero-ref single-def
;* V27 tmp22 [V27 ] ( 0, 0 ) ref -> zero-ref single-def
-; V28 tmp23 [V28,T02] ( 4, 4 ) ref -> r15 class-hnd single-def "dup spill" <System.Text.Json.Serialization.Metadata.JsonTypeInfo>
-; V29 tmp24 [V29,T23] ( 2, 2 ) ref -> rdi class-hnd single-def "Inlining Arg" <System.Text.Json.Serialization.Metadata.JsonParameterInfo>
+; V28 tmp23 [V28,T02] ( 4, 4 ) ref -> r14 class-hnd single-def "dup spill" <System.Text.Json.Serialization.Metadata.JsonTypeInfo>
+; V29 tmp24 [V29,T21] ( 2, 2 ) ref -> rdi class-hnd single-def "Inlining Arg" <System.Text.Json.Serialization.Metadata.JsonParameterInfo>
;* V30 tmp25 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Text.Json.Serialization.Metadata.JsonPropertyInfo>
-; V31 tmp26 [V31,T03] ( 4, 4 ) ref -> r15 class-hnd single-def "dup spill" <System.Text.Json.Serialization.Metadata.JsonTypeInfo>
-; V32 tmp27 [V32,T24] ( 2, 2 ) ref -> rax class-hnd exact single-def "NewArr temp" <System.Text.Json.ReadStackFrame[]>
+; V31 tmp26 [V31,T03] ( 4, 4 ) ref -> r14 class-hnd single-def "dup spill" <System.Text.Json.Serialization.Metadata.JsonTypeInfo>
+; V32 tmp27 [V32,T22] ( 2, 2 ) ref -> rax class-hnd exact single-def "NewArr temp" <System.Text.Json.ReadStackFrame[]>
; V33 tmp28 [V33,T10] ( 3, 3 ) ref -> rax class-hnd single-def "Inlining Arg" <System.Text.Json.Serialization.Metadata.JsonPropertyInfo>
-; V34 tmp29 [V34,T28] ( 3, 1.50) byref -> rbx single-def "Inline stloc first use temp"
+; V34 tmp29 [V34,T26] ( 3, 1.50) byref -> rbx single-def "Inline stloc first use temp"
;* V35 tmp30 [V35 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "NewObj constructor temp" <System.Text.Json.ArgumentState>
;* V36 tmp31 [V36 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Text.Json.Serialization.Metadata.JsonTypeInfo>
-; V37 tmp32 [V37,T30] ( 3, 1.50) ubyte -> r14 "field V02.hasValue (fldOffset=0x0)" P-INDEP
-; V38 tmp33 [V38,T34] ( 2, 1 ) int -> r12 "field V02.value (fldOffset=0x4)" P-INDEP
+; V37 tmp32 [V37,T28] ( 3, 1.50) ubyte -> r13 "field V02.hasValue (fldOffset=0x0)" P-INDEP
+; V38 tmp33 [V38,T32] ( 2, 1 ) int -> r12 "field V02.value (fldOffset=0x4)" P-INDEP
;* V39 tmp34 [V39 ] ( 0, 0 ) ubyte -> zero-ref "field V03.hasValue (fldOffset=0x0)" P-INDEP
;* V40 tmp35 [V40 ] ( 0, 0 ) int -> zero-ref "field V03.value (fldOffset=0x4)" P-INDEP
-; V41 tmp36 [V41,T31] ( 3, 1.50) ubyte -> r14 "field V20.hasValue (fldOffset=0x0)" P-INDEP
-; V42 tmp37 [V42,T32] ( 3, 1.50) int -> r12 "field V20.value (fldOffset=0x4)" P-INDEP
+; V41 tmp36 [V41,T29] ( 3, 1.50) ubyte -> r13 "field V20.hasValue (fldOffset=0x0)" P-INDEP
+; V42 tmp37 [V42,T30] ( 3, 1.50) int -> r12 "field V20.value (fldOffset=0x4)" P-INDEP
; V43 tmp38 [V43,T11] ( 3, 3 ) ref -> rdi single-def "arr expr"
-; V44 tmp39 [V44,T20] ( 3, 3 ) int -> rsi "index expr"
-; V45 cse0 [V45,T01] ( 8, 4 ) byref -> [rbp-0x118] multi-def "CSE #02: aggressive"
-; V46 cse1 [V46,T21] ( 4, 2 ) ref -> rsi "CSE #01: moderate"
-; V47 rat0 [V47,T12] ( 3, 3 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
+; V44 tmp39 [V44,T18] ( 3, 3 ) int -> rsi "index expr"
+; V45 cse0 [V45,T01] ( 8, 4 ) byref -> r15 multi-def "CSE #02: aggressive"
+; V46 cse1 [V46,T19] ( 4, 2 ) ref -> rsi "CSE #01: moderate"
+; V47 rat0 [V47,T12] ( 3, 3 ) byref -> rdi "ReplaceWithLclVar is creating a new local variable"
; V48 rat1 [V48,T13] ( 3, 3 ) byref -> rdi "ReplaceWithLclVar is creating a new local variable"
-; V49 rat2 [V49,T14] ( 3, 3 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
-; V50 rat3 [V50,T15] ( 3, 3 ) byref -> rdi "ReplaceWithLclVar is creating a new local variable"
-; V51 rat4 [V51,T16] ( 3, 3 ) byref -> rdi "ReplaceWithLclVar is creating a new local variable"
-; V52 rat5 [V52,T17] ( 3, 3 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
+; V49 rat2 [V49,T14] ( 3, 3 ) byref -> rdi "ReplaceWithLclVar is creating a new local variable"
+; V50 rat3 [V50,T15] ( 3, 3 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
;
-; Lcl frame size = 248
+; Lcl frame size = 232
G_M50865_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 248
- vzeroupper
- lea rbp, [rsp+0x120]
- vxorps xmm8, xmm8, xmm8
- vmovdqu32 zmmword ptr [rbp-0x110], zmm8
- vmovdqu32 zmmword ptr [rbp-0xD0], zmm8
- vmovdqu32 zmmword ptr [rbp-0x90], zmm8
- vmovdqa xmmword ptr [rbp-0x50], xmm8
- vmovdqa xmmword ptr [rbp-0x40], xmm8
+ sub rsp, 232
+ lea rbp, [rsp+0x110]
xor eax, eax
+ mov qword ptr [rbp-0x108], rax
+ vxorps xmm8, xmm8, xmm8
+ vmovdqu32 zmmword ptr [rbp-0x100], zmm8
+ vmovdqu32 zmmword ptr [rbp-0xC0], zmm8
+ vmovdqu32 zmmword ptr [rbp-0x80], zmm8
+ vmovdqa xmmword ptr [rbp-0x40], xmm8
mov qword ptr [rbp-0x30], rax
mov rbx, rdi
- ;; size=82 bbWeight=1 PerfScore 19.58
+ ;; size=72 bbWeight=1 PerfScore 17.58
G_M50865_IG02:
cmp dword ptr [rbx+0x24], 0
- je G_M50865_IG05
+ je G_M50865_IG07
;; size=10 bbWeight=1 PerfScore 4.00
G_M50865_IG03:
mov edi, dword ptr [rbx+0x20]
lea esi, [rdi+0x01]
mov dword ptr [rbx+0x20], esi
test edi, edi
- jle G_M50865_IG04
- mov r15, gword ptr [rbx]
- mov r14d, dword ptr [rbx+0x20]
- add r14d, -2
- lea r13, bword ptr [rbx+0x30]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_BULK_WRITEBARRIER
- lea rdi, bword ptr [rbp-0x98]
- mov rsi, r13
- cmp byte ptr [rsi], sil
- mov edx, 112
- call [rax]CORINFO_HELP_BULK_WRITEBARRIER
- cmp r14d, dword ptr [r15+0x08]
- jae G_M50865_IG22
- mov edi, r14d
- imul rdi, rdi, 112
- lea rdi, bword ptr [r15+rdi+0x10]
+ jle G_M50865_IG06
+ mov rdi, gword ptr [rbx]
+ mov esi, dword ptr [rbx+0x20]
+ add esi, -2
+ lea r15, bword ptr [rbx+0x30]
+ ;; size=30 bbWeight=0.50 PerfScore 4.75
+G_M50865_IG04:
+ vmovdqu32 zmm0, zmmword ptr [r15]
+ vmovdqu32 zmmword ptr [rbp-0x98], zmm0
+ vmovdqu32 zmm0, zmmword ptr [r15+0x30]
+ vmovdqu32 zmmword ptr [rbp-0x68], zmm0
+ ;; size=36 bbWeight=0.50 PerfScore 5.00
+G_M50865_IG05:
+ cmp esi, dword ptr [rdi+0x08]
+ jae G_M50865_IG26
+ mov esi, esi
+ imul rsi, rsi, 112
+ lea rdi, bword ptr [rdi+rsi+0x10]
cmp byte ptr [rdi], dil
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_BULK_WRITEBARRIER
lea rsi, [rbp-0x98]
mov edx, 112
+ vzeroupper
call [rax]CORINFO_HELP_BULK_WRITEBARRIER
mov rdi, gword ptr [rbx]
mov esi, dword ptr [rbx+0x20]
dec esi
cmp esi, dword ptr [rdi+0x08]
- jae G_M50865_IG22
+ jae G_M50865_IG26
imul rsi, rsi, 112
lea rsi, bword ptr [rdi+rsi+0x10]
cmp byte ptr [rsi], sil
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_BULK_WRITEBARRIER
- mov rdi, r13
+ mov rdi, r15
cmp byte ptr [rdi], dil
mov edx, 112
+ vzeroupper
call [rax]CORINFO_HELP_BULK_WRITEBARRIER
- ;; size=163 bbWeight=0.50 PerfScore 26.00
-G_M50865_IG04:
+ ;; size=105 bbWeight=0.50 PerfScore 18.62
+G_M50865_IG06:
mov edi, dword ptr [rbx+0x24]
cmp edi, dword ptr [rbx+0x20]
- jne G_M50865_IG18
+ jne G_M50865_IG22
xor edi, edi
mov dword ptr [rbx+0x24], edi
- jmp G_M50865_IG18
+ jmp G_M50865_IG22
;; size=22 bbWeight=0.50 PerfScore 4.62
-G_M50865_IG05:
+G_M50865_IG07:
cmp dword ptr [rbx+0x20], 0
- je G_M50865_IG17
+ je G_M50865_IG21
mov rdi, gword ptr [rbx+0x30]
test rdi, rdi
- je SHORT G_M50865_IG07
- mov r15, gword ptr [rdi+0x88]
- cmp byte ptr [r15+0x115], 2
- je SHORT G_M50865_IG06
- mov rdi, r15
+ je SHORT G_M50865_IG09
+ mov r14, gword ptr [rdi+0x88]
+ cmp byte ptr [r14+0x115], 2
+ je SHORT G_M50865_IG08
+ mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Serialization.Metadata.JsonTypeInfo:<EnsureConfigured>g__ConfigureSynchronized|172_0():this
call [rax]System.Text.Json.Serialization.Metadata.JsonTypeInfo:<EnsureConfigured>g__ConfigureSynchronized|172_0():this
;; size=51 bbWeight=0.50 PerfScore 8.38
-G_M50865_IG06:
- jmp SHORT G_M50865_IG08
- ;; size=2 bbWeight=0.50 PerfScore 1.00
-G_M50865_IG07:
- xor r15, r15
- ;; size=3 bbWeight=0.50 PerfScore 0.12
G_M50865_IG08:
- test r15, r15
- jne SHORT G_M50865_IG09
+ jmp SHORT G_M50865_IG10
+ ;; size=2 bbWeight=0.50 PerfScore 1.00
+G_M50865_IG09:
+ xor r14, r14
+ ;; size=3 bbWeight=0.50 PerfScore 0.12
+G_M50865_IG10:
+ test r14, r14
+ jne SHORT G_M50865_IG11
mov rdi, gword ptr [rbx+0x70]
mov rdi, gword ptr [rdi+0x20]
mov rdi, gword ptr [rdi+0x28]
- mov r15, gword ptr [rdi+0x88]
- cmp byte ptr [r15+0x115], 2
- je SHORT G_M50865_IG09
- mov rdi, r15
+ mov r14, gword ptr [rdi+0x88]
+ cmp byte ptr [r14+0x115], 2
+ je SHORT G_M50865_IG11
+ mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Text.Json.Serialization.Metadata.JsonTypeInfo:<EnsureConfigured>g__ConfigureSynchronized|172_0():this
call [rax]System.Text.Json.Serialization.Metadata.JsonTypeInfo:<EnsureConfigured>g__ConfigureSynchronized|172_0():this
;; size=49 bbWeight=0.50 PerfScore 8.38
-G_M50865_IG09:
- movzx r14, byte ptr [rbx+0x94]
+G_M50865_IG11:
+ movzx r13, byte ptr [rbx+0x94]
mov r12d, dword ptr [rbx+0x98]
mov rsi, gword ptr [rbx]
test rsi, rsi
- je SHORT G_M50865_IG10
+ je SHORT G_M50865_IG12
mov edi, dword ptr [rbx+0x20]
dec edi
cmp edi, dword ptr [rsi+0x08]
- jne SHORT G_M50865_IG11
+ jne SHORT G_M50865_IG13
mov esi, dword ptr [rsi+0x08]
add esi, esi
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Array:Resize[System.Text.Json.ReadStackFrame](byref,int)
call [rax]System.Array:Resize[System.Text.Json.ReadStackFrame](byref,int)
- jmp SHORT G_M50865_IG11
+ jmp SHORT G_M50865_IG13
;; size=55 bbWeight=0.50 PerfScore 10.62
-G_M50865_IG10:
+G_M50865_IG12:
mov rdi, 0xD1FFAB1E ; System.Text.Json.ReadStackFrame[]
mov esi, 4
call CORINFO_HELP_NEWARR_1_VC
mov rdi, rbx
mov rsi, rax
call CORINFO_HELP_CHECKED_ASSIGN_REF
;; size=31 bbWeight=0.50 PerfScore 1.50
-G_M50865_IG11:
- mov r13, gword ptr [rbx]
- mov eax, dword ptr [rbx+0x20]
- dec eax
- mov dword ptr [rbp-0x9C], eax
- lea rdi, bword ptr [rbx+0x30]
- mov rcx, rdi
- mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_BULK_WRITEBARRIER
- lea rdi, bword ptr [rbp-0x110]
- mov bword ptr [rbp-0x118], rcx
- mov rsi, rcx
- cmp byte ptr [rsi], sil
- mov edx, 112
- call [r8]CORINFO_HELP_BULK_WRITEBARRIER
- mov edi, dword ptr [rbp-0x9C]
- cmp edi, dword ptr [r13+0x08]
- jae G_M50865_IG22
- imul rdi, rdi, 112
- lea rdi, bword ptr [r13+rdi+0x10]
+G_M50865_IG13:
+ mov rdi, gword ptr [rbx]
+ mov esi, dword ptr [rbx+0x20]
+ dec esi
+ lea r15, bword ptr [rbx+0x30]
+ ;; size=12 bbWeight=0.50 PerfScore 2.38
+G_M50865_IG14:
+ vmovdqu32 zmm0, zmmword ptr [r15]
+ vmovdqu32 zmmword ptr [rbp-0x108], zmm0
+ vmovdqu32 zmm0, zmmword ptr [r15+0x30]
+ vmovdqu32 zmmword ptr [rbp-0xD8], zmm0
+ ;; size=36 bbWeight=0.50 PerfScore 5.00
+G_M50865_IG15:
+ cmp esi, dword ptr [rdi+0x08]
+ jae G_M50865_IG26
+ mov esi, esi
+ imul rsi, rsi, 112
+ lea rdi, bword ptr [rdi+rsi+0x10]
cmp byte ptr [rdi], dil
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_BULK_WRITEBARRIER
- lea rsi, [rbp-0x110]
+ lea rsi, [rbp-0x108]
mov edx, 112
+ vzeroupper
call [rax]CORINFO_HELP_BULK_WRITEBARRIER
xor edi, edi
- mov r13, bword ptr [rbp-0x118]
- mov qword ptr [r13], rdi
- mov qword ptr [r13+0x08], rdi
- mov qword ptr [r13+0x10], rdi
- mov qword ptr [r13+0x18], rdi
- mov qword ptr [r13+0x20], rdi
- mov qword ptr [r13+0x28], rdi
- mov qword ptr [r13+0x30], rdi
- mov qword ptr [r13+0x38], rdi
- mov qword ptr [r13+0x40], rdi
- mov qword ptr [r13+0x48], rdi
+ mov qword ptr [r15], rdi
+ mov qword ptr [r15+0x08], rdi
+ mov qword ptr [r15+0x10], rdi
+ mov qword ptr [r15+0x18], rdi
+ mov qword ptr [r15+0x20], rdi
+ mov qword ptr [r15+0x28], rdi
+ mov qword ptr [r15+0x30], rdi
+ mov qword ptr [r15+0x38], rdi
+ mov qword ptr [r15+0x40], rdi
+ mov qword ptr [r15+0x48], rdi
vxorps xmm0, xmm0, xmm0
- vmovdqu ymmword ptr [r13+0x50], ymm0
+ vmovdqu ymmword ptr [r15+0x50], ymm0
inc dword ptr [rbx+0x20]
lea rdi, bword ptr [rbx+0x58]
- mov rsi, r15
+ mov rsi, r14
call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov rsi, gword ptr [r15+0xC8]
+ mov rsi, gword ptr [r14+0xC8]
lea rdi, bword ptr [rbx+0x30]
call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov rdi, r13
- test r14d, r14d
- je SHORT G_M50865_IG12
- jmp SHORT G_M50865_IG13
- ;; size=211 bbWeight=0.50 PerfScore 27.79
-G_M50865_IG12:
+ mov rdi, r15
+ test r13d, r13d
+ je SHORT G_M50865_IG16
+ jmp SHORT G_M50865_IG17
+ ;; size=142 bbWeight=0.50 PerfScore 19.79
+G_M50865_IG16:
mov rax, gword ptr [rbx+0x30]
- movzx r14, byte ptr [rax+0xC8]
+ movzx r13, byte ptr [rax+0xC8]
mov r12d, dword ptr [rax+0xCC]
;; size=19 bbWeight=0.50 PerfScore 3.00
-G_M50865_IG13:
- mov byte ptr [rdi+0x64], r14b
+G_M50865_IG17:
+ mov byte ptr [rdi+0x64], r13b
mov dword ptr [rdi+0x68], r12d
- mov rdi, r13
+ mov rdi, r15
cmp byte ptr [rbx+0x29], 0
- je SHORT G_M50865_IG14
+ je SHORT G_M50865_IG18
mov eax, 1
- jmp SHORT G_M50865_IG16
+ jmp SHORT G_M50865_IG20
;; size=24 bbWeight=0.50 PerfScore 4.25
-G_M50865_IG14:
- mov rax, gword ptr [r15+0x98]
+G_M50865_IG18:
+ mov rax, gword ptr [r14+0x98]
test rax, rax
- je SHORT G_M50865_IG15
+ je SHORT G_M50865_IG19
movzx rax, byte ptr [rax+0x34]
- jmp SHORT G_M50865_IG16
+ jmp SHORT G_M50865_IG20
;; size=18 bbWeight=0.50 PerfScore 3.62
-G_M50865_IG15:
+G_M50865_IG19:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
-G_M50865_IG16:
+G_M50865_IG20:
mov byte ptr [rdi+0x5B], al
- jmp SHORT G_M50865_IG18
+ jmp SHORT G_M50865_IG22
;; size=5 bbWeight=0.50 PerfScore 1.50
-G_M50865_IG17:
+G_M50865_IG21:
mov dword ptr [rbx+0x20], 1
;; size=7 bbWeight=0.50 PerfScore 0.50
-G_M50865_IG18:
+G_M50865_IG22:
mov rdi, gword ptr [rbx+0x58]
cmp gword ptr [rdi+0x08], 0
- je SHORT G_M50865_IG20
+ je SHORT G_M50865_IG24
;; size=11 bbWeight=1 PerfScore 6.00
-G_M50865_IG19:
+G_M50865_IG23:
add rbx, 112
cmp gword ptr [rbx], 0
- jne SHORT G_M50865_IG20
+ jne SHORT G_M50865_IG24
mov rdi, 0xD1FFAB1E ; System.Text.Json.ArgumentState
call CORINFO_HELP_NEWSFAST
mov rsi, rax
mov rdi, rbx
call CORINFO_HELP_CHECKED_ASSIGN_REF
;; size=36 bbWeight=0.50 PerfScore 3.50
-G_M50865_IG20:
+G_M50865_IG24:
nop
;; size=1 bbWeight=1 PerfScore 0.25
-G_M50865_IG21:
- add rsp, 248
+G_M50865_IG25:
+ vzeroupper
+ add rsp, 232
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
- ;; size=18 bbWeight=1 PerfScore 4.25
-G_M50865_IG22:
+ ;; size=21 bbWeight=1 PerfScore 5.25
+G_M50865_IG26:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 826, prolog size 79, PerfScore 139.00, instruction count 198, allocated bytes for code 826 (MethodHash=8233394e) for method System.Text.Json.ReadStack:Push():this (FullOpts)
+; Total bytes of code 806, prolog size 69, PerfScore 139.75, instruction count 193, allocated bytes for code 806 (MethodHash=8233394e) for method System.Text.Json.ReadStack:Push():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/6af4862312d4054475ac4fc993deea4c |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 14 minutes 11 seconds (remote runner delay: 1 minute 24 seconds).
dotnet/runtime#112227
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: