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: inline shared generics with runtime lookups inside #276
Comments
Top method regressions2162 (1,896.49 % of base) - System.Runtime.Intrinsics.Vector256`1[System.__Canon]:System.Runtime.Intrinsics.ISimdVector,T>.Dot(System.Runtime.Intrinsics.Vector256`1[System.__Canon],System.Runtime.Intrinsics.Vector256`1[System.__Canon]):System.__Canon ; Assembly listing for method System.Runtime.Intrinsics.Vector256`1[System.__Canon]:System.Runtime.Intrinsics.ISimdVector<System.Runtime.Intrinsics.Vector256<T>,T>.Dot(System.Runtime.Intrinsics.Vector256`1[System.__Canon],System.Runtime.Intrinsics.Vector256`1[System.__Canon]):System.__Canon (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
-; fully interruptible
+; partially interruptible
; No PGO data
+; 0 inlinees with PGO data; 27 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T00] ( 5, 4.20) long -> rdi single-def
-; V01 arg0 [V01,T04] ( 1, 1 ) struct (32) [rbp+0x10] do-not-enreg[S] single-def <System.Runtime.Intrinsics.Vector256`1[System.__Canon]>
-; V02 arg1 [V02,T05] ( 1, 1 ) struct (32) [rbp+0x30] do-not-enreg[S] single-def <System.Runtime.Intrinsics.Vector256`1[System.__Canon]>
+; V00 TypeCtx [V00,T61] ( 5, 4.20) long -> rdi single-def
+; V01 arg0 [V01,T69] ( 4, 4 ) struct (32) [rbp+0x10] do-not-enreg[S] single-def <System.Runtime.Intrinsics.Vector256`1[System.__Canon]>
+; V02 arg1 [V02,T70] ( 4, 4 ) struct (32) [rbp+0x30] do-not-enreg[S] single-def <System.Runtime.Intrinsics.Vector256`1[System.__Canon]>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V05 tmp2 [V05,T03] ( 2, 4 ) long -> rdi "argument with side effect"
-; V06 rat0 [V06,T02] ( 3, 4 ) long -> rdi "runtime lookup"
-; V07 rat1 [V07,T01] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
+; V05 tmp2 [V05,T58] ( 6, 6.80) long -> rbx "spilling runtimelookup"
+;* V06 tmp3 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.__Canon>
+;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V08 tmp5 [V08,T59] ( 5, 6.80) long -> r15 "spilling runtimelookup"
+; V09 tmp6 [V09,T92] ( 2, 2 ) ref -> r14 class-hnd single-def "Inline stloc first use temp" <System.__Canon>
+;* V10 tmp7 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V11 tmp8 [V11,T112] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V12 tmp9 [V12 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V13 tmp10 [V13 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V14 tmp11 [V14 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.__Canon>
+;* V15 tmp12 [V15 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.Runtime.Intrinsics.Vector128`1[System.__Canon]>
+;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.Runtime.Intrinsics.Vector128`1[System.__Canon]>
+;* V17 tmp14 [V17 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V18 tmp15 [V18,T60] ( 7, 6.20) long -> [rbp-0x38] spill-single-def "spilling runtimelookup"
+; V19 tmp16 [V19,T93] ( 2, 2 ) ref -> r14 class-hnd single-def "Inline stloc first use temp" <System.__Canon>
+;* V20 tmp17 [V20 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V21 tmp18 [V21,T79] ( 5, 3.80) long -> [rbp-0x40] spill-single-def "spilling runtimelookup"
+;* V22 tmp19 [V22 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V23 tmp20 [V23 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V24 tmp21 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.__Canon>
+; V25 tmp22 [V25,T38] ( 5, 10.50) ref -> r14 ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.__Canon>
+;* V26 tmp23 [V26 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V27 tmp24 [V27 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V28 tmp25 [V28 ] ( 4, 19 ) struct ( 8) [rbp-0x48] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V29 tmp26 [V29 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V30 tmp27 [V30 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V31 tmp28 [V31 ] ( 4, 19 ) struct ( 8) [rbp-0x50] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V32 tmp29 [V32 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V33 tmp30 [V33 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V34 tmp31 [V34,T94] ( 2, 2 ) ref -> r14 class-hnd single-def "impAppendStmt" <System.__Canon>
+;* V35 tmp32 [V35 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V36 tmp33 [V36 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V37 tmp34 [V37,T01] ( 7, 24.50) int -> [rbp-0x54] "Inline stloc first use temp"
+;* V38 tmp35 [V38 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V39 tmp36 [V39 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V40 tmp37 [V40 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V41 tmp38 [V41 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V42 tmp39 [V42 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V43 tmp40 [V43 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V44 tmp41 [V44,T10] ( 2, 16 ) ref -> rsi class-hnd "impAppendStmt" <System.__Canon>
+;* V45 tmp42 [V45 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V46 tmp43 [V46 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V47 tmp44 [V47 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V48 tmp45 [V48 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V49 tmp46 [V49,T11] ( 2, 16 ) ref -> [rbp-0xF8] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
+;* V50 tmp47 [V50 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V51 tmp48 [V51 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V52 tmp49 [V52,T12] ( 2, 16 ) ref -> rdx class-hnd "impAppendStmt" <System.__Canon>
+;* V53 tmp50 [V53 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V54 tmp51 [V54,T54] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V55 tmp52 [V55 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V56 tmp53 [V56 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V57 tmp54 [V57,T42] ( 2, 8 ) ref -> rdx class-hnd "Inline stloc first use temp" <System.__Canon>
+;* V58 tmp55 [V58 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V59 tmp56 [V59 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V60 tmp57 [V60 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V61 tmp58 [V61,T43] ( 2, 8 ) ref -> rdx class-hnd "Inline return value spill temp" <System.__Canon>
+;* V62 tmp59 [V62 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V63 tmp60 [V63 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V64 tmp61 [V64 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+; V65 tmp62 [V65,T44] ( 2, 8 ) ref -> r8 class-hnd "Inline return value spill temp" <System.__Canon>
+;* V66 tmp63 [V66 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V67 tmp64 [V67 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V68 tmp65 [V68 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V69 tmp66 [V69,T121] ( 2, 1 ) ref -> [rbp-0x100] class-hnd spill-single-def "Inline return value spill temp" <System.__Canon>
+;* V70 tmp67 [V70 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V71 tmp68 [V71 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.__Canon>
+; V72 tmp69 [V72,T39] ( 5, 10.50) ref -> r13 ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.__Canon>
+;* V73 tmp70 [V73 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V74 tmp71 [V74 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V75 tmp72 [V75 ] ( 4, 19 ) struct ( 8) [rbp-0x60] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V76 tmp73 [V76 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V77 tmp74 [V77 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V78 tmp75 [V78 ] ( 4, 19 ) struct ( 8) [rbp-0x68] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V79 tmp76 [V79 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V80 tmp77 [V80 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V81 tmp78 [V81,T95] ( 2, 2 ) ref -> r13 class-hnd single-def "impAppendStmt" <System.__Canon>
+;* V82 tmp79 [V82 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V83 tmp80 [V83 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V84 tmp81 [V84,T02] ( 7, 24.50) int -> [rbp-0x6C] "Inline stloc first use temp"
+;* V85 tmp82 [V85 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V86 tmp83 [V86 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V87 tmp84 [V87 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V88 tmp85 [V88 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V89 tmp86 [V89 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V90 tmp87 [V90 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V91 tmp88 [V91,T13] ( 2, 16 ) ref -> rsi class-hnd "impAppendStmt" <System.__Canon>
+;* V92 tmp89 [V92 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V93 tmp90 [V93 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V94 tmp91 [V94 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V95 tmp92 [V95 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V96 tmp93 [V96,T14] ( 2, 16 ) ref -> [rbp-0x108] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
+;* V97 tmp94 [V97 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V98 tmp95 [V98 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V99 tmp96 [V99,T15] ( 2, 16 ) ref -> rdx class-hnd "impAppendStmt" <System.__Canon>
+;* V100 tmp97 [V100 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V101 tmp98 [V101,T55] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V102 tmp99 [V102 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V103 tmp100 [V103 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V104 tmp101 [V104,T45] ( 2, 8 ) ref -> rdx class-hnd "Inline stloc first use temp" <System.__Canon>
+;* V105 tmp102 [V105 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V106 tmp103 [V106 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V107 tmp104 [V107 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V108 tmp105 [V108,T46] ( 2, 8 ) ref -> rdx class-hnd "Inline return value spill temp" <System.__Canon>
+;* V109 tmp106 [V109 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V110 tmp107 [V110 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V111 tmp108 [V111 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+; V112 tmp109 [V112,T47] ( 2, 8 ) ref -> r8 class-hnd "Inline return value spill temp" <System.__Canon>
+;* V113 tmp110 [V113 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V114 tmp111 [V114 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V115 tmp112 [V115 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V116 tmp113 [V116,T122] ( 2, 1 ) ref -> [rbp-0x110] class-hnd spill-single-def "Inline return value spill temp" <System.__Canon>
+;* V117 tmp114 [V117 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V118 tmp115 [V118,T96] ( 2, 2 ) ref -> r15 class-hnd single-def "Inline return value spill temp" <System.__Canon>
+;* V119 tmp116 [V119 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.Runtime.Intrinsics.Vector128`1[System.__Canon]>
+;* V120 tmp117 [V120 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" <System.Runtime.Intrinsics.Vector128`1[System.__Canon]>
+;* V121 tmp118 [V121 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V122 tmp119 [V122,T80] ( 5, 3.80) long -> [rbp-0x78] spill-single-def "spilling runtimelookup"
+; V123 tmp120 [V123,T97] ( 2, 2 ) ref -> [rbp-0x118] class-hnd spill-single-def "Inline stloc first use temp" <System.__Canon>
+;* V124 tmp121 [V124 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+; V125 tmp122 [V125,T81] ( 5, 3.80) long -> [rbp-0x80] spill-single-def "spilling runtimelookup"
+;* V126 tmp123 [V126 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V127 tmp124 [V127 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V128 tmp125 [V128 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.__Canon>
+; V129 tmp126 [V129,T40] ( 5, 10.50) ref -> [rbp-0x120] ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.__Canon>
+;* V130 tmp127 [V130 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V131 tmp128 [V131 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V132 tmp129 [V132 ] ( 4, 19 ) struct ( 8) [rbp-0x88] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V133 tmp130 [V133 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V134 tmp131 [V134 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V135 tmp132 [V135 ] ( 4, 19 ) struct ( 8) [rbp-0x90] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V136 tmp133 [V136 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V137 tmp134 [V137 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V138 tmp135 [V138,T98] ( 2, 2 ) ref -> [rbp-0x128] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
+;* V139 tmp136 [V139 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V140 tmp137 [V140 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V141 tmp138 [V141,T03] ( 7, 24.50) int -> [rbp-0x94] "Inline stloc first use temp"
+;* V142 tmp139 [V142 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V143 tmp140 [V143 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V144 tmp141 [V144 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V145 tmp142 [V145 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V146 tmp143 [V146 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V147 tmp144 [V147 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V148 tmp145 [V148,T16] ( 2, 16 ) ref -> rsi class-hnd "impAppendStmt" <System.__Canon>
+;* V149 tmp146 [V149 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V150 tmp147 [V150 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V151 tmp148 [V151 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V152 tmp149 [V152 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V153 tmp150 [V153,T17] ( 2, 16 ) ref -> [rbp-0x130] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
+;* V154 tmp151 [V154 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V155 tmp152 [V155 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V156 tmp153 [V156,T18] ( 2, 16 ) ref -> rdx class-hnd "impAppendStmt" <System.__Canon>
+;* V157 tmp154 [V157 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V158 tmp155 [V158,T56] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V159 tmp156 [V159 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V160 tmp157 [V160 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V161 tmp158 [V161,T48] ( 2, 8 ) ref -> rdx class-hnd "Inline stloc first use temp" <System.__Canon>
+;* V162 tmp159 [V162 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V163 tmp160 [V163 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V164 tmp161 [V164 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V165 tmp162 [V165,T49] ( 2, 8 ) ref -> rdx class-hnd "Inline return value spill temp" <System.__Canon>
+;* V166 tmp163 [V166 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V167 tmp164 [V167 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V168 tmp165 [V168 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+; V169 tmp166 [V169,T50] ( 2, 8 ) ref -> r8 class-hnd "Inline return value spill temp" <System.__Canon>
+;* V170 tmp167 [V170 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V171 tmp168 [V171 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V172 tmp169 [V172 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V173 tmp170 [V173,T123] ( 2, 1 ) ref -> [rbp-0x138] class-hnd spill-single-def "Inline return value spill temp" <System.__Canon>
+;* V174 tmp171 [V174 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V175 tmp172 [V175 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline return value spill temp" <System.__Canon>
+; V176 tmp173 [V176,T41] ( 5, 10.50) ref -> r13 ld-addr-op class-hnd "Inline ldloca(s) first use temp" <System.__Canon>
+;* V177 tmp174 [V177 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V178 tmp175 [V178 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V179 tmp176 [V179 ] ( 4, 19 ) struct ( 8) [rbp-0xA0] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V180 tmp177 [V180 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V181 tmp178 [V181 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V182 tmp179 [V182 ] ( 4, 19 ) struct ( 8) [rbp-0xA8] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[System.__Canon]>
+;* V183 tmp180 [V183 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V184 tmp181 [V184 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V185 tmp182 [V185,T99] ( 2, 2 ) ref -> r13 class-hnd single-def "impAppendStmt" <System.__Canon>
+;* V186 tmp183 [V186 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V187 tmp184 [V187 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V188 tmp185 [V188,T04] ( 7, 24.50) int -> [rbp-0xAC] "Inline stloc first use temp"
+;* V189 tmp186 [V189 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V190 tmp187 [V190 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V191 tmp188 [V191 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V192 tmp189 [V192 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V193 tmp190 [V193 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V194 tmp191 [V194 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V195 tmp192 [V195,T19] ( 2, 16 ) ref -> rsi class-hnd "impAppendStmt" <System.__Canon>
+;* V196 tmp193 [V196 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V197 tmp194 [V197 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V198 tmp195 [V198 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V199 tmp196 [V199 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V200 tmp197 [V200,T20] ( 2, 16 ) ref -> [rbp-0x140] class-hnd spill-single-def "impAppendStmt" <System.__Canon>
+;* V201 tmp198 [V201 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V202 tmp199 [V202 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V203 tmp200 [V203,T21] ( 2, 16 ) ref -> rdx class-hnd "impAppendStmt" <System.__Canon>
+;* V204 tmp201 [V204 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V205 tmp202 [V205,T57] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V206 tmp203 [V206 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V207 tmp204 [V207 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+; V208 tmp205 [V208,T51] ( 2, 8 ) ref -> rdx class-hnd "Inline stloc first use temp" <System.__Canon>
+;* V209 tmp206 [V209 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V210 tmp207 [V210 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V211 tmp208 [V211 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V212 tmp209 [V212,T52] ( 2, 8 ) ref -> rdx class-hnd "Inline return value spill temp" <System.__Canon>
+;* V213 tmp210 [V213 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V214 tmp211 [V214 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V215 tmp212 [V215 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+; V216 tmp213 [V216,T53] ( 2, 8 ) ref -> r8 class-hnd "Inline return value spill temp" <System.__Canon>
+;* V217 tmp214 [V217 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V218 tmp215 [V218 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V219 tmp216 [V219 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V220 tmp217 [V220,T124] ( 2, 1 ) ref -> r12 class-hnd single-def "Inline return value spill temp" <System.__Canon>
+;* V221 tmp218 [V221 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+; V222 tmp219 [V222,T100] ( 2, 2 ) long -> r14 "field V15._lower (fldOffset=0x0)" P-INDEP
+; V223 tmp220 [V223,T101] ( 2, 2 ) long -> r13 "field V15._upper (fldOffset=0x8)" P-INDEP
+; V224 tmp221 [V224,T102] ( 2, 2 ) long -> r12 "field V16._lower (fldOffset=0x0)" P-INDEP
+; V225 tmp222 [V225,T103] ( 2, 2 ) long -> [rbp-0xB8] spill-single-def "field V16._upper (fldOffset=0x8)" P-INDEP
+; V226 tmp223 [V226 ] ( 4, 18 ) long -> [rbp-0x48] do-not-enreg[X] addr-exposed "field V28._00 (fldOffset=0x0)" P-DEP
+; V227 tmp224 [V227 ] ( 4, 18 ) long -> [rbp-0x50] do-not-enreg[X] addr-exposed "field V31._00 (fldOffset=0x0)" P-DEP
+; V228 tmp225 [V228 ] ( 4, 18 ) long -> [rbp-0x60] do-not-enreg[X] addr-exposed "field V75._00 (fldOffset=0x0)" P-DEP
+; V229 tmp226 [V229 ] ( 4, 18 ) long -> [rbp-0x68] do-not-enreg[X] addr-exposed "field V78._00 (fldOffset=0x0)" P-DEP
+; V230 tmp227 [V230,T104] ( 2, 2 ) long -> rdi "field V119._lower (fldOffset=0x0)" P-INDEP
+; V231 tmp228 [V231,T105] ( 2, 2 ) long -> r13 "field V119._upper (fldOffset=0x8)" P-INDEP
+; V232 tmp229 [V232,T106] ( 2, 2 ) long -> rax "field V120._lower (fldOffset=0x0)" P-INDEP
+; V233 tmp230 [V233,T107] ( 2, 2 ) long -> [rbp-0xC0] spill-single-def "field V120._upper (fldOffset=0x8)" P-INDEP
+; V234 tmp231 [V234 ] ( 4, 18 ) long -> [rbp-0x88] do-not-enreg[X] addr-exposed "field V132._00 (fldOffset=0x0)" P-DEP
+; V235 tmp232 [V235 ] ( 4, 18 ) long -> [rbp-0x90] do-not-enreg[X] addr-exposed "field V135._00 (fldOffset=0x0)" P-DEP
+; V236 tmp233 [V236 ] ( 4, 18 ) long -> [rbp-0xA0] do-not-enreg[X] addr-exposed "field V179._00 (fldOffset=0x0)" P-DEP
+; V237 tmp234 [V237 ] ( 4, 18 ) long -> [rbp-0xA8] do-not-enreg[X] addr-exposed "field V182._00 (fldOffset=0x0)" P-DEP
+; V238 tmp235 [V238,T108] ( 2, 2 ) long -> rdi "argument with side effect"
+; V239 tmp236 [V239,T26] ( 2, 16 ) long -> rcx "argument with side effect"
+; V240 tmp237 [V240,T05] ( 3, 24 ) long -> [rbp-0xC8] spill-single-def "argument with side effect"
+; V241 tmp238 [V241,T22] ( 2, 16 ) ref -> rdx "argument with side effect"
+; V242 tmp239 [V242,T27] ( 2, 16 ) long -> rsi "argument with side effect"
+; V243 tmp240 [V243,T109] ( 2, 2 ) long -> rdi "argument with side effect"
+; V244 tmp241 [V244,T28] ( 2, 16 ) long -> rdi "argument with side effect"
+; V245 tmp242 [V245,T06] ( 3, 24 ) long -> [rbp-0xD0] spill-single-def "argument with side effect"
+; V246 tmp243 [V246,T23] ( 2, 16 ) ref -> rdx "argument with side effect"
+; V247 tmp244 [V247,T29] ( 2, 16 ) long -> rdi "argument with side effect"
+; V248 tmp245 [V248,T76] ( 2, 4 ) long -> rdi "argument with side effect"
+; V249 tmp246 [V249,T110] ( 2, 2 ) long -> rdi "argument with side effect"
+; V250 tmp247 [V250,T30] ( 2, 16 ) long -> rdi "argument with side effect"
+; V251 tmp248 [V251,T07] ( 3, 24 ) long -> [rbp-0xD8] spill-single-def "argument with side effect"
+; V252 tmp249 [V252,T24] ( 2, 16 ) ref -> rdx "argument with side effect"
+; V253 tmp250 [V253,T31] ( 2, 16 ) long -> rdi "argument with side effect"
+; V254 tmp251 [V254,T111] ( 2, 2 ) long -> rdi "argument with side effect"
+; V255 tmp252 [V255,T32] ( 2, 16 ) long -> rdi "argument with side effect"
+; V256 tmp253 [V256,T08] ( 3, 24 ) long -> [rbp-0xE0] spill-single-def "argument with side effect"
+; V257 tmp254 [V257,T25] ( 2, 16 ) ref -> rdx "argument with side effect"
+; V258 tmp255 [V258,T33] ( 2, 16 ) long -> rdi "argument with side effect"
+; V259 tmp256 [V259,T77] ( 2, 4 ) long -> rdi "argument with side effect"
+; V260 tmp257 [V260,T78] ( 2, 4 ) long -> rdi "argument with side effect"
+; V261 cse0 [V261,T00] ( 24, 53 ) long -> [rbp-0xE8] hoist multi-def "CSE #03: aggressive"
+; V262 cse1 [V262,T09] ( 13, 23 ) long -> r12 "CSE #01: moderate"
+; V263 cse2 [V263,T68] ( 5, 5 ) long -> [rbp-0xF0] spill-single-def "CSE #06: conservative"
+; V264 cse3 [V264,T82] ( 2, 2 ) long -> r15 "CSE #10: conservative"
+; V265 cse4 [V265,T83] ( 3, 3 ) long -> r15 "CSE #17: conservative"
+; V266 cse5 [V266,T34] ( 3, 12 ) long -> rsi "CSE #05: conservative"
+; V267 cse6 [V267,T35] ( 3, 12 ) long -> rsi "CSE #09: conservative"
+; V268 cse7 [V268,T36] ( 3, 12 ) long -> rsi "CSE #13: conservative"
+; V269 cse8 [V269,T37] ( 3, 12 ) long -> rsi "CSE #16: conservative"
+; V270 rat0 [V270,T62] ( 3, 5.60) long -> rbx "fgMakeTemp is creating a new local variable"
+; V271 rat1 [V271,T71] ( 3, 4 ) long -> r15 "runtime lookup"
+; V272 rat2 [V272,T63] ( 3, 5.60) long -> r15 "fgMakeTemp is creating a new local variable"
+; V273 rat3 [V273,T72] ( 3, 4 ) long -> registers "runtime lookup"
+; V274 rat4 [V274,T64] ( 3, 5.60) long -> rcx "fgMakeTemp is creating a new local variable"
+; V275 rat5 [V275,T73] ( 3, 4 ) long -> r12 "runtime lookup"
+; V276 rat6 [V276,T65] ( 3, 5.60) long -> r12 "fgMakeTemp is creating a new local variable"
+; V277 rat7 [V277,T117] ( 3, 1 ) long -> registers "runtime lookup"
+; V278 rat8 [V278,T113] ( 3, 1.40) long -> rcx "fgMakeTemp is creating a new local variable"
+; V279 rat9 [V279,T88] ( 3, 2 ) long -> rdi "runtime lookup"
+; V280 rat10 [V280,T84] ( 3, 2.80) long -> rcx "fgMakeTemp is creating a new local variable"
+; V281 rat11 [V281,T118] ( 3, 1 ) long -> rdi "runtime lookup"
+; V282 rat12 [V282,T114] ( 3, 1.40) long -> rdi "fgMakeTemp is creating a new local variable"
+; V283 rat13 [V283,T89] ( 3, 2 ) long -> registers "runtime lookup"
+; V284 rat14 [V284,T85] ( 3, 2.80) long -> rcx "fgMakeTemp is creating a new local variable"
+; V285 rat15 [V285,T74] ( 3, 4 ) long -> r15 "runtime lookup"
+; V286 rat16 [V286,T66] ( 3, 5.60) long -> rax "fgMakeTemp is creating a new local variable"
+; V287 rat17 [V287,T119] ( 3, 1 ) long -> rcx "runtime lookup"
+; V288 rat18 [V288,T115] ( 3, 1.40) long -> rcx "fgMakeTemp is creating a new local variable"
+; V289 rat19 [V289,T90] ( 3, 2 ) long -> registers "runtime lookup"
+; V290 rat20 [V290,T86] ( 3, 2.80) long -> rdx "fgMakeTemp is creating a new local variable"
+; V291 rat21 [V291,T120] ( 3, 1 ) long -> r8 "runtime lookup"
+; V292 rat22 [V292,T116] ( 3, 1.40) long -> r8 "fgMakeTemp is creating a new local variable"
+; V293 rat23 [V293,T91] ( 3, 2 ) long -> rax "runtime lookup"
+; V294 rat24 [V294,T87] ( 3, 2.80) long -> rax "fgMakeTemp is creating a new local variable"
+; V295 rat25 [V295,T75] ( 3, 4 ) long -> rdi "runtime lookup"
+; V296 rat26 [V296,T67] ( 3, 5.60) long -> rdi "fgMakeTemp is creating a new local variable"
;
-; Lcl frame size = 16
+; Lcl frame size = 280
G_M44773_IG01:
push rbp
- sub rsp, 16
- lea rbp, [rsp+0x10]
- mov qword ptr [rbp-0x08], rdi
- ;; size=14 bbWeight=1 PerfScore 2.75
+ push r15
+ push r14
+ push r13
+ push r12
+ push rbx
+ sub rsp, 280
+ lea rbp, [rsp+0x140]
+ mov qword ptr [rbp-0x30], rdi
+ ;; size=29 bbWeight=1 PerfScore 7.75
G_M44773_IG02:
mov rsi, qword ptr [rdi+0x30]
mov rsi, qword ptr [rsi]
- mov rax, qword ptr [rsi+0xE0]
- test rax, rax
+ mov rbx, qword ptr [rsi+0xE0]
+ test rbx, rbx
je SHORT G_M44773_IG04
;; size=19 bbWeight=1 PerfScore 7.25
G_M44773_IG03:
- mov rdi, rax
jmp SHORT G_M44773_IG05
- ;; size=5 bbWeight=0.80 PerfScore 1.80
+ ;; size=2 bbWeight=0.80 PerfScore 1.60
G_M44773_IG04:
mov rsi, 0xD1FFAB1E ; global ptr
call CORINFO_HELP_RUNTIMEHANDLE_CLASS
- mov rdi, rax
+ mov rbx, rax
;; size=18 bbWeight=0.20 PerfScore 0.30
G_M44773_IG05:
- vmovdqu xmm0, xmmword ptr [rbp+0x10]
- vmovdqu xmmword ptr [rbp+0x10], xmm0
- vmovdqu xmm0, xmmword ptr [rbp+0x20]
- vmovdqu xmmword ptr [rbp+0x20], xmm0
- vmovdqu xmm0, xmmword ptr [rbp+0x30]
- vmovdqu xmmword ptr [rbp+0x30], xmm0
- vmovdqu xmm0, xmmword ptr [rbp+0x40]
- vmovdqu xmmword ptr [rbp+0x40], xmm0
- mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector256:Dot[System.__Canon](System.Runtime.Intrinsics.Vector256`1[System.__Canon],System.Runtime.Intrinsics.Vector256`1[System.__Canon]):System.__Canon
- ;; size=50 bbWeight=1 PerfScore 16.25
+ mov rdi, qword ptr [rbx+0x10]
+ mov r15, qword ptr [rdi+0x10]
+ test r15, r15
+ je SHORT G_M44773_IG07
+ ;; size=13 bbWeight=1 PerfScore 5.25
G_M44773_IG06:
- add rsp, 16
+ jmp SHORT G_M44773_IG08
+ ;; size=2 bbWeight=0.80 PerfScore 1.60
+G_M44773_IG07:
+ mov rdi, rbx
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov r15, rax
+ ;; size=21 bbWeight=0.20 PerfScore 0.35
+G_M44773_IG08:
+ mov r14, qword ptr [rbp+0x10]
+ mov r13, qword ptr [rbp+0x18]
+ mov r12, qword ptr [rbp+0x30]
+ mov rax, qword ptr [rbp+0x38]
+ mov qword ptr [rbp-0xB8], rax
+ mov rdi, qword ptr [r15+0x10]
+ mov rcx, qword ptr [rdi+0x10]
+ test rcx, rcx
+ je SHORT G_M44773_IG10
+ ;; size=36 bbWeight=1 PerfScore 10.25
+G_M44773_IG09:
+ jmp SHORT G_M44773_IG11
+ ;; size=2 bbWeight=0.80 PerfScore 1.60
+G_M44773_IG10:
+ mov rdi, r15
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rcx, rax
+ ;; size=21 bbWeight=0.20 PerfScore 0.35
+G_M44773_IG11:
+ mov qword ptr [rbp-0xF0], rcx
+ mov rdx, rcx
+ mov qword ptr [rbp-0x38], rdx
+ mov qword ptr [rbp-0x48], r14
+ mov qword ptr [rbp-0x50], r12
+ xor r14, r14
+ mov rdi, qword ptr [rdx+0x10]
+ mov r12, qword ptr [rdi+0x10]
+ test r12, r12
+ je SHORT G_M44773_IG13
+ ;; size=38 bbWeight=1 PerfScore 9.75
+G_M44773_IG12:
+ jmp SHORT G_M44773_IG14
+ ;; size=2 bbWeight=0.80 PerfScore 1.60
+G_M44773_IG13:
+ mov rdi, rdx
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov r12, rax
+ ;; size=21 bbWeight=0.20 PerfScore 0.35
+G_M44773_IG14:
+ mov rdi, r12
+ mov rsi, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rsi]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ cmp eax, 1
+ je G_M44773_IG23
+ ;; size=24 bbWeight=1 PerfScore 4.75
+G_M44773_IG15:
+ xor eax, eax
+ mov dword ptr [rbp-0x54], eax
+ mov rdi, r12
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rcx]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ test eax, eax
+ jle G_M44773_IG27
+ ;; size=28 bbWeight=0.50 PerfScore 3.00
+G_M44773_IG16:
+ mov rax, qword ptr [rbp-0x38]
+ mov rdi, qword ptr [rax+0x10]
+ mov rcx, qword ptr [rdi+0x20]
+ test rcx, rcx
+ je SHORT G_M44773_IG18
+ ;; size=17 bbWeight=0.25 PerfScore 1.56
+G_M44773_IG17:
+ jmp SHORT G_M44773_IG19
+ ;; size=2 bbWeight=0.20 PerfScore 0.40
+G_M44773_IG18:
+ mov rdi, rax
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rcx, rax
+ ;; size=21 bbWeight=0.05 PerfScore 0.09
+G_M44773_IG19:
+ mov rdi, rcx
+ ;; size=3 bbWeight=0.25 PerfScore 0.06
+G_M44773_IG20:
+ lea rsi, bword ptr [rbp-0x48]
+ mov eax, dword ptr [rbp-0x54]
+ movsxd rdx, eax
+ mov rsi, gword ptr [rsi+8*rdx]
+ lea rdx, bword ptr [rbp-0x50]
+ mov dword ptr [rbp-0x54], eax
+ movsxd rcx, eax
+ mov rdx, gword ptr [rdx+8*rcx]
+ mov qword ptr [rbp-0xE8], rdi
+ mov rcx, rdi
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [rcx]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov gword ptr [rbp-0xF8], rax
+ lea rdi, bword ptr [rbp-0x48]
+ mov ecx, dword ptr [rbp-0x54]
+ lea esi, [rcx+0x01]
+ movsxd rsi, esi
+ mov rdx, gword ptr [rdi+8*rsi]
+ lea rdi, bword ptr [rbp-0x50]
+ mov r8, gword ptr [rdi+8*rsi]
+ mov rdi, qword ptr [rbp-0xE8]
+ mov r9, rdi
+ mov qword ptr [rbp-0xC8], r9
+ mov rdi, r9
+ mov rsi, rdx
+ mov rdx, r8
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [r8]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rdi, qword ptr [rbp-0xC8]
+ mov rsi, gword ptr [rbp-0xF8]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rdi, qword ptr [rbp-0xE8]
+ mov rsi, rdi
+ mov rsi, r14
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov r14, rax
+ mov ecx, dword ptr [rbp-0x54]
+ add ecx, 2
+ mov dword ptr [rbp-0x54], ecx
+ mov rdi, r12
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rax]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ mov edi, dword ptr [rbp-0x54]
+ cmp eax, edi
+ mov dword ptr [rbp-0x54], edi
+ jg SHORT G_M44773_IG22
+ ;; size=215 bbWeight=4 PerfScore 183.00
+G_M44773_IG21:
+ jmp SHORT G_M44773_IG27
+ ;; size=2 bbWeight=0.50 PerfScore 1.00
+G_M44773_IG22:
+ mov rdi, qword ptr [rbp-0xE8]
+ jmp G_M44773_IG20
+ ;; size=12 bbWeight=2 PerfScore 6.00
+G_M44773_IG23:
+ mov r14, gword ptr [rbp-0x48]
+ mov rax, gword ptr [rbp-0x50]
+ mov gword ptr [rbp-0x100], rax
+ mov rdi, qword ptr [rbp-0x38]
+ mov rsi, qword ptr [rdi+0x10]
+ mov rcx, qword ptr [rsi+0x20]
+ test rcx, rcx
+ je SHORT G_M44773_IG25
+ ;; size=32 bbWeight=0.50 PerfScore 4.62
+G_M44773_IG24:
+ mov rax, gword ptr [rbp-0x100]
+ mov rdi, rcx
+ jmp SHORT G_M44773_IG26
+ ;; size=12 bbWeight=0.40 PerfScore 1.30
+G_M44773_IG25:
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rdi, rax
+ mov rax, gword ptr [rbp-0x100]
+ ;; size=25 bbWeight=0.10 PerfScore 0.25
+G_M44773_IG26:
+ mov rsi, r14
+ mov rdx, rax
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov r14, rax
+ ;; size=21 bbWeight=0.50 PerfScore 2.00
+G_M44773_IG27:
+ mov rax, qword ptr [rbp-0xF0]
+ mov qword ptr [rbp-0x40], rax
+ mov qword ptr [rbp-0x60], r13
+ mov r13, qword ptr [rbp-0xB8]
+ mov qword ptr [rbp-0x68], r13
+ xor r13, r13
+ mov rdi, r12
+ mov rdx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rdx]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ cmp eax, 1
+ je G_M44773_IG35
+ ;; size=53 bbWeight=1 PerfScore 10.00
+G_M44773_IG28:
+ xor eax, eax
+ mov dword ptr [rbp-0x6C], eax
+ mov rdi, r12
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rcx]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ test eax, eax
+ jle G_M44773_IG39
+ ;; size=28 bbWeight=0.50 PerfScore 3.00
+G_M44773_IG29:
+ mov rax, qword ptr [rbp-0x40]
+ mov rdi, qword ptr [rax+0x10]
+ mov rdi, qword ptr [rdi+0x20]
+ test rdi, rdi
+ je SHORT G_M44773_IG31
+ ;; size=17 bbWeight=0.25 PerfScore 1.56
+G_M44773_IG30:
+ jmp SHORT G_M44773_IG32
+ ;; size=2 bbWeight=0.20 PerfScore 0.40
+G_M44773_IG31:
+ mov rdi, rax
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rdi, rax
+ ;; size=21 bbWeight=0.05 PerfScore 0.09
+G_M44773_IG32:
+ mov rax, rdi
+ ;; size=3 bbWeight=0.25 PerfScore 0.06
+G_M44773_IG33:
+ lea rdi, bword ptr [rbp-0x60]
+ mov ecx, dword ptr [rbp-0x6C]
+ movsxd rsi, ecx
+ mov rsi, gword ptr [rdi+8*rsi]
+ lea rdi, bword ptr [rbp-0x68]
+ mov dword ptr [rbp-0x6C], ecx
+ movsxd rdx, ecx
+ mov rdx, gword ptr [rdi+8*rdx]
+ mov qword ptr [rbp-0xE8], rax
+ mov rdi, rax
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [r8]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov gword ptr [rbp-0x108], rax
+ lea rdi, bword ptr [rbp-0x60]
+ mov ecx, dword ptr [rbp-0x6C]
+ lea esi, [rcx+0x01]
+ movsxd rsi, esi
+ mov rdx, gword ptr [rdi+8*rsi]
+ lea rdi, bword ptr [rbp-0x68]
+ mov r8, gword ptr [rdi+8*rsi]
+ mov r9, qword ptr [rbp-0xE8]
+ mov r10, r9
+ mov qword ptr [rbp-0xD0], r10
+ mov rdi, r10
+ mov rsi, rdx
+ mov rdx, r8
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [r8]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rdi, qword ptr [rbp-0xD0]
+ mov rsi, gword ptr [rbp-0x108]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rax, qword ptr [rbp-0xE8]
+ mov rdi, rax
+ mov rsi, r13
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rcx]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov r13, rax
+ mov ecx, dword ptr [rbp-0x6C]
+ add ecx, 2
+ mov dword ptr [rbp-0x6C], ecx
+ mov rdi, r12
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rax]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ mov edi, dword ptr [rbp-0x6C]
+ cmp eax, edi
+ mov dword ptr [rbp-0x6C], edi
+ mov rax, qword ptr [rbp-0xE8]
+ jg G_M44773_IG33
+ ;; size=227 bbWeight=4 PerfScore 187.00
+G_M44773_IG34:
+ jmp SHORT G_M44773_IG39
+ ;; size=2 bbWeight=0.50 PerfScore 1.00
+G_M44773_IG35:
+ mov r13, gword ptr [rbp-0x60]
+ mov rax, gword ptr [rbp-0x68]
+ mov gword ptr [rbp-0x110], rax
+ mov rdi, qword ptr [rbp-0x40]
+ mov rsi, qword ptr [rdi+0x10]
+ mov rcx, qword ptr [rsi+0x20]
+ test rcx, rcx
+ je SHORT G_M44773_IG37
+ ;; size=32 bbWeight=0.50 PerfScore 4.62
+G_M44773_IG36:
+ mov rax, gword ptr [rbp-0x110]
+ jmp SHORT G_M44773_IG38
+ ;; size=9 bbWeight=0.40 PerfScore 1.20
+G_M44773_IG37:
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rcx, rax
+ mov rax, gword ptr [rbp-0x110]
+ ;; size=25 bbWeight=0.10 PerfScore 0.25
+G_M44773_IG38:
+ mov rdi, rcx
+ mov rsi, r13
+ mov rdx, rax
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov r13, rax
+ ;; size=24 bbWeight=0.50 PerfScore 2.12
+G_M44773_IG39:
+ mov rdi, qword ptr [r15+0x10]
+ mov rax, qword ptr [rdi+0x18]
+ test rax, rax
+ je SHORT G_M44773_IG41
+ ;; size=13 bbWeight=1 PerfScore 5.25
+G_M44773_IG40:
+ mov r15, rax
+ jmp SHORT G_M44773_IG42
+ ;; size=5 bbWeight=0.80 PerfScore 1.80
+G_M44773_IG41:
+ mov rdi, r15
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov r15, rax
+ ;; size=21 bbWeight=0.20 PerfScore 0.35
+G_M44773_IG42:
+ mov rdi, r15
+ mov rsi, r14
+ mov rdx, r13
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov r14, rax
+ mov rdi, qword ptr [rbp+0x20]
+ mov r13, qword ptr [rbp+0x28]
+ mov rax, qword ptr [rbp+0x40]
+ mov rcx, qword ptr [rbp+0x48]
+ mov qword ptr [rbp-0xC0], rcx
+ mov rdx, qword ptr [rbp-0xF0]
+ mov qword ptr [rbp-0x78], rdx
+ mov qword ptr [rbp-0x88], rdi
+ mov qword ptr [rbp-0x90], rax
+ xor rax, rax
+ mov gword ptr [rbp-0x120], rax
+ mov rdi, r12
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [r8]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ cmp eax, 1
+ je G_M44773_IG50
+ ;; size=106 bbWeight=1 PerfScore 19.25
+G_M44773_IG43:
+ xor eax, eax
+ mov dword ptr [rbp-0x94], eax
+ mov rdi, r12
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rcx]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ test eax, eax
+ jle G_M44773_IG54
+ ;; size=31 bbWeight=0.50 PerfScore 3.00
+G_M44773_IG44:
+ mov rax, qword ptr [rbp-0x78]
+ mov rdi, qword ptr [rax+0x10]
+ mov rcx, qword ptr [rdi+0x20]
+ test rcx, rcx
+ je SHORT G_M44773_IG46
+ ;; size=17 bbWeight=0.25 PerfScore 1.56
+G_M44773_IG45:
+ jmp SHORT G_M44773_IG47
+ ;; size=2 bbWeight=0.20 PerfScore 0.40
+G_M44773_IG46:
+ mov rdi, rax
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rcx, rax
+ ;; size=21 bbWeight=0.05 PerfScore 0.09
+G_M44773_IG47:
+ mov rax, rcx
+ ;; size=3 bbWeight=0.25 PerfScore 0.06
+G_M44773_IG48:
+ lea rdi, bword ptr [rbp-0x88]
+ mov ecx, dword ptr [rbp-0x94]
+ movsxd rsi, ecx
+ mov rsi, gword ptr [rdi+8*rsi]
+ lea rdi, bword ptr [rbp-0x90]
+ mov dword ptr [rbp-0x94], ecx
+ movsxd rdx, ecx
+ mov rdx, gword ptr [rdi+8*rdx]
+ mov qword ptr [rbp-0xE8], rax
+ mov rdi, rax
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [r8]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov gword ptr [rbp-0x130], rax
+ lea rdi, bword ptr [rbp-0x88]
+ mov ecx, dword ptr [rbp-0x94]
+ lea esi, [rcx+0x01]
+ movsxd rsi, esi
+ mov rdx, gword ptr [rdi+8*rsi]
+ lea rdi, bword ptr [rbp-0x90]
+ mov r8, gword ptr [rdi+8*rsi]
+ mov r9, qword ptr [rbp-0xE8]
+ mov r10, r9
+ mov qword ptr [rbp-0xD8], r10
+ mov rdi, r10
+ mov rsi, rdx
+ mov rdx, r8
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [r8]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rdi, qword ptr [rbp-0xD8]
+ mov rsi, gword ptr [rbp-0x130]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rax, qword ptr [rbp-0xE8]
+ mov rdi, rax
+ mov rsi, gword ptr [rbp-0x120]
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rcx]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov gword ptr [rbp-0x120], rax
+ mov ecx, dword ptr [rbp-0x94]
+ add ecx, 2
+ mov dword ptr [rbp-0x94], ecx
+ mov rdi, r12
+ mov rdx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rdx]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ mov edi, dword ptr [rbp-0x94]
+ cmp eax, edi
+ mov dword ptr [rbp-0x94], edi
+ mov rax, qword ptr [rbp-0xE8]
+ jg G_M44773_IG48
+ ;; size=268 bbWeight=4 PerfScore 193.00
+G_M44773_IG49:
+ jmp SHORT G_M44773_IG54
+ ;; size=2 bbWeight=0.50 PerfScore 1.00
+G_M44773_IG50:
+ mov rax, gword ptr [rbp-0x88]
+ mov gword ptr [rbp-0x128], rax
+ mov rcx, gword ptr [rbp-0x90]
+ mov gword ptr [rbp-0x138], rcx
+ mov rdi, qword ptr [rbp-0x78]
+ mov rsi, qword ptr [rdi+0x10]
+ mov rdx, qword ptr [rsi+0x20]
+ test rdx, rdx
+ je SHORT G_M44773_IG52
+ ;; size=45 bbWeight=0.50 PerfScore 5.12
+G_M44773_IG51:
+ mov rax, gword ptr [rbp-0x128]
+ mov rcx, gword ptr [rbp-0x138]
+ jmp SHORT G_M44773_IG53
+ ;; size=16 bbWeight=0.40 PerfScore 1.60
+G_M44773_IG52:
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rdx, rax
+ mov rax, gword ptr [rbp-0x128]
+ mov rcx, gword ptr [rbp-0x138]
+ ;; size=32 bbWeight=0.10 PerfScore 0.35
+G_M44773_IG53:
+ mov r8, rdx
+ mov rdi, r8
+ mov rsi, rax
+ mov rdx, rcx
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov gword ptr [rbp-0x120], rax
+ ;; size=31 bbWeight=0.50 PerfScore 2.62
+G_M44773_IG54:
+ mov rax, gword ptr [rbp-0x120]
+ mov gword ptr [rbp-0x118], rax
+ mov rcx, qword ptr [rbp-0xF0]
+ mov qword ptr [rbp-0x80], rcx
+ mov qword ptr [rbp-0xA0], r13
+ mov r13, qword ptr [rbp-0xC0]
+ mov qword ptr [rbp-0xA8], r13
+ xor r13, r13
+ mov rdi, r12
+ mov rdx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rdx]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ cmp eax, 1
+ je G_M44773_IG62
+ ;; size=73 bbWeight=1 PerfScore 12.00
+G_M44773_IG55:
+ xor eax, eax
+ mov dword ptr [rbp-0xAC], eax
+ mov rdi, r12
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rcx]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ test eax, eax
+ jle G_M44773_IG66
+ ;; size=31 bbWeight=0.50 PerfScore 3.00
+G_M44773_IG56:
+ mov rax, qword ptr [rbp-0x80]
+ mov rdi, qword ptr [rax+0x10]
+ mov r8, qword ptr [rdi+0x20]
+ test r8, r8
+ je SHORT G_M44773_IG58
+ ;; size=17 bbWeight=0.25 PerfScore 1.56
+G_M44773_IG57:
+ jmp SHORT G_M44773_IG59
+ ;; size=2 bbWeight=0.20 PerfScore 0.40
+G_M44773_IG58:
+ mov rdi, rax
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov r8, rax
+ ;; size=21 bbWeight=0.05 PerfScore 0.09
+G_M44773_IG59:
+ mov rax, r8
+ ;; size=3 bbWeight=0.25 PerfScore 0.06
+G_M44773_IG60:
+ lea rdi, bword ptr [rbp-0xA0]
+ mov ecx, dword ptr [rbp-0xAC]
+ movsxd rsi, ecx
+ mov rsi, gword ptr [rdi+8*rsi]
+ lea rdi, bword ptr [rbp-0xA8]
+ mov dword ptr [rbp-0xAC], ecx
+ movsxd rdx, ecx
+ mov rdx, gword ptr [rdi+8*rdx]
+ mov qword ptr [rbp-0xE8], rax
+ mov rdi, rax
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [r8]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov gword ptr [rbp-0x140], rax
+ lea rdi, bword ptr [rbp-0xA0]
+ mov ecx, dword ptr [rbp-0xAC]
+ lea esi, [rcx+0x01]
+ movsxd rsi, esi
+ mov rdx, gword ptr [rdi+8*rsi]
+ lea rdi, bword ptr [rbp-0xA8]
+ mov r8, gword ptr [rdi+8*rsi]
+ mov r9, qword ptr [rbp-0xE8]
+ mov r10, r9
+ mov qword ptr [rbp-0xE0], r10
+ mov rdi, r10
+ mov rsi, rdx
+ mov rdx, r8
+ mov r8, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [r8]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rdi, qword ptr [rbp-0xE0]
+ mov rsi, gword ptr [rbp-0x140]
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov rdx, rax
+ mov rax, qword ptr [rbp-0xE8]
+ mov rdi, rax
+ mov rsi, r13
+ mov rcx, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rcx]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov r13, rax
+ mov ecx, dword ptr [rbp-0xAC]
+ add ecx, 2
+ mov dword ptr [rbp-0xAC], ecx
+ mov rdi, r12
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ call [rax]System.Runtime.Intrinsics.Vector64`1[System.__Canon]:get_Count():int
+ mov edi, dword ptr [rbp-0xAC]
+ cmp eax, edi
+ mov dword ptr [rbp-0xAC], edi
+ mov rax, qword ptr [rbp-0xE8]
+ jg G_M44773_IG60
+ ;; size=260 bbWeight=4 PerfScore 187.00
+G_M44773_IG61:
+ jmp SHORT G_M44773_IG66
+ ;; size=2 bbWeight=0.50 PerfScore 1.00
+G_M44773_IG62:
+ mov r13, gword ptr [rbp-0xA0]
+ mov r12, gword ptr [rbp-0xA8]
+ mov rdi, qword ptr [rbp-0x80]
+ mov rsi, qword ptr [rdi+0x10]
+ mov rax, qword ptr [rsi+0x20]
+ test rax, rax
+ je SHORT G_M44773_IG64
+ ;; size=31 bbWeight=0.50 PerfScore 4.12
+G_M44773_IG63:
+ jmp SHORT G_M44773_IG65
+ ;; size=2 bbWeight=0.40 PerfScore 0.80
+G_M44773_IG64:
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ ;; size=15 bbWeight=0.10 PerfScore 0.12
+G_M44773_IG65:
+ mov rdi, rax
+ mov rsi, r13
+ mov rdx, r12
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Multiply(System.__Canon,System.__Canon):System.__Canon
+ mov r13, rax
+ ;; size=24 bbWeight=0.50 PerfScore 2.12
+G_M44773_IG66:
+ mov rdi, r15
+ mov rsi, gword ptr [rbp-0x118]
+ mov rdx, r13
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ mov r15, rax
+ mov rdi, qword ptr [rbx+0x10]
+ mov rdi, qword ptr [rdi+0x18]
+ test rdi, rdi
+ je SHORT G_M44773_IG68
+ ;; size=41 bbWeight=1 PerfScore 10.25
+G_M44773_IG67:
+ jmp SHORT G_M44773_IG69
+ ;; size=2 bbWeight=0.80 PerfScore 1.60
+G_M44773_IG68:
+ mov rdi, rbx
+ mov rsi, 0xD1FFAB1E ; global ptr
+ call CORINFO_HELP_RUNTIMEHANDLE_METHOD
+ mov rdi, rax
+ ;; size=21 bbWeight=0.20 PerfScore 0.35
+G_M44773_IG69:
+ mov rsi, r14
+ mov rdx, r15
+ mov rax, 0xD1FFAB1E ; code for System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ call [rax]System.Runtime.Intrinsics.Scalar`1[System.__Canon]:Add(System.__Canon,System.__Canon):System.__Canon
+ nop
+ ;; size=19 bbWeight=1 PerfScore 4.00
+G_M44773_IG70:
+ add rsp, 280
+ pop rbx
+ pop r12
+ pop r13
+ pop r14
+ pop r15
pop rbp
- tail.jmp [rax]System.Runtime.Intrinsics.Vector256:Dot[System.__Canon](System.Runtime.Intrinsics.Vector256`1[System.__Canon],System.Runtime.Intrinsics.Vector256`1[System.__Canon]):System.__Canon
- ;; size=8 bbWeight=1 PerfScore 2.75
+ ret
+ ;; size=18 bbWeight=1 PerfScore 4.25
-; Total bytes of code 114, prolog size 14, PerfScore 31.10, instruction count 26, allocated bytes for code 114 (MethodHash=dcdc511a) for method System.Runtime.Intrinsics.Vector256`1[System.__Canon]:System.Runtime.Intrinsics.ISimdVector<System.Runtime.Intrinsics.Vector256<T>,T>.Dot(System.Runtime.Intrinsics.Vector256`1[System.__Canon],System.Runtime.Intrinsics.Vector256`1[System.__Canon]):System.__Canon (FullOpts)
+; Total bytes of code 2276, prolog size 29, PerfScore 935.55, instruction count 506, allocated bytes for code 2276 (MethodHash=dcdc511a) for method System.Runtime.Intrinsics.Vector256`1[System.__Canon]:System.Runtime.Intrinsics.ISimdVector<System.Runtime.Intrinsics.Vector256<T>,T>.Dot(System.Runtime.Intrinsics.Vector256`1[System.__Canon],System.Runtime.Intrinsics.Vector256`1[System.__Canon]):System.__Canon (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/d3c8d8a41e9912ee215fffeed2967cd5 |
Top method improvements-416 (-71.48 % of base) - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte ; Assembly listing for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendEnum>g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte (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; 11 single block inlinees; 5 inlinees without PGO data
+; 0 inlinees with PGO data; 14 single block inlinees; 7 inlinees without PGO data
; Final local variable assignments
;
-; V00 TypeCtx [V00,T14] ( 5, 12.60) long -> r14 single-def
-; V01 arg0 [V01,T18] ( 7, 7 ) byref -> [rbp-0x50] single-def
-; V02 arg1 [V02,T16] ( 3, 10 ) ref -> r12 class-hnd single-def <System.__Canon>
-; V03 arg2 [V03,T02] ( 6, 30 ) int -> rbx
-; V04 arg3 [V04,T15] ( 4, 11 ) byref -> r13 single-def
-; V05 arg4 [V05,T07] ( 5, 18 ) ref -> r15 class-hnd single-def <System.String>
-; V06 loc0 [V06,T05] ( 4, 28 ) int -> rdi
-; V07 loc1 [V07,T01] ( 9, 36 ) ref -> [rbp-0x58] do-not-enreg[Z] class-hnd EH-live <ushort[]>
-; V08 loc2 [V08,T33] ( 2, 2 ) ubyte -> [rbp-0x34] do-not-enreg[Z] EH-live
-; V09 OutArgs [V09 ] ( 1, 1 ) struct (16) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V10 tmp1 [V10 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ushort]>
+; V00 TypeCtx [V00,T00] ( 3, 3 ) long -> rdi single-def
+;* V01 arg0 [V01 ] ( 0, 0 ) byref -> zero-ref single-def
+;* V02 arg1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.__Canon>
+; V03 arg2 [V03,T02] ( 4, 2 ) int -> rcx
+;* V04 arg3 [V04 ] ( 0, 0 ) byref -> zero-ref single-def
+; V05 arg4 [V05,T01] ( 4, 2 ) ref -> rbx class-hnd single-def <System.String>
+; V06 loc0 [V06,T05] ( 4, 0 ) int -> rsi
+; V07 loc1 [V07,T04] ( 4, 0 ) ref -> [rbp-0x10] do-not-enreg[Z] class-hnd EH-live <ushort[]>
+;* V08 loc2 [V08 ] ( 0, 0 ) ubyte -> zero-ref
+;# V09 OutArgs [V09 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V10 tmp1 [V10 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.Span`1[ushort]>
;* V11 tmp2 [V11 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V12 tmp3 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-;* V13 tmp4 [V13 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
-;* V14 tmp5 [V14 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-; V15 tmp6 [V15,T17] ( 3, 12 ) int -> rdi
-;* V16 tmp7 [V16 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;* V17 tmp8 [V17 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
-;* V18 tmp9 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V19 tmp10 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-; V20 tmp11 [V20,T12] ( 2, 16 ) byref -> rdx "Inlining Arg"
-; V21 tmp12 [V21,T13] ( 2, 16 ) int -> r8 "Inlining Arg"
-; V22 tmp13 [V22,T19] ( 4, 8 ) int -> rdx "Inlining Arg"
-;* V23 tmp14 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;* V24 tmp15 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
-;* V25 tmp16 [V25 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V26 tmp17 [V26 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V27 tmp18 [V27 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V28 tmp19 [V28,T28] ( 3, 3 ) ubyte -> rdi "Inline return value spill temp"
-; V29 tmp20 [V29,T24] ( 2, 4 ) ref -> rdi class-hnd exact "impAppendStmt" <System.Text.UTF8Encoding+UTF8EncodingSealed>
-; V30 tmp21 [V30 ] ( 2, 2 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;* V31 tmp22 [V31 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
-; V32 tmp23 [V32,T20] ( 4, 8 ) int -> r8 "Inlining Arg"
-; V33 tmp24 [V33,T23] ( 3, 6 ) byref -> rcx "Inlining Arg"
-;* V34 tmp25 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-; V35 tmp26 [V35,T25] ( 2, 4 ) byref -> rcx "Inlining Arg"
-; V36 tmp27 [V36,T26] ( 2, 4 ) int -> r8 "Inlining Arg"
-;* V37 tmp28 [V37 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP
-;* V38 tmp29 [V38 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
-;* V39 tmp30 [V39 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V40 tmp31 [V40 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-;* V41 tmp32 [V41 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-INDEP
-;* V42 tmp33 [V42 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
-;* V43 tmp34 [V43 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP
-;* V44 tmp35 [V44 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
-; V45 tmp36 [V45,T08] ( 3, 16 ) byref -> [rbp-0x60] "field V16._reference (fldOffset=0x0)" P-INDEP
-; V46 tmp37 [V46,T10] ( 3, 16 ) int -> [rbp-0x44] "field V16._length (fldOffset=0x8)" P-INDEP
-; V47 tmp38 [V47,T09] ( 3, 16 ) byref -> [rbp-0x68] "field V17._reference (fldOffset=0x0)" P-INDEP
-; V48 tmp39 [V48,T11] ( 3, 16 ) int -> [rbp-0x48] "field V17._length (fldOffset=0x8)" P-INDEP
-; V49 tmp40 [V49,T21] ( 2, 8 ) byref -> rdx "field V18._reference (fldOffset=0x0)" P-INDEP
-; V50 tmp41 [V50,T22] ( 2, 8 ) int -> r8 "field V18._length (fldOffset=0x8)" P-INDEP
-;* V51 tmp42 [V51 ] ( 0, 0 ) byref -> zero-ref "field V19._reference (fldOffset=0x0)" P-INDEP
-;* V52 tmp43 [V52 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
-; V53 tmp44 [V53,T27] ( 3, 3 ) byref -> rsi "field V23._reference (fldOffset=0x0)" P-INDEP
-; V54 tmp45 [V54,T29] ( 3, 3 ) int -> rdx "field V23._length (fldOffset=0x8)" P-INDEP
-;* V55 tmp46 [V55 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP
-;* V56 tmp47 [V56 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
-; V57 tmp48 [V57,T31] ( 2, 2 ) byref -> rsi "field V25._reference (fldOffset=0x0)" P-INDEP
-; V58 tmp49 [V58,T34] ( 2, 2 ) int -> rdx "field V25._length (fldOffset=0x8)" P-INDEP
-;* V59 tmp50 [V59 ] ( 0, 0 ) byref -> zero-ref "field V31._reference (fldOffset=0x0)" P-INDEP
-;* V60 tmp51 [V60 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP
-; V61 tmp52 [V61,T32] ( 2, 2 ) byref -> rcx "field V34._reference (fldOffset=0x0)" P-INDEP
-; V62 tmp53 [V62,T35] ( 2, 2 ) int -> r8 "field V34._length (fldOffset=0x8)" P-INDEP
-; V63 tmp54 [V63,T04] ( 2, 32 ) long -> rdi "argument with side effect"
-; V64 PSPSym [V64,T36] ( 1, 1 ) long -> [rbp-0x80] do-not-enreg[V] "PSPSym"
-; V65 cse0 [V65,T06] ( 5, 26 ) ref -> [rbp-0x70] multi-def "CSE #03: aggressive"
-; V66 cse1 [V66,T30] ( 3, 3 ) int -> r9 "CSE #02: moderate"
-; V67 rat0 [V67,T03] ( 3, 32 ) long -> rdi "runtime lookup"
-; V68 rat1 [V68,T00] ( 3, 44.80) long -> rdi "fgMakeTemp is creating a new local variable"
+;* V13 tmp4 [V13 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V14 tmp5 [V14 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
+;* V15 tmp6 [V15 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
+; V16 tmp7 [V16,T06] ( 2, 0 ) int -> rsi
+;* V17 tmp8 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
+;* V18 tmp9 [V18 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
+;* V19 tmp10 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V20 tmp11 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+;* V21 tmp12 [V21 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V22 tmp13 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V23 tmp14 [V23 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V24 tmp15 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+;* V25 tmp16 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+;* V26 tmp17 [V26 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V27 tmp18 [V27 ] ( 0, 0 ) ref -> zero-ref do-not-enreg[F] ld-addr-op class-hnd "Inlining Arg" <System.__Canon>
+;* V28 tmp19 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType>
+;* V29 tmp20 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.RuntimeType[]>
+;* V30 tmp21 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+;* V31 tmp22 [V31 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V32 tmp23 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
+;* V33 tmp24 [V33 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V34 tmp25 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V35 tmp26 [V35 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V36 tmp27 [V36 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V37 tmp28 [V37 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V38 tmp29 [V38 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.Text.UTF8Encoding+UTF8EncodingSealed>
+;* V39 tmp30 [V39 ] ( 0, 0 ) int -> zero-ref do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
+;* V40 tmp31 [V40 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V41 tmp32 [V41 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V42 tmp33 [V42 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V43 tmp34 [V43 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V44 tmp35 [V44 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V45 tmp36 [V45 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V46 tmp37 [V46 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V47 tmp38 [V47 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
+;* V48 tmp39 [V48 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V49 tmp40 [V49 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
+;* V50 tmp41 [V50 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V51 tmp42 [V51 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
+;* V52 tmp43 [V52 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP
+;* V53 tmp44 [V53 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP
+;* V54 tmp45 [V54 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP
+;* V55 tmp46 [V55 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
+;* V56 tmp47 [V56 ] ( 0, 0 ) byref -> zero-ref "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V57 tmp48 [V57 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
+;* V58 tmp49 [V58 ] ( 0, 0 ) byref -> zero-ref "field V19._reference (fldOffset=0x0)" P-INDEP
+;* V59 tmp50 [V59 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
+;* V60 tmp51 [V60 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP
+;* V61 tmp52 [V61 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
+;* V62 tmp53 [V62 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V63 tmp54 [V63 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
+;* V64 tmp55 [V64 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP
+;* V65 tmp56 [V65 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP
+;* V66 tmp57 [V66 ] ( 0, 0 ) byref -> zero-ref "field V33._reference (fldOffset=0x0)" P-INDEP
+;* V67 tmp58 [V67 ] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP
+;* V68 tmp59 [V68 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP
+;* V69 tmp60 [V69 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x8)" P-INDEP
+;* V70 tmp61 [V70 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP
+;* V71 tmp62 [V71 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP
+;* V72 tmp63 [V72 ] ( 0, 0 ) byref -> zero-ref "field V43._reference (fldOffset=0x0)" P-INDEP
+;* V73 tmp64 [V73 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP
+; V74 PSPSym [V74,T03] ( 1, 1 ) long -> [rbp-0x20] do-not-enreg[V] "PSPSym"
;
-; Lcl frame size = 104
+; Lcl frame size = 24
G_M52072_IG01:
push rbp
- push r15
- push r14
- push r13
- push r12
push rbx
- sub rsp, 104
- lea rbp, [rsp+0x90]
- mov qword ptr [rbp-0x80], rsp
- mov qword ptr [rbp-0x30], rdi
- mov bword ptr [rbp-0x50], rsi
- mov r14, rdi
- mov r12, rdx
- mov ebx, ecx
- mov r13, r8
- mov r15, r9
- ;; size=48 bbWeight=8 PerfScore 88.00
+ sub rsp, 24
+ lea rbp, [rsp+0x20]
+ mov qword ptr [rbp-0x20], rsp
+ mov rbx, r9
+ ;; size=18 bbWeight=0 PerfScore 0.00
G_M52072_IG02:
- lea edi, [rbx+rbx]
- cmp edi, 0xD1FFAB1E
- jbe SHORT G_M52072_IG05
- ;; size=11 bbWeight=8 PerfScore 14.00
-G_M52072_IG03:
- cmp ebx, 0xD1FFAB1E
- je SHORT G_M52072_IG04
+ lea esi, [rcx+rcx]
+ cmp esi, 0xD1FFAB1E
+ jbe SHORT G_M52072_IG03
+ mov esi, 0xD1FFAB1E
mov edi, 0xD1FFAB1E
- jmp SHORT G_M52072_IG05
- ;; size=15 bbWeight=4 PerfScore 14.00
+ cmp ecx, 0xD1FFAB1E
+ cmovne esi, edi
+ ;; size=30 bbWeight=0 PerfScore 0.00
+G_M52072_IG03:
+ mov rdi, 0xD1FFAB1E ; const ptr
+ mov rdi, gword ptr [rdi]
+ mov rax, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[ushort]:Rent(int):ushort[]:this
+ call [rax]System.Buffers.SharedArrayPool`1[ushort]:Rent(int):ushort[]:this
+ mov gword ptr [rbp-0x10], rax
+ ;; size=29 bbWeight=0 PerfScore 0.00
G_M52072_IG04:
- mov edi, 0xD1FFAB1E
- ;; size=5 bbWeight=4 PerfScore 1.00
+ cmp gword ptr [rbp-0x10], 0
+ je SHORT G_M52072_IG05
+ mov rax, gword ptr [rbp-0x10]
+ mov eax, dword ptr [rax+0x08]
+ ;; size=14 bbWeight=0 PerfScore 0.00
G_M52072_IG05:
- mov ebx, edi
- mov rdi, 0xD1FFAB1E ; const ptr
- mov rcx, gword ptr [rdi]
- mov gword ptr [rbp-0x70], rcx
- mov rdi, rcx
- mov esi, ebx
- mov rdx, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[ushort]:Rent(int):ushort[]:this
- call [rdx]System.Buffers.SharedArrayPool`1[ushort]:Rent(int):ushort[]:this
- mov gword ptr [rbp-0x58], rax
- ;; size=40 bbWeight=8 PerfScore 66.00
+ test rbx, rbx
+ je SHORT G_M52072_IG06
+ mov eax, dword ptr [rbx+0x08]
+ ;; size=8 bbWeight=0 PerfScore 0.00
G_M52072_IG06:
- cmp gword ptr [rbp-0x58], 0
- jne SHORT G_M52072_IG08
- ;; size=7 bbWeight=8 PerfScore 24.00
-G_M52072_IG07:
- xor rax, rax
- xor ecx, ecx
- jmp SHORT G_M52072_IG09
- ;; size=6 bbWeight=4 PerfScore 10.00
-G_M52072_IG08:
- mov rax, gword ptr [rbp-0x58]
- add rax, 16
- mov bword ptr [rbp-0x60], rax
- mov rcx, gword ptr [rbp-0x58]
- mov ecx, dword ptr [rcx+0x08]
- mov dword ptr [rbp-0x44], ecx
- mov rax, bword ptr [rbp-0x60]
- mov ecx, dword ptr [rbp-0x44]
- ;; size=29 bbWeight=4 PerfScore 33.00
-G_M52072_IG09:
- test r15, r15
- jne SHORT G_M52072_IG11
- ;; size=5 bbWeight=8 PerfScore 10.00
-G_M52072_IG10:
- xor rdx, rdx
- xor r8d, r8d
- jmp SHORT G_M52072_IG12
- ;; size=7 bbWeight=4 PerfScore 10.00
-G_M52072_IG11:
- lea rdx, bword ptr [r15+0x0C]
- mov r8d, dword ptr [r15+0x08]
- mov bword ptr [rbp-0x68], rdx
- mov dword ptr [rbp-0x48], r8d
- mov rdx, bword ptr [rbp-0x68]
- mov r8d, dword ptr [rbp-0x48]
- ;; size=24 bbWeight=4 PerfScore 26.00
-G_M52072_IG12:
- mov rdi, qword ptr [r14+0x10]
- mov rdi, qword ptr [rdi+0x10]
- test rdi, rdi
- je SHORT G_M52072_IG14
- ;; size=13 bbWeight=8 PerfScore 42.00
-G_M52072_IG13:
- jmp SHORT G_M52072_IG15
- ;; size=2 bbWeight=6.40 PerfScore 12.80
-G_M52072_IG14:
- mov bword ptr [rbp-0x60], rax
- mov bword ptr [rbp-0x68], rdx
- mov dword ptr [rbp-0x44], ecx
- mov dword ptr [rbp-0x48], r8d
- mov rdi, r14
- mov rsi, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rdi, rax
- mov rax, bword ptr [rbp-0x60]
- mov ecx, dword ptr [rbp-0x44]
- mov rdx, bword ptr [rbp-0x68]
- mov r8d, dword ptr [rbp-0x48]
- ;; size=51 bbWeight=1.60 PerfScore 15.60
-G_M52072_IG15:
- mov bword ptr [rsp], rdx
- mov dword ptr [rsp+0x08], r8d
- mov rdx, rax
- mov rsi, r12
- mov r8, r13
- mov rax, 0xD1FFAB1E ; code for System.Enum:TryFormatUnconstrained[System.__Canon](System.__Canon,System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort]):ubyte
- call [rax]System.Enum:TryFormatUnconstrained[System.__Canon](System.__Canon,System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort]):ubyte
- test eax, eax
- je G_M52072_IG22
- ;; size=38 bbWeight=8 PerfScore 58.00
-G_M52072_IG16:
- mov edx, dword ptr [r13]
- cmp gword ptr [rbp-0x58], 0
- jne SHORT G_M52072_IG17
- test edx, edx
- jne SHORT G_M52072_IG20
- xor rsi, rsi
- xor edx, edx
- jmp SHORT G_M52072_IG18
- ;; size=21 bbWeight=1 PerfScore 8.75
-G_M52072_IG17:
- mov rsi, gword ptr [rbp-0x58]
- cmp dword ptr [rsi+0x08], edx
- jb SHORT G_M52072_IG20
- mov rsi, gword ptr [rbp-0x58]
- add rsi, 16
- ;; size=17 bbWeight=1 PerfScore 6.25
-G_M52072_IG18:
- mov rcx, 0xD1FFAB1E ; const ptr
- mov rdi, gword ptr [rcx]
- mov rbx, bword ptr [rbp-0x50]
- lea rcx, bword ptr [rbx+0x10]
- mov r8d, dword ptr [rbx+0x08]
- mov r9d, dword ptr [rcx+0x08]
- cmp r8d, r9d
- ja SHORT G_M52072_IG20
- mov eax, r8d
- add rax, bword ptr [rcx]
- mov rcx, rax
- sub r9d, r8d
- mov r8d, r9d
- lea r9, [rbp-0x40]
- mov rax, 0xD1FFAB1E ; code for System.Text.UTF8Encoding+UTF8EncodingSealed:TryGetBytes(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte],byref):ubyte:this
- call [rax]System.Text.UTF8Encoding+UTF8EncodingSealed:TryGetBytes(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte],byref):ubyte:this
- test eax, eax
- je SHORT G_M52072_IG21
- mov edi, dword ptr [rbp-0x40]
- add dword ptr [rbx+0x08], edi
- mov edi, 1
- ;; size=80 bbWeight=1 PerfScore 22.25
-G_M52072_IG19:
- mov dword ptr [rbp-0x34], edi
- jmp SHORT G_M52072_IG23
- ;; size=5 bbWeight=1 PerfScore 3.00
-G_M52072_IG20:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
- call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ mov rax, 0xD1FFAB1E ; code for System.RuntimeType:ThrowMustBeEnum()
+ call [rax]System.RuntimeType:ThrowMustBeEnum()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M52072_IG21:
- mov byte ptr [rbx+0x0C], 0
- xor edi, edi
- jmp SHORT G_M52072_IG19
- ;; size=8 bbWeight=1 PerfScore 3.25
-G_M52072_IG22:
- mov rdi, gword ptr [rbp-0x70]
- mov rsi, gword ptr [rbp-0x58]
- xor edx, edx
- mov rax, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
- call [rax]System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
- jmp G_M52072_IG02
- ;; size=27 bbWeight=8 PerfScore 60.00
-G_M52072_IG23:
- mov rdi, rsp
- call G_M52072_IG27
- ;; size=8 bbWeight=1 PerfScore 1.25
-G_M52072_IG24:
- nop
- ;; size=1 bbWeight=1 PerfScore 0.25
-G_M52072_IG25:
- mov eax, dword ptr [rbp-0x34]
- ;; size=3 bbWeight=1 PerfScore 1.00
-G_M52072_IG26:
- add rsp, 104
- pop rbx
- pop r12
- pop r13
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=15 bbWeight=1 PerfScore 4.25
-G_M52072_IG27:
+G_M52072_IG07:
+ int3
+ ;; size=1 bbWeight=0 PerfScore 0.00
+G_M52072_IG08:
push rbp
- push r15
- push r14
- push r13
- push r12
push rbx
- sub rsp, 24
- mov rbp, qword ptr [rdi+0x10]
- mov qword ptr [rsp+0x10], rbp
- lea rbp, [rbp+0x90]
- ;; size=30 bbWeight=1 PerfScore 9.75
-G_M52072_IG28:
+ push rax
+ mov rbp, qword ptr [rdi]
+ mov qword ptr [rsp], rbp
+ lea rbp, [rbp+0x20]
+ ;; size=14 bbWeight=0 PerfScore 0.00
+G_M52072_IG09:
mov rdi, 0xD1FFAB1E ; const ptr
mov rdi, gword ptr [rdi]
- mov rbx, rdi
- mov rdi, rbx
- mov rsi, gword ptr [rbp-0x58]
+ mov rsi, gword ptr [rbp-0x10]
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
call [rax]System.Buffers.SharedArrayPool`1[ushort]:Return(ushort[],ubyte):this
nop
- ;; size=38 bbWeight=1 PerfScore 7.50
-G_M52072_IG29:
- add rsp, 24
+ ;; size=32 bbWeight=0 PerfScore 0.00
+G_M52072_IG10:
+ add rsp, 8
pop rbx
- pop r12
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=15 bbWeight=1 PerfScore 4.25
+ ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 582, prolog size 48, PerfScore 556.15, instruction count 170, allocated bytes for code 582 (MethodHash=a0ff3497) for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendEnum>g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte (FullOpts)
+; Total bytes of code 166, prolog size 18, PerfScore 0.00, instruction count 46, allocated bytes for code 166 (MethodHash=a0ff3497) for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendEnum>g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte (FullOpts) -366 (-87.35 % of base) - System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendEnum[System.__Canon](System.__Canon,System.String):ubyte:this ; Assembly listing for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendEnum[System.__Canon](System.__Canon,System.String):ubyte: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; 9 single block inlinees; 5 inlinees without PGO data
+; 0 inlinees with PGO data; 12 single block inlinees; 7 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 8, 5 ) byref -> rbx this single-def
-; V01 TypeCtx [V01,T01] ( 7, 4.80) long -> r15 single-def
-; V02 arg1 [V02,T04] ( 4, 3.50) ref -> r13 class-hnd single-def <System.__Canon>
-; V03 arg2 [V03,T02] ( 6, 4.50) ref -> r14 class-hnd single-def <System.String>
+;* V00 this [V00 ] ( 0, 0 ) byref -> zero-ref this single-def
+; V01 TypeCtx [V01,T00] ( 3, 3 ) long -> rsi single-def
+;* V02 arg1 [V02 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.__Canon>
+; V03 arg2 [V03,T01] ( 4, 2 ) ref -> rcx class-hnd single-def <System.String>
;* V04 loc0 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Span`1[ushort]>
-; V05 loc1 [V05 ] ( 3, 2 ) int -> [rbp-0x38] do-not-enreg[X] addr-exposed ld-addr-op
+;* V05 loc1 [V05 ] ( 0, 0 ) int -> zero-ref do-not-enreg[X] addr-exposed ld-addr-op
;* V06 loc2 [V06 ] ( 0, 0 ) struct (16) zero-ref <System.Span`1[ushort]>
-; V07 OutArgs [V07 ] ( 1, 1 ) struct (16) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V08 tmp1 [V08 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;* V09 tmp2 [V09 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" <System.Span`1[ushort]>
+;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V08 tmp1 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
+;* V09 tmp2 [V09 ] ( 0, 0 ) struct (16) zero-ref multireg-arg "impAppendStmt" <System.Span`1[ushort]>
;* V10 tmp3 [V10 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
;* V11 tmp4 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
-;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
-;* V14 tmp7 [V14 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
-; V15 tmp8 [V15,T07] ( 2, 4 ) long -> r12 "Inlining Arg"
-;* V16 tmp9 [V16 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
-;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V18 tmp11 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
-; V19 tmp12 [V19,T16] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
-; V20 tmp13 [V20,T19] ( 2, 2 ) int -> rcx "Inlining Arg"
-; V21 tmp14 [V21,T10] ( 3, 3 ) int -> rdx "Inlining Arg"
-;* V22 tmp15 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
-;* V23 tmp16 [V23 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-;* V24 tmp17 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
-;* V25 tmp18 [V25 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
-;* V26 tmp19 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
-;* V27 tmp20 [V27 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V28 tmp21 [V28,T22] ( 3, 1.50) ubyte -> rax "Inline return value spill temp"
-; V29 tmp22 [V29,T17] ( 2, 2 ) ref -> rdi class-hnd exact single-def "impAppendStmt" <System.Text.UTF8Encoding+UTF8EncodingSealed>
-; V30 tmp23 [V30 ] ( 2, 1 ) int -> [rbp-0x40] do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
-;* V31 tmp24 [V31 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
-; V32 tmp25 [V32,T05] ( 4, 4 ) int -> r8 "Inlining Arg"
-; V33 tmp26 [V33,T09] ( 3, 3 ) byref -> rcx single-def "Inlining Arg"
-;* V34 tmp27 [V34 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-; V35 tmp28 [V35,T18] ( 2, 2 ) byref -> rcx single-def "Inlining Arg"
-; V36 tmp29 [V36,T20] ( 2, 2 ) int -> r8 "Inlining Arg"
-;* V37 tmp30 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V38 tmp31 [V38 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-;* V39 tmp32 [V39 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V40 tmp33 [V40 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
-; V41 tmp34 [V41,T12] ( 3, 2.50) byref -> r12 single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V42 tmp35 [V42,T30] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
-;* V43 tmp36 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP
-;* V44 tmp37 [V44 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
-;* V45 tmp38 [V45 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V46 tmp39 [V46 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
-;* V47 tmp40 [V47 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V48 tmp41 [V48 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-;* V49 tmp42 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
-;* V50 tmp43 [V50 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
-; V51 tmp44 [V51,T13] ( 3, 2 ) byref -> [rbp-0x50] "field V16._reference (fldOffset=0x0)" P-INDEP
-; V52 tmp45 [V52,T14] ( 3, 2 ) int -> [rbp-0x44] "field V16._length (fldOffset=0x8)" P-INDEP
-; V53 tmp46 [V53,T24] ( 2, 1 ) byref -> rax single-def "field V17._reference (fldOffset=0x0)" P-INDEP
-; V54 tmp47 [V54,T27] ( 2, 1 ) int -> rcx "field V17._length (fldOffset=0x8)" P-INDEP
-;* V55 tmp48 [V55 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP
-;* V56 tmp49 [V56 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
-;* V57 tmp50 [V57 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP
-;* V58 tmp51 [V58 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP
-;* V59 tmp52 [V59 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP
-;* V60 tmp53 [V60 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP
-; V61 tmp54 [V61,T25] ( 2, 1 ) byref -> rsi single-def "field V25._reference (fldOffset=0x0)" P-INDEP
-; V62 tmp55 [V62,T28] ( 2, 1 ) int -> rdx "field V25._length (fldOffset=0x8)" P-INDEP
-;* V63 tmp56 [V63 ] ( 0, 0 ) byref -> zero-ref "field V31._reference (fldOffset=0x0)" P-INDEP
-;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP
-; V65 tmp58 [V65,T26] ( 2, 1 ) byref -> rcx single-def "field V34._reference (fldOffset=0x0)" P-INDEP
-; V66 tmp59 [V66,T29] ( 2, 1 ) int -> r8 "field V34._length (fldOffset=0x8)" P-INDEP
-; V67 tmp60 [V67,T08] ( 2, 4 ) long -> rdi "argument with side effect"
-; V68 tmp61 [V68,T21] ( 2, 2 ) long -> rdi "argument with side effect"
-; V69 GsCookie [V69 ] ( 1, 1 ) long -> [rbp-0x58] do-not-enreg[X] addr-exposed "GSSecurityCookie"
-; V70 cse0 [V70,T23] ( 3, 1.50) int -> r9 "CSE #01: moderate"
-; V71 rat0 [V71,T06] ( 3, 4 ) long -> rdi "runtime lookup"
-; V72 rat1 [V72,T03] ( 3, 5.60) long -> rdi "fgMakeTemp is creating a new local variable"
-; V73 rat2 [V73,T15] ( 3, 2 ) long -> rdi "runtime lookup"
-; V74 rat3 [V74,T11] ( 3, 2.80) long -> rdi "fgMakeTemp is creating a new local variable"
+;* V12 tmp5 [V12 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ushort]>
+;* V14 tmp7 [V14 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ushort]>
+;* V15 tmp8 [V15 ] ( 0, 0 ) long -> zero-ref "spilling helperCall"
+;* V16 tmp9 [V16 ] ( 0, 0 ) long -> zero-ref "spilling runtimelookup"
+;* V17 tmp10 [V17 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
+;* V18 tmp11 [V18 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ushort]>
+;* V19 tmp12 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V20 tmp13 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.ReadOnlySpan`1[ushort]>
+;* V21 tmp14 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg"
+;* V22 tmp15 [V22 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V23 tmp16 [V23 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V24 tmp17 [V24 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "Inline stloc first use temp" <System.RuntimeType>
+;* V25 tmp18 [V25 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+;* V26 tmp19 [V26 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
+;* V27 tmp20 [V27 ] ( 0, 0 ) ref -> zero-ref do-not-enreg[F] ld-addr-op class-hnd "Inlining Arg" <System.__Canon>
+;* V28 tmp21 [V28 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline return value spill temp" <System.RuntimeType>
+;* V29 tmp22 [V29 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.RuntimeType[]>
+;* V30 tmp23 [V30 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "Inline stloc first use temp" <System.RuntimeType>
+;* V31 tmp24 [V31 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V32 tmp25 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Span`1[ushort]>
+;* V33 tmp26 [V33 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V34 tmp27 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ushort]>
+;* V35 tmp28 [V35 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ushort]>
+;* V36 tmp29 [V36 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V37 tmp30 [V37 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V38 tmp31 [V38 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+;* V39 tmp32 [V39 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "impAppendStmt" <System.Text.UTF8Encoding+UTF8EncodingSealed>
+;* V40 tmp33 [V40 ] ( 0, 0 ) int -> zero-ref do-not-enreg[X] addr-exposed ld-addr-op "Inline ldloca(s) first use temp"
+;* V41 tmp34 [V41 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Span`1[ubyte]>
+;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V43 tmp36 [V43 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V44 tmp37 [V44 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
+;* V45 tmp38 [V45 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
+;* V46 tmp39 [V46 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V47 tmp40 [V47 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP
+;* V48 tmp41 [V48 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
+;* V49 tmp42 [V49 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V50 tmp43 [V50 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
+;* V51 tmp44 [V51 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V52 tmp45 [V52 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+;* V53 tmp46 [V53 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP
+;* V54 tmp47 [V54 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP
+;* V55 tmp48 [V55 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V56 tmp49 [V56 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+;* V57 tmp50 [V57 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-INDEP
+;* V58 tmp51 [V58 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
+;* V59 tmp52 [V59 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V60 tmp53 [V60 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
+;* V61 tmp54 [V61 ] ( 0, 0 ) byref -> zero-ref "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V62 tmp55 [V62 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
+;* V63 tmp56 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP
+;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP
+;* V65 tmp58 [V65 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP
+;* V66 tmp59 [V66 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
+;* V67 tmp60 [V67 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V68 tmp61 [V68 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
+;* V69 tmp62 [V69 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP
+;* V70 tmp63 [V70 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP
+;* V71 tmp64 [V71 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP
+;* V72 tmp65 [V72 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x8)" P-INDEP
+;* V73 tmp66 [V73 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP
+;* V74 tmp67 [V74 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP
+;* V75 tmp68 [V75 ] ( 0, 0 ) byref -> zero-ref "field V41._reference (fldOffset=0x0)" P-INDEP
+;* V76 tmp69 [V76 ] ( 0, 0 ) int -> zero-ref "field V41._length (fldOffset=0x8)" P-INDEP
+;* V77 tmp70 [V77 ] ( 0, 0 ) byref -> zero-ref "field V44._reference (fldOffset=0x0)" P-INDEP
+;* V78 tmp71 [V78 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP
+;* V79 tmp72 [V79 ] ( 0, 0 ) long -> zero-ref "argument with side effect"
+; V80 GsCookie [V80 ] ( 1, 1 ) long -> [rbp-0x08] do-not-enreg[X] addr-exposed "GSSecurityCookie"
;
-; Lcl frame size = 72
+; Lcl frame size = 16
G_M50016_IG01:
push rbp
- push r15
- push r14
- push r13
- push r12
- push rbx
- sub rsp, 72
- lea rbp, [rsp+0x70]
- mov qword ptr [rbp-0x30], rsi
- mov qword ptr [rbp-0x58], 0xD1FFAB1E
- mov rbx, rdi
- mov r15, rsi
- mov r13, rdx
- mov r14, rcx
- ;; size=43 bbWeight=1 PerfScore 9.75
+ sub rsp, 16
+ lea rbp, [rsp+0x10]
+ mov qword ptr [rbp-0x08], 0xD1FFAB1E
+ ;; size=18 bbWeight=0 PerfScore 0.00
G_M50016_IG02:
test dword ptr [rsp], esp
sub rsp, 512
- lea r12, [rsp+0x10]
- test r14, r14
- jne SHORT G_M50016_IG04
- ;; size=20 bbWeight=1 PerfScore 5.00
+ lea rax, [rsp]
+ test rcx, rcx
+ je SHORT G_M50016_IG03
+ mov eax, dword ptr [rcx+0x08]
+ ;; size=22 bbWeight=0 PerfScore 0.00
G_M50016_IG03:
- xor rax, rax
- xor ecx, ecx
- jmp SHORT G_M50016_IG05
- ;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M50016_IG04:
- lea rax, bword ptr [r14+0x0C]
- mov ecx, dword ptr [r14+0x08]
- mov bword ptr [rbp-0x50], rax
- mov dword ptr [rbp-0x44], ecx
- mov rax, bword ptr [rbp-0x50]
- mov ecx, dword ptr [rbp-0x44]
- ;; size=22 bbWeight=0.50 PerfScore 3.25
-G_M50016_IG05:
- mov rdi, qword ptr [r15+0x10]
- mov rdi, qword ptr [rdi+0x10]
- test rdi, rdi
- je SHORT G_M50016_IG07
- ;; size=13 bbWeight=1 PerfScore 5.25
-G_M50016_IG06:
- jmp SHORT G_M50016_IG08
- ;; size=2 bbWeight=0.80 PerfScore 1.60
-G_M50016_IG07:
- mov bword ptr [rbp-0x50], rax
- mov dword ptr [rbp-0x44], ecx
- mov rdi, r15
- mov rsi, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rdi, rax
- mov rax, bword ptr [rbp-0x50]
- mov ecx, dword ptr [rbp-0x44]
- ;; size=35 bbWeight=0.20 PerfScore 1.15
-G_M50016_IG08:
- mov bword ptr [rsp], rax
- mov dword ptr [rsp+0x08], ecx
- mov rdx, r12
- mov ecx, 256
- lea r8, [rbp-0x38]
- mov rsi, r13
- mov rax, 0xD1FFAB1E ; code for System.Enum:TryFormatUnconstrained[System.__Canon](System.__Canon,System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort]):ubyte
- call [rax]System.Enum:TryFormatUnconstrained[System.__Canon](System.__Canon,System.Span`1[ushort],byref,System.ReadOnlySpan`1[ushort]):ubyte
- test eax, eax
- jne SHORT G_M50016_IG15
- ;; size=39 bbWeight=1 PerfScore 7.75
-G_M50016_IG09:
- mov rdi, qword ptr [r15+0x10]
- mov rdi, qword ptr [rdi+0x18]
- test rdi, rdi
- je SHORT G_M50016_IG11
- ;; size=13 bbWeight=0.50 PerfScore 2.62
-G_M50016_IG10:
- jmp SHORT G_M50016_IG12
- ;; size=2 bbWeight=0.40 PerfScore 0.80
-G_M50016_IG11:
- mov rdi, r15
- mov rsi, 0xD1FFAB1E ; global ptr
- call CORINFO_HELP_RUNTIMEHANDLE_METHOD
- mov rdi, rax
- ;; size=21 bbWeight=0.10 PerfScore 0.18
-G_M50016_IG12:
- lea r8, [rbp-0x38]
- mov rsi, rbx
- mov rdx, r13
- mov r9, r14
- mov ecx, 256
- mov rax, 0xD1FFAB1E ; code for System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendEnum>g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte
- call [rax]System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:<AppendEnum>g__GrowAndAppendFormatted|21_0[System.__Canon](byref,System.__Canon,int,byref,System.String):ubyte
- cmp qword ptr [rbp-0x58], 0xD1FFAB1E
- je SHORT G_M50016_IG13
- call CORINFO_HELP_FAIL_FAST
- ;; size=45 bbWeight=0.50 PerfScore 4.38
-G_M50016_IG13:
- nop
- ;; size=1 bbWeight=0.50 PerfScore 0.12
-G_M50016_IG14:
- lea rsp, [rbp-0x28]
- pop rbx
- pop r12
- pop r13
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=15 bbWeight=0.50 PerfScore 2.25
-G_M50016_IG15:
- mov edx, dword ptr [rbp-0x38]
- cmp edx, 256
- ja SHORT G_M50016_IG20
- mov rsi, r12
- mov rcx, 0xD1FFAB1E ; const ptr
- mov rdi, gword ptr [rcx]
- lea rcx, bword ptr [rbx+0x10]
- mov r8d, dword ptr [rbx+0x08]
- mov r9d, dword ptr [rcx+0x08]
- cmp r8d, r9d
- ja SHORT G_M50016_IG20
- mov eax, r8d
- add rax, bword ptr [rcx]
- mov rcx, rax
- sub r9d, r8d
- mov r8d, r9d
- lea r9, [rbp-0x40]
- mov rax, 0xD1FFAB1E ; code for System.Text.UTF8Encoding+UTF8EncodingSealed:TryGetBytes(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte],byref):ubyte:this
- call [rax]System.Text.UTF8Encoding+UTF8EncodingSealed:TryGetBytes(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte],byref):ubyte:this
- test eax, eax
- je SHORT G_M50016_IG16
- mov eax, dword ptr [rbp-0x40]
- add dword ptr [rbx+0x08], eax
- mov eax, 1
- jmp SHORT G_M50016_IG17
- ;; size=92 bbWeight=0.50 PerfScore 12.88
-G_M50016_IG16:
- mov byte ptr [rbx+0x0C], 0
- xor eax, eax
- ;; size=6 bbWeight=0.50 PerfScore 0.62
-G_M50016_IG17:
- cmp qword ptr [rbp-0x58], 0xD1FFAB1E
- je SHORT G_M50016_IG18
- call CORINFO_HELP_FAIL_FAST
- ;; size=15 bbWeight=0.50 PerfScore 2.00
-G_M50016_IG18:
- nop
- ;; size=1 bbWeight=0.50 PerfScore 0.12
-G_M50016_IG19:
- lea rsp, [rbp-0x28]
- pop rbx
- pop r12
- pop r13
- pop r14
- pop r15
- pop rbp
- ret
- ;; size=15 bbWeight=0.50 PerfScore 2.25
-G_M50016_IG20:
- mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
- call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
+ mov rax, 0xD1FFAB1E ; code for System.RuntimeType:ThrowMustBeEnum()
+ call [rax]System.RuntimeType:ThrowMustBeEnum()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 419, prolog size 31, PerfScore 63.22, instruction count 121, allocated bytes for code 419 (MethodHash=e2423c9f) for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendEnum[System.__Canon](System.__Canon,System.String):ubyte:this (FullOpts)
+; Total bytes of code 53, prolog size 18, PerfScore 0.00, instruction count 13, allocated bytes for code 53 (MethodHash=e2423c9f) for method System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler:AppendEnum[System.__Canon](System.__Canon,System.String):ubyte:this (FullOpts) Larger list of diffs: https://gist.github.com/MihuBot/0c37ebf499194a2a3a5cad16a513198a |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Build completed in 1 hour 38 minutes.
dotnet/runtime#99265
CoreLib diffs
Diffs
Frameworks diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: