dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.27k stars 4.73k forks source link

Problems with LSRA's resolution phase #47194

Open kunalspathak opened 3 years ago

kunalspathak commented 3 years ago

Problem statement

This issue captures various problems with existing resolution phase of register allocator.

While doing some other investigation, I noticed a scenario where we create new BB during resolution phase, but the compensation code inside them is identical.

; ...
       je       SHORT G_M59092_IG32
       cmp      edx, 1
       je       SHORT G_M59092_IG32
       mov      gword ptr [rbp-100H], r13
       jmp      G_M59092_IG42
                        ;; bbWeight=2    PerfScore 25.50
G_M59092_IG29:
       mov      gword ptr [rbp-100H], r13
       jmp      G_M59092_IG42
                        ;; bbWeight=1    PerfScore 3.00
G_M59092_IG30:
       mov      gword ptr [rbp-100H], r13
       jmp      G_M59092_IG42
                        ;; bbWeight=1    PerfScore 3.00
; ...
; ...
G_M59092_IG45:
       mov      gword ptr [rbp-100H], r13
       jmp      SHORT G_M59092_IG42
                        ;; bbWeight=1    PerfScore 3.00
G_M59092_IG46:
       mov      gword ptr [rbp-100H], r13
       jmp      SHORT G_M59092_IG42
                        ;; bbWeight=1    PerfScore 3.00
G_M59092_IG47:
       mov      gword ptr [rbp-100H], r13
       jmp      SHORT G_M59092_IG42
                        ;; bbWeight=1    PerfScore 3.00
; ...

Investigate if we could come with single basic block in such case that has the required code and all other jump to that block. As an effect, this increases the PerfScore from 3.00 to 24.00 triggering regression while doing asmdiffs.

category:design theme:register-allocator skill-level:expert cost:large impact:medium

kunalspathak commented 3 years ago

@dotnet/jit-contrib

kunalspathak commented 3 years ago

In below assembly code, there are 54 places where we do the following:

;  ...
       mov      eax, gword ptr [ebp-40CH]
       jmp      G_M36558_IG174
;  ...

In all, there are 55 places where the jump to G_M36558_IG174 happens and the only place where we don't see this pattern happens in prolog:

;  ...
       mov      gword ptr [ebp-40CH], ecx
       mov      eax, ecx
                        ;; bbWeight=1    PerfScore 12.58
G_M36558_IG02:
       jmp      G_M36558_IG174
;  ...

To summarize, we can do better by adding the resolution code inside G_M36558_IG174 and it will reduce the code size for this particular example from 324 bytes to 6 bytes.

; ...
G_M36558_IG174:
       mov      eax, gword ptr [ebp-40CH]
; ...
TL;DR : Assembly code ```asm ; Assembly listing for method ByteMark:read_comfile(System.IO.StreamReader) ; Emitting BLENDED_CODE for Pentium 4 - Windows ; optimized code ; ebp based frame ; fully interruptible ; Final local variable assignments ; ; V00 arg0 [V00,T75] ( 4, 18 ) ref -> [ebp-0x40C] EH class-hnd EH-live ; V01 loc0 [V01,T09] ( 8, 40 ) ref -> esi class-hnd ; V02 loc1 [V02,T00] (107,428 ) ref -> esi class-hnd ; V03 loc2 [V03,T76] ( 4, 16 ) int -> edi ; V04 loc3 [V04,T01] ( 15,340 ) int -> edi ; V05 loc4 [V05,T08] ( 6, 52 ) ref -> ebx class-hnd ; V06 loc5 [V06,T11] ( 8, 32 ) bool -> edx ;* V07 loc6 [V07 ] ( 0, 0 ) int -> zero-ref ; V08 tmp0 [V08,T40] ( 2, 32 ) ref -> esi class-hnd "dup spill" ; V09 tmp1 [V09,T209] ( 2, 16 ) int -> edi "dup spill" ; V10 tmp2 [V10,T104] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V11 tmp3 [V11,T105] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V12 tmp4 [V12,T106] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V13 tmp5 [V13,T107] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V14 tmp6 [V14,T108] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V15 tmp7 [V15,T109] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V16 tmp8 [V16,T110] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V17 tmp9 [V17,T111] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V18 tmp10 [V18,T112] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V19 tmp11 [V19,T113] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V20 tmp12 [V20,T114] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V21 tmp13 [V21,T115] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V22 tmp14 [V22,T116] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ;* V23 tmp15 [V23 ] ( 0, 0 ) int -> zero-ref "dup spill" ; V24 tmp16 [V24,T117] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V25 tmp17 [V25,T118] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V26 tmp18 [V26,T42] ( 3, 24 ) int -> eax "dup spill" ; V27 tmp19 [V27,T119] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V28 tmp20 [V28,T120] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V29 tmp21 [V29,T121] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V30 tmp22 [V30,T122] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V31 tmp23 [V31,T123] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V32 tmp24 [V32,T124] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V33 tmp25 [V33,T125] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V34 tmp26 [V34,T126] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V35 tmp27 [V35,T127] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V36 tmp28 [V36,T128] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V37 tmp29 [V37,T129] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V38 tmp30 [V38,T130] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V39 tmp31 [V39,T43] ( 3, 24 ) int -> eax "dup spill" ; V40 tmp32 [V40,T131] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V41 tmp33 [V41,T132] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V42 tmp34 [V42,T133] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V43 tmp35 [V43,T134] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V44 tmp36 [V44,T135] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V45 tmp37 [V45,T136] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V46 tmp38 [V46,T137] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V47 tmp39 [V47,T138] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V48 tmp40 [V48,T44] ( 3, 24 ) int -> eax "dup spill" ; V49 tmp41 [V49,T139] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V50 tmp42 [V50,T140] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V51 tmp43 [V51,T141] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V52 tmp44 [V52,T142] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V53 tmp45 [V53,T143] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V54 tmp46 [V54,T144] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V55 tmp47 [V55,T145] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V56 tmp48 [V56,T146] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V57 tmp49 [V57,T147] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V58 tmp50 [V58,T148] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V59 tmp51 [V59,T149] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ;* V60 tmp52 [V60 ] ( 0, 0 ) int -> zero-ref "dup spill" ; V61 tmp53 [V61,T150] ( 2, 16 ) ref -> edi class-hnd "impAppendStmt" ; V62 tmp54 [V62,T151] ( 2, 16 ) ref -> ebx class-hnd "impAppendStmt" ; V63 tmp55 [V63,T45] ( 3, 24 ) int -> eax "dup spill" ;* V64 tmp56 [V64 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" ; V65 tmp57 [V65,T06] ( 2,128 ) int -> edi "dup spill" ; V66 tmp58 [V66,T46] ( 3, 24 ) int -> edx "Inlining Arg" ; V67 tmp59 [V67,T322] ( 2, 8 ) ref -> ebx class-hnd "Inline return value spill temp" ;* V68 tmp60 [V68 ] ( 0, 0 ) ref -> zero-ref ; V69 tmp61 [V69,T294] ( 3, 12 ) ref -> eax ;* V70 tmp62 [V70 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" ; V71 tmp63 [V71,T05] ( 2,128 ) ref -> edx class-hnd "Inlining Arg" ;* V72 tmp64 [V72 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V73 tmp65 [V73,T323] ( 2, 8 ) struct ( 8) [ebp-0x28] do-not-enreg[SB] must-init "Inline return value spill temp" ; V74 tmp66 [V74,T12] ( 4, 32 ) struct ( 8) [ebp-0x30] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V75 tmp67 [V75 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V76 tmp68 [V76,T47] ( 3, 24 ) int -> ebx "Inlining Arg" ; V77 tmp69 [V77,T152] ( 2, 16 ) byref -> edi "Inlining Arg" ; V78 tmp70 [V78,T210] ( 2, 16 ) struct ( 4) [ebp-0x34] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V79 tmp71 [V79,T211] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V80 tmp72 [V80,T378] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V81 tmp73 [V81,T77] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V82 tmp74 [V82 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V83 tmp75 [V83,T153] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V84 tmp76 [V84 ] ( 3, 12 ) long -> [ebp-0x3C] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V85 tmp77 [V85,T295] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V86 tmp78 [V86,T324] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V87 tmp79 [V87,T212] ( 2, 16 ) struct ( 8) [ebp-0x44] do-not-enreg[SB] must-init "Inlining Arg" ;* V88 tmp80 [V88 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V89 tmp81 [V89,T325] ( 2, 8 ) struct ( 8) [ebp-0x4C] do-not-enreg[SB] must-init "Inline return value spill temp" ; V90 tmp82 [V90,T13] ( 4, 32 ) struct ( 8) [ebp-0x54] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V91 tmp83 [V91 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V92 tmp84 [V92,T48] ( 3, 24 ) int -> ebx "Inlining Arg" ; V93 tmp85 [V93,T154] ( 2, 16 ) byref -> edi "Inlining Arg" ; V94 tmp86 [V94,T213] ( 2, 16 ) struct ( 4) [ebp-0x58] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V95 tmp87 [V95,T214] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V96 tmp88 [V96,T379] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V97 tmp89 [V97,T78] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V98 tmp90 [V98 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V99 tmp91 [V99,T155] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V100 tmp92 [V100 ] ( 2, 8 ) int -> [ebp-0x5C] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V101 tmp93 [V101,T296] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V102 tmp94 [V102,T326] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V103 tmp95 [V103,T215] ( 2, 16 ) struct ( 8) [ebp-0x64] do-not-enreg[SB] must-init "Inlining Arg" ;* V104 tmp96 [V104 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V105 tmp97 [V105,T327] ( 2, 8 ) struct ( 8) [ebp-0x6C] do-not-enreg[SB] must-init "Inline return value spill temp" ; V106 tmp98 [V106,T14] ( 4, 32 ) struct ( 8) [ebp-0x74] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V107 tmp99 [V107 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V108 tmp100 [V108,T49] ( 3, 24 ) int -> [ebp-0x78] "Inlining Arg" ; V109 tmp101 [V109,T156] ( 2, 16 ) byref -> edi "Inlining Arg" ; V110 tmp102 [V110,T216] ( 2, 16 ) struct ( 4) [ebp-0x7C] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V111 tmp103 [V111,T217] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V112 tmp104 [V112,T380] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V113 tmp105 [V113,T79] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V114 tmp106 [V114 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V115 tmp107 [V115,T157] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V116 tmp108 [V116 ] ( 3, 10 ) int -> [ebp-0x80] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V117 tmp109 [V117,T297] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V118 tmp110 [V118,T328] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V119 tmp111 [V119,T218] ( 2, 16 ) struct ( 8) [ebp-0x88] do-not-enreg[SB] must-init "Inlining Arg" ;* V120 tmp112 [V120 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V121 tmp113 [V121,T329] ( 2, 8 ) struct ( 8) [ebp-0x90] do-not-enreg[SB] must-init "Inline return value spill temp" ; V122 tmp114 [V122,T15] ( 4, 32 ) struct ( 8) [ebp-0x98] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V123 tmp115 [V123 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V124 tmp116 [V124,T50] ( 3, 24 ) int -> [ebp-0x9C] "Inlining Arg" ; V125 tmp117 [V125,T158] ( 2, 16 ) byref -> edi "Inlining Arg" ; V126 tmp118 [V126,T219] ( 2, 16 ) struct ( 4) [ebp-0xA0] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V127 tmp119 [V127,T220] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V128 tmp120 [V128,T381] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V129 tmp121 [V129,T80] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V130 tmp122 [V130 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V131 tmp123 [V131,T159] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V132 tmp124 [V132 ] ( 2, 8 ) int -> [ebp-0xA4] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V133 tmp125 [V133,T298] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V134 tmp126 [V134,T330] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V135 tmp127 [V135,T221] ( 2, 16 ) struct ( 8) [ebp-0xAC] do-not-enreg[SB] must-init "Inlining Arg" ;* V136 tmp128 [V136 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V137 tmp129 [V137,T331] ( 2, 8 ) struct ( 8) [ebp-0xB4] do-not-enreg[SB] must-init "Inline return value spill temp" ; V138 tmp130 [V138,T16] ( 4, 32 ) struct ( 8) [ebp-0xBC] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V139 tmp131 [V139 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V140 tmp132 [V140,T51] ( 3, 24 ) int -> [ebp-0xC0] "Inlining Arg" ; V141 tmp133 [V141,T160] ( 2, 16 ) byref -> edi "Inlining Arg" ; V142 tmp134 [V142,T222] ( 2, 16 ) struct ( 4) [ebp-0xC4] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V143 tmp135 [V143,T223] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V144 tmp136 [V144,T382] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V145 tmp137 [V145,T81] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V146 tmp138 [V146 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V147 tmp139 [V147,T161] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V148 tmp140 [V148 ] ( 2, 8 ) int -> [ebp-0xC8] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V149 tmp141 [V149,T299] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V150 tmp142 [V150,T332] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V151 tmp143 [V151,T224] ( 2, 16 ) struct ( 8) [ebp-0xD0] do-not-enreg[SB] must-init "Inlining Arg" ;* V152 tmp144 [V152 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V153 tmp145 [V153,T333] ( 2, 8 ) struct ( 8) [ebp-0xD8] do-not-enreg[SB] must-init "Inline return value spill temp" ; V154 tmp146 [V154,T17] ( 4, 32 ) struct ( 8) [ebp-0xE0] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V155 tmp147 [V155 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V156 tmp148 [V156,T52] ( 3, 24 ) int -> [ebp-0xE4] "Inlining Arg" ; V157 tmp149 [V157,T162] ( 2, 16 ) byref -> edi "Inlining Arg" ; V158 tmp150 [V158,T225] ( 2, 16 ) struct ( 4) [ebp-0xE8] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V159 tmp151 [V159,T226] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V160 tmp152 [V160,T383] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V161 tmp153 [V161,T82] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V162 tmp154 [V162 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V163 tmp155 [V163,T163] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V164 tmp156 [V164 ] ( 2, 8 ) int -> [ebp-0xEC] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V165 tmp157 [V165,T300] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V166 tmp158 [V166,T334] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V167 tmp159 [V167,T227] ( 2, 16 ) struct ( 8) [ebp-0xF4] do-not-enreg[SB] must-init "Inlining Arg" ;* V168 tmp160 [V168 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V169 tmp161 [V169,T335] ( 2, 8 ) struct ( 8) [ebp-0xFC] do-not-enreg[SB] must-init "Inline return value spill temp" ; V170 tmp162 [V170,T18] ( 4, 32 ) struct ( 8) [ebp-0x104] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V171 tmp163 [V171 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V172 tmp164 [V172,T53] ( 3, 24 ) int -> [ebp-0x108] "Inlining Arg" ; V173 tmp165 [V173,T164] ( 2, 16 ) byref -> edi "Inlining Arg" ; V174 tmp166 [V174,T228] ( 2, 16 ) struct ( 4) [ebp-0x10C] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V175 tmp167 [V175,T229] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V176 tmp168 [V176,T384] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V177 tmp169 [V177,T83] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V178 tmp170 [V178 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V179 tmp171 [V179,T165] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V180 tmp172 [V180 ] ( 3, 10 ) int -> [ebp-0x110] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V181 tmp173 [V181,T301] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V182 tmp174 [V182,T336] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V183 tmp175 [V183,T230] ( 2, 16 ) struct ( 8) [ebp-0x118] do-not-enreg[SB] must-init "Inlining Arg" ;* V184 tmp176 [V184 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V185 tmp177 [V185,T337] ( 2, 8 ) struct ( 8) [ebp-0x120] do-not-enreg[SB] must-init "Inline return value spill temp" ; V186 tmp178 [V186,T19] ( 4, 32 ) struct ( 8) [ebp-0x128] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V187 tmp179 [V187 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V188 tmp180 [V188,T54] ( 3, 24 ) int -> [ebp-0x12C] "Inlining Arg" ; V189 tmp181 [V189,T166] ( 2, 16 ) byref -> edi "Inlining Arg" ; V190 tmp182 [V190,T231] ( 2, 16 ) struct ( 4) [ebp-0x130] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V191 tmp183 [V191,T232] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V192 tmp184 [V192,T385] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V193 tmp185 [V193,T84] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V194 tmp186 [V194 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V195 tmp187 [V195,T167] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V196 tmp188 [V196 ] ( 2, 8 ) int -> [ebp-0x134] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V197 tmp189 [V197,T302] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V198 tmp190 [V198,T338] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V199 tmp191 [V199,T233] ( 2, 16 ) struct ( 8) [ebp-0x13C] do-not-enreg[SB] must-init "Inlining Arg" ;* V200 tmp192 [V200 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V201 tmp193 [V201,T339] ( 2, 8 ) struct ( 8) [ebp-0x144] do-not-enreg[SB] must-init "Inline return value spill temp" ; V202 tmp194 [V202,T20] ( 4, 32 ) struct ( 8) [ebp-0x14C] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V203 tmp195 [V203 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V204 tmp196 [V204,T55] ( 3, 24 ) int -> [ebp-0x150] "Inlining Arg" ; V205 tmp197 [V205,T168] ( 2, 16 ) byref -> edi "Inlining Arg" ; V206 tmp198 [V206,T234] ( 2, 16 ) struct ( 4) [ebp-0x154] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V207 tmp199 [V207,T235] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V208 tmp200 [V208,T386] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V209 tmp201 [V209,T85] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V210 tmp202 [V210 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V211 tmp203 [V211,T169] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V212 tmp204 [V212 ] ( 2, 8 ) int -> [ebp-0x158] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V213 tmp205 [V213,T303] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V214 tmp206 [V214,T340] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V215 tmp207 [V215,T236] ( 2, 16 ) struct ( 8) [ebp-0x160] do-not-enreg[SB] must-init "Inlining Arg" ;* V216 tmp208 [V216 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V217 tmp209 [V217,T341] ( 2, 8 ) struct ( 8) [ebp-0x168] do-not-enreg[SB] must-init "Inline return value spill temp" ; V218 tmp210 [V218,T21] ( 4, 32 ) struct ( 8) [ebp-0x170] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V219 tmp211 [V219 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V220 tmp212 [V220,T56] ( 3, 24 ) int -> [ebp-0x174] "Inlining Arg" ; V221 tmp213 [V221,T170] ( 2, 16 ) byref -> edi "Inlining Arg" ; V222 tmp214 [V222,T237] ( 2, 16 ) struct ( 4) [ebp-0x178] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V223 tmp215 [V223,T238] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V224 tmp216 [V224,T387] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V225 tmp217 [V225,T86] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V226 tmp218 [V226 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V227 tmp219 [V227,T171] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V228 tmp220 [V228 ] ( 2, 8 ) int -> [ebp-0x17C] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V229 tmp221 [V229,T304] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V230 tmp222 [V230,T342] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V231 tmp223 [V231,T239] ( 2, 16 ) struct ( 8) [ebp-0x184] do-not-enreg[SB] must-init "Inlining Arg" ;* V232 tmp224 [V232 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V233 tmp225 [V233,T343] ( 2, 8 ) struct ( 8) [ebp-0x18C] do-not-enreg[SB] must-init "Inline return value spill temp" ; V234 tmp226 [V234,T22] ( 4, 32 ) struct ( 8) [ebp-0x194] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V235 tmp227 [V235 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V236 tmp228 [V236,T57] ( 3, 24 ) int -> [ebp-0x198] "Inlining Arg" ; V237 tmp229 [V237,T172] ( 2, 16 ) byref -> edi "Inlining Arg" ; V238 tmp230 [V238,T240] ( 2, 16 ) struct ( 4) [ebp-0x19C] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V239 tmp231 [V239,T241] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V240 tmp232 [V240,T388] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V241 tmp233 [V241,T87] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V242 tmp234 [V242 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V243 tmp235 [V243,T173] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V244 tmp236 [V244 ] ( 2, 8 ) int -> [ebp-0x1A0] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V245 tmp237 [V245,T305] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V246 tmp238 [V246,T344] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V247 tmp239 [V247,T242] ( 2, 16 ) struct ( 8) [ebp-0x1A8] do-not-enreg[SB] must-init "Inlining Arg" ;* V248 tmp240 [V248 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V249 tmp241 [V249,T345] ( 2, 8 ) struct ( 8) [ebp-0x1B0] do-not-enreg[SB] must-init "Inline return value spill temp" ; V250 tmp242 [V250,T23] ( 4, 32 ) struct ( 8) [ebp-0x1B8] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V251 tmp243 [V251 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V252 tmp244 [V252,T58] ( 3, 24 ) int -> [ebp-0x1BC] "Inlining Arg" ; V253 tmp245 [V253,T174] ( 2, 16 ) byref -> edi "Inlining Arg" ; V254 tmp246 [V254,T243] ( 2, 16 ) struct ( 4) [ebp-0x1C0] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V255 tmp247 [V255,T244] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V256 tmp248 [V256,T389] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V257 tmp249 [V257,T88] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V258 tmp250 [V258 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V259 tmp251 [V259,T175] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V260 tmp252 [V260 ] ( 2, 8 ) int -> [ebp-0x1C4] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V261 tmp253 [V261,T306] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V262 tmp254 [V262,T346] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V263 tmp255 [V263,T245] ( 2, 16 ) struct ( 8) [ebp-0x1CC] do-not-enreg[SB] must-init "Inlining Arg" ;* V264 tmp256 [V264 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V265 tmp257 [V265,T347] ( 2, 8 ) struct ( 8) [ebp-0x1D4] do-not-enreg[SB] must-init "Inline return value spill temp" ; V266 tmp258 [V266,T24] ( 4, 32 ) struct ( 8) [ebp-0x1DC] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V267 tmp259 [V267 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V268 tmp260 [V268,T59] ( 3, 24 ) int -> [ebp-0x1E0] "Inlining Arg" ; V269 tmp261 [V269,T176] ( 2, 16 ) byref -> edi "Inlining Arg" ; V270 tmp262 [V270,T246] ( 2, 16 ) struct ( 4) [ebp-0x1E4] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V271 tmp263 [V271,T247] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V272 tmp264 [V272,T390] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V273 tmp265 [V273,T89] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V274 tmp266 [V274 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V275 tmp267 [V275,T177] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V276 tmp268 [V276 ] ( 2, 8 ) int -> [ebp-0x1E8] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V277 tmp269 [V277,T307] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V278 tmp270 [V278,T348] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V279 tmp271 [V279,T248] ( 2, 16 ) struct ( 8) [ebp-0x1F0] do-not-enreg[SB] must-init "Inlining Arg" ;* V280 tmp272 [V280 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V281 tmp273 [V281,T349] ( 2, 8 ) struct ( 8) [ebp-0x1F8] do-not-enreg[SB] must-init "Inline return value spill temp" ; V282 tmp274 [V282,T25] ( 4, 32 ) struct ( 8) [ebp-0x200] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V283 tmp275 [V283 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V284 tmp276 [V284,T60] ( 3, 24 ) int -> [ebp-0x204] "Inlining Arg" ; V285 tmp277 [V285,T178] ( 2, 16 ) byref -> edi "Inlining Arg" ; V286 tmp278 [V286,T249] ( 2, 16 ) struct ( 4) [ebp-0x208] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V287 tmp279 [V287,T250] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V288 tmp280 [V288,T391] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V289 tmp281 [V289,T90] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V290 tmp282 [V290 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V291 tmp283 [V291,T179] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V292 tmp284 [V292 ] ( 2, 8 ) int -> [ebp-0x20C] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V293 tmp285 [V293,T308] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V294 tmp286 [V294,T350] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V295 tmp287 [V295,T251] ( 2, 16 ) struct ( 8) [ebp-0x214] do-not-enreg[SB] must-init "Inlining Arg" ;* V296 tmp288 [V296 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V297 tmp289 [V297,T351] ( 2, 8 ) struct ( 8) [ebp-0x21C] do-not-enreg[SB] must-init "Inline return value spill temp" ; V298 tmp290 [V298,T26] ( 4, 32 ) struct ( 8) [ebp-0x224] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V299 tmp291 [V299 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V300 tmp292 [V300,T61] ( 3, 24 ) int -> [ebp-0x228] "Inlining Arg" ; V301 tmp293 [V301,T180] ( 2, 16 ) byref -> edi "Inlining Arg" ; V302 tmp294 [V302,T252] ( 2, 16 ) struct ( 4) [ebp-0x22C] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V303 tmp295 [V303,T253] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V304 tmp296 [V304,T392] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V305 tmp297 [V305,T91] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V306 tmp298 [V306 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V307 tmp299 [V307,T181] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V308 tmp300 [V308 ] ( 2, 8 ) int -> [ebp-0x230] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V309 tmp301 [V309,T309] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V310 tmp302 [V310,T352] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V311 tmp303 [V311,T254] ( 2, 16 ) struct ( 8) [ebp-0x238] do-not-enreg[SB] must-init "Inlining Arg" ;* V312 tmp304 [V312 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V313 tmp305 [V313,T353] ( 2, 8 ) struct ( 8) [ebp-0x240] do-not-enreg[SB] must-init "Inline return value spill temp" ; V314 tmp306 [V314,T27] ( 4, 32 ) struct ( 8) [ebp-0x248] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V315 tmp307 [V315 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V316 tmp308 [V316,T62] ( 3, 24 ) int -> [ebp-0x24C] "Inlining Arg" ; V317 tmp309 [V317,T182] ( 2, 16 ) byref -> edi "Inlining Arg" ; V318 tmp310 [V318,T255] ( 2, 16 ) struct ( 4) [ebp-0x250] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V319 tmp311 [V319,T256] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V320 tmp312 [V320,T393] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V321 tmp313 [V321,T92] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V322 tmp314 [V322 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V323 tmp315 [V323,T183] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V324 tmp316 [V324 ] ( 2, 8 ) int -> [ebp-0x254] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V325 tmp317 [V325,T310] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V326 tmp318 [V326,T354] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V327 tmp319 [V327,T257] ( 2, 16 ) struct ( 8) [ebp-0x25C] do-not-enreg[SB] must-init "Inlining Arg" ;* V328 tmp320 [V328 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V329 tmp321 [V329,T355] ( 2, 8 ) struct ( 8) [ebp-0x264] do-not-enreg[SB] must-init "Inline return value spill temp" ; V330 tmp322 [V330,T28] ( 4, 32 ) struct ( 8) [ebp-0x26C] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V331 tmp323 [V331 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V332 tmp324 [V332,T63] ( 3, 24 ) int -> [ebp-0x270] "Inlining Arg" ; V333 tmp325 [V333,T184] ( 2, 16 ) byref -> edi "Inlining Arg" ; V334 tmp326 [V334,T258] ( 2, 16 ) struct ( 4) [ebp-0x274] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V335 tmp327 [V335,T259] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V336 tmp328 [V336,T394] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V337 tmp329 [V337,T93] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V338 tmp330 [V338 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V339 tmp331 [V339,T185] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V340 tmp332 [V340 ] ( 3, 10 ) int -> [ebp-0x278] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V341 tmp333 [V341,T311] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V342 tmp334 [V342,T356] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V343 tmp335 [V343,T260] ( 2, 16 ) struct ( 8) [ebp-0x280] do-not-enreg[SB] must-init "Inlining Arg" ;* V344 tmp336 [V344 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V345 tmp337 [V345,T357] ( 2, 8 ) struct ( 8) [ebp-0x288] do-not-enreg[SB] must-init "Inline return value spill temp" ; V346 tmp338 [V346,T29] ( 4, 32 ) struct ( 8) [ebp-0x290] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V347 tmp339 [V347 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V348 tmp340 [V348,T64] ( 3, 24 ) int -> [ebp-0x294] "Inlining Arg" ; V349 tmp341 [V349,T186] ( 2, 16 ) byref -> edi "Inlining Arg" ; V350 tmp342 [V350,T261] ( 2, 16 ) struct ( 4) [ebp-0x298] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V351 tmp343 [V351,T262] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V352 tmp344 [V352,T395] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V353 tmp345 [V353,T94] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V354 tmp346 [V354 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V355 tmp347 [V355,T187] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V356 tmp348 [V356 ] ( 2, 8 ) int -> [ebp-0x29C] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V357 tmp349 [V357,T312] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V358 tmp350 [V358,T358] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V359 tmp351 [V359,T263] ( 2, 16 ) struct ( 8) [ebp-0x2A4] do-not-enreg[SB] must-init "Inlining Arg" ;* V360 tmp352 [V360 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V361 tmp353 [V361,T359] ( 2, 8 ) struct ( 8) [ebp-0x2AC] do-not-enreg[SB] must-init "Inline return value spill temp" ; V362 tmp354 [V362,T30] ( 4, 32 ) struct ( 8) [ebp-0x2B4] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V363 tmp355 [V363 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V364 tmp356 [V364,T65] ( 3, 24 ) int -> [ebp-0x2B8] "Inlining Arg" ; V365 tmp357 [V365,T188] ( 2, 16 ) byref -> edi "Inlining Arg" ; V366 tmp358 [V366,T264] ( 2, 16 ) struct ( 4) [ebp-0x2BC] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V367 tmp359 [V367,T265] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V368 tmp360 [V368,T396] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V369 tmp361 [V369,T95] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V370 tmp362 [V370 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V371 tmp363 [V371,T189] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V372 tmp364 [V372 ] ( 2, 8 ) int -> [ebp-0x2C0] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V373 tmp365 [V373,T313] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V374 tmp366 [V374,T360] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V375 tmp367 [V375,T266] ( 2, 16 ) struct ( 8) [ebp-0x2C8] do-not-enreg[SB] must-init "Inlining Arg" ;* V376 tmp368 [V376 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V377 tmp369 [V377,T361] ( 2, 8 ) struct ( 8) [ebp-0x2D0] do-not-enreg[SB] must-init "Inline return value spill temp" ; V378 tmp370 [V378,T31] ( 4, 32 ) struct ( 8) [ebp-0x2D8] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V379 tmp371 [V379 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V380 tmp372 [V380,T66] ( 3, 24 ) int -> [ebp-0x2DC] "Inlining Arg" ; V381 tmp373 [V381,T190] ( 2, 16 ) byref -> edi "Inlining Arg" ; V382 tmp374 [V382,T267] ( 2, 16 ) struct ( 4) [ebp-0x2E0] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V383 tmp375 [V383,T268] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V384 tmp376 [V384,T397] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V385 tmp377 [V385,T96] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V386 tmp378 [V386 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V387 tmp379 [V387,T191] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V388 tmp380 [V388 ] ( 2, 8 ) int -> [ebp-0x2E4] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V389 tmp381 [V389,T314] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V390 tmp382 [V390,T362] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V391 tmp383 [V391,T269] ( 2, 16 ) struct ( 8) [ebp-0x2EC] do-not-enreg[SB] must-init "Inlining Arg" ;* V392 tmp384 [V392 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V393 tmp385 [V393,T363] ( 2, 8 ) struct ( 8) [ebp-0x2F4] do-not-enreg[SB] must-init "Inline return value spill temp" ; V394 tmp386 [V394,T32] ( 4, 32 ) struct ( 8) [ebp-0x2FC] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V395 tmp387 [V395 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V396 tmp388 [V396,T67] ( 3, 24 ) int -> [ebp-0x300] "Inlining Arg" ; V397 tmp389 [V397,T192] ( 2, 16 ) byref -> edi "Inlining Arg" ; V398 tmp390 [V398,T270] ( 2, 16 ) struct ( 4) [ebp-0x304] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V399 tmp391 [V399,T271] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V400 tmp392 [V400,T398] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V401 tmp393 [V401,T97] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V402 tmp394 [V402 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V403 tmp395 [V403,T193] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V404 tmp396 [V404 ] ( 2, 8 ) int -> [ebp-0x308] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V405 tmp397 [V405,T315] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V406 tmp398 [V406,T364] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V407 tmp399 [V407,T272] ( 2, 16 ) struct ( 8) [ebp-0x310] do-not-enreg[SB] must-init "Inlining Arg" ;* V408 tmp400 [V408 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V409 tmp401 [V409,T365] ( 2, 8 ) struct ( 8) [ebp-0x318] do-not-enreg[SB] must-init "Inline return value spill temp" ; V410 tmp402 [V410,T33] ( 4, 32 ) struct ( 8) [ebp-0x320] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V411 tmp403 [V411 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V412 tmp404 [V412,T68] ( 3, 24 ) int -> [ebp-0x324] "Inlining Arg" ; V413 tmp405 [V413,T194] ( 2, 16 ) byref -> edi "Inlining Arg" ; V414 tmp406 [V414,T273] ( 2, 16 ) struct ( 4) [ebp-0x328] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V415 tmp407 [V415,T274] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V416 tmp408 [V416,T399] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V417 tmp409 [V417,T98] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V418 tmp410 [V418 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V419 tmp411 [V419,T195] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V420 tmp412 [V420 ] ( 2, 8 ) int -> [ebp-0x32C] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V421 tmp413 [V421,T316] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V422 tmp414 [V422,T366] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V423 tmp415 [V423,T275] ( 2, 16 ) struct ( 8) [ebp-0x334] do-not-enreg[SB] must-init "Inlining Arg" ;* V424 tmp416 [V424 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V425 tmp417 [V425,T367] ( 2, 8 ) struct ( 8) [ebp-0x33C] do-not-enreg[SB] must-init "Inline return value spill temp" ; V426 tmp418 [V426,T34] ( 4, 32 ) struct ( 8) [ebp-0x344] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V427 tmp419 [V427 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V428 tmp420 [V428,T69] ( 3, 24 ) int -> [ebp-0x348] "Inlining Arg" ; V429 tmp421 [V429,T196] ( 2, 16 ) byref -> edi "Inlining Arg" ; V430 tmp422 [V430,T276] ( 2, 16 ) struct ( 4) [ebp-0x34C] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V431 tmp423 [V431,T277] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V432 tmp424 [V432,T400] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V433 tmp425 [V433,T99] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V434 tmp426 [V434 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V435 tmp427 [V435,T197] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V436 tmp428 [V436 ] ( 2, 8 ) int -> [ebp-0x350] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V437 tmp429 [V437,T317] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V438 tmp430 [V438,T368] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V439 tmp431 [V439,T278] ( 2, 16 ) struct ( 8) [ebp-0x358] do-not-enreg[SB] must-init "Inlining Arg" ;* V440 tmp432 [V440 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V441 tmp433 [V441,T369] ( 2, 8 ) struct ( 8) [ebp-0x360] do-not-enreg[SB] must-init "Inline return value spill temp" ; V442 tmp434 [V442,T35] ( 4, 32 ) struct ( 8) [ebp-0x368] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V443 tmp435 [V443 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V444 tmp436 [V444,T70] ( 3, 24 ) int -> [ebp-0x36C] "Inlining Arg" ; V445 tmp437 [V445,T198] ( 2, 16 ) byref -> edi "Inlining Arg" ; V446 tmp438 [V446,T279] ( 2, 16 ) struct ( 4) [ebp-0x370] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V447 tmp439 [V447,T280] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V448 tmp440 [V448,T401] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V449 tmp441 [V449,T100] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V450 tmp442 [V450 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V451 tmp443 [V451,T199] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V452 tmp444 [V452 ] ( 2, 8 ) int -> [ebp-0x374] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V453 tmp445 [V453,T318] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V454 tmp446 [V454,T370] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V455 tmp447 [V455,T281] ( 2, 16 ) struct ( 8) [ebp-0x37C] do-not-enreg[SB] must-init "Inlining Arg" ;* V456 tmp448 [V456 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V457 tmp449 [V457,T371] ( 2, 8 ) struct ( 8) [ebp-0x384] do-not-enreg[SB] must-init "Inline return value spill temp" ; V458 tmp450 [V458,T36] ( 4, 32 ) struct ( 8) [ebp-0x38C] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V459 tmp451 [V459 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V460 tmp452 [V460,T71] ( 3, 24 ) int -> [ebp-0x390] "Inlining Arg" ; V461 tmp453 [V461,T200] ( 2, 16 ) byref -> edi "Inlining Arg" ; V462 tmp454 [V462,T282] ( 2, 16 ) struct ( 4) [ebp-0x394] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V463 tmp455 [V463,T283] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V464 tmp456 [V464,T402] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V465 tmp457 [V465,T101] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V466 tmp458 [V466 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V467 tmp459 [V467,T201] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V468 tmp460 [V468 ] ( 2, 8 ) int -> [ebp-0x398] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V469 tmp461 [V469,T319] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V470 tmp462 [V470,T372] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V471 tmp463 [V471,T284] ( 2, 16 ) struct ( 8) [ebp-0x3A0] do-not-enreg[SB] must-init "Inlining Arg" ;* V472 tmp464 [V472 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V473 tmp465 [V473,T373] ( 2, 8 ) struct ( 8) [ebp-0x3A8] do-not-enreg[SB] must-init "Inline return value spill temp" ; V474 tmp466 [V474,T37] ( 4, 32 ) struct ( 8) [ebp-0x3B0] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V475 tmp467 [V475 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V476 tmp468 [V476,T72] ( 3, 24 ) int -> [ebp-0x3B4] "Inlining Arg" ; V477 tmp469 [V477,T202] ( 2, 16 ) byref -> edi "Inlining Arg" ; V478 tmp470 [V478,T285] ( 2, 16 ) struct ( 4) [ebp-0x3B8] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V479 tmp471 [V479,T286] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V480 tmp472 [V480,T403] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V481 tmp473 [V481,T102] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V482 tmp474 [V482 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V483 tmp475 [V483,T203] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V484 tmp476 [V484 ] ( 2, 8 ) int -> [ebp-0x3BC] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V485 tmp477 [V485,T320] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V486 tmp478 [V486,T374] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V487 tmp479 [V487,T287] ( 2, 16 ) struct ( 8) [ebp-0x3C4] do-not-enreg[SB] must-init "Inlining Arg" ;* V488 tmp480 [V488 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "impAppendStmt" ; V489 tmp481 [V489,T375] ( 2, 8 ) struct ( 8) [ebp-0x3CC] do-not-enreg[SB] must-init "Inline return value spill temp" ; V490 tmp482 [V490,T38] ( 4, 32 ) struct ( 8) [ebp-0x3D4] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V491 tmp483 [V491 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V492 tmp484 [V492,T73] ( 3, 24 ) int -> [ebp-0x3D8] "Inlining Arg" ; V493 tmp485 [V493,T204] ( 2, 16 ) byref -> edi "Inlining Arg" ; V494 tmp486 [V494,T288] ( 2, 16 ) struct ( 4) [ebp-0x3DC] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V495 tmp487 [V495,T289] ( 2, 16 ) bool -> ecx "Inlining Arg" ;* V496 tmp488 [V496,T404] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" ; V497 tmp489 [V497,T103] ( 3, 16 ) ref -> edx class-hnd "Inlining Arg" ;* V498 tmp490 [V498 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] "Inlining Arg" ; V499 tmp491 [V499,T205] ( 2, 16 ) ref -> edx class-hnd "Inlining Arg" ; V500 tmp492 [V500 ] ( 2, 8 ) int -> [ebp-0x3E0] do-not-enreg[X] must-init addr-exposed ld-addr-op "Inline ldloca(s) first use temp" ; V501 tmp493 [V501,T321] ( 3, 8 ) int -> ecx "Inline stloc first use temp" ; V502 tmp494 [V502,T376] ( 2, 8 ) int -> ecx "Inline return value spill temp" ; V503 tmp495 [V503,T290] ( 2, 16 ) struct ( 8) [ebp-0x3E8] do-not-enreg[SB] must-init "Inlining Arg" ; V504 tmp496 [V504,T291] ( 2, 16 ) struct ( 8) [ebp-0x3F0] do-not-enreg[SB] must-init "impAppendStmt" ; V505 tmp497 [V505,T377] ( 2, 8 ) struct ( 8) [ebp-0x3F8] do-not-enreg[SB] must-init "Inline return value spill temp" ; V506 tmp498 [V506,T39] ( 4, 32 ) struct ( 8) [ebp-0x400] do-not-enreg[SFB] must-init "NewObj constructor temp" ;* V507 tmp499 [V507 ] ( 0, 0 ) struct ( 8) zero-ref do-not-enreg[SB] ld-addr-op "Inline ldloca(s) first use temp" ; V508 tmp500 [V508,T74] ( 3, 24 ) int -> [ebp-0x404] "Inlining Arg" ; V509 tmp501 [V509,T206] ( 2, 16 ) byref -> edi "Inlining Arg" ; V510 tmp502 [V510,T292] ( 2, 16 ) struct ( 4) [ebp-0x408] do-not-enreg[SFB] must-init "NewObj constructor temp" ; V511 tmp503 [V511,T293] ( 2, 16 ) bool -> ecx "Inlining Arg" ; V512 tmp504 [V512,T207] ( 2, 16 ) ref -> ecx "argument with side effect" ; V513 tmp505 [V513,T03] ( 3,192 ) ref -> ecx "arr expr" ; V514 tmp506 [V514,T04] ( 3,192 ) ref -> edx "arr expr" ; V515 tmp507 [V515,T208] ( 2, 16 ) ref -> edx "argument with side effect" ; V516 EHSlots [V516 ] ( 1, 1 ) blk (16) [ebp-0x20] do-not-enreg[X] must-init addr-exposed "lvaShadowSPslotsVar" ; V517 cse0 [V517,T07] ( 4, 72 ) ref -> ebx "CSE - moderate" ;* V518 cse1 [V518,T405] ( 0, 0 ) int -> zero-ref "CSE - moderate" ; V519 cse2 [V519,T10] ( 2, 36 ) int -> ecx "CSE - moderate" ; V520 cse3 [V520,T02] ( 57,228 ) ref -> edx "CSE - aggressive" ; V521 rat0 [V521,T41] ( 3, 24 ) byref -> ecx "ReplaceWithLclVar is creating a new local variable" ; TEMP_01 byref -> [ebp-0x410] ; ; Lcl frame size = 1028 G_M36558_IG01: push ebp mov ebp, esp push edi push esi push ebx sub esp, 0x404 vzeroupper vxorps xmm4, xmm4 vmovdqu xmmword ptr [ebp-410H], xmm4 mov eax, -0x3F0 vmovdqu xmmword ptr [ebp+eax-10H], xmm4 vmovdqu xmmword ptr [eax+ebp], xmm4 vmovdqu xmmword ptr [ebp+eax+10H], xmm4 add eax, 48 jne SHORT -5 instr mov gword ptr [ebp-40CH], ecx mov eax, ecx ;; bbWeight=1 PerfScore 12.58 G_M36558_IG02: jmp G_M36558_IG174 ;; bbWeight=1 PerfScore 2.00 G_M36558_IG03: mov ecx, dword ptr [esi+4] push ecx lea ecx, bword ptr [esi+8] mov edx, 61 call hackishModuleName:hackishMethodName() mov edi, eax cmp edi, -1 jne SHORT G_M36558_IG04 mov ecx, gword ptr [D1FFAB1EH] call hackishModuleName:hackishMethodName() mov ecx, gword ptr [D1FFAB1EH] mov edx, esi call System.String:Concat(System.String,System.String):System.String mov ecx, eax call hackishModuleName:hackishMethodName() mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 67.00 G_M36558_IG04: push edi mov ecx, esi xor edx, edx call hackishModuleName:hackishMethodName(int,int):System.String:this mov ebx, eax lea edx, [edi+1] mov ecx, dword ptr [esi+4] sub ecx, edx push ecx mov ecx, esi call hackishModuleName:hackishMethodName(int,int):System.String:this mov esi, eax cmp dword ptr [ebx], ebx call System.Globalization.CultureInfo:get_CurrentCulture():System.Globalization.CultureInfo mov ecx, eax mov eax, dword ptr [eax] mov eax, dword ptr [eax+48] call gword ptr [eax+28]hackishModuleName:hackishMethodName() mov ecx, eax mov edx, ebx cmp dword ptr [ecx], ecx call System.Globalization.TextInfo:ToUpper(System.String):System.String:this mov ebx, eax mov edi, 49 mov ecx, 0xD1FFAB1E mov edx, 13 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE ;; bbWeight=4 PerfScore 95.00 G_M36558_IG05: mov ecx, gword ptr [classVar[0xd1ffab1e]] cmp edi, dword ptr [ecx+4] jae G_M36558_IG205 mov edx, gword ptr [ecx+4*edi+8] mov ecx, ebx call hackishModuleName:hackishMethodName() test eax, eax jne SHORT G_M36558_IG06 dec edi test edi, edi jge SHORT G_M36558_IG05 ;; bbWeight=32 PerfScore 320.00 G_M36558_IG06: test edi, edi jge SHORT G_M36558_IG07 mov ecx, gword ptr [D1FFAB1EH] mov edx, ebx call System.String:Concat(System.String,System.String):System.String mov ecx, eax call hackishModuleName:hackishMethodName() mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 35.00 G_M36558_IG07: cmp edi, 49 mov eax, gword ptr [ebp-40CH] ja G_M36558_IG174 lea ecx, [@RWD00] mov ecx, dword ptr [ecx+4*edi] lea edx, G_M36558_IG02 add ecx, edx jmp ecx ;; bbWeight=4 PerfScore 32.00 G_M36558_IG08: test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 5.00 G_M36558_IG09: xor ecx, ecx mov dword ptr [ebp-30H], ecx mov dword ptr [ebp-2CH], ecx lea edi, bword ptr [esi+8] mov ebx, dword ptr [esi+4] mov ecx, ebx not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG11 ;; bbWeight=4 PerfScore 42.00 G_M36558_IG10: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG11: mov bword ptr [ebp-34H], edi lea edi, bword ptr [ebp-30H] lea esi, bword ptr [ebp-34H] movsd mov dword ptr [ebp-2CH], ebx lea edi, bword ptr [ebp-28H] lea esi, bword ptr [ebp-30H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-44H] lea esi, bword ptr [ebp-28H] movsd movsd push dword ptr [ebp-40H] push bword ptr [ebp-44H] lea ecx, [ebp-3CH] push ecx mov ecx, 7 call System.Number:TryParseInt64IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG176 ;; bbWeight=4 PerfScore 70.00 G_M36558_IG12: lea ecx, [classVar[0xd1ffab1e]] mov edx, dword ptr [ebp-3CH] mov dword ptr [ecx], edx mov edx, dword ptr [ebp-38H] mov dword ptr [ecx+4], edx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 32.00 G_M36558_IG13: test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 5.00 G_M36558_IG14: xor ecx, ecx mov dword ptr [ebp-54H], ecx mov dword ptr [ebp-50H], ecx lea edi, bword ptr [esi+8] mov ebx, dword ptr [esi+4] mov ecx, ebx not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG16 ;; bbWeight=4 PerfScore 42.00 G_M36558_IG15: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG16: mov bword ptr [ebp-58H], edi lea edi, bword ptr [ebp-54H] lea esi, bword ptr [ebp-58H] movsd mov dword ptr [ebp-50H], ebx lea edi, bword ptr [ebp-4CH] lea esi, bword ptr [ebp-54H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-64H] lea esi, bword ptr [ebp-4CH] movsd movsd push dword ptr [ebp-60H] push bword ptr [ebp-64H] lea ecx, [ebp-5CH] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG177 ;; bbWeight=4 PerfScore 70.00 G_M36558_IG17: mov eax, dword ptr [ebp-5CH] mov dword ptr [classVar[0xd1ffab1e]], eax call ByteMark:SetRequestSecs() mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 24.00 G_M36558_IG18: mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [classVar[0xd1ffab1e]], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 21.00 G_M36558_IG19: lea edx, [classVar[0xd1ffab1e]] call CORINFO_HELP_CHECKED_ASSIGN_REF_ESI ;; bbWeight=4 PerfScore 8.00 G_M36558_IG20: lea edx, [classVar[0xd1ffab1e]] mov bword ptr [ebp-410H], edx mov ecx, gword ptr [classVar[0xd1ffab1e]] call System.IO.File:AppendText(System.String):System.IO.StreamWriter mov edx, bword ptr [ebp-410H] call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX mov byte ptr [classVar[0xd1ffab1e]], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG21: mov ecx, gword ptr [D1FFAB1EH] mov edx, gword ptr [classVar[0xd1ffab1e]] call hackishModuleName:hackishMethodName() mov byte ptr [classVar[0xd1ffab1e]], 0 call CORINFO_HELP_ENDCATCH mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG22: mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [classVar[0xd1ffab1e]], al xor edi, edi mov ebx, gword ptr [classVar[0xd1ffab1e]] cmp dword ptr [ebx+4], 0 mov eax, gword ptr [ebp-40CH] jle G_M36558_IG174 cmp byte ptr [classVar[0xd1ffab1e]], 0 sete cl movzx ecx, cl ;; bbWeight=4 PerfScore 39.00 G_M36558_IG23: mov edx, ebx cmp edi, dword ptr [edx+4] jae G_M36558_IG205 mov edx, gword ptr [edx+4*edi+8] mov byte ptr [edx+20], cl inc edi cmp dword ptr [ebx+4], edi jg SHORT G_M36558_IG23 ;; bbWeight=32 PerfScore 304.00 G_M36558_IG24: jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 8.00 G_M36558_IG25: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ebx, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool movzx edx, al mov byte ptr [ebx+20], al mov byte ptr [edi+20], dl mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 34.00 G_M36558_IG26: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG27: xor ecx, ecx mov dword ptr [ebp-74H], ecx mov dword ptr [ebp-70H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-78H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG29 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG28: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG29: mov bword ptr [ebp-7CH], edi lea edi, bword ptr [ebp-74H] lea esi, bword ptr [ebp-7CH] movsd mov esi, dword ptr [ebp-78H] mov dword ptr [ebp-70H], esi lea edi, bword ptr [ebp-6CH] lea esi, bword ptr [ebp-74H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-88H] lea esi, bword ptr [ebp-6CH] movsd movsd push dword ptr [ebp-84H] push bword ptr [ebp-88H] lea ecx, [ebp-80H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG178 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG30: mov ecx, dword ptr [ebp-80H] add ecx, 0x8000 cmp ecx, 0xFFFF ja G_M36558_IG193 ;; bbWeight=2 PerfScore 5.00 G_M36558_IG31: mov ecx, dword ptr [ebp-80H] mov word ptr [ebx+28], cx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov edx, gword ptr [classVar[0xd1ffab1e]] movsx edx, word ptr [edx+28] mov word ptr [ecx+28], dx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 56.00 G_M36558_IG32: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG33: xor ecx, ecx mov dword ptr [ebp-98H], ecx mov dword ptr [ebp-94H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-9CH], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG35 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG34: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG35: mov bword ptr [ebp-A0H], edi lea edi, bword ptr [ebp-98H] lea esi, bword ptr [ebp-A0H] movsd mov esi, dword ptr [ebp-9CH] mov dword ptr [ebp-94H], esi lea edi, bword ptr [ebp-90H] lea esi, bword ptr [ebp-98H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-ACH] lea esi, bword ptr [ebp-90H] movsd movsd push dword ptr [ebp-A8H] push bword ptr [ebp-ACH] lea ecx, [ebp-A4H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG179 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG36: mov ecx, dword ptr [ebp-A4H] mov dword ptr [ebx+24], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov edx, gword ptr [classVar[0xd1ffab1e]] mov edx, dword ptr [edx+24] mov dword ptr [ecx+24], edx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG37: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG38: xor ecx, ecx mov dword ptr [ebp-BCH], ecx mov dword ptr [ebp-B8H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-C0H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG40 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG39: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG40: mov bword ptr [ebp-C4H], edi lea edi, bword ptr [ebp-BCH] lea esi, bword ptr [ebp-C4H] movsd mov esi, dword ptr [ebp-C0H] mov dword ptr [ebp-B8H], esi lea edi, bword ptr [ebp-B4H] lea esi, bword ptr [ebp-BCH] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-D0H] lea esi, bword ptr [ebp-B4H] movsd movsd push dword ptr [ebp-CCH] push bword ptr [ebp-D0H] lea ecx, [ebp-C8H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG180 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG41: mov ecx, dword ptr [ebp-C8H] mov dword ptr [ebx+16], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov eax, gword ptr [classVar[0xd1ffab1e]] mov eax, dword ptr [eax+16] mov dword ptr [ecx+16], eax mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG42: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG43: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG44: xor ecx, ecx mov dword ptr [ebp-E0H], ecx mov dword ptr [ebp-DCH], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-E4H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG46 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG45: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG46: mov bword ptr [ebp-E8H], edi lea edi, bword ptr [ebp-E0H] lea esi, bword ptr [ebp-E8H] movsd mov esi, dword ptr [ebp-E4H] mov dword ptr [ebp-DCH], esi lea edi, bword ptr [ebp-D8H] lea esi, bword ptr [ebp-E0H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-F4H] lea esi, bword ptr [ebp-D8H] movsd movsd push dword ptr [ebp-F0H] push bword ptr [ebp-F4H] lea ecx, [ebp-ECH] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG181 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG47: mov ecx, dword ptr [ebp-ECH] mov dword ptr [ebx+24], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG48: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG49: xor ecx, ecx mov dword ptr [ebp-104H], ecx mov dword ptr [ebp-100H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-108H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG51 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG50: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG51: mov bword ptr [ebp-10CH], edi lea edi, bword ptr [ebp-104H] lea esi, bword ptr [ebp-10CH] movsd mov esi, dword ptr [ebp-108H] mov dword ptr [ebp-100H], esi lea edi, bword ptr [ebp-FCH] lea esi, bword ptr [ebp-104H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-118H] lea esi, bword ptr [ebp-FCH] movsd movsd push dword ptr [ebp-114H] push bword ptr [ebp-118H] lea ecx, [ebp-110H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG182 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG52: mov ecx, dword ptr [ebp-110H] add ecx, 0x8000 cmp ecx, 0xFFFF ja G_M36558_IG193 ;; bbWeight=2 PerfScore 5.00 G_M36558_IG53: mov ecx, dword ptr [ebp-110H] mov word ptr [ebx+28], cx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 28.00 G_M36558_IG54: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG55: xor ecx, ecx mov dword ptr [ebp-128H], ecx mov dword ptr [ebp-124H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-12CH], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG57 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG56: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG57: mov bword ptr [ebp-130H], edi lea edi, bword ptr [ebp-128H] lea esi, bword ptr [ebp-130H] movsd mov esi, dword ptr [ebp-12CH] mov dword ptr [ebp-124H], esi lea edi, bword ptr [ebp-120H] lea esi, bword ptr [ebp-128H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-13CH] lea esi, bword ptr [ebp-120H] movsd movsd push dword ptr [ebp-138H] push bword ptr [ebp-13CH] lea ecx, [ebp-134H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG183 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG58: mov ecx, dword ptr [ebp-134H] mov dword ptr [ebx+16], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG59: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG60: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG61: xor ecx, ecx mov dword ptr [ebp-14CH], ecx mov dword ptr [ebp-148H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-150H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG63 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG62: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG63: mov bword ptr [ebp-154H], edi lea edi, bword ptr [ebp-14CH] lea esi, bword ptr [ebp-154H] movsd mov esi, dword ptr [ebp-150H] mov dword ptr [ebp-148H], esi lea edi, bword ptr [ebp-144H] lea esi, bword ptr [ebp-14CH] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-160H] lea esi, bword ptr [ebp-144H] movsd movsd push dword ptr [ebp-15CH] push bword ptr [ebp-160H] lea ecx, [ebp-158H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG184 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG64: mov ecx, dword ptr [ebp-158H] mov dword ptr [ebx+24], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 28.00 G_M36558_IG65: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG66: xor ecx, ecx mov dword ptr [ebp-170H], ecx mov dword ptr [ebp-16CH], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-174H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG68 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG67: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG68: mov bword ptr [ebp-178H], edi lea edi, bword ptr [ebp-170H] lea esi, bword ptr [ebp-178H] movsd mov esi, dword ptr [ebp-174H] mov dword ptr [ebp-16CH], esi lea edi, bword ptr [ebp-168H] lea esi, bword ptr [ebp-170H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-184H] lea esi, bword ptr [ebp-168H] movsd movsd push dword ptr [ebp-180H] push bword ptr [ebp-184H] lea ecx, [ebp-17CH] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG185 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG69: mov ecx, dword ptr [ebp-17CH] mov dword ptr [ebx+28], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG70: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG71: xor ecx, ecx mov dword ptr [ebp-194H], ecx mov dword ptr [ebp-190H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-198H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG73 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG72: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG73: mov bword ptr [ebp-19CH], edi lea edi, bword ptr [ebp-194H] lea esi, bword ptr [ebp-19CH] movsd mov esi, dword ptr [ebp-198H] mov dword ptr [ebp-190H], esi lea edi, bword ptr [ebp-18CH] lea esi, bword ptr [ebp-194H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-1A8H] lea esi, bword ptr [ebp-18CH] movsd movsd push dword ptr [ebp-1A4H] push bword ptr [ebp-1A8H] lea ecx, [ebp-1A0H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG186 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG74: mov ecx, dword ptr [ebp-1A0H] mov dword ptr [ebx+16], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG75: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ebx, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool movzx edx, al mov byte ptr [ebx+20], al mov byte ptr [edi+20], dl mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 34.00 G_M36558_IG76: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG77: xor ecx, ecx mov dword ptr [ebp-1B8H], ecx mov dword ptr [ebp-1B4H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-1BCH], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG79 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG78: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG79: mov bword ptr [ebp-1C0H], edi lea edi, bword ptr [ebp-1B8H] lea esi, bword ptr [ebp-1C0H] movsd mov esi, dword ptr [ebp-1BCH] mov dword ptr [ebp-1B4H], esi lea edi, bword ptr [ebp-1B0H] lea esi, bword ptr [ebp-1B8H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-1CCH] lea esi, bword ptr [ebp-1B0H] movsd movsd push dword ptr [ebp-1C8H] push bword ptr [ebp-1CCH] lea ecx, [ebp-1C4H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG187 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG80: mov ecx, dword ptr [ebp-1C4H] mov dword ptr [ebx+24], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov edx, gword ptr [classVar[0xd1ffab1e]] mov edx, dword ptr [edx+24] mov dword ptr [ecx+24], edx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG81: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG82: xor ecx, ecx mov dword ptr [ebp-1DCH], ecx mov dword ptr [ebp-1D8H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-1E0H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG84 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG83: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG84: mov bword ptr [ebp-1E4H], edi lea edi, bword ptr [ebp-1DCH] lea esi, bword ptr [ebp-1E4H] movsd mov esi, dword ptr [ebp-1E0H] mov dword ptr [ebp-1D8H], esi lea edi, bword ptr [ebp-1D4H] lea esi, bword ptr [ebp-1DCH] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-1F0H] lea esi, bword ptr [ebp-1D4H] movsd movsd push dword ptr [ebp-1ECH] push bword ptr [ebp-1F0H] lea ecx, [ebp-1E8H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG188 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG85: mov ecx, dword ptr [ebp-1E8H] mov dword ptr [ebx+28], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG86: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG87: xor ecx, ecx mov dword ptr [ebp-200H], ecx mov dword ptr [ebp-1FCH], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-204H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG89 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG88: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG89: mov bword ptr [ebp-208H], edi lea edi, bword ptr [ebp-200H] lea esi, bword ptr [ebp-208H] movsd mov esi, dword ptr [ebp-204H] mov dword ptr [ebp-1FCH], esi lea edi, bword ptr [ebp-1F8H] lea esi, bword ptr [ebp-200H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-214H] lea esi, bword ptr [ebp-1F8H] movsd movsd push dword ptr [ebp-210H] push bword ptr [ebp-214H] lea ecx, [ebp-20CH] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG189 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG90: mov ecx, dword ptr [ebp-20CH] mov dword ptr [ebx+16], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov eax, gword ptr [classVar[0xd1ffab1e]] mov eax, dword ptr [eax+16] mov dword ptr [ecx+16], eax mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG91: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG92: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG93: xor ecx, ecx mov dword ptr [ebp-224H], ecx mov dword ptr [ebp-220H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-228H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG95 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG94: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG95: mov bword ptr [ebp-22CH], edi lea edi, bword ptr [ebp-224H] lea esi, bword ptr [ebp-22CH] movsd mov esi, dword ptr [ebp-228H] mov dword ptr [ebp-220H], esi lea edi, bword ptr [ebp-21CH] lea esi, bword ptr [ebp-224H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-238H] lea esi, bword ptr [ebp-21CH] movsd movsd push dword ptr [ebp-234H] push bword ptr [ebp-238H] lea ecx, [ebp-230H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG190 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG96: mov ecx, dword ptr [ebp-230H] mov dword ptr [ebx+24], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 28.00 G_M36558_IG97: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG98: xor ecx, ecx mov dword ptr [ebp-248H], ecx mov dword ptr [ebp-244H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-24CH], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG100 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG99: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG100: mov bword ptr [ebp-250H], edi lea edi, bword ptr [ebp-248H] lea esi, bword ptr [ebp-250H] movsd mov esi, dword ptr [ebp-24CH] mov dword ptr [ebp-244H], esi lea edi, bword ptr [ebp-240H] lea esi, bword ptr [ebp-248H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-25CH] lea esi, bword ptr [ebp-240H] movsd movsd push dword ptr [ebp-258H] push bword ptr [ebp-25CH] lea ecx, [ebp-254H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG191 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG101: mov ecx, dword ptr [ebp-254H] mov dword ptr [ebx+16], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG102: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ebx, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool movzx edx, al mov byte ptr [ebx+20], al mov byte ptr [edi+20], dl mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 34.00 G_M36558_IG103: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG104: xor ecx, ecx mov dword ptr [ebp-26CH], ecx mov dword ptr [ebp-268H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-270H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG106 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG105: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG106: mov bword ptr [ebp-274H], edi lea edi, bword ptr [ebp-26CH] lea esi, bword ptr [ebp-274H] movsd mov esi, dword ptr [ebp-270H] mov dword ptr [ebp-268H], esi lea edi, bword ptr [ebp-264H] lea esi, bword ptr [ebp-26CH] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-280H] lea esi, bword ptr [ebp-264H] movsd movsd push dword ptr [ebp-27CH] push bword ptr [ebp-280H] lea ecx, [ebp-278H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG192 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG107: mov ecx, dword ptr [ebp-278H] add ecx, 0x8000 cmp ecx, 0xFFFF ja G_M36558_IG193 ;; bbWeight=2 PerfScore 5.00 G_M36558_IG108: mov ecx, dword ptr [ebp-278H] mov word ptr [ebx+22], cx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov edx, gword ptr [classVar[0xd1ffab1e]] movsx edx, word ptr [edx+22] mov word ptr [ecx+22], dx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG109: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG110: xor ecx, ecx mov dword ptr [ebp-290H], ecx mov dword ptr [ebp-28CH], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-294H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG112 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG111: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG112: mov bword ptr [ebp-298H], edi lea edi, bword ptr [ebp-290H] lea esi, bword ptr [ebp-298H] movsd mov esi, dword ptr [ebp-294H] mov dword ptr [ebp-28CH], esi lea edi, bword ptr [ebp-288H] lea esi, bword ptr [ebp-290H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-2A4H] lea esi, bword ptr [ebp-288H] movsd movsd push dword ptr [ebp-2A0H] push bword ptr [ebp-2A4H] lea ecx, [ebp-29CH] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG194 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG113: mov ecx, dword ptr [ebp-29CH] mov dword ptr [ebx+16], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov eax, gword ptr [classVar[0xd1ffab1e]] mov eax, dword ptr [eax+16] mov dword ptr [ecx+16], eax mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG114: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG115: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG116: xor ecx, ecx mov dword ptr [ebp-2B4H], ecx mov dword ptr [ebp-2B0H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-2B8H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG118 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG117: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG118: mov bword ptr [ebp-2BCH], edi lea edi, bword ptr [ebp-2B4H] lea esi, bword ptr [ebp-2BCH] movsd mov esi, dword ptr [ebp-2B8H] mov dword ptr [ebp-2B0H], esi lea edi, bword ptr [ebp-2ACH] lea esi, bword ptr [ebp-2B4H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-2C8H] lea esi, bword ptr [ebp-2ACH] movsd movsd push dword ptr [ebp-2C4H] push bword ptr [ebp-2C8H] lea ecx, [ebp-2C0H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG195 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG119: mov ecx, dword ptr [ebp-2C0H] mov dword ptr [ebx+24], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG120: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG121: xor ecx, ecx mov dword ptr [ebp-2D8H], ecx mov dword ptr [ebp-2D4H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-2DCH], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG123 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG122: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG123: mov bword ptr [ebp-2E0H], edi lea edi, bword ptr [ebp-2D8H] lea esi, bword ptr [ebp-2E0H] movsd mov esi, dword ptr [ebp-2DCH] mov dword ptr [ebp-2D4H], esi lea edi, bword ptr [ebp-2D0H] lea esi, bword ptr [ebp-2D8H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-2ECH] lea esi, bword ptr [ebp-2D0H] movsd movsd push dword ptr [ebp-2E8H] push bword ptr [ebp-2ECH] lea ecx, [ebp-2E4H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG196 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG124: mov ecx, dword ptr [ebp-2E4H] mov dword ptr [ebx+28], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG125: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG126: xor ecx, ecx mov dword ptr [ebp-2FCH], ecx mov dword ptr [ebp-2F8H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-300H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG128 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG127: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG128: mov bword ptr [ebp-304H], edi lea edi, bword ptr [ebp-2FCH] lea esi, bword ptr [ebp-304H] movsd mov esi, dword ptr [ebp-300H] mov dword ptr [ebp-2F8H], esi lea edi, bword ptr [ebp-2F4H] lea esi, bword ptr [ebp-2FCH] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-310H] lea esi, bword ptr [ebp-2F4H] movsd movsd push dword ptr [ebp-30CH] push bword ptr [ebp-310H] lea ecx, [ebp-308H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG197 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG129: mov ecx, dword ptr [ebp-308H] mov dword ptr [ebx+16], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG130: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG131: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG132: xor ecx, ecx mov dword ptr [ebp-320H], ecx mov dword ptr [ebp-31CH], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-324H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG134 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG133: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG134: mov bword ptr [ebp-328H], edi lea edi, bword ptr [ebp-320H] lea esi, bword ptr [ebp-328H] movsd mov esi, dword ptr [ebp-324H] mov dword ptr [ebp-31CH], esi lea edi, bword ptr [ebp-318H] lea esi, bword ptr [ebp-320H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-334H] lea esi, bword ptr [ebp-318H] movsd movsd push dword ptr [ebp-330H] push bword ptr [ebp-334H] lea ecx, [ebp-32CH] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG198 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG135: mov ecx, dword ptr [ebp-32CH] mov dword ptr [ebx+24], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG136: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG137: xor ecx, ecx mov dword ptr [ebp-344H], ecx mov dword ptr [ebp-340H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-348H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG139 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG138: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG139: mov bword ptr [ebp-34CH], edi lea edi, bword ptr [ebp-344H] lea esi, bword ptr [ebp-34CH] movsd mov esi, dword ptr [ebp-348H] mov dword ptr [ebp-340H], esi lea edi, bword ptr [ebp-33CH] lea esi, bword ptr [ebp-344H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-358H] lea esi, bword ptr [ebp-33CH] movsd movsd push dword ptr [ebp-354H] push bword ptr [ebp-358H] lea ecx, [ebp-350H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG199 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG140: mov ecx, dword ptr [ebp-350H] mov dword ptr [ebx+28], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 28.00 G_M36558_IG141: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG142: xor ecx, ecx mov dword ptr [ebp-368H], ecx mov dword ptr [ebp-364H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-36CH], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG144 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG143: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG144: mov bword ptr [ebp-370H], edi lea edi, bword ptr [ebp-368H] lea esi, bword ptr [ebp-370H] movsd mov esi, dword ptr [ebp-36CH] mov dword ptr [ebp-364H], esi lea edi, bword ptr [ebp-360H] lea esi, bword ptr [ebp-368H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-37CH] lea esi, bword ptr [ebp-360H] movsd movsd push dword ptr [ebp-378H] push bword ptr [ebp-37CH] lea ecx, [ebp-374H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG200 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG145: mov ecx, dword ptr [ebp-374H] mov dword ptr [ebx+16], ecx mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 20.00 G_M36558_IG146: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ebx, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool movzx edx, al mov byte ptr [ebx+20], al mov byte ptr [edi+20], dl mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 34.00 G_M36558_IG147: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG148: xor ecx, ecx mov dword ptr [ebp-38CH], ecx mov dword ptr [ebp-388H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-390H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG150 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG149: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG150: mov bword ptr [ebp-394H], edi lea edi, bword ptr [ebp-38CH] lea esi, bword ptr [ebp-394H] movsd mov esi, dword ptr [ebp-390H] mov dword ptr [ebp-388H], esi lea edi, bword ptr [ebp-384H] lea esi, bword ptr [ebp-38CH] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-3A0H] lea esi, bword ptr [ebp-384H] movsd movsd push dword ptr [ebp-39CH] push bword ptr [ebp-3A0H] lea ecx, [ebp-398H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG201 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG151: mov ecx, dword ptr [ebp-398H] mov dword ptr [ebx+32], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov edx, gword ptr [classVar[0xd1ffab1e]] mov edx, dword ptr [edx+32] mov dword ptr [ecx+32], edx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov ecx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [ecx+12], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 56.00 G_M36558_IG152: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG153: xor ecx, ecx mov dword ptr [ebp-3B0H], ecx mov dword ptr [ebp-3ACH], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-3B4H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG155 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG154: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG155: mov bword ptr [ebp-3B8H], edi lea edi, bword ptr [ebp-3B0H] lea esi, bword ptr [ebp-3B8H] movsd mov esi, dword ptr [ebp-3B4H] mov dword ptr [ebp-3ACH], esi lea edi, bword ptr [ebp-3A8H] lea esi, bword ptr [ebp-3B0H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-3C4H] lea esi, bword ptr [ebp-3A8H] movsd movsd push dword ptr [ebp-3C0H] push bword ptr [ebp-3C4H] lea ecx, [ebp-3BCH] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG202 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG156: mov ecx, dword ptr [ebp-3BCH] mov dword ptr [ebx+16], ecx mov ecx, gword ptr [classVar[0xd1ffab1e]] mov eax, gword ptr [classVar[0xd1ffab1e]] mov eax, dword ptr [eax+16] mov dword ptr [ecx+16], eax mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 40.00 G_M36558_IG157: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG158: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG159: xor ecx, ecx mov dword ptr [ebp-3D4H], ecx mov dword ptr [ebp-3D0H], ecx lea edi, bword ptr [esi+8] mov edx, dword ptr [esi+4] mov esi, edx mov dword ptr [ebp-3D8H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] test ecx, ecx jne SHORT G_M36558_IG161 ;; bbWeight=4 PerfScore 47.00 G_M36558_IG160: mov ecx, edx call hackishModuleName:hackishMethodName() ;; bbWeight=2 PerfScore 2.50 G_M36558_IG161: mov bword ptr [ebp-3DCH], edi lea edi, bword ptr [ebp-3D4H] lea esi, bword ptr [ebp-3DCH] movsd mov esi, dword ptr [ebp-3D8H] mov dword ptr [ebp-3D0H], esi lea edi, bword ptr [ebp-3CCH] lea esi, bword ptr [ebp-3D4H] movsd movsd call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax lea edi, bword ptr [ebp-3E8H] lea esi, bword ptr [ebp-3CCH] movsd movsd push dword ptr [ebp-3E4H] push bword ptr [ebp-3E8H] lea ecx, [ebp-3E0H] push ecx mov ecx, 7 call System.Number:TryParseInt32IntegerStyle() mov ecx, eax test ecx, ecx jne G_M36558_IG203 ;; bbWeight=4 PerfScore 74.00 G_M36558_IG162: mov edx, dword ptr [ebp-3E0H] mov dword ptr [ebx+24], edx mov edx, gword ptr [classVar[0xd1ffab1e]] mov dword ptr [edx+12], 1 mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 28.00 G_M36558_IG163: mov ebx, gword ptr [classVar[0xd1ffab1e]] test esi, esi je G_M36558_IG204 ;; bbWeight=4 PerfScore 9.00 G_M36558_IG164: xor edx, edx mov dword ptr [ebp-400H], edx mov dword ptr [ebp-3FCH], edx lea edi, bword ptr [esi+8] mov ecx, dword ptr [esi+4] mov esi, ecx mov dword ptr [ebp-404H], esi mov ecx, esi not ecx shr ecx, 31 mov edx, gword ptr [D1FFAB1EH] push edx call System.Diagnostics.Debug:Assert(bool,System.String,System.String) mov bword ptr [ebp-408H], edi lea edi, bword ptr [ebp-400H] lea esi, bword ptr [ebp-408H] movsd mov esi, dword ptr [ebp-404H] mov dword ptr [ebp-3FCH], esi lea edi, bword ptr [ebp-3F8H] lea esi, bword ptr [ebp-400H] movsd movsd lea edi, bword ptr [ebp-3F0H] lea esi, bword ptr [ebp-3F8H] movsd movsd push dword ptr [ebp-3ECH] push bword ptr [ebp-3F0H] call System.Globalization.NumberFormatInfo:get_CurrentInfo():System.Globalization.NumberFormatInfo mov edx, eax mov ecx, 7 call System.Number:ParseInt32(System.ReadOnlySpan`1[Char],int,System.Globalization.NumberFormatInfo):int mov dword ptr [ebx+16], eax mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 128.00 G_M36558_IG165: mov ecx, esi call System.Int32:Parse(System.String):int mov dword ptr [classVar[0xd1ffab1e]], eax mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 21.00 G_M36558_IG166: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG167: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG168: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp SHORT G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG169: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp SHORT G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG170: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp SHORT G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG171: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp SHORT G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG172: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] jmp SHORT G_M36558_IG174 ;; bbWeight=4 PerfScore 25.00 G_M36558_IG173: mov edi, gword ptr [classVar[0xd1ffab1e]] mov ecx, esi call ByteMark:getflag(System.String):bool mov byte ptr [edi+20], al mov eax, gword ptr [ebp-40CH] ;; bbWeight=4 PerfScore 17.00 G_M36558_IG174: mov ecx, eax mov edx, dword ptr [eax] mov edx, dword ptr [edx+48] call gword ptr [edx+28]hackishModuleName:hackishMethodName():System.String:this mov esi, eax test esi, esi jne G_M36558_IG03 ;; bbWeight=8 PerfScore 70.00 G_M36558_IG175: lea esp, [ebp-0CH] pop ebx pop esi pop edi pop ebp ret ;; bbWeight=1 PerfScore 3.50 G_M36558_IG176: mov edx, 11 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG177: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG178: mov edx, 7 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG179: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG180: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG181: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG182: mov edx, 7 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG183: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG184: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG185: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG186: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG187: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG188: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG189: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG190: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG191: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG192: mov edx, 7 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG193: mov ecx, 7 call System.Number:ThrowOverflowException(int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG194: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG195: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG196: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG197: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG198: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG199: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG200: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG201: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG202: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG203: mov edx, 9 call System.Number:ThrowOverflowOrFormatException(int,int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG204: mov ecx, 17 call System.ThrowHelper:ThrowArgumentNullException(int) int3 ;; bbWeight=0 PerfScore 0.00 G_M36558_IG205: call CORINFO_HELP_RNGCHKFAIL int3 ;; bbWeight=0 PerfScore 0.00 RWD00 dd G_M36558_IG08 - G_M36558_IG02 dd G_M36558_IG13 - G_M36558_IG02 dd G_M36558_IG18 - G_M36558_IG02 dd G_M36558_IG19 - G_M36558_IG02 dd G_M36558_IG22 - G_M36558_IG02 dd G_M36558_IG25 - G_M36558_IG02 dd G_M36558_IG26 - G_M36558_IG02 dd G_M36558_IG32 - G_M36558_IG02 dd G_M36558_IG37 - G_M36558_IG02 dd G_M36558_IG42 - G_M36558_IG02 dd G_M36558_IG43 - G_M36558_IG02 dd G_M36558_IG48 - G_M36558_IG02 dd G_M36558_IG54 - G_M36558_IG02 dd G_M36558_IG59 - G_M36558_IG02 dd G_M36558_IG60 - G_M36558_IG02 dd G_M36558_IG65 - G_M36558_IG02 dd G_M36558_IG70 - G_M36558_IG02 dd G_M36558_IG75 - G_M36558_IG02 dd G_M36558_IG76 - G_M36558_IG02 dd G_M36558_IG81 - G_M36558_IG02 dd G_M36558_IG86 - G_M36558_IG02 dd G_M36558_IG91 - G_M36558_IG02 dd G_M36558_IG92 - G_M36558_IG02 dd G_M36558_IG97 - G_M36558_IG02 dd G_M36558_IG102 - G_M36558_IG02 dd G_M36558_IG103 - G_M36558_IG02 dd G_M36558_IG109 - G_M36558_IG02 dd G_M36558_IG114 - G_M36558_IG02 dd G_M36558_IG115 - G_M36558_IG02 dd G_M36558_IG120 - G_M36558_IG02 dd G_M36558_IG125 - G_M36558_IG02 dd G_M36558_IG130 - G_M36558_IG02 dd G_M36558_IG131 - G_M36558_IG02 dd G_M36558_IG136 - G_M36558_IG02 dd G_M36558_IG141 - G_M36558_IG02 dd G_M36558_IG146 - G_M36558_IG02 dd G_M36558_IG147 - G_M36558_IG02 dd G_M36558_IG152 - G_M36558_IG02 dd G_M36558_IG157 - G_M36558_IG02 dd G_M36558_IG158 - G_M36558_IG02 dd G_M36558_IG163 - G_M36558_IG02 dd G_M36558_IG165 - G_M36558_IG02 dd G_M36558_IG166 - G_M36558_IG02 dd G_M36558_IG167 - G_M36558_IG02 dd G_M36558_IG168 - G_M36558_IG02 dd G_M36558_IG169 - G_M36558_IG02 dd G_M36558_IG170 - G_M36558_IG02 dd G_M36558_IG171 - G_M36558_IG02 dd G_M36558_IG172 - G_M36558_IG02 dd G_M36558_IG173 - G_M36558_IG02 ; Total bytes of code 6937, prolog size 62, PerfScore 6761.78, instruction count 1729, allocated bytes for code 6942 (MethodHash=6e137131) for method ByteMark:read_comfile(System.IO.StreamReader) ; ============================================================ *************** EH table for ByteMark:read_comfile(System.IO.StreamReader) 1 EH table entries, 1 total EH entries reported to VM EH#0: try [G_M36558_IG20..G_M36558_IG21) handled by [G_M36558_IG21..G_M36558_IG22) (class: 100000B) ```

The changes were making EH-writethru enable for variables having single def. Below, V00 (the variable for which we are seeing resolution movs), is enregistered, followed by diff screenshot that shows the resolution added.

image

image

kunalspathak commented 3 years ago

Here is another case where resolution introduces unneeded movs:

        public void Case5(int x, int y)
        {
            var a = array;
            for (int i = 0;i < 1000; i++)
            {
                try
                {
                    a[i] = x + y;
                }
                catch { }
            }
        }
Assembly code ```asm ; Assembly listing for method MiniBench.Tweet:Case5(int,int):this ; Emitting BLENDED_CODE for X64 CPU with AVX - Windows ; optimized code ; rbp based frame ; fully interruptible ; Final local variable assignments ; ; V00 this [V00,T04] ( 3, 3 ) ref -> rcx this class-hnd ; V01 arg1 [V01,T02] ( 3, 6 ) int -> [rbp+18H] EH EH-live ; V02 arg2 [V02,T03] ( 3, 6 ) int -> [rbp+20H] EH EH-live ; V03 loc0 [V03,T01] ( 3, 8 ) ref -> [rbp-18H] EH class-hnd EH-live ; V04 loc1 [V04,T00] ( 6, 33 ) int -> [rbp-0CH] EH do-not-enreg[H] EH-live ; V05 OutArgs [V05 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) ref -> zero-ref class-hnd "impSpillSpecialSideEff" ; V07 PSPSym [V07 ] ( 1, 1 ) long -> [rbp-20H] do-not-enreg[X] addr-exposed "PSPSym" ; ; Lcl frame size = 56 G_M51048_IG01: push rbp push rsi sub rsp, 56 lea rbp, [rsp+40H] mov qword ptr [rbp-20H], rsp mov dword ptr [rbp+18H], edx mov dword ptr [rbp+20H], r8d ;; bbWeight=1 PerfScore 5.75 G_M51048_IG02: mov rsi, gword ptr [rcx+8] mov gword ptr [rbp-18H], rsi xor eax, eax mov dword ptr [rbp-0CH], eax ;; bbWeight=1 PerfScore 4.25 G_M51048_IG03: mov eax, dword ptr [rsi+8] cmp dword ptr [rbp-0CH], eax jae SHORT G_M51048_IG04 mov eax, dword ptr [rbp-0CH] movsxd rax, eax lea ecx, [rdx+r8] mov dword ptr [rsi+4*rax+16], ecx jmp SHORT G_M51048_IG05 ;; bbWeight=4 PerfScore 35.00 G_M51048_IG04: call CORINFO_HELP_RNGCHKFAIL int3 ;; bbWeight=0 PerfScore 0.00 G_M51048_IG05: mov eax, dword ptr [rbp-0CH] inc eax mov dword ptr [rbp-0CH], eax cmp dword ptr [rbp-0CH], 0x3E8 mov edx, dword ptr [rbp+18H] mov rsi, gword ptr [rbp-18H] mov r8d, dword ptr [rbp+20H] jl SHORT G_M51048_IG03 ;; bbWeight=8 PerfScore 58.00 G_M51048_IG06: lea rsp, [rbp-08H] pop rsi pop rbp ret ;; bbWeight=1 PerfScore 2.50 G_M51048_IG07: push rbp push rsi sub rsp, 40 mov rbp, qword ptr [rcx+32] mov qword ptr [rsp+20H], rbp lea rbp, [rbp+40H] ;; bbWeight=0 PerfScore 0.00 G_M51048_IG08: lea rax, G_M51048_IG05 ;; bbWeight=0 PerfScore 0.00 G_M51048_IG09: add rsp, 40 pop rsi pop rbp ret ;; bbWeight=0 PerfScore 0.00 ; Total bytes of code 133, prolog size 22, PerfScore 118.80, instruction count 44, allocated bytes for code 133 (MethodHash=045a3897) for method MiniBench.Tweet:Case5(int,int):this ; ============================================================ ```

Above assembly code is based on https://github.com/dotnet/runtime/pull/47307 where we will start enregistering EH vars that has single def. Here, we add resolution to restore rsi, r8d and rdx at the end of G_M51048_IG05 which is part of the loop. Perhaps, we should see if the recent refposition has ever changed and if not, just do not add such resolutions.

       mov      edx, dword ptr [rbp+18H]
       mov      rsi, gword ptr [rbp-18H]
       mov      r8d, dword ptr [rbp+20H]
kunalspathak commented 3 years ago

Today, resolution doesn't take into account block weights where it adds resolution. Another improvement would be take that factor into account. Also, possibly a post-resolution walk-thru to eliminate / squeeze moves added (some kind of peephole optimization but for resolution moves) will be beneficial.

kunalspathak commented 3 years ago

I have fixed some of the redundant resolution movs as part of https://github.com/dotnet/runtime/pull/54345. More work will be done in Future release.

kunalspathak commented 3 years ago

Sometimes, the resolution blocks are added that breaks the contiguous flow of loop which can be bad for performance. https://github.com/dotnet/runtime/issues/58443#issuecomment-912114002