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
[X64] [EgorBo] JIT: Bulk copy of byrefs #364
Comments
Top method regressions74 (3.25 % of base) - System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this ; Assembly listing for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):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; 17 single block inlinees; 13 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T04] ( 10, 16 ) ref -> [rbp-0x1E8] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]>
+; V00 this [V00,T04] ( 10, 16 ) ref -> [rbp-0x1F8] this class-hnd EH-live single-def <System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]>
; V01 arg1 [V01,T07] ( 8, 12 ) ref -> rbx class-hnd single-def <System.Array>
; V02 arg2 [V02,T21] ( 6, 8 ) int -> r15
; V03 loc0 [V03 ] ( 19, 40 ) struct (136) [rbp-0xB8] do-not-enreg[XSF] must-init addr-exposed ld-addr-op <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
;* V04 loc1 [V04 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] ld-addr-op <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]>
; V05 OutArgs [V05 ] ( 1, 1 ) struct (56) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
;* V07 tmp2 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V08 tmp3 [V08 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V09 tmp4 [V09 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V10 tmp5 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V11 tmp6 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "impAppendStmt" <System.__Canon>
; V12 tmp7 [V12 ] ( 3, 12 ) struct ( 8) [rbp-0xC0] do-not-enreg[XS] addr-exposed "location for address-of(RValue)" <System.Nullable`1[int]>
;* V13 tmp8 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Collections.DictionaryEntry>
-; V14 tmp9 [V14,T05] ( 4, 16 ) ref -> [rbp-0x1F0] class-hnd exact spill-single-def "Single-def Box Helper" <System.Collections.DictionaryEntry>
+; V14 tmp9 [V14,T05] ( 4, 16 ) ref -> [rbp-0x200] class-hnd exact spill-single-def "Single-def Box Helper" <System.Collections.DictionaryEntry>
; V15 tmp10 [V15,T12] ( 3, 12 ) int -> rsi "impSpillLclRefs"
;* V16 tmp11 [V16 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V17 tmp12 [V17,T51] ( 6, 4 ) long -> rax "Indirect call through function pointer"
;* V18 tmp13 [V18 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V19 tmp14 [V19 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V20 tmp15 [V20 ] ( 5, 10 ) struct (136) [rbp-0x148] do-not-enreg[XSF] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]>
;* V21 tmp16 [V21 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V22 tmp17 [V22,T36] ( 4, 7 ) ref -> r13 class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
; V23 tmp18 [V23 ] ( 14, 20 ) struct (32) [rbp-0x168] do-not-enreg[XS] must-init addr-exposed ld-addr-op "NewObj constructor temp" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-; V24 tmp19 [V24,T48] ( 3, 4.40) long -> rdi "Inlining Arg"
+; V24 tmp19 [V24,T48] ( 3, 4.40) long -> rsi "Inlining Arg"
;* V25 tmp20 [V25 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V26 tmp21 [V26 ] ( 0, 0 ) byref -> zero-ref
-; V27 tmp22 [V27,T69] ( 2, 2 ) byref -> rcx single-def
-; V28 tmp23 [V28,T71] ( 2, 2 ) int -> rdi
+; V27 tmp22 [V27,T69] ( 2, 2 ) byref -> rdi single-def
+; V28 tmp23 [V28,T71] ( 2, 2 ) int -> rsi
; V29 tmp24 [V29,T47] ( 6, 5.40) long -> [rbp-0x170] spill-single-def "Inlining Arg"
;* V30 tmp25 [V30 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V31 tmp26 [V31 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V32 tmp27 [V32,T72] ( 2, 2 ) struct (32) [rbp-0x190] do-not-enreg[S] must-init "impAppendStmt" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
-; V33 tmp28 [V33,T60] ( 3, 3 ) ref -> [rbp-0x1F8] class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
+; V33 tmp28 [V33,T60] ( 3, 3 ) ref -> [rbp-0x208] class-hnd exact spill-single-def "NewObj constructor temp" <System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]>
;* V34 tmp29 [V34 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V35 tmp30 [V35 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V36 tmp31 [V36,T56] ( 2, 4 ) ref -> rdi class-hnd exact single-def "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
;* V37 tmp32 [V37,T80] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
; V38 tmp33 [V38 ] ( 3, 3 ) struct (32) [rbp-0x1B0] do-not-enreg[XS] must-init addr-exposed ld-addr-op "Inlining Arg" <System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]>
; V39 tmp34 [V39,T59] ( 5, 3.40) long -> [rbp-0x1B8] spill-single-def "Inlining Arg"
;* V40 tmp35 [V40 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V41 tmp36 [V41,T73] ( 2, 2 ) long -> rsi "Indirect call through function pointer"
;* V42 tmp37 [V42 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V43 tmp38 [V43 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V44 tmp39 [V44,T74] ( 2, 2 ) long -> r13 "Indirect call through function pointer"
-; V45 tmp40 [V45,T70] ( 2, 2 ) ref -> [rbp-0x200] class-hnd exact spill-single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+; V45 tmp40 [V45,T70] ( 2, 2 ) ref -> [rbp-0x210] class-hnd exact spill-single-def "non-inline candidate call" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
; V46 tmp41 [V46,T75] ( 2, 2 ) int -> rax "Inlining Arg"
-; V47 tmp42 [V47,T25] ( 3, 8.80) long -> r13 "Inlining Arg"
+; V47 tmp42 [V47,T25] ( 3, 8.80) long -> [rbp-0x1C0] spill-single-def "Inlining Arg"
;* V48 tmp43 [V48 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V49 tmp44 [V49 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V50 tmp45 [V50,T09] ( 5, 13.60) long -> [rbp-0x1C0] spill-single-def "Inlining Arg"
+; V50 tmp45 [V50,T09] ( 5, 13.60) long -> [rbp-0x1C8] spill-single-def "Inlining Arg"
;* V51 tmp46 [V51 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V52 tmp47 [V52 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V53 tmp48 [V53,T22] ( 4, 8.80) long -> rdi "Inlining Arg"
;* V54 tmp49 [V54 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V55 tmp50 [V55,T26] ( 3, 8 ) long -> rdx "Indirect call through function pointer"
-; V56 tmp51 [V56,T10] ( 3, 12 ) ref -> [rbp-0x208] class-hnd exact spill-single-def "Inlining Arg" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+; V55 tmp50 [V55,T26] ( 3, 8 ) long -> r8 "Indirect call through function pointer"
+; V56 tmp51 [V56,T10] ( 3, 12 ) ref -> [rbp-0x218] class-hnd exact spill-single-def "Inlining Arg" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
; V57 tmp52 [V57,T39] ( 3, 6 ) int -> rsi "Inline stloc first use temp"
;* V58 tmp53 [V58 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[S] "Inline stloc first use temp" <System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]>
; V59 tmp54 [V59,T23] ( 4, 8.80) long -> rdi "Inlining Arg"
;* V60 tmp55 [V60 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V61 tmp56 [V61,T82] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <System.InvalidOperationException>
;* V62 tmp57 [V62 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
; V63 tmp58 [V63,T83] ( 3, 0 ) ref -> rbx class-hnd exact "NewObj constructor temp" <System.InvalidOperationException>
-; V64 tmp59 [V64,T08] ( 6, 13.60) long -> r13 "Inlining Arg"
+; V64 tmp59 [V64,T08] ( 6, 13.60) long -> [rbp-0x1D0] "Inlining Arg"
;* V65 tmp60 [V65 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V66 tmp61 [V66 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
; V67 tmp62 [V67,T24] ( 4, 8.80) long -> rdi "Inlining Arg"
;* V68 tmp63 [V68 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V69 tmp64 [V69,T27] ( 3, 8 ) long -> rcx "Indirect call through function pointer"
-; V70 tmp65 [V70,T11] ( 3, 12 ) ref -> [rbp-0x210] class-hnd exact spill-single-def "Inlining Arg" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
+; V69 tmp64 [V69,T27] ( 3, 8 ) long -> rdx "Indirect call through function pointer"
+; V70 tmp65 [V70,T11] ( 3, 12 ) ref -> [rbp-0x220] class-hnd exact spill-single-def "Inlining Arg" <System.Collections.Immutable.SecurePooledObject`1[System.__Canon]>
; V71 tmp66 [V71,T30] ( 2, 8 ) ref -> rsi class-hnd exact "Inlining Arg" <System.Collections.Immutable.ImmutableList`1+Node[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]>
; V72 tmp67 [V72,T31] ( 2, 8 ) ref -> rax class-hnd exact "Inlining Arg" <System.Int32>
;* V73 tmp68 [V73 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inlining Arg" <System.Collections.DictionaryEntry>
; V74 tmp69 [V74,T40] ( 2, 4 ) int -> rax "Inline return value spill temp"
;* V75 tmp70 [V75 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
; V76 tmp71 [V76,T41] ( 3, 6 ) int -> rax "Inline stloc first use temp"
; V77 tmp72 [V77,T32] ( 2, 8 ) byref -> rdi "Inlining Arg"
; V78 tmp73 [V78 ] ( 2, 6 ) ubyte -> [rbp-0xC0] do-not-enreg[X] addr-exposed "field V12.hasValue (fldOffset=0x0)" P-DEP
; V79 tmp74 [V79 ] ( 2, 6 ) int -> [rbp-0xBC] do-not-enreg[X] addr-exposed "field V12.value (fldOffset=0x4)" P-DEP
-; V80 tmp75 [V80,T57] ( 2, 4 ) ref -> r13 "field V13._key (fldOffset=0x0)" P-INDEP
-; V81 tmp76 [V81,T58] ( 2, 4 ) ref -> [rbp-0x218] spill-single-def "field V13._value (fldOffset=0x8)" P-INDEP
+; V80 tmp75 [V80,T57] ( 2, 4 ) ref -> [rbp-0x228] spill-single-def "field V13._key (fldOffset=0x0)" P-INDEP
+; V81 tmp76 [V81,T58] ( 2, 4 ) ref -> [rbp-0x230] spill-single-def "field V13._value (fldOffset=0x8)" P-INDEP
; V82 tmp77 [V82 ] ( 7, 7.50) ref -> [rbp-0x168] do-not-enreg[X] addr-exposed "field V23._root (fldOffset=0x0)" P-DEP
; V83 tmp78 [V83 ] ( 9, 8 ) ref -> [rbp-0x160] do-not-enreg[X] addr-exposed "field V23._stack (fldOffset=0x8)" P-DEP
; V84 tmp79 [V84 ] ( 5, 6 ) ref -> [rbp-0x158] do-not-enreg[X] addr-exposed "field V23._current (fldOffset=0x10)" P-DEP
; V85 tmp80 [V85 ] ( 5, 6 ) int -> [rbp-0x150] do-not-enreg[X] addr-exposed "field V23._poolUserId (fldOffset=0x18)" P-DEP
;* V86 tmp81 [V86 ] ( 0, 0 ) ref -> zero-ref "V04.[000..008)"
;* V87 tmp82 [V87 ] ( 0, 0 ) ubyte -> zero-ref "V04.[008..009)"
;* V88 tmp83 [V88 ] ( 0, 0 ) int -> zero-ref "V04.[012..016)"
-; V89 tmp84 [V89,T37] ( 3, 6 ) ref -> r13 "V58.[000..008)"
-; V90 tmp85 [V90,T42] ( 3, 6 ) ubyte -> rax "V58.[008..009)"
-; V91 tmp86 [V91,T43] ( 3, 6 ) int -> rcx "V58.[012..016)"
+; V89 tmp84 [V89,T37] ( 3, 6 ) ref -> [rbp-0x238] "V58.[000..008)"
+; V90 tmp85 [V90,T42] ( 3, 6 ) ubyte -> rcx "V58.[008..009)"
+; V91 tmp86 [V91,T43] ( 3, 6 ) int -> rdx "V58.[012..016)"
; V92 tmp87 [V92,T06] ( 4, 16 ) byref -> rsi "Spilling address for field-by-field copy"
; V93 tmp88 [V93,T86] ( 2, 0 ) ref -> rdi single-def "argument with side effect"
; V94 tmp89 [V94,T76] ( 2, 2 ) long -> rdi "argument with side effect"
; V95 tmp90 [V95,T77] ( 2, 2 ) long -> r13 "argument with side effect"
; V96 tmp91 [V96,T03] ( 2, 32 ) long -> rsi "argument with side effect"
-; V97 tmp92 [V97,T33] ( 2, 8 ) long -> [rbp-0x1C8] spill-single-def "argument with side effect"
-; V98 tmp93 [V98,T34] ( 2, 8 ) long -> [rbp-0x1D0] spill-single-def "argument with side effect"
+; V97 tmp92 [V97,T33] ( 2, 8 ) long -> [rbp-0x1D8] spill-single-def "argument with side effect"
+; V98 tmp93 [V98,T34] ( 2, 8 ) long -> [rbp-0x1E0] spill-single-def "argument with side effect"
; V99 tmp94 [V99,T35] ( 2, 8 ) long -> rdx "argument with side effect"
-; V100 PSPSym [V100,T81] ( 1, 1 ) long -> [rbp-0x228] do-not-enreg[V] "PSPSym"
+; V100 PSPSym [V100,T81] ( 1, 1 ) long -> [rbp-0x248] do-not-enreg[V] "PSPSym"
; V101 cse0 [V101,T52] ( 3, 4 ) long -> r14 "CSE #04: conservative"
; V102 cse1 [V102,T53] ( 3, 4 ) long -> r12 "CSE #05: conservative"
-; V103 cse2 [V103,T78] ( 3, 1.50) long -> [rbp-0x1D8] spill-single-def "CSE #01: conservative"
-; V104 cse3 [V104,T79] ( 3, 1.50) long -> [rbp-0x1E0] spill-single-def "CSE #02: conservative"
+; V103 cse2 [V103,T78] ( 3, 1.50) long -> [rbp-0x1E8] spill-single-def "CSE #01: conservative"
+; V104 cse3 [V104,T79] ( 3, 1.50) long -> [rbp-0x1F0] spill-single-def "CSE #02: conservative"
; V105 cse4 [V105,T38] ( 3, 6 ) ref -> rsi "CSE #08: moderate"
-; V106 rat0 [V106,T49] ( 3, 4.40) long -> rdi "Spilling to split statement for tree"
+; V106 rat0 [V106,T49] ( 3, 4.40) long -> rsi "Spilling to split statement for tree"
; V107 rat1 [V107,T54] ( 3, 4 ) long -> r14 "runtime lookup"
; V108 rat2 [V108,T44] ( 3, 5.60) long -> r14 "fgMakeTemp is creating a new local variable"
; V109 rat3 [V109,T55] ( 3, 4 ) long -> r12 "runtime lookup"
; V110 rat4 [V110,T45] ( 3, 5.60) long -> r12 "fgMakeTemp is creating a new local variable"
; V111 rat5 [V111,T65] ( 3, 2 ) long -> registers "runtime lookup"
; V112 rat6 [V112,T61] ( 3, 2.80) long -> rcx "fgMakeTemp is creating a new local variable"
; V113 rat7 [V113,T66] ( 3, 2 ) long -> registers "runtime lookup"
; V114 rat8 [V114,T62] ( 3, 2.80) long -> rdx "fgMakeTemp is creating a new local variable"
; V115 rat9 [V115,T67] ( 3, 2 ) long -> rdi "runtime lookup"
; V116 rat10 [V116,T63] ( 3, 2.80) long -> rax "fgMakeTemp is creating a new local variable"
; V117 rat11 [V117,T68] ( 3, 2 ) long -> rdi "runtime lookup"
; V118 rat12 [V118,T64] ( 3, 2.80) long -> rdi "fgMakeTemp is creating a new local variable"
; V119 rat13 [V119,T13] ( 3, 11.20) long -> rdi "fgMakeTemp is creating a new local variable"
-; V120 rat14 [V120,T14] ( 3, 11.20) long -> rdx "fgMakeTemp is creating a new local variable"
+; V120 rat14 [V120,T14] ( 3, 11.20) long -> r8 "fgMakeTemp is creating a new local variable"
; V121 rat15 [V121,T28] ( 3, 8 ) long -> rdi "runtime lookup"
; V122 rat16 [V122,T15] ( 3, 11.20) long -> rdi "fgMakeTemp is creating a new local variable"
; V123 rat17 [V123,T16] ( 3, 11.20) long -> rdi "fgMakeTemp is creating a new local variable"
-; V124 rat18 [V124,T17] ( 3, 11.20) long -> r13 "fgMakeTemp is creating a new local variable"
+; V124 rat18 [V124,T17] ( 3, 11.20) long -> rax "fgMakeTemp is creating a new local variable"
; V125 rat19 [V125,T18] ( 3, 11.20) long -> rdi "fgMakeTemp is creating a new local variable"
-; V126 rat20 [V126,T19] ( 3, 11.20) long -> rcx "fgMakeTemp is creating a new local variable"
+; V126 rat20 [V126,T19] ( 3, 11.20) long -> rdx "fgMakeTemp is creating a new local variable"
; V127 rat21 [V127,T29] ( 3, 8 ) long -> rdi "runtime lookup"
; V128 rat22 [V128,T20] ( 3, 11.20) long -> rdi "fgMakeTemp is creating a new local variable"
; V129 rat23 [V129,T01] ( 3, 35.20) long -> rdi "Spilling to split statement for tree"
; V130 rat24 [V130,T02] ( 3, 32 ) long -> rsi "runtime lookup"
; V131 rat25 [V131,T00] ( 3, 44.80) long -> rsi "fgMakeTemp is creating a new local variable"
; V132 rat26 [V132,T50] ( 3, 4.40) long -> rdi "Spilling to split statement for tree"
; V133 rat27 [V133,T46] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
; V134 rat28 [V134,T84] ( 3, 0 ) long -> rdi "Spilling to split statement for tree"
; V135 rat29 [V135,T85] ( 3, 0 ) long -> rax "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 568
+; Lcl frame size = 600
G_M38819_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 568
- lea rbp, [rsp+0x260]
+ sub rsp, 600
+ lea rbp, [rsp+0x280]
vxorps xmm8, xmm8, xmm8
mov rax, -384
vmovdqa xmmword ptr [rbp+rax-0x30], xmm8
vmovdqa xmmword ptr [rbp+rax-0x20], xmm8
vmovdqa xmmword ptr [rbp+rax-0x10], xmm8
add rax, 48
jne SHORT -5 instr
- mov qword ptr [rbp-0x228], rsp
+ mov qword ptr [rbp-0x248], rsp
mov qword ptr [rbp-0x30], rdi
- mov gword ptr [rbp-0x1E8], rdi
- mov r8, rdi
+ mov gword ptr [rbp-0x1F8], rdi
mov rbx, rsi
mov r15d, edx
- ;; size=91 bbWeight=1 PerfScore 18.33
+ ;; size=88 bbWeight=1 PerfScore 18.08
G_M38819_IG02:
test rbx, rbx
- je G_M38819_IG72
+ je G_M38819_IG73
test r15d, r15d
- jl G_M38819_IG73
- mov edi, dword ptr [rbx+0x08]
- test edi, edi
- jl G_M38819_IG71
- mov esi, r15d
- add esi, dword ptr [r8+0x28]
- cmp edi, esi
- jl G_M38819_IG73
- mov rdi, qword ptr [r8]
- mov rsi, qword ptr [rdi+0x30]
- mov rsi, qword ptr [rsi]
- mov r14, qword ptr [rsi+0x60]
+ jl G_M38819_IG74
+ mov esi, dword ptr [rbx+0x08]
+ test esi, esi
+ jl G_M38819_IG72
+ mov eax, r15d
+ add eax, dword ptr [rdi+0x28]
+ cmp esi, eax
+ jl G_M38819_IG74
+ mov rsi, qword ptr [rdi]
+ mov rax, qword ptr [rsi+0x30]
+ mov rax, qword ptr [rax]
+ mov r14, qword ptr [rax+0x60]
test r14, r14
je SHORT G_M38819_IG04
- ;; size=63 bbWeight=1 PerfScore 19.50
+ ;; size=62 bbWeight=1 PerfScore 19.50
G_M38819_IG03:
jmp SHORT G_M38819_IG05
;; size=2 bbWeight=0.80 PerfScore 1.60
G_M38819_IG04:
+ mov rdi, rsi
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov r14, rax
- ;; size=18 bbWeight=0.20 PerfScore 0.30
+ ;; size=21 bbWeight=0.20 PerfScore 0.35
G_M38819_IG05:
- mov rdi, r14
- mov r8, gword ptr [rbp-0x1E8]
- mov r13, gword ptr [r8+0x08]
- mov gword ptr [rbp-0x148], r8
- mov rsi, qword ptr [rdi+0x30]
- mov rsi, qword ptr [rsi]
- mov r12, qword ptr [rsi+0x18]
+ mov rsi, r14
+ mov rdi, gword ptr [rbp-0x1F8]
+ mov r13, gword ptr [rdi+0x08]
+ mov gword ptr [rbp-0x148], rdi
+ mov rax, qword ptr [rsi+0x30]
+ mov rax, qword ptr [rax]
+ mov r12, qword ptr [rax+0x18]
test r12, r12
je SHORT G_M38819_IG07
;; size=37 bbWeight=1 PerfScore 11.50
G_M38819_IG06:
jmp SHORT G_M38819_IG08
;; size=2 bbWeight=0.80 PerfScore 1.60
G_M38819_IG07:
+ mov rdi, rsi
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov r12, rax
- ;; size=18 bbWeight=0.20 PerfScore 0.30
+ ;; size=21 bbWeight=0.20 PerfScore 0.35
G_M38819_IG08:
mov qword ptr [rbp-0x170], r12
test r13, r13
- je G_M38819_IG74
+ je G_M38819_IG75
mov gword ptr [rbp-0x168], r13
xor rcx, rcx
mov gword ptr [rbp-0x158], rcx
mov rcx, 0xD1FFAB1E ; code for System.Collections.Immutable.SecureObjectPool:NewId():int
call [rcx]System.Collections.Immutable.SecureObjectPool:NewId():int
mov dword ptr [rbp-0x150], eax
xor rdi, rdi
mov gword ptr [rbp-0x160], rdi
mov rdi, gword ptr [rbp-0x168]
cmp gword ptr [rdi+0x08], 0
je G_M38819_IG28
;; size=77 bbWeight=1 PerfScore 15.00
G_M38819_IG09:
mov rax, qword ptr [rbp-0x170]
mov rdi, qword ptr [rax+0x30]
mov rdi, qword ptr [rdi]
mov rcx, qword ptr [rdi+0x18]
test rcx, rcx
je SHORT G_M38819_IG11
;; size=23 bbWeight=0.50 PerfScore 4.12
G_M38819_IG10:
jmp SHORT G_M38819_IG12
;; size=2 bbWeight=0.40 PerfScore 0.80
G_M38819_IG11:
mov rdi, rax
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rcx, rax
mov rax, qword ptr [rbp-0x170]
;; size=28 bbWeight=0.10 PerfScore 0.28
G_M38819_IG12:
mov rdi, rcx
- mov qword ptr [rbp-0x1E0], rdi
+ mov qword ptr [rbp-0x1F0], rdi
mov rcx, rdi
mov qword ptr [rbp-0x1B8], rcx
;; size=20 bbWeight=0.50 PerfScore 1.25
G_M38819_IG13:
vmovdqu ymm0, ymmword ptr [rbp-0x168]
vmovdqu ymmword ptr [rbp-0x1B0], ymm0
;; size=16 bbWeight=0.50 PerfScore 2.50
G_M38819_IG14:
mov rsi, qword ptr [rcx+0x30]
mov rsi, qword ptr [rsi]
mov rdx, qword ptr [rsi+0x18]
test rdx, rdx
je SHORT G_M38819_IG16
;; size=16 bbWeight=0.50 PerfScore 3.62
G_M38819_IG15:
jmp SHORT G_M38819_IG17
;; size=2 bbWeight=0.40 PerfScore 0.80
G_M38819_IG16:
mov rdi, rcx
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdx, rax
;; size=21 bbWeight=0.10 PerfScore 0.18
G_M38819_IG17:
- mov qword ptr [rbp-0x1D8], rdx
+ mov qword ptr [rbp-0x1E8], rdx
mov rsi, rdx
lea rdi, [rbp-0x1B0]
call rsi
cmp eax, -1
je SHORT G_M38819_IG21
mov rdi, qword ptr [rbp-0x1B8]
mov rsi, qword ptr [rdi+0x30]
mov rsi, qword ptr [rsi]
mov rax, qword ptr [rsi+0x20]
test rax, rax
je SHORT G_M38819_IG19
;; size=47 bbWeight=0.50 PerfScore 7.12
G_M38819_IG18:
mov rdi, rax
jmp SHORT G_M38819_IG20
;; size=5 bbWeight=0.40 PerfScore 0.90
G_M38819_IG19:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
;; size=18 bbWeight=0.10 PerfScore 0.15
G_M38819_IG20:
lea rsi, [rbp-0x160]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
call [rax]System.Collections.Immutable.AllocFreeConcurrentStack`1[System.__Canon]:TryTake(byref):ubyte
test eax, eax
je SHORT G_M38819_IG21
- mov r13, qword ptr [rbp-0x1D8]
+ mov r13, qword ptr [rbp-0x1E8]
mov rax, gword ptr [rbp-0x160]
- mov gword ptr [rbp-0x200], rax
+ mov gword ptr [rbp-0x210], rax
lea rdi, [rbp-0x1B0]
call r13
- mov r13, gword ptr [rbp-0x200]
+ mov r13, gword ptr [rbp-0x210]
mov dword ptr [r13+0x10], eax
jmp G_M38819_IG27
;; size=70 bbWeight=0.50 PerfScore 7.75
G_M38819_IG21:
xor rdi, rdi
mov gword ptr [rbp-0x160], rdi
;; size=9 bbWeight=0.50 PerfScore 0.62
G_M38819_IG22:
vmovdqu ymm0, ymmword ptr [rbp-0x168]
vmovdqu ymmword ptr [rbp-0x190], ymm0
;; size=16 bbWeight=0.50 PerfScore 2.50
G_M38819_IG23:
mov rax, qword ptr [rbp-0x170]
mov rdi, qword ptr [rax+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x20]
test rdi, rdi
je SHORT G_M38819_IG25
;; size=23 bbWeight=0.50 PerfScore 4.12
G_M38819_IG24:
jmp SHORT G_M38819_IG26
;; size=2 bbWeight=0.40 PerfScore 0.80
G_M38819_IG25:
mov rdi, rax
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
;; size=21 bbWeight=0.10 PerfScore 0.18
G_M38819_IG26:
call CORINFO_HELP_NEWSFAST
- mov gword ptr [rbp-0x1F8], rax
+ mov gword ptr [rbp-0x208], rax
movzx rsi, byte ptr [r13+0x1D]
mov rdi, rax
mov rcx, 0xD1FFAB1E ; code for System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
call [rcx]System.Collections.Generic.Stack`1[System.Collections.Immutable.RefAsValueType`1[System.__Canon]]:.ctor(int):this
- mov r13, qword ptr [rbp-0x1E0]
+ mov r13, qword ptr [rbp-0x1F0]
lea rdi, [rsp]
lea rsi, [rbp-0x190]
mov rcx, gword ptr [rsi]
mov gword ptr [rsp], rcx
add rsi, 8
add rdi, 8
mov rcx, gword ptr [rsi]
mov gword ptr [rsp+0x08], rcx
add rsi, 8
add rdi, 8
mov rcx, gword ptr [rsi]
mov gword ptr [rsp+0x10], rcx
add rsi, 8
add rdi, 8
movsq
mov rdi, r13
- mov rsi, gword ptr [rbp-0x1F8]
+ mov rsi, gword ptr [rbp-0x208]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
call [rax]System.Collections.Immutable.SecureObjectPool`2[System.__Canon,System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]]:PrepNew(System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]],System.__Canon):System.Collections.Immutable.SecurePooledObject`1[System.__Canon]
mov gword ptr [rbp-0x160], rax
;; size=128 bbWeight=0.50 PerfScore 13.25
G_M38819_IG27:
lea rdi, [rbp-0x168]
mov rsi, qword ptr [rbp-0x170]
mov rdx, gword ptr [rbp-0x168]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
call [rax]System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]:PushLeft(System.Collections.Immutable.SortedInt32KeyNode`1[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]):this
;; size=33 bbWeight=0.50 PerfScore 2.88
G_M38819_IG28:
vmovdqu ymm0, ymmword ptr [rbp-0x168]
vmovdqu ymmword ptr [rbp-0x138], ymm0
;; size=16 bbWeight=1 PerfScore 5.00
G_M38819_IG29:
vxorps ymm0, ymm0, ymm0
vmovdqu ymmword ptr [rbp-0x118], ymm0
vmovdqu ymmword ptr [rbp-0xF8], ymm0
vmovdqu ymmword ptr [rbp-0xE0], ymm0
- lea rcx, bword ptr [rbp-0x148]
- mov r8, gword ptr [rbp-0x1E8]
- mov edi, dword ptr [r8+0x2C]
- mov dword ptr [rcx+0x08], edi
+ lea rdi, bword ptr [rbp-0x148]
+ mov r13, gword ptr [rbp-0x1F8]
+ mov esi, dword ptr [r13+0x2C]
+ mov dword ptr [rdi+0x08], esi
lea rdi, bword ptr [rbp-0xB8]
- lea rsi, bword ptr [rbp-0x148]
- mov ecx, 17
- rep movsq
- ;; size=71 bbWeight=1 PerfScore 34.08
+ lea rsi, [rbp-0x148]
+ mov edx, 136
+ call CORINFO_HELP_ASSIGN_STRUCT
+ nop
+ ;; size=74 bbWeight=1 PerfScore 10.33
G_M38819_IG30:
- jmp G_M38819_IG54
+ jmp G_M38819_IG55
;; size=5 bbWeight=1 PerfScore 2.00
G_M38819_IG31:
- mov r13, r14
- mov rax, r12
- mov qword ptr [rbp-0x1C0], rax
+ mov qword ptr [rbp-0x1C0], r14
+ mov rcx, r12
+ mov qword ptr [rbp-0x1C8], rcx
cmp gword ptr [rbp-0xA8], 0
je G_M38819_IG38
cmp gword ptr [rbp-0xA0], 0
je G_M38819_IG42
- mov rdi, qword ptr [rax+0x30]
+ mov rdi, qword ptr [rcx+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x30]
test rdi, rdi
je SHORT G_M38819_IG33
- ;; size=57 bbWeight=2 PerfScore 29.50
+ ;; size=61 bbWeight=2 PerfScore 31.00
G_M38819_IG32:
jmp SHORT G_M38819_IG34
;; size=2 bbWeight=1.60 PerfScore 3.20
G_M38819_IG33:
- mov rdi, rax
+ mov rdi, rcx
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
- mov rax, qword ptr [rbp-0x1C0]
+ mov rcx, qword ptr [rbp-0x1C8]
;; size=28 bbWeight=0.40 PerfScore 1.10
G_M38819_IG34:
- mov rcx, gword ptr [rbp-0xA0]
- mov gword ptr [rbp-0x208], rcx
- cmp byte ptr [rcx], cl
+ mov rdx, gword ptr [rbp-0xA0]
+ mov gword ptr [rbp-0x218], rdx
+ cmp byte ptr [rdx], dl
mov rsi, qword ptr [rdi+0x10]
- mov rdx, qword ptr [rsi+0x10]
- test rdx, rdx
+ mov r8, qword ptr [rsi+0x10]
+ test r8, r8
je SHORT G_M38819_IG36
;; size=29 bbWeight=2 PerfScore 20.50
G_M38819_IG35:
jmp SHORT G_M38819_IG37
;; size=2 bbWeight=1.60 PerfScore 3.20
G_M38819_IG36:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rdx, rax
+ mov r8, rax
;; size=18 bbWeight=0.40 PerfScore 0.60
G_M38819_IG37:
lea rdi, [rbp-0xA8]
- call rdx
- mov rdi, gword ptr [rbp-0x208]
+ call r8
+ mov rdi, gword ptr [rbp-0x218]
cmp eax, dword ptr [rdi+0x10]
- mov rax, qword ptr [rbp-0x1C0]
+ mov rcx, qword ptr [rbp-0x1C8]
je G_M38819_IG42
- ;; size=32 bbWeight=2 PerfScore 19.00
+ ;; size=33 bbWeight=2 PerfScore 19.00
G_M38819_IG38:
- mov rdi, qword ptr [rax+0x30]
+ mov rdi, qword ptr [rcx+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x28]
test rdi, rdi
je SHORT G_M38819_IG40
;; size=16 bbWeight=2 PerfScore 14.50
G_M38819_IG39:
jmp SHORT G_M38819_IG41
;; size=2 bbWeight=1.60 PerfScore 3.20
G_M38819_IG40:
- mov rdi, rax
+ mov rdi, rcx
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
;; size=21 bbWeight=0.40 PerfScore 0.70
G_M38819_IG41:
- mov qword ptr [rbp-0x1C8], rdi
+ mov qword ptr [rbp-0x1D8], rdi
lea rdi, [rsp]
lea rsi, [rbp-0xA8]
mov rcx, gword ptr [rsi]
mov gword ptr [rsp], rcx
add rsi, 8
add rdi, 8
mov rcx, gword ptr [rsi]
mov gword ptr [rsp+0x08], rcx
add rsi, 8
add rdi, 8
mov rcx, gword ptr [rsi]
mov gword ptr [rsp+0x10], rcx
add rsi, 8
add rdi, 8
movsq
- mov rdi, qword ptr [rbp-0x1C8]
- mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailObjectDisposed[System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]](System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]])
- call [rax]System.Collections.Immutable.Requires:FailObjectDisposed[System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]](System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]])
+ mov rdi, qword ptr [rbp-0x1D8]
+ mov rcx, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailObjectDisposed[System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]](System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]])
+ call [rcx]System.Collections.Immutable.Requires:FailObjectDisposed[System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]]](System.Collections.Immutable.SortedInt32KeyNode`1+Enumerator[System.Collections.Immutable.ImmutableDictionary`2+HashBucket[System.__Canon,System.Nullable`1[int]]])
;; size=86 bbWeight=2 PerfScore 35.50
G_M38819_IG42:
- mov rdi, qword ptr [r13+0x30]
+ mov rax, qword ptr [rbp-0x1C0]
+ mov rdi, qword ptr [rax+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x20]
test rdi, rdi
je SHORT G_M38819_IG44
- ;; size=16 bbWeight=2 PerfScore 14.50
+ ;; size=23 bbWeight=2 PerfScore 16.50
G_M38819_IG43:
jmp SHORT G_M38819_IG45
;; size=2 bbWeight=1.60 PerfScore 3.20
G_M38819_IG44:
- mov rdi, r13
+ mov rdi, rax
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
;; size=21 bbWeight=0.40 PerfScore 0.70
G_M38819_IG45:
mov esi, dword ptr [rbp-0x88]
cmp esi, 1
- je G_M38819_IG59
+ je G_M38819_IG60
cmp esi, 2
- jne G_M38819_IG57
+ jne G_M38819_IG58
mov rsi, qword ptr [rdi+0x30]
mov rsi, qword ptr [rsi]
- mov r13, qword ptr [rsi+0x18]
- test r13, r13
- je G_M38819_IG60
+ mov rax, qword ptr [rsi+0x18]
+ test rax, rax
+ je G_M38819_IG61
;; size=44 bbWeight=2 PerfScore 21.50
G_M38819_IG46:
cmp gword ptr [rbp-0x60], 0
- je SHORT G_M38819_IG49
+ je SHORT G_M38819_IG50
cmp gword ptr [rbp-0x58], 0
- je G_M38819_IG51
- mov rdi, qword ptr [r13+0x30]
+ je G_M38819_IG52
+ mov rdi, qword ptr [rax+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x18]
test rdi, rdi
- je G_M38819_IG61
+ je G_M38819_IG62
;; size=38 bbWeight=2 PerfScore 26.50
G_M38819_IG47:
- mov rax, gword ptr [rbp-0x58]
- mov gword ptr [rbp-0x210], rax
- cmp byte ptr [rax], al
+ mov rcx, gword ptr [rbp-0x58]
+ mov gword ptr [rbp-0x220], rcx
+ cmp byte ptr [rcx], cl
mov rsi, qword ptr [rdi+0x10]
- mov rcx, qword ptr [rsi+0x10]
- test rcx, rcx
- je G_M38819_IG62
+ mov rdx, qword ptr [rsi+0x10]
+ test rdx, rdx
+ je G_M38819_IG63
;; size=30 bbWeight=2 PerfScore 20.50
G_M38819_IG48:
+ mov qword ptr [rbp-0x1D0], rax
+ ;; size=7 bbWeight=1.60 PerfScore 1.60
+G_M38819_IG49:
lea rdi, [rbp-0x68]
- call rcx
- mov rdi, gword ptr [rbp-0x210]
+ call rdx
+ mov rdi, gword ptr [rbp-0x220]
cmp eax, dword ptr [rdi+0x10]
- je SHORT G_M38819_IG51
- ;; size=18 bbWeight=2 PerfScore 17.00
-G_M38819_IG49:
- mov rdi, qword ptr [r13+0x30]
+ mov rax, qword ptr [rbp-0x1D0]
+ je SHORT G_M38819_IG52
+ ;; size=25 bbWeight=2 PerfScore 19.00
+G_M38819_IG50:
+ mov rdi, qword ptr [rax+0x30]
mov rdi, qword ptr [rdi]
mov rdi, qword ptr [rdi+0x10]
test rdi, rdi
- je G_M38819_IG63
+ je G_M38819_IG64
;; size=20 bbWeight=2 PerfScore 14.50
-G_M38819_IG50:
- mov qword ptr [rbp-0x1D0], rdi
+G_M38819_IG51:
+ mov qword ptr [rbp-0x1E0], rdi
lea rdi, [rsp]
lea rsi, [rbp-0x68]
mov rcx, gword ptr [rsi]
mov gword ptr [rsp], rcx
add rsi, 8
add rdi, 8
mov rcx, gword ptr [rsi]
mov gword ptr [rsp+0x08], rcx
add rsi, 8
add rdi, 8
mov rcx, gword ptr [rsi]
mov gword ptr [rsp+0x10], rcx
add rsi, 8
add rdi, 8
mov rcx, gword ptr [rsi]
mov gword ptr [rsp+0x18], rcx
add rsi, 8
add rdi, 8
movsq
movsq
movsq
- mov rdi, qword ptr [rbp-0x1D0]
+ mov rdi, qword ptr [rbp-0x1E0]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailObjectDisposed[System.Collections.Immutable.ImmutableList`1+Enumerator[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]](System.Collections.Immutable.ImmutableList`1+Enumerator[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]])
call [rax]System.Collections.Immutable.Requires:FailObjectDisposed[System.Collections.Immutable.ImmutableList`1+Enumerator[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]]](System.Collections.Immutable.ImmutableList`1+Enumerator[System.Collections.Generic.KeyValuePair`2[System.__Canon,System.Nullable`1[int]]])
;; size=103 bbWeight=2 PerfScore 46.50
-G_M38819_IG51:
+G_M38819_IG52:
mov rsi, gword ptr [rbp-0x50]
test rsi, rsi
- je G_M38819_IG56
+ je G_M38819_IG57
add rsi, 32
- mov r13, gword ptr [rsi]
- movzx rax, byte ptr [rsi+0x08]
- mov ecx, dword ptr [rsi+0x0C]
- ;; size=27 bbWeight=2 PerfScore 17.00
-G_M38819_IG52:
- mov byte ptr [rbp-0xC0], al
- mov dword ptr [rbp-0xBC], ecx
+ mov rax, gword ptr [rsi]
+ mov gword ptr [rbp-0x238], rax
+ movzx rcx, byte ptr [rsi+0x08]
+ mov edx, dword ptr [rsi+0x0C]
+ ;; size=34 bbWeight=2 PerfScore 19.00
+G_M38819_IG53:
+ mov byte ptr [rbp-0xC0], cl
+ mov dword ptr [rbp-0xBC], edx
lea rsi, [rbp-0xC0]
mov rdi, 0xD1FFAB1E ; System.Nullable`1[int]
call CORINFO_HELP_BOX_NULLABLE
- mov gword ptr [rbp-0x218], rax
+ mov rcx, gword ptr [rbp-0x238]
+ mov gword ptr [rbp-0x228], rcx
+ mov gword ptr [rbp-0x230], rax
mov rdi, 0xD1FFAB1E ; System.Collections.DictionaryEntry
call CORINFO_HELP_NEWSFAST
- mov gword ptr [rbp-0x1F0], rax
+ mov gword ptr [rbp-0x200], rax
lea rdi, bword ptr [rax+0x08]
- mov rsi, r13
+ mov rsi, gword ptr [rbp-0x228]
call CORINFO_HELP_ASSIGN_REF
- mov r13, gword ptr [rbp-0x1F0]
- lea rdi, bword ptr [r13+0x10]
- mov rsi, gword ptr [rbp-0x218]
+ mov rax, gword ptr [rbp-0x200]
+ lea rdi, bword ptr [rax+0x10]
+ mov rsi, gword ptr [rbp-0x230]
call CORINFO_HELP_ASSIGN_REF
mov esi, r15d
lea r15d, [rsi+0x01]
mov rdi, qword ptr [rbx]
mov eax, dword ptr [rdi+0x04]
add eax, -24
shr eax, 3
- jne G_M38819_IG64
- ;; size=123 bbWeight=2 PerfScore 37.50
-G_M38819_IG53:
+ jne G_M38819_IG65
+ ;; size=141 bbWeight=2 PerfScore 43.00
+G_M38819_IG54:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Array:GetFlattenedIndex(int):long:this
call [rax]System.Array:GetFlattenedIndex(int):long:this
mov rdx, rax
- mov rsi, r13
+ mov rsi, gword ptr [rbp-0x200]
mov rdi, rbx
call System.Array:InternalSetValue(System.Object,long):this
- mov r8, gword ptr [rbp-0x1E8]
- ;; size=36 bbWeight=2 PerfScore 12.50
-G_M38819_IG54:
- mov rdi, qword ptr [r8]
+ ;; size=33 bbWeight=2 PerfScore 12.00
+G_M38819_IG55:
+ mov rdi, qword ptr [r13]
mov rsi, qword ptr [rdi+0x30]
mov rsi, qword ptr [rsi]
mov rsi, qword ptr [rsi+0x60]
test rsi, rsi
- je G_M38819_IG65
- ;; size=23 bbWeight=8 PerfScore 74.00
-G_M38819_IG55:
+ je G_M38819_IG66
+ ;; size=24 bbWeight=8 PerfScore 74.00
+G_M38819_IG56:
lea rdi, [rbp-0xB8]
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]:MoveNext():ubyte:this
call [rax]System.Collections.Immutable.ImmutableDictionary`2+Enumerator[System.__Canon,System.Nullable`1[int]]:MoveNext():ubyte:this
test eax, eax
jne G_M38819_IG31
- jmp G_M38819_IG66
+ jmp G_M38819_IG67
;; size=32 bbWeight=8 PerfScore 56.00
-G_M38819_IG56:
+G_M38819_IG57:
mov rdi, 0xD1FFAB1E ; System.InvalidOperationException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.InvalidOperationException:.ctor():this
call [rax]System.InvalidOperationException:.ctor():this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=42 bbWeight=0 PerfScore 0.00
-G_M38819_IG57:
+G_M38819_IG58:
mov rdi, 0xD1FFAB1E ; System.InvalidOperationException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.InvalidOperationException:.ctor():this
call [rax]System.InvalidOperationException:.ctor():this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=42 bbWeight=0 PerfScore 0.00
-G_M38819_IG58:
+G_M38819_IG59:
mov edi, 58
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException(int)
call [rax]System.ThrowHelper:ThrowArgumentException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
-G_M38819_IG59:
- mov r13, gword ptr [rbp-0x78]
- movzx rax, byte ptr [rbp-0x70]
- mov ecx, dword ptr [rbp-0x6C]
- jmp G_M38819_IG52
- ;; size=16 bbWeight=2 PerfScore 10.00
G_M38819_IG60:
+ mov rax, gword ptr [rbp-0x78]
+ movzx rcx, byte ptr [rbp-0x70]
+ mov edx, dword ptr [rbp-0x6C]
+ mov gword ptr [rbp-0x238], rax
+ jmp G_M38819_IG53
+ ;; size=23 bbWeight=2 PerfScore 12.00
+G_M38819_IG61:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov r13, rax
jmp G_M38819_IG46
- ;; size=23 bbWeight=0.40 PerfScore 1.40
-G_M38819_IG61:
- mov rdi, r13
+ ;; size=20 bbWeight=0.40 PerfScore 1.30
+G_M38819_IG62:
+ mov qword ptr [rbp-0x1D0], rax
+ mov rdi, rax
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
+ mov rax, qword ptr [rbp-0x1D0]
jmp G_M38819_IG47
- ;; size=26 bbWeight=0.40 PerfScore 1.50
-G_M38819_IG62:
+ ;; size=40 bbWeight=0.40 PerfScore 2.30
+G_M38819_IG63:
+ mov qword ptr [rbp-0x1D0], rax
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rcx, rax
- jmp G_M38819_IG48
- ;; size=23 bbWeight=0.40 PerfScore 1.40
-G_M38819_IG63:
- mov rdi, r13
+ mov rdx, rax
+ jmp G_M38819_IG49
+ ;; size=30 bbWeight=0.40 PerfScore 1.80
+G_M38819_IG64:
+ mov rdi, rax
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rdi, rax
- jmp G_M38819_IG50
+ jmp G_M38819_IG51
;; size=26 bbWeight=0.40 PerfScore 1.50
-G_M38819_IG64:
+G_M38819_IG65:
cmp eax, 1
- jne G_M38819_IG58
- jmp G_M38819_IG53
+ jne G_M38819_IG59
+ jmp G_M38819_IG54
;; size=14 bbWeight=2 PerfScore 6.50
-G_M38819_IG65:
+G_M38819_IG66:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
mov rsi, rax
- jmp G_M38819_IG55
+ jmp G_M38819_IG56
;; size=23 bbWeight=1.60 PerfScore 5.60
-G_M38819_IG66:
- mov r8, gword ptr [rbp-0x1E8]
- mov rdi, qword ptr [r8]
+G_M38819_IG67:
+ mov rdi, qword ptr [r13]
mov rsi, qword ptr [rdi+0x30]
mov rsi, qword ptr [rsi]
mov rax, qword ptr [rsi+0x80]
test rax, rax
- je SHORT G_M38819_IG68
- ;; size=29 bbWeight=1 PerfScore 10.25
-G_M38819_IG67:
- jmp SHORT G_M38819_IG69
- ;; size=2 bbWeight=0.80 PerfScore 1.60
+ je SHORT G_M38819_IG69
+ ;; size=23 bbWeight=1 PerfScore 9.25
G_M38819_IG68:
+ jmp SHORT G_M38819_IG70
+ ;; size=2 bbWeight=0.80 PerfScore 1.60
+G_M38819_IG69:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
;; size=15 bbWeight=0.20 PerfScore 0.25
-G_M38819_IG69:
+G_M38819_IG70:
lea rdi, [rbp-0xB8]
call rax
nop
;; size=10 bbWeight=1 PerfScore 3.75
-G_M38819_IG70:
+G_M38819_IG71:
vzeroupper
- add rsp, 568
+ add rsp, 600
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=21 bbWeight=1 PerfScore 5.25
-G_M38819_IG71:
+G_M38819_IG72:
call CORINFO_HELP_OVERFLOW
int3
;; size=6 bbWeight=0 PerfScore 0.00
-G_M38819_IG72:
+G_M38819_IG73:
mov edi, 0x497
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
call [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
int3
;; size=36 bbWeight=0 PerfScore 0.00
-G_M38819_IG73:
+G_M38819_IG74:
mov edi, 0x4A3
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
xor rsi, rsi
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailRange(System.String,System.String)
call [rax]System.Collections.Immutable.Requires:FailRange(System.String,System.String)
int3
;; size=38 bbWeight=0 PerfScore 0.00
-G_M38819_IG74:
+G_M38819_IG75:
mov edi, 0x45F
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
call [rax]System.Collections.Immutable.Requires:FailArgumentNullException(System.String)
int3
;; size=36 bbWeight=0 PerfScore 0.00
-G_M38819_IG75:
+G_M38819_IG76:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 72
mov rbp, qword ptr [rdi+0x38]
mov qword ptr [rsp+0x38], rbp
- lea rbp, [rbp+0x260]
+ lea rbp, [rbp+0x280]
;; size=30 bbWeight=0 PerfScore 0.00
-G_M38819_IG76:
- mov r8, gword ptr [rbp-0x1E8]
- mov rdi, qword ptr [r8]
+G_M38819_IG77:
+ mov r13, gword ptr [rbp-0x1F8]
+ mov rdi, qword ptr [r13]
mov rsi, qword ptr [rdi+0x30]
mov rsi, qword ptr [rsi]
mov rax, qword ptr [rsi+0x80]
test rax, rax
- je SHORT G_M38819_IG77
- jmp SHORT G_M38819_IG78
- ;; size=31 bbWeight=0 PerfScore 0.00
-G_M38819_IG77:
+ je SHORT G_M38819_IG78
+ jmp SHORT G_M38819_IG79
+ ;; size=32 bbWeight=0 PerfScore 0.00
+G_M38819_IG78:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
;; size=15 bbWeight=0 PerfScore 0.00
-G_M38819_IG78:
+G_M38819_IG79:
lea rdi, [rbp-0xB8]
call rax
nop
;; size=10 bbWeight=0 PerfScore 0.00
-G_M38819_IG79:
+G_M38819_IG80:
vzeroupper
add rsp, 72
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=18 bbWeight=0 PerfScore 0.00
-; Total bytes of code 2276, prolog size 91, PerfScore 704.94, instruction count 503, allocated bytes for code 2276 (MethodHash=5858685c) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts)
+; Total bytes of code 2350, prolog size 88, PerfScore 697.24, instruction count 512, allocated bytes for code 2350 (MethodHash=5858685c) for method System.Collections.Immutable.ImmutableDictionary`2+Builder[System.__Canon,System.Nullable`1[int]]:System.Collections.ICollection.CopyTo(System.Array,int):this (FullOpts) Larger list of diffs: https://gist.github.com/MihuBot/94fdb8e44b8c2e2f8508b55e349cdbf0 |
Top method improvements-223 (-30.26 % of base) - System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+d__6:MoveNext():ubyte:this ; Assembly listing for method System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateDnsNames>d__6:MoveNext():ubyte: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; 5 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T03] ( 14, 20 ) ref -> [rbp-0x130] this class-hnd EH-live single-def <System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateDnsNames>d__6>
-; V01 loc0 [V01,T09] ( 4, 6 ) ubyte -> rax
-; V02 loc1 [V02,T14] ( 3, 2.50) int -> rdi
+; V00 this [V00,T05] ( 14, 20 ) ref -> [rbp-0x130] this class-hnd EH-live single-def <System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateDnsNames>d__6>
+; V01 loc0 [V01,T11] ( 4, 6 ) ubyte -> rax
+; V02 loc1 [V02,T17] ( 3, 2.50) int -> rsi
;* V03 loc2 [V03 ] ( 0, 0 ) struct (264) zero-ref do-not-enreg[SF] <System.Security.Cryptography.Asn1.GeneralNameAsn>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V05 tmp1 [V05,T12] ( 3, 3 ) ref -> rbx class-hnd single-def "Inlining Arg" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
-; V06 tmp2 [V06,T13] ( 3, 3 ) struct (280) [rbp-0x128] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[System.Security.Cryptography.Asn1.GeneralNameAsn]>
+; V05 tmp1 [V05,T14] ( 3, 3 ) ref -> rbx class-hnd single-def "Inlining Arg" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
+; V06 tmp2 [V06,T16] ( 3, 3 ) struct (280) [rbp-0x128] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[System.Security.Cryptography.Asn1.GeneralNameAsn]>
;* V07 tmp3 [V07 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V08 tmp4 [V08,T07] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V09 tmp5 [V09,T00] ( 9, 72 ) byref -> r8 "Inlining Arg"
-; V10 tmp6 [V10,T04] ( 4, 16 ) ref -> rdi class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
-; V11 tmp7 [V11,T10] ( 3, 4.50) ref -> rsi "V03.[008..016)"
+;* V08 tmp4 [V08,T09] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V09 tmp5 [V09,T00] ( 9, 72 ) byref -> rbx "Inlining Arg"
+; V10 tmp6 [V10,T06] ( 4, 16 ) ref -> rsi class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
+; V11 tmp7 [V11,T12] ( 3, 4.50) ref -> rsi "V03.[008..016)"
;* V12 tmp8 [V12 ] ( 0, 0 ) ref -> zero-ref single-def "V06.[000..008)"
;* V13 tmp9 [V13 ] ( 0, 0 ) int -> zero-ref "V06.[008..012)"
-; V14 tmp10 [V14,T15] ( 2, 1 ) int -> r15 "V06.[012..016)"
-; V15 tmp11 [V15,T11] ( 4, 4 ) byref -> r8 single-def "Spilling address for field-by-field copy"
-; V16 tmp12 [V16,T01] ( 3, 24 ) ref -> rdi "arr expr"
-; V17 tmp13 [V17,T02] ( 3, 24 ) int -> rsi "index expr"
-; V18 PSPSym [V18,T16] ( 1, 1 ) long -> [rbp-0x140] do-not-enreg[V] "PSPSym"
-; V19 cse0 [V19,T06] ( 3, 12 ) int -> rsi "CSE #02: aggressive"
-; V20 cse1 [V20,T08] ( 2, 8 ) int -> rsi "CSE #03: aggressive"
-; V21 cse2 [V21,T05] ( 3, 12 ) ref -> r9 "CSE #04: aggressive"
+; V14 tmp10 [V14,T18] ( 2, 1 ) int -> r15 "V06.[012..016)"
+; V15 tmp11 [V15,T13] ( 4, 4 ) byref -> rbx single-def "Spilling address for field-by-field copy"
+; V16 tmp12 [V16,T01] ( 3, 24 ) ref -> rsi "arr expr"
+; V17 tmp13 [V17,T04] ( 3, 24 ) int -> rdx "index expr"
+; V18 PSPSym [V18,T19] ( 1, 1 ) long -> [rbp-0x140] do-not-enreg[V] "PSPSym"
+; V19 cse0 [V19,T08] ( 3, 12 ) int -> rdx "CSE #02: aggressive"
+; V20 cse1 [V20,T10] ( 2, 8 ) int -> rdx "CSE #03: aggressive"
+; V21 cse2 [V21,T07] ( 3, 12 ) ref -> r15 "CSE #04: aggressive"
+; V22 rat0 [V22,T15] ( 3, 3 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
+; V23 rat1 [V23,T02] ( 3, 24 ) byref -> rdx "ReplaceWithLclVar is creating a new local variable"
+; V24 rat2 [V24,T03] ( 3, 24 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 304
G_M24674_IG01:
push rbp
push r15
push rbx
sub rsp, 304
lea rbp, [rsp+0x140]
xor eax, eax
mov qword ptr [rbp-0x128], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x120], xmm8
vmovdqa xmmword ptr [rbp-0x110], xmm8
mov rax, -240
vmovdqa xmmword ptr [rbp+rax-0x10], xmm8
vmovdqa xmmword ptr [rax+rbp], xmm8
vmovdqa xmmword ptr [rbp+rax+0x10], xmm8
add rax, 48
jne SHORT -5 instr
mov qword ptr [rbp-0x140], rsp
mov gword ptr [rbp-0x130], rdi
- mov rdx, rdi
- ;; size=99 bbWeight=1 PerfScore 19.08
+ ;; size=96 bbWeight=1 PerfScore 18.83
G_M24674_IG02:
- mov edi, dword ptr [rdx+0x20]
- test edi, edi
+ mov esi, dword ptr [rdi+0x20]
+ test esi, esi
je SHORT G_M24674_IG04
;; size=7 bbWeight=1 PerfScore 3.25
G_M24674_IG03:
- cmp edi, 1
- je G_M24674_IG16
+ cmp esi, 1
+ je G_M24674_IG14
xor eax, eax
- jmp G_M24674_IG17
+ jmp G_M24674_IG15
;; size=16 bbWeight=0.50 PerfScore 1.75
G_M24674_IG04:
- mov dword ptr [rdx+0x20], -1
- mov rbx, gword ptr [rdx+0x10]
+ mov dword ptr [rdi+0x20], -1
+ mov rbx, gword ptr [rdi+0x10]
mov r15d, dword ptr [rbx+0x14]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_MEMZERO
lea rdi, bword ptr [rbp-0x118]
mov esi, 264
call [rax]CORINFO_HELP_MEMZERO
mov gword ptr [rbp-0x128], rbx
- mov rdx, gword ptr [rbp-0x130]
- lea r8, bword ptr [rdx+0x28]
- mov rdi, r8
- lea rsi, bword ptr [rbp-0x128]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- ;; size=152 bbWeight=0.50 PerfScore 17.62
-G_M24674_IG05:
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+ mov rdi, gword ptr [rbp-0x130]
+ lea rbx, bword ptr [rdi+0x28]
+ mov rsi, rbx
+ cmp byte ptr [rsi], sil
+ mov rdi, rsi
+ lea rsi, [rbp-0x128]
+ mov edx, 280
+ call CORINFO_HELP_ASSIGN_STRUCT
xor edi, edi
- mov dword ptr [r8+0x08], edi
- mov dword ptr [r8+0x0C], r15d
- jmp G_M24674_IG16
- ;; size=60 bbWeight=0.50 PerfScore 8.12
-G_M24674_IG06:
- mov rsi, gword ptr [rdx+0x40]
+ mov dword ptr [rbx+0x08], edi
+ mov dword ptr [rbx+0x0C], r15d
+ mov rdi, gword ptr [rbp-0x130]
+ jmp G_M24674_IG14
+ ;; size=104 bbWeight=0.50 PerfScore 11.00
+G_M24674_IG05:
+ mov rdi, gword ptr [rbp-0x130]
+ mov rsi, gword ptr [rdi+0x40]
test rsi, rsi
- jne G_M24674_IG15
- ;; size=13 bbWeight=2 PerfScore 6.50
+ jne G_M24674_IG13
+ ;; size=20 bbWeight=2 PerfScore 8.50
+G_M24674_IG06:
+ lea rbx, bword ptr [rdi+0x28]
+ mov r15, gword ptr [rbx]
+ mov rsi, r15
+ mov edx, dword ptr [rbx+0x0C]
+ cmp edx, dword ptr [rsi+0x14]
+ jne SHORT G_M24674_IG07
+ mov edx, dword ptr [rbx+0x08]
+ cmp edx, dword ptr [rsi+0x10]
+ jae SHORT G_M24674_IG09
+ mov rsi, gword ptr [rsi+0x08]
+ cmp edx, dword ptr [rsi+0x08]
+ jae SHORT G_M24674_IG08
+ imul rdx, rdx, 264
+ lea rsi, bword ptr [rsi+rdx+0x10]
+ cmp byte ptr [rsi], sil
+ lea rdx, bword ptr [rbx+0x10]
+ cmp byte ptr [rdx], dl
+ mov rdi, rdx
+ mov edx, 264
+ call CORINFO_HELP_ASSIGN_STRUCT
+ inc dword ptr [rbx+0x08]
+ jmp SHORT G_M24674_IG05
+ ;; size=74 bbWeight=4 PerfScore 147.00
G_M24674_IG07:
- lea r8, bword ptr [rdx+0x28]
- mov r9, gword ptr [r8]
- mov rdi, r9
- mov esi, dword ptr [r8+0x0C]
- cmp esi, dword ptr [rdi+0x14]
- jne G_M24674_IG09
- mov esi, dword ptr [r8+0x08]
- cmp esi, dword ptr [rdi+0x10]
- jae G_M24674_IG11
- mov rdi, gword ptr [rdi+0x08]
- cmp esi, dword ptr [rdi+0x08]
- jae G_M24674_IG10
- imul rsi, rsi, 264
- lea rsi, bword ptr [rdi+rsi+0x10]
- lea rdi, bword ptr [r8+0x10]
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- ;; size=141 bbWeight=4 PerfScore 177.00
-G_M24674_IG08:
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- inc dword ptr [r8+0x08]
- jmp G_M24674_IG06
- ;; size=56 bbWeight=4 PerfScore 72.00
-G_M24674_IG09:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
call [rax]System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M24674_IG10:
+G_M24674_IG08:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
-G_M24674_IG11:
- mov esi, dword ptr [r9+0x10]
+G_M24674_IG09:
+ mov esi, dword ptr [r15+0x10]
inc esi
- mov dword ptr [r8+0x08], esi
- add r8, 16
- xor edi, edi
- mov qword ptr [r8], rdi
- mov esi, 256
- ;; size=24 bbWeight=4 PerfScore 20.00
-G_M24674_IG12:
- mov qword ptr [r8+rsi], rdi
- sub rsi, 8
- jne SHORT G_M24674_IG12
- mov dword ptr [rdx+0x20], -1
- lea rdi, bword ptr [rdx+0x28]
+ mov dword ptr [rbx+0x08], esi
+ add rbx, 16
xor esi, esi
- mov qword ptr [rdi], rsi
- mov eax, 272
- ;; size=31 bbWeight=4 PerfScore 21.00
-G_M24674_IG13:
- mov qword ptr [rdi+rax], rsi
+ mov qword ptr [rbx], rsi
+ mov eax, 256
+ ;; size=23 bbWeight=4 PerfScore 20.00
+G_M24674_IG10:
+ mov qword ptr [rbx+rax], rsi
sub rax, 8
- jne SHORT G_M24674_IG13
- ;; size=10 bbWeight=4 PerfScore 9.00
-G_M24674_IG14:
+ jne SHORT G_M24674_IG10
+ mov rdi, gword ptr [rbp-0x130]
+ mov dword ptr [rdi+0x20], -1
+ lea rsi, bword ptr [rdi+0x28]
xor eax, eax
- jmp SHORT G_M24674_IG17
- ;; size=4 bbWeight=4 PerfScore 9.00
-G_M24674_IG15:
- lea rdi, bword ptr [rdx+0x08]
+ mov qword ptr [rsi], rax
+ mov ecx, 272
+ ;; size=38 bbWeight=4 PerfScore 25.00
+G_M24674_IG11:
+ mov qword ptr [rsi+rcx], rax
+ sub rcx, 8
+ jne SHORT G_M24674_IG11
+ ;; size=10 bbWeight=4 PerfScore 9.00
+G_M24674_IG12:
+ jmp SHORT G_M24674_IG15
+ ;; size=2 bbWeight=4 PerfScore 8.00
+G_M24674_IG13:
+ lea rdi, bword ptr [rdi+0x08]
call CORINFO_HELP_ASSIGN_REF
- mov rdx, gword ptr [rbp-0x130]
- mov dword ptr [rdx+0x20], 1
+ mov rdi, gword ptr [rbp-0x130]
+ mov dword ptr [rdi+0x20], 1
mov eax, 1
- jmp SHORT G_M24674_IG17
+ jmp SHORT G_M24674_IG15
;; size=30 bbWeight=0.50 PerfScore 2.88
-G_M24674_IG16:
- mov dword ptr [rdx+0x20], -3
- jmp G_M24674_IG07
+G_M24674_IG14:
+ mov dword ptr [rdi+0x20], -3
+ jmp G_M24674_IG06
;; size=12 bbWeight=0.50 PerfScore 1.50
-G_M24674_IG17:
+G_M24674_IG15:
add rsp, 304
pop rbx
pop r15
pop rbp
ret
;; size=12 bbWeight=1 PerfScore 2.75
-G_M24674_IG18:
+G_M24674_IG16:
push rbp
push r15
push rbx
sub rsp, 16
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x140]
;; size=22 bbWeight=0 PerfScore 0.00
-G_M24674_IG19:
+G_M24674_IG17:
mov rdi, gword ptr [rbp-0x130]
mov rax, 0xD1FFAB1E ; code for System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateDnsNames>d__6:System.IDisposable.Dispose():this
call [rax]System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateDnsNames>d__6:System.IDisposable.Dispose():this
nop
;; size=20 bbWeight=0 PerfScore 0.00
-G_M24674_IG20:
+G_M24674_IG18:
add rsp, 16
pop rbx
pop r15
pop rbp
ret
;; size=9 bbWeight=0 PerfScore 0.00
-; Total bytes of code 737, prolog size 99, PerfScore 371.46, instruction count 184, allocated bytes for code 737 (MethodHash=50d49f9d) for method System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateDnsNames>d__6:MoveNext():ubyte:this (FullOpts)
+; Total bytes of code 514, prolog size 96, PerfScore 259.46, instruction count 126, allocated bytes for code 514 (MethodHash=50d49f9d) for method System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateDnsNames>d__6:MoveNext():ubyte:this (FullOpts) -220 (-23.53 % of base) - System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+d__8:MoveNext():ubyte:this ; Assembly listing for method System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateIPAddresses>d__8:MoveNext():ubyte: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; 12 single block inlinees; 3 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T03] ( 14, 20 ) ref -> [rbp-0x140] this class-hnd EH-live single-def <System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateIPAddresses>d__8>
-; V01 loc0 [V01,T10] ( 4, 6 ) ubyte -> rax
-; V02 loc1 [V02,T20] ( 3, 2.50) int -> rdi
+; V00 this [V00,T05] ( 14, 20 ) ref -> [rbp-0x140] this class-hnd EH-live single-def <System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateIPAddresses>d__8>
+; V01 loc0 [V01,T12] ( 4, 6 ) ubyte -> rax
+; V02 loc1 [V02,T23] ( 3, 2.50) int -> rsi
;* V03 loc2 [V03 ] ( 0, 0 ) struct (264) zero-ref do-not-enreg[SF] ld-addr-op <System.Security.Cryptography.Asn1.GeneralNameAsn>
;* V04 loc3 [V04 ] ( 0, 0 ) struct (16) zero-ref <System.ReadOnlySpan`1[ubyte]>
;* V05 loc4 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlyMemory`1[ubyte]>
;# V06 OutArgs [V06 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V07 tmp1 [V07,T16] ( 3, 3 ) ref -> r15 class-hnd exact "NewObj constructor temp" <System.Net.IPAddress>
-; V08 tmp2 [V08,T17] ( 3, 3 ) ref -> rbx class-hnd single-def "Inlining Arg" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
-; V09 tmp3 [V09,T18] ( 3, 3 ) struct (280) [rbp-0x138] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[System.Security.Cryptography.Asn1.GeneralNameAsn]>
+; V07 tmp1 [V07,T18] ( 3, 3 ) ref -> r14 class-hnd exact "NewObj constructor temp" <System.Net.IPAddress>
+; V08 tmp2 [V08,T19] ( 3, 3 ) ref -> rbx class-hnd single-def "Inlining Arg" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
+; V09 tmp3 [V09,T21] ( 3, 3 ) struct (280) [rbp-0x138] do-not-enreg[SF] must-init ld-addr-op "NewObj constructor temp" <System.Collections.Generic.List`1+Enumerator[System.Security.Cryptography.Asn1.GeneralNameAsn]>
;* V10 tmp4 [V10 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
;* V11 tmp5 [V11 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ubyte]>
-; V12 tmp6 [V12,T14] ( 6, 3 ) byref -> r14 "Inline stloc first use temp"
-; V13 tmp7 [V13,T15] ( 6, 3 ) int -> r13 "Inline stloc first use temp"
+; V12 tmp6 [V12,T16] ( 6, 3 ) byref -> rbx "Inline stloc first use temp"
+; V13 tmp7 [V13,T17] ( 6, 3 ) int -> r15 "Inline stloc first use temp"
;* V14 tmp8 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Object>
;* V15 tmp9 [V15 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V16 tmp10 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[ubyte]>
;* V17 tmp11 [V17 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Span`1[ubyte]>
;* V18 tmp12 [V18 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline stloc first use temp" <System.Span`1[ubyte]>
-; V19 tmp13 [V19,T23] ( 3, 1.50) long -> rdi "Inline stloc first use temp"
+; V19 tmp13 [V19,T26] ( 3, 1.50) long -> rax "Inline stloc first use temp"
;* V20 tmp14 [V20 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V21 tmp15 [V21 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <ubyte[]>
;* V22 tmp16 [V22 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <ubyte[]>
-; V23 tmp17 [V23,T22] ( 2, 2 ) byref -> rax "Inlining Arg"
+; V23 tmp17 [V23,T25] ( 2, 2 ) byref -> rax "Inlining Arg"
;* V24 tmp18 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-;* V25 tmp19 [V25,T08] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V26 tmp20 [V26,T00] ( 9, 72 ) byref -> r8 "Inlining Arg"
-; V27 tmp21 [V27,T05] ( 4, 16 ) ref -> rdi class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
+;* V25 tmp19 [V25,T10] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V26 tmp20 [V26,T00] ( 9, 72 ) byref -> rbx "Inlining Arg"
+; V27 tmp21 [V27,T07] ( 4, 16 ) ref -> rsi class-hnd "Inline stloc first use temp" <System.Collections.Generic.List`1[System.Security.Cryptography.Asn1.GeneralNameAsn]>
;* V28 tmp22 [V28 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
;* V29 tmp23 [V29 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
;* V30 tmp24 [V30 ] ( 0, 0 ) ref -> zero-ref "field V05._object (fldOffset=0x0)" P-INDEP
;* V31 tmp25 [V31 ] ( 0, 0 ) int -> zero-ref "field V05._index (fldOffset=0x8)" P-INDEP
;* V32 tmp26 [V32 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0xc)" P-INDEP
;* V33 tmp27 [V33 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
;* V34 tmp28 [V34 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
-; V35 tmp29 [V35,T24] ( 2, 1 ) byref -> rbx "field V15._reference (fldOffset=0x0)" P-INDEP
-; V36 tmp30 [V36,T26] ( 2, 1 ) int -> r13 "field V15._length (fldOffset=0x8)" P-INDEP
+; V35 tmp29 [V35,T27] ( 2, 1 ) byref -> rbx "field V15._reference (fldOffset=0x0)" P-INDEP
+; V36 tmp30 [V36,T29] ( 2, 1 ) int -> r15 "field V15._length (fldOffset=0x8)" P-INDEP
;* V37 tmp31 [V37 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-DEP
;* V38 tmp32 [V38 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-DEP
-; V39 tmp33 [V39,T25] ( 2, 1 ) byref -> r14 "field V18._reference (fldOffset=0x0)" P-INDEP
-; V40 tmp34 [V40,T27] ( 2, 1 ) int -> r13 "field V18._length (fldOffset=0x8)" P-INDEP
+; V39 tmp33 [V39,T28] ( 2, 1 ) byref -> rbx "field V18._reference (fldOffset=0x0)" P-INDEP
+; V40 tmp34 [V40,T30] ( 2, 1 ) int -> r15 "field V18._length (fldOffset=0x8)" P-INDEP
;* V41 tmp35 [V41 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP
;* V42 tmp36 [V42 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
-; V43 tmp37 [V43,T13] ( 2, 4 ) ubyte -> r8 "V03.[240..241)"
-; V44 tmp38 [V44,T11] ( 7, 5 ) ref -> rdi "V03.[248..256)"
-; V45 tmp39 [V45,T21] ( 2, 2.50) int -> rbx "V03.[256..260)"
-; V46 tmp40 [V46,T19] ( 3, 3 ) int -> r15 "V03.[260..264)"
+; V43 tmp37 [V43,T15] ( 2, 4 ) ubyte -> rcx "V03.[240..241)"
+; V44 tmp38 [V44,T13] ( 7, 5 ) ref -> rdx "V03.[248..256)"
+; V45 tmp39 [V45,T24] ( 2, 2.50) int -> r14 "V03.[256..260)"
+; V46 tmp40 [V46,T22] ( 3, 3 ) int -> r13 "V03.[260..264)"
;* V47 tmp41 [V47 ] ( 0, 0 ) ref -> zero-ref single-def "V09.[000..008)"
;* V48 tmp42 [V48 ] ( 0, 0 ) int -> zero-ref "V09.[008..012)"
-; V49 tmp43 [V49,T28] ( 2, 1 ) int -> r15 "V09.[012..016)"
-; V50 tmp44 [V50,T12] ( 4, 4 ) byref -> r8 single-def "Spilling address for field-by-field copy"
-; V51 tmp45 [V51,T04] ( 5, 20 ) byref -> r9 "Spilling address for field-by-field copy"
-; V52 tmp46 [V52,T01] ( 3, 24 ) ref -> rdi "arr expr"
-; V53 tmp47 [V53,T02] ( 3, 24 ) int -> rsi "index expr"
-; V54 PSPSym [V54,T29] ( 1, 1 ) long -> [rbp-0x150] do-not-enreg[V] "PSPSym"
-; V55 cse0 [V55,T07] ( 3, 12 ) int -> rsi "CSE #02: aggressive"
-; V56 cse1 [V56,T09] ( 2, 8 ) int -> rsi "CSE #03: aggressive"
-; V57 cse2 [V57,T06] ( 3, 12 ) ref -> r9 "CSE #04: aggressive"
+; V49 tmp43 [V49,T31] ( 2, 1 ) int -> r15 "V09.[012..016)"
+; V50 tmp44 [V50,T14] ( 4, 4 ) byref -> rbx single-def "Spilling address for field-by-field copy"
+; V51 tmp45 [V51,T06] ( 5, 20 ) byref -> rax "Spilling address for field-by-field copy"
+; V52 tmp46 [V52,T01] ( 3, 24 ) ref -> rsi "arr expr"
+; V53 tmp47 [V53,T04] ( 3, 24 ) int -> rdx "index expr"
+; V54 PSPSym [V54,T32] ( 1, 1 ) long -> [rbp-0x150] do-not-enreg[V] "PSPSym"
+; V55 cse0 [V55,T09] ( 3, 12 ) int -> rdx "CSE #02: aggressive"
+; V56 cse1 [V56,T11] ( 2, 8 ) int -> rdx "CSE #03: aggressive"
+; V57 cse2 [V57,T08] ( 3, 12 ) ref -> r15 "CSE #04: aggressive"
+; V58 rat0 [V58,T20] ( 3, 3 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
+; V59 rat1 [V59,T02] ( 3, 24 ) byref -> rdx "ReplaceWithLclVar is creating a new local variable"
+; V60 rat2 [V60,T03] ( 3, 24 ) byref -> rsi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 304
G_M43288_IG01:
push rbp
push r15
push r14
push r13
push rbx
sub rsp, 304
lea rbp, [rsp+0x150]
xor eax, eax
mov qword ptr [rbp-0x138], rax
vxorps xmm8, xmm8, xmm8
vmovdqa xmmword ptr [rbp-0x130], xmm8
vmovdqa xmmword ptr [rbp-0x120], xmm8
mov rax, -240
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-0x150], rsp
mov gword ptr [rbp-0x140], rdi
- mov rdx, rdi
- ;; size=103 bbWeight=1 PerfScore 21.08
+ ;; size=100 bbWeight=1 PerfScore 20.83
G_M43288_IG02:
- mov edi, dword ptr [rdx+0x20]
- test edi, edi
+ mov esi, dword ptr [rdi+0x20]
+ test esi, esi
je SHORT G_M43288_IG04
;; size=7 bbWeight=1 PerfScore 3.25
G_M43288_IG03:
- cmp edi, 1
- je G_M43288_IG20
+ cmp esi, 1
+ je G_M43288_IG18
xor eax, eax
- jmp G_M43288_IG21
+ jmp G_M43288_IG19
;; size=16 bbWeight=0.50 PerfScore 1.75
G_M43288_IG04:
- mov dword ptr [rdx+0x20], -1
- mov rbx, gword ptr [rdx+0x10]
+ mov dword ptr [rdi+0x20], -1
+ mov rbx, gword ptr [rdi+0x10]
mov r15d, dword ptr [rbx+0x14]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_MEMZERO
lea rdi, bword ptr [rbp-0x128]
mov esi, 264
call [rax]CORINFO_HELP_MEMZERO
mov gword ptr [rbp-0x138], rbx
- mov rdx, gword ptr [rbp-0x140]
- lea r8, bword ptr [rdx+0x28]
- mov rdi, r8
- lea rsi, bword ptr [rbp-0x138]
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- ;; size=152 bbWeight=0.50 PerfScore 17.62
-G_M43288_IG05:
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
+ mov rdi, gword ptr [rbp-0x140]
+ lea rbx, bword ptr [rdi+0x28]
+ mov rsi, rbx
+ cmp byte ptr [rsi], sil
+ mov rdi, rsi
+ lea rsi, [rbp-0x138]
+ mov edx, 280
+ call CORINFO_HELP_ASSIGN_STRUCT
xor edi, edi
- mov dword ptr [r8+0x08], edi
- mov dword ptr [r8+0x0C], r15d
- jmp G_M43288_IG20
- ;; size=60 bbWeight=0.50 PerfScore 8.12
+ mov dword ptr [rbx+0x08], edi
+ mov dword ptr [rbx+0x0C], r15d
+ mov rdi, gword ptr [rbp-0x140]
+ jmp G_M43288_IG18
+ ;; size=104 bbWeight=0.50 PerfScore 11.00
+G_M43288_IG05:
+ mov rdi, gword ptr [rbp-0x140]
+ lea rax, bword ptr [rdi+0x38]
+ movzx rcx, byte ptr [rax+0xF0]
+ mov rdx, gword ptr [rax+0xF8]
+ mov r14d, dword ptr [rax+0x100]
+ mov r13d, dword ptr [rax+0x104]
+ test ecx, ecx
+ jne G_M43288_IG14
+ ;; size=47 bbWeight=2 PerfScore 21.50
G_M43288_IG06:
- lea r9, bword ptr [rdx+0x38]
- movzx r8, byte ptr [r9+0xF0]
- mov rdi, gword ptr [r9+0xF8]
- mov ebx, dword ptr [r9+0x100]
- mov r15d, dword ptr [r9+0x104]
- test r8d, r8d
- jne G_M43288_IG16
- ;; size=42 bbWeight=2 PerfScore 19.50
+ lea rbx, bword ptr [rdi+0x28]
+ mov r15, gword ptr [rbx]
+ mov rsi, r15
+ mov edx, dword ptr [rbx+0x0C]
+ cmp edx, dword ptr [rsi+0x14]
+ jne SHORT G_M43288_IG07
+ mov edx, dword ptr [rbx+0x08]
+ cmp edx, dword ptr [rsi+0x10]
+ jae SHORT G_M43288_IG10
+ mov rsi, gword ptr [rsi+0x08]
+ cmp edx, dword ptr [rsi+0x08]
+ jae SHORT G_M43288_IG09
+ imul rdx, rdx, 264
+ lea rsi, bword ptr [rsi+rdx+0x10]
+ cmp byte ptr [rsi], sil
+ lea rdx, bword ptr [rbx+0x10]
+ cmp byte ptr [rdx], dl
+ mov rdi, rdx
+ mov edx, 264
+ call CORINFO_HELP_ASSIGN_STRUCT
+ inc dword ptr [rbx+0x08]
+ jmp SHORT G_M43288_IG05
+ ;; size=74 bbWeight=4 PerfScore 147.00
G_M43288_IG07:
- lea r8, bword ptr [rdx+0x28]
- mov r9, gword ptr [r8]
- mov rdi, r9
- mov esi, dword ptr [r8+0x0C]
- cmp esi, dword ptr [rdi+0x14]
- jne G_M43288_IG09
- mov esi, dword ptr [r8+0x08]
- cmp esi, dword ptr [rdi+0x10]
- jae G_M43288_IG12
- mov rdi, gword ptr [rdi+0x08]
- cmp esi, dword ptr [rdi+0x08]
- jae G_M43288_IG11
- imul rsi, rsi, 264
- lea rsi, bword ptr [rdi+rsi+0x10]
- lea rdi, bword ptr [r8+0x10]
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- ;; size=141 bbWeight=4 PerfScore 177.00
-G_M43288_IG08:
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- inc dword ptr [r8+0x08]
- jmp G_M43288_IG06
- ;; size=56 bbWeight=4 PerfScore 72.00
-G_M43288_IG09:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
call [rax]System.ThrowHelper:ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M43288_IG10:
+G_M43288_IG08:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M43288_IG11:
+G_M43288_IG09:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
+G_M43288_IG10:
+ mov edx, dword ptr [r15+0x10]
+ inc edx
+ mov dword ptr [rbx+0x08], edx
+ add rbx, 16
+ xor eax, eax
+ mov qword ptr [rbx], rax
+ mov ecx, 256
+ ;; size=23 bbWeight=4 PerfScore 20.00
+G_M43288_IG11:
+ mov qword ptr [rbx+rcx], rax
+ sub rcx, 8
+ jne SHORT G_M43288_IG11
+ mov rdi, gword ptr [rbp-0x140]
+ mov dword ptr [rdi+0x20], -1
+ lea rax, bword ptr [rdi+0x28]
+ xor ecx, ecx
+ mov qword ptr [rax], rcx
+ mov edx, 272
+ ;; size=38 bbWeight=4 PerfScore 25.00
G_M43288_IG12:
- mov edi, dword ptr [r9+0x10]
- inc edi
- mov dword ptr [r8+0x08], edi
- add r8, 16
- xor edi, edi
- mov qword ptr [r8], rdi
- mov eax, 256
- ;; size=24 bbWeight=4 PerfScore 20.00
+ mov qword ptr [rax+rdx], rcx
+ sub rdx, 8
+ jne SHORT G_M43288_IG12
+ ;; size=10 bbWeight=4 PerfScore 9.00
G_M43288_IG13:
- mov qword ptr [r8+rax], rdi
- sub rax, 8
- jne SHORT G_M43288_IG13
- mov dword ptr [rdx+0x20], -1
- lea rdi, bword ptr [rdx+0x28]
xor eax, eax
- mov qword ptr [rdi], rax
- mov ecx, 272
- ;; size=31 bbWeight=4 PerfScore 21.00
+ jmp G_M43288_IG19
+ ;; size=7 bbWeight=4 PerfScore 9.00
G_M43288_IG14:
- mov qword ptr [rdi+rcx], rax
- sub rcx, 8
- jne SHORT G_M43288_IG14
- ;; size=10 bbWeight=4 PerfScore 9.00
-G_M43288_IG15:
- jmp G_M43288_IG21
- ;; size=5 bbWeight=4 PerfScore 8.00
-G_M43288_IG16:
- xor r14, r14
- xor r13d, r13d
- test rdi, rdi
- je SHORT G_M43288_IG19
- mov rax, qword ptr [rdi]
- test dword ptr [rax], 0xD1FFAB1E
+ xor rbx, rbx
+ xor r15d, r15d
+ test rdx, rdx
je SHORT G_M43288_IG17
- lea r14, bword ptr [rdi+0x10]
- mov r13d, dword ptr [rdi+0x08]
- jmp SHORT G_M43288_IG18
- ;; size=32 bbWeight=0.50 PerfScore 6.12
-G_M43288_IG17:
- mov rax, qword ptr [rdi]
+ mov rax, qword ptr [rdx]
+ test dword ptr [rax], 0xD1FFAB1E
+ je SHORT G_M43288_IG15
+ lea rbx, bword ptr [rdx+0x10]
+ mov r15d, dword ptr [rdx+0x08]
+ jmp SHORT G_M43288_IG16
+ ;; size=31 bbWeight=0.50 PerfScore 6.12
+G_M43288_IG15:
+ mov rdi, rdx
+ mov rax, qword ptr [rdx]
mov rax, qword ptr [rax+0x40]
call [rax+0x28]System.Buffers.MemoryManager`1[ubyte]:GetSpan():System.Span`1[ubyte]:this
- mov r14, rax
- mov r13d, edx
- mov rdx, gword ptr [rbp-0x140]
- ;; size=23 bbWeight=0.50 PerfScore 4.25
-G_M43288_IG18:
- and ebx, 0xD1FFAB1E
- mov edi, ebx
- mov eax, r15d
- add rax, rdi
+ mov rbx, rax
+ mov r15d, edx
+ mov rdi, gword ptr [rbp-0x140]
+ ;; size=26 bbWeight=0.50 PerfScore 4.38
+G_M43288_IG16:
+ and r14d, 0xD1FFAB1E
+ mov eax, r14d
mov ecx, r13d
- cmp rax, rcx
- ja G_M43288_IG10
- add r14, rdi
- mov r13d, r15d
- ;; size=32 bbWeight=0.50 PerfScore 1.50
-G_M43288_IG19:
- mov rbx, r14
+ add rcx, rax
+ mov edx, r15d
+ cmp rcx, rdx
+ ja G_M43288_IG08
+ add rbx, rax
+ mov r15d, r13d
+ ;; size=34 bbWeight=0.50 PerfScore 1.50
+G_M43288_IG17:
mov rdi, 0xD1FFAB1E ; System.Net.IPAddress
call CORINFO_HELP_NEWSFAST
- mov r15, rax
+ mov r14, rax
mov rsi, rbx
- mov edx, r13d
- mov rdi, r15
+ mov edx, r15d
+ mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Net.IPAddress:.ctor(System.ReadOnlySpan`1[ubyte]):this
call [rax]System.Net.IPAddress:.ctor(System.ReadOnlySpan`1[ubyte]):this
- mov rdx, gword ptr [rbp-0x140]
- lea rdi, bword ptr [rdx+0x08]
- mov rsi, r15
+ mov rdi, gword ptr [rbp-0x140]
+ lea rdi, bword ptr [rdi+0x08]
+ mov rsi, r14
call CORINFO_HELP_ASSIGN_REF
- mov rdx, gword ptr [rbp-0x140]
- mov dword ptr [rdx+0x20], 1
+ mov rdi, gword ptr [rbp-0x140]
+ mov dword ptr [rdi+0x20], 1
mov eax, 1
- jmp SHORT G_M43288_IG21
- ;; size=82 bbWeight=0.50 PerfScore 6.38
-G_M43288_IG20:
- mov dword ptr [rdx+0x20], -3
- jmp G_M43288_IG07
+ jmp SHORT G_M43288_IG19
+ ;; size=79 bbWeight=0.50 PerfScore 6.25
+G_M43288_IG18:
+ mov dword ptr [rdi+0x20], -3
+ jmp G_M43288_IG06
;; size=12 bbWeight=0.50 PerfScore 1.50
-G_M43288_IG21:
+G_M43288_IG19:
add rsp, 304
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=16 bbWeight=1 PerfScore 3.75
-G_M43288_IG22:
+G_M43288_IG20:
push rbp
push r15
push r14
push r13
push rbx
sub rsp, 16
mov rbp, qword ptr [rdi]
mov qword ptr [rsp], rbp
lea rbp, [rbp+0x150]
;; size=26 bbWeight=0 PerfScore 0.00
-G_M43288_IG23:
+G_M43288_IG21:
mov rdi, gword ptr [rbp-0x140]
mov rax, 0xD1FFAB1E ; code for System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateIPAddresses>d__8:System.IDisposable.Dispose():this
call [rax]System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateIPAddresses>d__8:System.IDisposable.Dispose():this
nop
;; size=20 bbWeight=0 PerfScore 0.00
-G_M43288_IG24:
+G_M43288_IG22:
add rsp, 16
pop rbx
pop r13
pop r14
pop r15
pop rbp
ret
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 935, prolog size 103, PerfScore 401.83, instruction count 234, allocated bytes for code 935 (MethodHash=572a56e7) for method System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateIPAddresses>d__8:MoveNext():ubyte:this (FullOpts)
+; Total bytes of code 715, prolog size 100, PerfScore 291.83, instruction count 178, allocated bytes for code 715 (MethodHash=572a56e7) for method System.Security.Cryptography.X509Certificates.X509SubjectAlternativeNameExtension+<EnumerateIPAddresses>d__8:MoveNext():ubyte:this (FullOpts) -164 (-81.19 % of base) - System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo:.ctor(ubyte[],System.Security.Cryptography.Pkcs.Asn1.Rfc3161TstInfo):this ; Assembly listing for method System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo:.ctor(ubyte[],System.Security.Cryptography.Pkcs.Asn1.Rfc3161TstInfo):this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] ( 4, 4 ) ref -> rbx this class-hnd single-def <System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo>
-; V01 arg1 [V01,T01] ( 3, 3 ) ref -> rsi class-hnd single-def <ubyte[]>
-; V02 arg2 [V02,T02] ( 1, 1 ) struct (432) [rsp+0x10] do-not-enreg[S] single-def <System.Security.Cryptography.Pkcs.Asn1.Rfc3161TstInfo>
+; V01 arg1 [V01,T02] ( 3, 3 ) ref -> rsi class-hnd single-def <ubyte[]>
+; V02 arg2 [V02,T03] ( 1, 1 ) struct (432) [rsp+0x10] do-not-enreg[S] single-def <System.Security.Cryptography.Pkcs.Asn1.Rfc3161TstInfo>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+; V04 rat0 [V04,T01] ( 3, 6 ) byref -> rdi "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 0
G_M49801_IG01:
push rbx
mov rbx, rdi
;; size=4 bbWeight=1 PerfScore 1.25
G_M49801_IG02:
lea rdi, bword ptr [rbx+0x08]
call CORINFO_HELP_ASSIGN_REF
lea rdi, bword ptr [rbx+0x20]
- lea rsi, bword ptr [rsp+0x10]
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- mov ecx, 8
- rep movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- ;; size=127 bbWeight=1 PerfScore 55.75
+ cmp byte ptr [rdi], dil
+ lea rsi, [rsp+0x10]
+ mov edx, 432
+ call CORINFO_HELP_ASSIGN_STRUCT
+ nop
+ ;; size=32 bbWeight=1 PerfScore 7.00
G_M49801_IG03:
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- movsq
- call CORINFO_HELP_ASSIGN_BYREF
- movsq
- ;; size=69 bbWeight=1 PerfScore 18.00
-G_M49801_IG04:
pop rbx
ret
;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 202, prolog size 1, PerfScore 76.50, instruction count 56, allocated bytes for code 202 (MethodHash=a53d3d76) for method System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo:.ctor(ubyte[],System.Security.Cryptography.Pkcs.Asn1.Rfc3161TstInfo):this (FullOpts)
+; Total bytes of code 38, prolog size 1, PerfScore 9.75, instruction count 12, allocated bytes for code 38 (MethodHash=a53d3d76) for method System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo:.ctor(ubyte[],System.Security.Cryptography.Pkcs.Asn1.Rfc3161TstInfo):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/65410d04b803a69249114cce01650b51 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Build completed in 32 minutes.
dotnet/runtime#101761
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: