forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[X64] [EgorBo] JIT: Optimize out write barriers for fields in ref-like structs #443
Comments
Top method regressions17 (1.43 % of base) - System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this ; Assembly listing for method System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts)
; Emitting BLENDED_CODE for X86 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 30 single block inlinees; 13 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T01] ( 21, 56 ) byref -> rbx this single-def
;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlyMemory`1[ubyte]>
;* V02 loc1 [V02 ] ( 0, 0 ) struct (16) zero-ref <System.SequencePosition>
;* V03 loc2 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.ReadOnlyMemory`1[ubyte]>
;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V05 tmp1 [V05,T03] ( 4, 28 ) byref -> rsi "Inlining Arg"
; V06 tmp2 [V06,T00] ( 5, 68 ) byref -> r12 "Inlining Arg"
;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.SequencePosition>
-; V08 tmp4 [V08,T10] ( 2, 16 ) int -> [rbp-0x2C] spill-single-def
+; V08 tmp4 [V08,T10] ( 2, 16 ) int -> rdi
;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref
-; V10 tmp6 [V10,T18] ( 3, 12 ) ubyte -> registers "Inline return value spill temp"
+; V10 tmp6 [V10,T18] ( 3, 12 ) ubyte -> rdi "Inline return value spill temp"
; V11 tmp7 [V11,T05] ( 4, 20 ) ref -> rax class-hnd "Inline stloc first use temp" <System.Object>
; V12 tmp8 [V12,T33] ( 3, 6 ) int -> rdi "Inline stloc first use temp"
-; V13 tmp9 [V13,T07] ( 9, 16.50) ref -> [rbp-0x68] class-hnd spill-single-def "Inline stloc first use temp" <System.Object>
-; V14 tmp10 [V14,T02] ( 14, 28 ) int -> [rbp-0x30] spill-single-def "Inline stloc first use temp"
-; V15 tmp11 [V15,T25] ( 4, 8 ) int -> [rbp-0x34] spill-single-def "Inline stloc first use temp"
+; V13 tmp9 [V13,T07] ( 9, 16.50) ref -> [rbp-0x60] class-hnd spill-single-def "Inline stloc first use temp" <System.Object>
+; V14 tmp10 [V14,T02] ( 14, 28 ) int -> [rbp-0x2C] spill-single-def "Inline stloc first use temp"
+; V15 tmp11 [V15,T25] ( 4, 8 ) int -> [rbp-0x30] spill-single-def "Inline stloc first use temp"
;* V16 tmp12 [V16 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SR] multireg-ret "Return value temp for multireg return" <System.Memory`1[ubyte]>
-; V17 tmp13 [V17 ] ( 4, 8 ) struct (16) [rbp-0x48] do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
+; V17 tmp13 [V17 ] ( 4, 8 ) struct (16) [rbp-0x40] do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
;* V18 tmp14 [V18 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Memory`1[ubyte]>
;* V19 tmp15 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
; V20 tmp16 [V20,T16] ( 6, 12 ) ref -> rax class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
;* V21 tmp17 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlyMemory`1[ubyte]>
; V22 tmp18 [V22,T31] ( 3, 6 ) ref -> rcx class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
;* V23 tmp19 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.SequencePosition>
;* V24 tmp20 [V24 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V25 tmp21 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
;* V26 tmp22 [V26 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
-; V27 tmp23 [V27,T27] ( 2, 8 ) int -> rdi "Inlining Arg"
+; V27 tmp23 [V27,T27] ( 2, 8 ) int -> rcx "Inlining Arg"
; V28 tmp24 [V28,T28] ( 2, 8 ) int -> rax "Inlining Arg"
-; V29 tmp25 [V29,T19] ( 3, 12 ) int -> rdi "Inlining Arg"
+; V29 tmp25 [V29,T19] ( 3, 12 ) int -> rsi "Inlining Arg"
;* V30 tmp26 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
;* V31 tmp27 [V31 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
; V32 tmp28 [V32,T29] ( 2, 8 ) int -> r8 "Inlining Arg"
; V33 tmp29 [V33,T08] ( 4, 16 ) ref -> rax class-hnd "Inlining Arg" <ubyte[]>
; V34 tmp30 [V34,T09] ( 4, 16 ) int -> rsi "Inlining Arg"
; V35 tmp31 [V35,T20] ( 3, 12 ) int -> rax "Inlining Arg"
;* V36 tmp32 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Memory`1[ubyte]>
;* V37 tmp33 [V37 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
; V38 tmp34 [V38,T30] ( 2, 8 ) int -> rcx "Inlining Arg"
;* V39 tmp35 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Memory`1[ubyte]>
; V40 tmp36 [V40,T39] ( 4, 4 ) byref -> rsi single-def "Inlining Arg"
; V41 tmp37 [V41,T57] ( 3, 3 ) byref -> r13 single-def "Inlining Arg"
;* V42 tmp38 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" <System.SequencePosition>
;* V43 tmp39 [V43 ] ( 0, 0 ) int -> zero-ref
; V44 tmp40 [V44,T67] ( 3, 1.50) ubyte -> rdi "Inline return value spill temp"
-; V45 tmp41 [V45,T61] ( 4, 2 ) ref -> rax class-hnd single-def "Inline stloc first use temp" <System.Object>
+; V45 tmp41 [V45,T61] ( 4, 2 ) ref -> r8 class-hnd single-def "Inline stloc first use temp" <System.Object>
; V46 tmp42 [V46,T68] ( 3, 1.50) int -> rdi "Inline stloc first use temp"
; V47 tmp43 [V47,T54] ( 7, 3.12) ref -> r14 class-hnd single-def "Inline stloc first use temp" <System.Object>
; V48 tmp44 [V48,T38] ( 9, 4.50) int -> r13 "Inline stloc first use temp"
; V49 tmp45 [V49,T63] ( 4, 2 ) int -> r15 "Inline stloc first use temp"
;* V50 tmp46 [V50 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SR] multireg-ret "Return value temp for multireg return" <System.Memory`1[ubyte]>
-; V51 tmp47 [V51 ] ( 2, 1 ) struct (16) [rbp-0x58] do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
+; V51 tmp47 [V51 ] ( 2, 1 ) struct (16) [rbp-0x50] do-not-enreg[SBR] multireg-ret must-init ld-addr-op "Inline stloc first use temp" <System.Memory`1[ubyte]>
;* V52 tmp48 [V52 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.Memory`1[ubyte]>
;* V53 tmp49 [V53 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
; V54 tmp50 [V54,T62] ( 4, 2 ) ref -> rax class-hnd single-def "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
;* V55 tmp51 [V55 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlyMemory`1[ubyte]>
;* V56 tmp52 [V56 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inline stloc first use temp" <System.Buffers.ReadOnlySequenceSegment`1[ubyte]>
;* V57 tmp53 [V57 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.SequencePosition>
;* V58 tmp54 [V58 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V59 tmp55 [V59 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
;* V60 tmp56 [V60 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
;* V61 tmp57 [V61 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V62 tmp58 [V62 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V63 tmp59 [V63 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V64 tmp60 [V64 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlyMemory`1[ubyte]>
;* V65 tmp61 [V65 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
;* V66 tmp62 [V66 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V67 tmp63 [V67,T58] ( 3, 3 ) ref -> rax class-hnd single-def "Inlining Arg" <ubyte[]>
+; V67 tmp63 [V67,T58] ( 3, 3 ) ref -> r12 class-hnd single-def "Inlining Arg" <ubyte[]>
; V68 tmp64 [V68,T60] ( 3, 3 ) int -> rsi "Inlining Arg"
;* V69 tmp65 [V69 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V70 tmp66 [V70 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.Memory`1[ubyte]>
;* V71 tmp67 [V71 ] ( 0, 0 ) ref -> zero-ref class-hnd "Inlining Arg" <System.Object>
;* V72 tmp68 [V72 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
;* V73 tmp69 [V73 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Memory`1[ubyte]>
;* V74 tmp70 [V74 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" <System.ReadOnlySpan`1[ubyte]>
; V75 tmp71 [V75,T55] ( 6, 3 ) byref -> r15 "Inline stloc first use temp"
; V76 tmp72 [V76,T56] ( 6, 3 ) int -> r14 "Inline stloc first use temp"
;* V77 tmp73 [V77 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inline stloc first use temp" <System.Object>
;* V78 tmp74 [V78 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V79 tmp75 [V79 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <System.Buffers.MemoryManager`1[ubyte]>
;* V80 tmp76 [V80 ] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SBR] multireg-ret "Return value temp for multireg return" <System.Span`1[ubyte]>
;* V81 tmp77 [V81 ] ( 0, 0 ) struct (16) zero-ref multireg-ret ld-addr-op "Inline stloc first use temp" <System.Span`1[ubyte]>
-; V82 tmp78 [V82,T69] ( 3, 1.50) long -> rax "Inline stloc first use temp"
+; V82 tmp78 [V82,T69] ( 3, 1.50) long -> rdi "Inline stloc first use temp"
;* V83 tmp79 [V83 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
;* V84 tmp80 [V84 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <ubyte[]>
;* V85 tmp81 [V85 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <ubyte[]>
; V86 tmp82 [V86,T65] ( 2, 2 ) byref -> rdi single-def "Inlining Arg"
;* V87 tmp83 [V87 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
-; V88 tmp84 [V88,T13] ( 11, 13 ) ref -> [rbp-0x70] "field V01._object (fldOffset=0x0)" P-INDEP
-; V89 tmp85 [V89,T21] ( 6, 10.50) int -> [rbp-0x5C] "field V01._index (fldOffset=0x8)" P-INDEP
-; V90 tmp86 [V90,T11] ( 8, 15 ) int -> [rbp-0x60] "field V01._length (fldOffset=0xc)" P-INDEP
+; V88 tmp84 [V88,T13] ( 11, 13 ) ref -> [rbp-0x68] "field V01._object (fldOffset=0x0)" P-INDEP
+; V89 tmp85 [V89,T21] ( 6, 10.50) int -> [rbp-0x54] "field V01._index (fldOffset=0x8)" P-INDEP
+; V90 tmp86 [V90,T11] ( 8, 15 ) int -> [rbp-0x58] "field V01._length (fldOffset=0xc)" P-INDEP
; V91 tmp87 [V91,T14] ( 3, 12.50) ref -> r15 "field V02._object (fldOffset=0x0)" P-INDEP
; V92 tmp88 [V92,T15] ( 3, 12.50) int -> r14 "field V02._integer (fldOffset=0x8)" P-INDEP
;* V93 tmp89 [V93 ] ( 0, 0 ) ref -> zero-ref "field V03._object (fldOffset=0x0)" P-INDEP
;* V94 tmp90 [V94 ] ( 0, 0 ) int -> zero-ref "field V03._index (fldOffset=0x8)" P-INDEP
;* V95 tmp91 [V95 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0xc)" P-INDEP
-; V96 tmp92 [V96,T06] ( 3, 18 ) ref -> [rbp-0x78] "field V07._object (fldOffset=0x0)" P-INDEP
+; V96 tmp92 [V96,T06] ( 3, 18 ) ref -> [rbp-0x70] "field V07._object (fldOffset=0x0)" P-INDEP
;* V97 tmp93 [V97,T23] ( 0, 0 ) int -> zero-ref "field V07._integer (fldOffset=0x8)" P-INDEP
-; V98 tmp94 [V98,T40] ( 2, 4 ) ref -> [rbp-0x48] do-not-enreg[] "field V17._object (fldOffset=0x0)" P-DEP
-; V99 tmp95 [V99,T45] ( 2, 4 ) int -> [rbp-0x40] do-not-enreg[] "field V17._index (fldOffset=0x8)" P-DEP
-; V100 tmp96 [V100,T46] ( 2, 4 ) int -> [rbp-0x3C] do-not-enreg[] "field V17._length (fldOffset=0xc)" P-DEP
+; V98 tmp94 [V98,T40] ( 2, 4 ) ref -> [rbp-0x40] do-not-enreg[] "field V17._object (fldOffset=0x0)" P-DEP
+; V99 tmp95 [V99,T45] ( 2, 4 ) int -> [rbp-0x38] do-not-enreg[] "field V17._index (fldOffset=0x8)" P-DEP
+; V100 tmp96 [V100,T46] ( 2, 4 ) int -> [rbp-0x34] do-not-enreg[] "field V17._length (fldOffset=0xc)" P-DEP
;* V101 tmp97 [V101 ] ( 0, 0 ) ref -> zero-ref "field V18._object (fldOffset=0x0)" P-INDEP
;* V102 tmp98 [V102 ] ( 0, 0 ) int -> zero-ref "field V18._index (fldOffset=0x8)" P-INDEP
;* V103 tmp99 [V103 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0xc)" P-INDEP
; V104 tmp100 [V104,T32] ( 3, 6 ) ref -> rdx "field V19._object (fldOffset=0x0)" P-INDEP
; V105 tmp101 [V105,T34] ( 3, 6 ) int -> rdi "field V19._index (fldOffset=0x8)" P-INDEP
; V106 tmp102 [V106,T35] ( 3, 6 ) int -> rax "field V19._length (fldOffset=0xc)" P-INDEP
; V107 tmp103 [V107,T24] ( 4, 8 ) ref -> rdx "field V21._object (fldOffset=0x0)" P-INDEP
; V108 tmp104 [V108,T26] ( 4, 8 ) int -> r8 "field V21._index (fldOffset=0x8)" P-INDEP
; V109 tmp105 [V109,T22] ( 5, 10 ) int -> rax "field V21._length (fldOffset=0xc)" P-INDEP
; V110 tmp106 [V110,T41] ( 2, 4 ) ref -> rcx "field V23._object (fldOffset=0x0)" P-INDEP
;* V111 tmp107 [V111,T66] ( 0, 0 ) int -> zero-ref "field V23._integer (fldOffset=0x8)" P-INDEP
-; V112 tmp108 [V112,T42] ( 2, 4 ) ref -> rsi "field V25._object (fldOffset=0x0)" P-INDEP
+; V112 tmp108 [V112,T42] ( 2, 4 ) ref -> rdi "field V25._object (fldOffset=0x0)" P-INDEP
; V113 tmp109 [V113,T47] ( 2, 4 ) int -> rdx "field V25._index (fldOffset=0x8)" P-INDEP
; V114 tmp110 [V114,T48] ( 2, 4 ) int -> rax "field V25._length (fldOffset=0xc)" P-INDEP
; V115 tmp111 [V115,T43] ( 2, 4 ) ref -> rdx "field V30._object (fldOffset=0x0)" P-INDEP
; V116 tmp112 [V116,T49] ( 2, 4 ) int -> r8 "field V30._index (fldOffset=0x8)" P-INDEP
; V117 tmp113 [V117,T50] ( 2, 4 ) int -> rax "field V30._length (fldOffset=0xc)" P-INDEP
; V118 tmp114 [V118,T44] ( 2, 4 ) ref -> rdx "field V36._object (fldOffset=0x0)" P-INDEP
; V119 tmp115 [V119,T51] ( 2, 4 ) int -> rcx "field V36._index (fldOffset=0x8)" P-INDEP
; V120 tmp116 [V120,T52] ( 2, 4 ) int -> rax "field V36._length (fldOffset=0xc)" P-INDEP
;* V121 tmp117 [V121 ] ( 0, 0 ) ref -> zero-ref "field V39._object (fldOffset=0x0)" P-INDEP
;* V122 tmp118 [V122 ] ( 0, 0 ) int -> zero-ref "field V39._index (fldOffset=0x8)" P-INDEP
;* V123 tmp119 [V123 ] ( 0, 0 ) int -> zero-ref "field V39._length (fldOffset=0xc)" P-INDEP
;* V124 tmp120 [V124 ] ( 0, 0 ) ref -> zero-ref "field V42._object (fldOffset=0x0)" P-INDEP
;* V125 tmp121 [V125 ] ( 0, 0 ) int -> zero-ref "field V42._integer (fldOffset=0x8)" P-INDEP
-; V126 tmp122 [V126,T77] ( 1, 0.50) ref -> [rbp-0x58] do-not-enreg[] "field V51._object (fldOffset=0x0)" P-DEP
-; V127 tmp123 [V127,T78] ( 1, 0.50) int -> [rbp-0x50] do-not-enreg[] "field V51._index (fldOffset=0x8)" P-DEP
-; V128 tmp124 [V128,T74] ( 2, 1 ) int -> [rbp-0x4C] do-not-enreg[] "field V51._length (fldOffset=0xc)" P-DEP
+; V126 tmp122 [V126,T77] ( 1, 0.50) ref -> [rbp-0x50] do-not-enreg[] "field V51._object (fldOffset=0x0)" P-DEP
+; V127 tmp123 [V127,T78] ( 1, 0.50) int -> [rbp-0x48] do-not-enreg[] "field V51._index (fldOffset=0x8)" P-DEP
+; V128 tmp124 [V128,T74] ( 2, 1 ) int -> [rbp-0x44] do-not-enreg[] "field V51._length (fldOffset=0xc)" P-DEP
;* V129 tmp125 [V129 ] ( 0, 0 ) ref -> zero-ref "field V52._object (fldOffset=0x0)" P-INDEP
;* V130 tmp126 [V130 ] ( 0, 0 ) int -> zero-ref "field V52._index (fldOffset=0x8)" P-INDEP
;* V131 tmp127 [V131 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0xc)" P-INDEP
;* V132 tmp128 [V132 ] ( 0, 0 ) ref -> zero-ref "field V53._object (fldOffset=0x0)" P-INDEP
;* V133 tmp129 [V133 ] ( 0, 0 ) int -> zero-ref "field V53._index (fldOffset=0x8)" P-INDEP
;* V134 tmp130 [V134 ] ( 0, 0 ) int -> zero-ref "field V53._length (fldOffset=0xc)" P-INDEP
;* V135 tmp131 [V135 ] ( 0, 0 ) ref -> zero-ref "field V55._object (fldOffset=0x0)" P-INDEP
;* V136 tmp132 [V136 ] ( 0, 0 ) int -> zero-ref "field V55._index (fldOffset=0x8)" P-INDEP
; V137 tmp133 [V137,T64] ( 4, 2 ) int -> rdi "field V55._length (fldOffset=0xc)" P-INDEP
;* V138 tmp134 [V138 ] ( 0, 0 ) ref -> zero-ref "field V57._object (fldOffset=0x0)" P-INDEP
;* V139 tmp135 [V139 ] ( 0, 0 ) int -> zero-ref "field V57._integer (fldOffset=0x8)" P-INDEP
;* V140 tmp136 [V140 ] ( 0, 0 ) ref -> zero-ref "field V59._object (fldOffset=0x0)" P-INDEP
;* V141 tmp137 [V141 ] ( 0, 0 ) int -> zero-ref "field V59._index (fldOffset=0x8)" P-INDEP
;* V142 tmp138 [V142 ] ( 0, 0 ) int -> zero-ref "field V59._length (fldOffset=0xc)" P-INDEP
;* V143 tmp139 [V143 ] ( 0, 0 ) ref -> zero-ref "field V64._object (fldOffset=0x0)" P-INDEP
;* V144 tmp140 [V144 ] ( 0, 0 ) int -> zero-ref "field V64._index (fldOffset=0x8)" P-INDEP
;* V145 tmp141 [V145 ] ( 0, 0 ) int -> zero-ref "field V64._length (fldOffset=0xc)" P-INDEP
;* V146 tmp142 [V146 ] ( 0, 0 ) ref -> zero-ref "field V70._object (fldOffset=0x0)" P-INDEP
;* V147 tmp143 [V147 ] ( 0, 0 ) int -> zero-ref "field V70._index (fldOffset=0x8)" P-INDEP
;* V148 tmp144 [V148 ] ( 0, 0 ) int -> zero-ref "field V70._length (fldOffset=0xc)" P-INDEP
;* V149 tmp145 [V149 ] ( 0, 0 ) ref -> zero-ref "field V73._object (fldOffset=0x0)" P-INDEP
;* V150 tmp146 [V150 ] ( 0, 0 ) int -> zero-ref "field V73._index (fldOffset=0x8)" P-INDEP
;* V151 tmp147 [V151 ] ( 0, 0 ) int -> zero-ref "field V73._length (fldOffset=0xc)" P-INDEP
;* V152 tmp148 [V152 ] ( 0, 0 ) byref -> zero-ref "field V74._reference (fldOffset=0x0)" P-INDEP
;* V153 tmp149 [V153 ] ( 0, 0 ) int -> zero-ref "field V74._length (fldOffset=0x8)" P-INDEP
; V154 tmp150 [V154,T72] ( 2, 1 ) byref -> rax single-def "field V78._reference (fldOffset=0x0)" P-INDEP
; V155 tmp151 [V155,T75] ( 2, 1 ) int -> r14 "field V78._length (fldOffset=0x8)" P-INDEP
;* V156 tmp152 [V156 ] ( 0, 0 ) byref -> zero-ref "field V80._reference (fldOffset=0x0)" P-DEP
;* V157 tmp153 [V157 ] ( 0, 0 ) int -> zero-ref "field V80._length (fldOffset=0x8)" P-DEP
; V158 tmp154 [V158,T73] ( 2, 1 ) byref -> r15 "field V81._reference (fldOffset=0x0)" P-INDEP
; V159 tmp155 [V159,T76] ( 2, 1 ) int -> r14 "field V81._length (fldOffset=0x8)" P-INDEP
;* V160 tmp156 [V160 ] ( 0, 0 ) byref -> zero-ref single-def "field V87._reference (fldOffset=0x0)" P-INDEP
;* V161 tmp157 [V161 ] ( 0, 0 ) int -> zero-ref "field V87._length (fldOffset=0x8)" P-INDEP
; V162 tmp158 [V162,T17] ( 3, 12 ) ref -> rax "argument with side effect"
; V163 tmp159 [V163,T59] ( 3, 3 ) ref -> rax single-def "argument with side effect"
; V164 cse0 [V164,T36] ( 3, 6 ) int -> rdx "CSE #02: conservative"
; V165 cse1 [V165,T70] ( 3, 1.50) int -> r15 "CSE #10: conservative"
; V166 cse2 [V166,T04] ( 4, 24.50) byref -> r13 "CSE #01: aggressive"
; V167 rat0 [V167,T12] ( 5, 15 ) ref -> rax "replacement local"
; V168 rat1 [V168,T37] ( 3, 5 ) long -> rdi "CSE for expectedClsNode"
-; V169 rat2 [V169,T53] ( 5, 3.75) ref -> rax "replacement local"
+; V169 rat2 [V169,T53] ( 5, 3.75) ref -> r12 "replacement local"
; V170 rat3 [V170,T71] ( 3, 1.25) long -> rdi "CSE for expectedClsNode"
;
-; Lcl frame size = 88
+; Lcl frame size = 72
G_M26249_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 88
- lea rbp, [rsp+0x80]
- xor eax, eax
- mov qword ptr [rbp-0x58], rax
+ sub rsp, 72
+ lea rbp, [rsp+0x70]
vxorps xmm8, xmm8, xmm8
- vmovdqa xmmword ptr [rbp-0x50], xmm8
- mov qword ptr [rbp-0x40], rax
+ vmovdqu ymmword ptr [rbp-0x50], ymm8
mov rbx, rdi
- ;; size=45 bbWeight=8 PerfScore 92.67
+ ;; size=32 bbWeight=8 PerfScore 74.67
G_M26249_IG02:
mov r15, gword ptr [rbx+0x70]
mov r14d, dword ptr [rbx+0x78]
lea r13, bword ptr [rbx+0x60]
lea rdi, bword ptr [rbx+0x70]
mov rsi, r13
call CORINFO_HELP_ASSIGN_BYREF
movsq
lea rsi, bword ptr [rbx+0x80]
mov r12, r13
mov rax, gword ptr [r12]
xor rcx, rcx
- mov gword ptr [rbp-0x78], rcx
+ mov gword ptr [rbp-0x70], rcx
test rax, rax
je G_M26249_IG13
;; size=55 bbWeight=8 PerfScore 100.00
G_M26249_IG03:
mov edi, dword ptr [rsi+0x10]
sar edi, 31
mov edx, dword ptr [rsi+0x14]
mov r8d, edx
sar r8d, 31
lea edi, [r8+2*rdi]
neg edi
mov r8, gword ptr [rsi+0x08]
- mov gword ptr [rbp-0x68], r8
+ mov gword ptr [rbp-0x60], r8
mov r9d, dword ptr [r12+0x08]
- mov dword ptr [rbp-0x30], r9d
+ mov dword ptr [rbp-0x2C], r9d
and edx, 0xD1FFAB1E
- mov dword ptr [rbp-0x34], edx
+ mov dword ptr [rbp-0x30], edx
test edi, edi
je G_M26249_IG10
cmp rax, r8
- jne G_M26249_IG36
+ jne G_M26249_IG37
cmp edi, 1
je SHORT G_M26249_IG04
mov rsi, r8
mov rdi, 0xD1FFAB1E ; System.Buffers.MemoryManager`1[ubyte]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
call [rax]CORINFO_HELP_CHKCASTCLASS
mov rdi, rax
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
call [rax+0x20]System.Buffers.MemoryManager`1[ubyte]:get_Memory():System.Memory`1[ubyte]:this
- mov gword ptr [rbp-0x48], rax
- mov qword ptr [rbp-0x40], rdx
- mov eax, dword ptr [rbp-0x34]
- mov ecx, dword ptr [rbp-0x30]
+ mov gword ptr [rbp-0x40], rax
+ mov qword ptr [rbp-0x38], rdx
+ mov eax, dword ptr [rbp-0x30]
+ mov ecx, dword ptr [rbp-0x2C]
sub eax, ecx
mov esi, ecx
mov edi, eax
add rsi, rdi
- mov edi, dword ptr [rbp-0x3C]
+ mov edi, dword ptr [rbp-0x34]
cmp rsi, rdi
- ja G_M26249_IG37
- add ecx, dword ptr [rbp-0x40]
- mov rdx, gword ptr [rbp-0x48]
+ ja G_M26249_IG38
+ add ecx, dword ptr [rbp-0x38]
+ mov rdx, gword ptr [rbp-0x40]
jmp G_M26249_IG12
;; size=155 bbWeight=2 PerfScore 80.50
G_M26249_IG04:
mov rax, r8
test rax, rax
je SHORT G_M26249_IG07
;; size=8 bbWeight=2 PerfScore 3.00
G_M26249_IG05:
mov rdi, 0xD1FFAB1E ; ubyte[]
cmp qword ptr [rax], rdi
je SHORT G_M26249_IG07
;; size=15 bbWeight=1 PerfScore 4.25
G_M26249_IG06:
mov rsi, r8
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTARRAY
call [rax]CORINFO_HELP_CHKCASTARRAY
;; size=15 bbWeight=0.50 PerfScore 1.75
G_M26249_IG07:
- mov edx, dword ptr [rbp-0x34]
- mov r9d, dword ptr [rbp-0x30]
+ mov edx, dword ptr [rbp-0x30]
+ mov r9d, dword ptr [rbp-0x2C]
mov esi, edx
sub esi, r9d
test rax, rax
je SHORT G_M26249_IG08
mov edi, r9d
mov edx, esi
add rdi, rdx
mov edx, dword ptr [rax+0x08]
cmp rdi, rdx
- ja G_M26249_IG37
+ ja G_M26249_IG38
mov rdx, rax
mov edi, r9d
mov eax, esi
jmp SHORT G_M26249_IG09
;; size=47 bbWeight=2 PerfScore 21.00
G_M26249_IG08:
mov edx, r9d
or edx, esi
- jne G_M26249_IG37
+ jne G_M26249_IG38
xor rdx, rdx
xor edi, edi
xor eax, eax
;; size=17 bbWeight=2 PerfScore 4.50
G_M26249_IG09:
mov r8d, edi
mov ecx, r8d
jmp G_M26249_IG12
;; size=11 bbWeight=2 PerfScore 5.00
G_M26249_IG10:
mov rsi, rax
mov rdi, 0xD1FFAB1E ; System.Buffers.ReadOnlySequenceSegment`1[ubyte]
mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
call [rax]CORINFO_HELP_CHKCASTCLASS
- mov rdi, gword ptr [rbp-0x68]
- cmp rax, rdi
+ mov rsi, gword ptr [rbp-0x60]
+ cmp rax, rsi
jne SHORT G_M26249_IG11
- mov rdx, gword ptr [rdi+0x18]
- mov r8d, dword ptr [rdi+0x20]
- mov eax, dword ptr [rdi+0x24]
- mov edi, dword ptr [rbp-0x34]
+ mov rdx, gword ptr [rsi+0x18]
+ mov r8d, dword ptr [rsi+0x20]
+ mov eax, dword ptr [rsi+0x24]
mov esi, dword ptr [rbp-0x30]
- sub edi, esi
- mov ecx, esi
- mov r9d, edi
+ mov edi, dword ptr [rbp-0x2C]
+ sub esi, edi
+ mov ecx, edi
+ mov r9d, esi
add rcx, r9
cmp rcx, rax
- ja G_M26249_IG35
- add r8d, esi
- mov eax, edi
+ ja G_M26249_IG36
+ add r8d, edi
+ mov eax, esi
mov rcx, rdx
mov edx, r8d
mov rsi, rcx
mov ecx, edx
mov rdx, rsi
jmp SHORT G_M26249_IG12
;; size=91 bbWeight=2 PerfScore 40.00
G_M26249_IG11:
mov rcx, gword ptr [rax+0x08]
test rcx, rcx
- je G_M26249_IG36
+ je G_M26249_IG37
+ mov rsi, rcx
mov rdx, gword ptr [rax+0x18]
mov r8d, dword ptr [rax+0x20]
mov eax, dword ptr [rax+0x24]
- mov esi, dword ptr [rbp-0x30]
- cmp esi, eax
- ja G_M26249_IG35
- lea edi, [r8+rsi]
- sub eax, esi
- mov rsi, rdx
- mov edx, edi
- mov r8, rsi
- mov gword ptr [rbp-0x78], rcx
+ mov edi, dword ptr [rbp-0x2C]
+ cmp edi, eax
+ ja G_M26249_IG36
+ lea ecx, [r8+rdi]
+ sub eax, edi
+ mov rdi, rdx
+ mov edx, ecx
+ mov rcx, rdi
+ mov gword ptr [rbp-0x70], rsi
+ mov rdi, rcx
mov ecx, edx
- mov rdx, r8
- ;; size=58 bbWeight=2 PerfScore 29.00
+ mov rdx, rdi
+ ;; size=64 bbWeight=2 PerfScore 30.00
G_M26249_IG12:
- mov r8d, 1
- mov dword ptr [rbp-0x60], eax
- mov gword ptr [rbp-0x70], rdx
- mov dword ptr [rbp-0x5C], ecx
- jmp SHORT G_M26249_IG14
- ;; size=18 bbWeight=2 PerfScore 10.50
+ mov edi, 1
+ jmp SHORT G_M26249_IG15
+ ;; size=7 bbWeight=2 PerfScore 4.50
G_M26249_IG13:
xor rdx, rdx
- mov gword ptr [rbp-0x70], rdx
+ mov gword ptr [rbp-0x68], rdx
xor eax, eax
- mov dword ptr [rbp-0x5C], eax
- xor r8d, r8d
- mov dword ptr [rbp-0x60], r8d
+ mov dword ptr [rbp-0x54], eax
xor edi, edi
- xor r9d, r9d
- mov r8d, r9d
- ;; size=26 bbWeight=2 PerfScore 9.00
+ xor r8d, r8d
+ ;; size=16 bbWeight=2 PerfScore 6.00
G_M26249_IG14:
- mov dword ptr [rbp-0x2C], r8d
- mov rsi, gword ptr [rbp-0x78]
- mov rdi, r12
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov eax, r8d
+ mov ecx, dword ptr [rbp-0x54]
+ mov rdx, gword ptr [rbp-0x68]
+ ;; size=10 bbWeight=2 PerfScore 4.50
+G_M26249_IG15:
+ mov rsi, gword ptr [rbp-0x70]
+ mov gword ptr [r12], rsi
xor esi, esi
mov dword ptr [r12+0x08], esi
- cmp byte ptr [rbp-0x2C], 0
- je G_M26249_IG33
- ;; size=33 bbWeight=8 PerfScore 60.00
-G_M26249_IG15:
- mov r12d, dword ptr [rbp-0x60]
- test r12d, r12d
- je G_M26249_IG32
- ;; size=13 bbWeight=4 PerfScore 9.00
+ test dil, dil
+ je G_M26249_IG34
+ ;; size=24 bbWeight=8 PerfScore 36.00
G_M26249_IG16:
+ mov dword ptr [rbp-0x58], eax
+ test eax, eax
+ je G_M26249_IG33
+ ;; size=11 bbWeight=4 PerfScore 9.00
+G_M26249_IG17:
cmp byte ptr [rbx+0x24], 0
- je G_M26249_IG27
+ je G_M26249_IG28
lea rsi, bword ptr [rbx+0x80]
- mov rax, gword ptr [r13]
- test rax, rax
- je G_M26249_IG25
+ mov r8, gword ptr [r13]
+ test r8, r8
+ je G_M26249_IG26
mov edi, dword ptr [rsi+0x10]
sar edi, 31
mov r15d, dword ptr [rsi+0x14]
- mov ecx, r15d
- sar ecx, 31
- lea edi, [rcx+2*rdi]
+ mov r9d, r15d
+ sar r9d, 31
+ lea edi, [r9+2*rdi]
neg edi
mov r14, gword ptr [rsi+0x08]
mov r13d, dword ptr [r13+0x08]
and r15d, 0xD1FFAB1E
test edi, edi
- je G_M26249_IG22
- cmp rax, r14
- jne G_M26249_IG36
+ je G_M26249_IG23
+ cmp r8, r14
+ jne G_M26249_IG37
cmp edi, 1
- je SHORT G_M26249_IG17
+ je SHORT G_M26249_IG18
+ mov gword ptr [rbp-0x68], rdx
+ mov dword ptr [rbp-0x54], ecx
mov rsi, r14
mov rdi, 0xD1FFAB1E ; System.Buffers.MemoryManager`1[ubyte]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
- call [rax]CORINFO_HELP_CHKCASTCLASS
+ mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
+ call [r8]CORINFO_HELP_CHKCASTCLASS
mov rdi, rax
mov rax, qword ptr [rax]
mov rax, qword ptr [rax+0x40]
call [rax+0x20]System.Buffers.MemoryManager`1[ubyte]:get_Memory():System.Memory`1[ubyte]:this
- mov gword ptr [rbp-0x58], rax
- mov qword ptr [rbp-0x50], rdx
+ mov gword ptr [rbp-0x50], rax
+ mov qword ptr [rbp-0x48], rdx
sub r15d, r13d
mov esi, r15d
mov edi, r13d
add rsi, rdi
- mov edi, dword ptr [rbp-0x4C]
+ mov edi, dword ptr [rbp-0x44]
cmp rsi, rdi
- jbe G_M26249_IG24
- jmp G_M26249_IG37
- ;; size=163 bbWeight=0.50 PerfScore 20.00
-G_M26249_IG17:
- mov rax, r14
- test rax, rax
- je SHORT G_M26249_IG20
- ;; size=8 bbWeight=0.50 PerfScore 0.75
+ jbe G_M26249_IG25
+ jmp G_M26249_IG38
+ ;; size=173 bbWeight=0.50 PerfScore 21.00
G_M26249_IG18:
- mov rdi, 0xD1FFAB1E ; ubyte[]
- cmp qword ptr [rax], rdi
- je SHORT G_M26249_IG20
- ;; size=15 bbWeight=0.25 PerfScore 1.06
+ mov r12, r14
+ test r12, r12
+ je SHORT G_M26249_IG21
+ ;; size=8 bbWeight=0.50 PerfScore 0.75
G_M26249_IG19:
- mov rsi, r14
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTARRAY
- call [rax]CORINFO_HELP_CHKCASTARRAY
- ;; size=15 bbWeight=0.12 PerfScore 0.44
+ mov rdi, 0xD1FFAB1E ; ubyte[]
+ cmp qword ptr [r12], rdi
+ je SHORT G_M26249_IG21
+ ;; size=16 bbWeight=0.25 PerfScore 1.06
G_M26249_IG20:
+ mov gword ptr [rbp-0x68], rdx
+ mov dword ptr [rbp-0x54], ecx
+ mov rsi, r14
+ mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTARRAY
+ call [r8]CORINFO_HELP_CHKCASTARRAY
+ mov r12, rax
+ mov ecx, dword ptr [rbp-0x54]
+ mov rdx, gword ptr [rbp-0x68]
+ ;; size=33 bbWeight=0.12 PerfScore 0.97
+G_M26249_IG21:
mov esi, r15d
sub esi, r13d
- test rax, rax
- je SHORT G_M26249_IG21
+ test r12, r12
+ je SHORT G_M26249_IG22
mov edi, r13d
add rsi, rdi
- mov edi, dword ptr [rax+0x08]
+ mov edi, dword ptr [r12+0x08]
cmp rsi, rdi
- jbe SHORT G_M26249_IG24
- jmp G_M26249_IG37
- ;; size=30 bbWeight=0.50 PerfScore 3.75
-G_M26249_IG21:
- or esi, r13d
- je SHORT G_M26249_IG24
- jmp G_M26249_IG37
- ;; size=10 bbWeight=0.50 PerfScore 1.62
+ mov gword ptr [rbp-0x68], rdx
+ mov dword ptr [rbp-0x54], ecx
+ jbe SHORT G_M26249_IG25
+ jmp G_M26249_IG38
+ ;; size=39 bbWeight=0.50 PerfScore 4.75
G_M26249_IG22:
- mov rsi, rax
+ or esi, r13d
+ mov gword ptr [rbp-0x68], rdx
+ mov dword ptr [rbp-0x54], ecx
+ je SHORT G_M26249_IG25
+ jmp G_M26249_IG38
+ ;; size=17 bbWeight=0.50 PerfScore 2.62
+G_M26249_IG23:
+ mov gword ptr [rbp-0x68], rdx
+ mov dword ptr [rbp-0x54], ecx
+ mov rsi, r8
mov rdi, 0xD1FFAB1E ; System.Buffers.ReadOnlySequenceSegment`1[ubyte]
- mov rax, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
- call [rax]CORINFO_HELP_CHKCASTCLASS
+ mov r8, 0xD1FFAB1E ; code for CORINFO_HELP_CHKCASTCLASS
+ call [r8]CORINFO_HELP_CHKCASTCLASS
cmp rax, r14
- jne SHORT G_M26249_IG23
+ jne SHORT G_M26249_IG24
mov edi, dword ptr [r14+0x24]
mov eax, r15d
sub eax, r13d
mov ecx, r13d
add rax, rcx
cmp rax, rdi
- jbe SHORT G_M26249_IG24
- jmp G_M26249_IG35
- ;; size=56 bbWeight=0.50 PerfScore 5.62
-G_M26249_IG23:
+ jbe SHORT G_M26249_IG25
+ jmp G_M26249_IG36
+ ;; size=64 bbWeight=0.50 PerfScore 6.62
+G_M26249_IG24:
cmp gword ptr [rax+0x08], 0
- je G_M26249_IG36
+ je G_M26249_IG37
mov edi, dword ptr [rax+0x24]
cmp r13d, edi
- ja G_M26249_IG35
+ ja G_M26249_IG36
;; size=23 bbWeight=0.50 PerfScore 3.62
-G_M26249_IG24:
+G_M26249_IG25:
mov edi, 1
- jmp SHORT G_M26249_IG26
+ jmp SHORT G_M26249_IG27
;; size=7 bbWeight=0.50 PerfScore 1.12
-G_M26249_IG25:
- xor edi, edi
- ;; size=2 bbWeight=0.50 PerfScore 0.12
G_M26249_IG26:
+ xor edi, edi
+ mov gword ptr [rbp-0x68], rdx
+ mov dword ptr [rbp-0x54], ecx
+ ;; size=9 bbWeight=0.50 PerfScore 1.12
+G_M26249_IG27:
test edi, edi
sete dil
mov byte ptr [rbx+0x2A], dil
- ;; size=10 bbWeight=0.50 PerfScore 1.12
-G_M26249_IG27:
+ mov ecx, dword ptr [rbp-0x54]
+ mov rdx, gword ptr [rbp-0x68]
+ ;; size=17 bbWeight=0.50 PerfScore 2.12
+G_M26249_IG28:
xor r15, r15
xor r14d, r14d
- mov r13, gword ptr [rbp-0x70]
- test r13, r13
- je SHORT G_M26249_IG30
- mov rdi, qword ptr [r13]
+ test rdx, rdx
+ je SHORT G_M26249_IG31
+ mov rdi, qword ptr [rdx]
test dword ptr [rdi], 0xD1FFAB1E
- jne SHORT G_M26249_IG28
- mov rdi, r13
- mov rax, qword ptr [r13]
- mov rax, qword ptr [rax+0x40]
- call [rax+0x28]System.Buffers.MemoryManager`1[ubyte]:GetSpan():System.Span`1[ubyte]:this
+ jne SHORT G_M26249_IG29
+ mov dword ptr [rbp-0x54], ecx
+ mov rdi, rdx
+ mov rdx, qword ptr [rdx]
+ mov rdx, qword ptr [rdx+0x40]
+ call [rdx+0x28]System.Buffers.MemoryManager`1[ubyte]:GetSpan():System.Span`1[ubyte]:this
mov r15, rax
mov r14d, edx
- jmp SHORT G_M26249_IG29
- ;; size=49 bbWeight=0.50 PerfScore 9.25
-G_M26249_IG28:
- lea r15, bword ptr [r13+0x10]
- mov r14d, dword ptr [r13+0x08]
- ;; size=8 bbWeight=0.50 PerfScore 1.25
+ jmp SHORT G_M26249_IG30
+ ;; size=46 bbWeight=0.50 PerfScore 9.25
G_M26249_IG29:
- mov r13d, dword ptr [rbp-0x5C]
- and r13d, 0xD1FFAB1E
- mov eax, r13d
- mov edi, r12d
- add rdi, rax
- mov esi, r14d
- cmp rdi, rsi
- ja G_M26249_IG37
- add r15, rax
- mov r14d, r12d
- ;; size=38 bbWeight=0.50 PerfScore 2.00
+ lea r15, bword ptr [rdx+0x10]
+ mov r14d, dword ptr [rdx+0x08]
+ mov dword ptr [rbp-0x54], ecx
+ ;; size=11 bbWeight=0.50 PerfScore 1.75
G_M26249_IG30:
+ mov ecx, dword ptr [rbp-0x54]
+ and ecx, 0xD1FFAB1E
+ mov edi, ecx
+ mov eax, dword ptr [rbp-0x58]
+ mov ecx, eax
+ add rcx, rdi
+ mov edx, r14d
+ cmp rcx, rdx
+ ja SHORT G_M26249_IG38
+ add r15, rdi
+ mov r14d, eax
+ ;; size=33 bbWeight=0.50 PerfScore 2.50
+G_M26249_IG31:
mov rax, r15
mov bword ptr [rbx+0x30], rax
mov dword ptr [rbx+0x38], r14d
movsxd rax, dword ptr [rbx+0x20]
add qword ptr [rbx+0x10], rax
xor eax, eax
mov dword ptr [rbx+0x20], eax
mov eax, 1
;; size=29 bbWeight=0.50 PerfScore 5.38
-G_M26249_IG31:
- add rsp, 88
+G_M26249_IG32:
+ add rsp, 72
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M26249_IG32:
- lea rdi, bword ptr [rbx+0x70]
- mov rsi, r15
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+G_M26249_IG33:
+ mov gword ptr [rbx+0x70], r15
mov dword ptr [rbx+0x78], r14d
jmp G_M26249_IG02
- ;; size=21 bbWeight=4 PerfScore 19.00
-G_M26249_IG33:
- lea rdi, bword ptr [rbx+0x70]
- mov rsi, r15
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ ;; size=13 bbWeight=4 PerfScore 16.00
+G_M26249_IG34:
+ mov gword ptr [rbx+0x70], r15
mov dword ptr [rbx+0x78], r14d
mov byte ptr [rbx+0x2A], 1
xor eax, eax
- ;; size=22 bbWeight=0.50 PerfScore 2.00
-G_M26249_IG34:
- add rsp, 88
+ ;; size=14 bbWeight=0.50 PerfScore 1.62
+G_M26249_IG35:
+ add rsp, 72
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M26249_IG35:
+G_M26249_IG36:
mov edi, 33
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
-G_M26249_IG36:
+G_M26249_IG37:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowInvalidOperationException_EndPositionNotReached()
call [rax]System.ThrowHelper:ThrowInvalidOperationException_EndPositionNotReached()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-G_M26249_IG37:
+G_M26249_IG38:
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException()
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException()
int3
;; size=13 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1187, prolog size 45, PerfScore 552.54, instruction count 330, allocated bytes for code 1187 (MethodHash=b36f9976) for method System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts)
+; Total bytes of code 1204, prolog size 32, PerfScore 511.20, instruction count 339, allocated bytes for code 1204 (MethodHash=b36f9976) for method System.Text.Json.Utf8JsonReader:GetNextSpan():ubyte:this (FullOpts) Note: some changes were skipped as they were likely noise. Larger list of diffs: https://gist.github.com/MihuBot/411f56ad6b9aa6a159a3ae6e8cfabf21 |
Top method improvements-216 (-4.16 % of base) - System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this ; Assembly listing for method System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts)
; Emitting BLENDED_CODE for X86 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 47 single block inlinees; 9 inlinees without PGO data
; Final local variable assignments
;
; V00 this [V00,T00] (126,529 ) byref -> rbx this single-def
; V01 loc0 [V01,T01] ( 28,204 ) ushort -> [rbp-0x2C]
; V02 loc1 [V02,T42] ( 8, 19 ) ubyte -> registers
; V03 loc2 [V03,T77] ( 3, 6 ) ubyte -> r15
; V04 loc3 [V04,T27] ( 8, 38 ) int -> r13
; V05 loc4 [V05,T49] ( 5, 14 ) int -> r12
; V06 loc5 [V06,T78] ( 3, 6 ) int -> rdx
; V07 loc6 [V07,T75] ( 3, 6 ) ref -> r15 class-hnd exact <System.Text.RegularExpressions.RegexNode>
; V08 loc7 [V08,T83] ( 2, 4 ) ref -> r15 class-hnd exact <System.String>
; V09 loc8 [V09,T24] ( 8, 40 ) int -> registers
; V10 loc9 [V10,T07] ( 6, 72 ) int -> r15
; V11 loc10 [V11,T06] ( 7, 80 ) int -> registers
; V12 loc11 [V12,T26] ( 3, 40 ) ubyte -> rsi
;# V13 OutArgs [V13 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V14 tmp1 [V14,T61] ( 5, 10 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V15 tmp2 [V15,T65] ( 2, 8 ) int -> rsi "dup spill"
; V16 tmp3 [V16,T91] ( 3, 0 ) ref -> r15 class-hnd exact "Single-def Box Helper" <System.Char>
; V17 tmp4 [V17,T94] ( 2, 0 ) ref -> rdi class-hnd exact "impImportAndPushBox" <System.String>
; V18 tmp5 [V18,T92] ( 3, 0 ) ref -> rax
; V19 tmp6 [V19,T93] ( 3, 0 ) ref -> r15 class-hnd exact "Single-def Box Helper" <System.Char>
; V20 tmp7 [V20,T95] ( 2, 0 ) ref -> rdi class-hnd exact "impImportAndPushBox" <System.String>
;* V21 tmp8 [V21 ] ( 0, 0 ) byref -> zero-ref
;* V22 tmp9 [V22 ] ( 0, 0 ) byref -> zero-ref
; V23 tmp10 [V23,T79] ( 3, 6 ) int -> r12
; V24 tmp11 [V24,T43] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V25 tmp12 [V25,T66] ( 2, 8 ) int -> r14 "dup spill"
; V26 tmp13 [V26,T51] ( 3, 12 ) ref -> rdi class-hnd exact "impAppendStmt" <System.String>
;* V27 tmp14 [V27 ] ( 0, 0 ) ref -> zero-ref class-hnd exact "non-inline candidate call" <System.Text.RegularExpressions.RegexNode>
; V28 tmp15 [V28,T29] ( 2, 32 ) int -> r15 "dup spill"
; V29 tmp16 [V29,T13] ( 3, 48 ) ref -> rsi class-hnd exact "impAppendStmt" <System.String>
; V30 tmp17 [V30,T36] ( 3, 24 ) int -> rax
; V31 tmp18 [V31,T38] ( 5, 20 ) ref -> r13 class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
;* V32 tmp19 [V32 ] ( 0, 0 ) byref -> zero-ref
-; V33 tmp20 [V33,T39] ( 5, 20 ) ref -> rsi class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+; V33 tmp20 [V33,T39] ( 5, 20 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
;* V34 tmp21 [V34 ] ( 0, 0 ) byref -> zero-ref
-; V35 tmp22 [V35,T76] ( 3, 6 ) ref -> rsi
-; V36 tmp23 [V36,T40] ( 5, 20 ) ref -> rsi class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+; V35 tmp22 [V35,T76] ( 3, 6 ) ref -> rax
+; V36 tmp23 [V36,T40] ( 5, 20 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V37 tmp24 [V37,T52] ( 3, 12 ) byref -> rdi "dup spill"
;* V38 tmp25 [V38 ] ( 0, 0 ) byref -> zero-ref
;* V39 tmp26 [V39 ] ( 0, 0 ) byref -> zero-ref
; V40 tmp27 [V40,T80] ( 3, 6 ) int -> r15
; V41 tmp28 [V41,T44] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V42 tmp29 [V42,T10] ( 2, 64 ) int -> r12 "dup spill"
; V43 tmp30 [V43,T11] ( 2, 64 ) int -> r12 "dup spill"
; V44 tmp31 [V44,T85] ( 2, 4 ) int -> rdi "Inlining Arg"
; V45 tmp32 [V45,T62] ( 4, 8 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V46 tmp33 [V46,T63] ( 4, 8 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V47 tmp34 [V47,T86] ( 2, 4 ) int -> rdi "Inlining Arg"
; V48 tmp35 [V48,T87] ( 2, 4 ) int -> rdi "Inlining Arg"
;* V49 tmp36 [V49,T47] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V50 tmp37 [V50,T30] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
;* V51 tmp38 [V51 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
;* V52 tmp39 [V52 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V53 tmp40 [V53,T48] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V54 tmp41 [V54,T31] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
;* V55 tmp42 [V55 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
;* V56 tmp43 [V56 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V57 tmp44 [V57,T90] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V58 tmp45 [V58,T89] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
;* V59 tmp46 [V59 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
;* V60 tmp47 [V60 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
; V61 tmp48 [V61,T81] ( 3, 6 ) ubyte -> r14 "Inline return value spill temp"
;* V62 tmp49 [V62 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.ReadOnlySpan`1[ubyte]>
;* V63 tmp50 [V63 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
; V64 tmp51 [V64,T67] ( 2, 8 ) int -> rdi "Inlining Arg"
; V65 tmp52 [V65,T32] ( 6, 24 ) byref -> rdi "Inlining Arg"
; V66 tmp53 [V66,T64] ( 4, 8 ) int -> r15 "Inline stloc first use temp"
;* V67 tmp54 [V67 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" <System.Span`1[int]>
; V68 tmp55 [V68,T56] ( 3, 12 ) int -> rsi "Inlining Arg"
; V69 tmp56 [V69,T45] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V70 tmp57 [V70,T46] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V71 tmp58 [V71,T68] ( 2, 8 ) int -> rdi "Inlining Arg"
; V72 tmp59 [V72,T69] ( 2, 8 ) int -> rdi "Inlining Arg"
;* V73 tmp60 [V73 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V74 tmp61 [V74,T41] ( 5, 20 ) byref -> rdi "Inlining Arg"
; V75 tmp62 [V75,T57] ( 3, 12 ) int -> rsi "Span.get_Item index"
; V76 tmp63 [V76,T53] ( 3, 12 ) byref -> rdi "Span.get_Item ptrToSpan"
;* V77 tmp64 [V77 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V78 tmp65 [V78,T70] ( 2, 8 ) int -> rdi "Inlining Arg"
;* V79 tmp66 [V79 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
;* V80 tmp67 [V80 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
-; V81 tmp68 [V81,T71] ( 2, 8 ) int -> rdi "Inlining Arg"
+; V81 tmp68 [V81,T71] ( 2, 8 ) int -> rcx "Inlining Arg"
;* V82 tmp69 [V82 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V83 tmp70 [V83,T72] ( 2, 8 ) int -> rdi "Inlining Arg"
; V84 tmp71 [V84,T73] ( 2, 8 ) int -> rdi "Inlining Arg"
;* V85 tmp72 [V85 ] ( 0, 0 ) byref -> zero-ref "field V51._reference (fldOffset=0x0)" P-INDEP
;* V86 tmp73 [V86 ] ( 0, 0 ) int -> zero-ref "field V51._length (fldOffset=0x8)" P-INDEP
;* V87 tmp74 [V87 ] ( 0, 0 ) byref -> zero-ref "field V52._reference (fldOffset=0x0)" P-INDEP
;* V88 tmp75 [V88 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x8)" P-INDEP
;* V89 tmp76 [V89 ] ( 0, 0 ) byref -> zero-ref "field V55._reference (fldOffset=0x0)" P-INDEP
;* V90 tmp77 [V90 ] ( 0, 0 ) int -> zero-ref "field V55._length (fldOffset=0x8)" P-INDEP
;* V91 tmp78 [V91 ] ( 0, 0 ) byref -> zero-ref "field V56._reference (fldOffset=0x0)" P-INDEP
;* V92 tmp79 [V92 ] ( 0, 0 ) int -> zero-ref "field V56._length (fldOffset=0x8)" P-INDEP
;* V93 tmp80 [V93 ] ( 0, 0 ) byref -> zero-ref "field V59._reference (fldOffset=0x0)" P-INDEP
;* V94 tmp81 [V94 ] ( 0, 0 ) int -> zero-ref "field V59._length (fldOffset=0x8)" P-INDEP
;* V95 tmp82 [V95 ] ( 0, 0 ) byref -> zero-ref "field V60._reference (fldOffset=0x0)" P-INDEP
;* V96 tmp83 [V96 ] ( 0, 0 ) int -> zero-ref "field V60._length (fldOffset=0x8)" P-INDEP
;* V97 tmp84 [V97 ] ( 0, 0 ) byref -> zero-ref "field V62._reference (fldOffset=0x0)" P-INDEP
;* V98 tmp85 [V98 ] ( 0, 0 ) int -> zero-ref "field V62._length (fldOffset=0x8)" P-INDEP
;* V99 tmp86 [V99 ] ( 0, 0 ) byref -> zero-ref "field V63._reference (fldOffset=0x0)" P-INDEP
;* V100 tmp87 [V100 ] ( 0, 0 ) int -> zero-ref "field V63._length (fldOffset=0x8)" P-INDEP
; V101 tmp88 [V101,T84] ( 2, 4 ) byref -> r13 "field V67._reference (fldOffset=0x0)" P-INDEP
; V102 tmp89 [V102,T88] ( 2, 4 ) int -> rax "field V67._length (fldOffset=0x8)" P-INDEP
; V103 tmp90 [V103,T02] ( 3, 96 ) ref -> rax "arr expr"
; V104 tmp91 [V104,T04] ( 3, 96 ) int -> rdi "index expr"
; V105 tmp92 [V105,T03] ( 3, 96 ) ref -> rax "arr expr"
; V106 tmp93 [V106,T05] ( 3, 96 ) int -> rdi "index expr"
; V107 tmp94 [V107,T54] ( 3, 12 ) ref -> rsi "arr expr"
; V108 tmp95 [V108,T58] ( 3, 12 ) int -> rdx "index expr"
; V109 tmp96 [V109,T55] ( 3, 12 ) ref -> rdi "arr expr"
; V110 tmp97 [V110,T74] ( 2, 8 ) int -> rdi "argument with side effect"
; V111 tmp98 [V111,T96] ( 2, 0 ) ref -> rdx "argument with side effect"
; V112 tmp99 [V112,T97] ( 2, 0 ) ref -> rdx "argument with side effect"
; V113 tmp100 [V113,T98] ( 2, 0 ) ref -> rdx "argument with side effect"
; V114 tmp101 [V114,T99] ( 2, 0 ) ref -> rdx "argument with side effect"
; V115 tmp102 [V115,T14] ( 3, 48 ) ref -> rcx "arr expr"
; V116 tmp103 [V116,T19] ( 3, 48 ) int -> rdx "index expr"
; V117 tmp104 [V117,T15] ( 3, 48 ) ref -> rax "arr expr"
; V118 tmp105 [V118,T20] ( 3, 48 ) int -> rdi "index expr"
; V119 tmp106 [V119,T16] ( 3, 48 ) ref -> rdx "arr expr"
; V120 tmp107 [V120,T21] ( 3, 48 ) int -> rcx "index expr"
; V121 tmp108 [V121,T08] ( 2, 64 ) ref -> rsi "argument with side effect"
; V122 tmp109 [V122,T09] ( 2, 64 ) ref -> [rbp-0x38] spill-single-def "argument with side effect"
; V123 tmp110 [V123,T100] ( 2, 0 ) ref -> rdx "argument with side effect"
; V124 tmp111 [V124,T101] ( 2, 0 ) ref -> rdx single-def "argument with side effect"
; V125 cse0 [V125,T82] ( 3, 6 ) int -> rsi "CSE #11: conservative"
; V126 cse1 [V126,T25] ( 5, 40 ) int -> rdi "CSE #18: moderate"
; V127 cse2 [V127,T28] ( 4, 32 ) int -> rdi "CSE #22: moderate"
; V128 cse3 [V128,T17] ( 3, 48 ) ref -> rax "CSE #02: moderate"
; V129 cse4 [V129,T22] ( 3, 48 ) int -> rdi "CSE #03: moderate"
; V130 cse5 [V130,T18] ( 3, 48 ) ref -> rax "CSE #04: moderate"
; V131 cse6 [V131,T23] ( 3, 48 ) int -> rdi "CSE #05: moderate"
; V132 cse7 [V132,T12] ( 4, 48 ) int -> rdi "CSE #25: moderate"
; V133 cse8 [V133,T33] ( 3, 24 ) ref -> rcx "CSE #19: moderate"
; V134 cse9 [V134,T34] ( 3, 24 ) ref -> rax "CSE #20: moderate"
; V135 cse10 [V135,T37] ( 3, 24 ) int -> rdi "CSE #21: moderate"
; V136 cse11 [V136,T35] ( 3, 24 ) ref -> rsi "CSE #23: moderate"
; V137 cse12 [V137,T50] ( 4, 12 ) int -> rdi "CSE #08: conservative"
; V138 rat0 [V138,T60] ( 3, 11.20) int -> r13 "ReplaceWithLclVar is creating a new local variable"
; V139 rat1 [V139,T59] ( 3, 11.75) int -> r12 "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 24
G_M39122_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 24
lea rbp, [rsp+0x40]
mov rbx, rdi
;; size=22 bbWeight=1 PerfScore 7.00
G_M39122_IG02:
xor r15d, r15d
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, dword ptr [rbx+0x70]
and edi, -2
mov byte ptr [rax+0x2E], 28
mov dword ptr [rax+0x28], edi
mov rdi, 0xD1FFAB1E
mov qword ptr [rax+0x20], rdi
- lea rdi, bword ptr [rbx+0x08]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x08], rax
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, dword ptr [rbx+0x70]
mov byte ptr [rax+0x2E], 24
mov dword ptr [rax+0x28], edi
- lea rdi, bword ptr [rbx+0x10]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x10], rax
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, dword ptr [rbx+0x70]
mov byte ptr [rax+0x2E], 25
mov dword ptr [rax+0x28], edi
- lea rdi, bword ptr [rbx+0x18]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x18], rax
mov edi, dword ptr [rbx+0x58]
mov rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
jge G_M39122_IG58
- ;; size=147 bbWeight=1 PerfScore 30.75
+ ;; size=123 bbWeight=1 PerfScore 28.50
G_M39122_IG03:
xor edi, edi
xor r14d, r14d
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
call [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
mov r13d, dword ptr [rbx+0x58]
test byte ptr [rbx+0x70], 32
je SHORT G_M39122_IG05
jmp SHORT G_M39122_IG07
;; size=32 bbWeight=4 PerfScore 48.00
G_M39122_IG04:
inc dword ptr [rbx+0x58]
;; size=3 bbWeight=8 PerfScore 24.00
G_M39122_IG05:
mov edi, dword ptr [rbx+0x58]
mov rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
jge G_M39122_IG08
cmp edi, dword ptr [rax+0x08]
jae G_M39122_IG67
movzx r12, word ptr [rax+2*rdi+0x0C]
cmp r12d, 124
jg SHORT G_M39122_IG04
mov edi, r12d
mov rax, 0xD1FFAB1E ; static handle
cmp byte ptr [rdi+rax], 3
jb SHORT G_M39122_IG04
cmp r12d, 123
jne SHORT G_M39122_IG08
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
call [rax]System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
test eax, eax
je SHORT G_M39122_IG04
jmp SHORT G_M39122_IG08
;; size=83 bbWeight=16 PerfScore 444.00
G_M39122_IG06:
inc dword ptr [rbx+0x58]
;; size=3 bbWeight=8 PerfScore 24.00
G_M39122_IG07:
mov edi, dword ptr [rbx+0x58]
mov rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
jge SHORT G_M39122_IG08
cmp edi, dword ptr [rax+0x08]
jae G_M39122_IG67
movzx r12, word ptr [rax+2*rdi+0x0C]
cmp r12d, 124
jg SHORT G_M39122_IG06
mov edi, r12d
mov rax, 0xD1FFAB1E ; static handle
cmp byte ptr [rdi+rax], 0
jbe SHORT G_M39122_IG06
cmp r12d, 123
jne SHORT G_M39122_IG08
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
call [rax]System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
test eax, eax
je SHORT G_M39122_IG06
;; size=77 bbWeight=16 PerfScore 412.00
G_M39122_IG08:
mov r12d, dword ptr [rbx+0x58]
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
call [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
mov edi, dword ptr [rbx+0x58]
mov rsi, gword ptr [rbx+0x28]
cmp edi, dword ptr [rsi+0x08]
je SHORT G_M39122_IG14
;; size=31 bbWeight=4 PerfScore 54.00
G_M39122_IG09:
mov rsi, gword ptr [rbx+0x28]
mov edx, edi
cmp edx, dword ptr [rsi+0x08]
jae G_M39122_IG67
movzx rsi, word ptr [rsi+2*rdx+0x0C]
mov eax, esi
cmp eax, 124
jg SHORT G_M39122_IG10
mov esi, eax
mov rdx, 0xD1FFAB1E ; static handle
movzx rsi, byte ptr [rsi+rdx]
cmp esi, 3
jge SHORT G_M39122_IG11
;; size=49 bbWeight=2 PerfScore 27.00
G_M39122_IG10:
mov eax, 32
jmp SHORT G_M39122_IG15
;; size=7 bbWeight=2 PerfScore 4.50
G_M39122_IG11:
cmp eax, 123
jle SHORT G_M39122_IG12
xor r14d, r14d
jmp SHORT G_M39122_IG13
;; size=10 bbWeight=2 PerfScore 7.00
G_M39122_IG12:
cmp esi, 4
sete r14b
movzx r14, r14b
;; size=11 bbWeight=2 PerfScore 3.00
G_M39122_IG13:
inc edi
mov dword ptr [rbx+0x58], edi
jmp SHORT G_M39122_IG15
;; size=7 bbWeight=2 PerfScore 6.50
G_M39122_IG14:
mov dword ptr [rbp-0x2C], 33
mov eax, dword ptr [rbp-0x2C]
;; size=10 bbWeight=2 PerfScore 4.00
G_M39122_IG15:
cmp r13d, r12d
- jge G_M39122_IG18
- ;; size=9 bbWeight=4 PerfScore 5.00
+ jge SHORT G_M39122_IG18
+ ;; size=5 bbWeight=4 PerfScore 5.00
G_M39122_IG16:
mov edx, r12d
sub edx, r13d
test r14d, r14d
setne dil
movzx rdi, dil
sub edx, edi
xor r15d, r15d
test edx, edx
jle SHORT G_M39122_IG17
mov dword ptr [rbp-0x2C], eax
mov rdi, rbx
mov esi, r13d
xor ecx, ecx
mov r8, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:AddToConcatenate(int,int,ubyte):this
call [r8]System.Text.RegularExpressions.RegexParser:AddToConcatenate(int,int,ubyte):this
mov eax, dword ptr [rbp-0x2C]
;; size=53 bbWeight=2 PerfScore 19.50
G_M39122_IG17:
test r14d, r14d
je SHORT G_M39122_IG18
mov dword ptr [rbp-0x2C], eax
mov rdi, gword ptr [rbx+0x28]
lea esi, [r12-0x01]
cmp esi, dword ptr [rdi+0x08]
jae G_M39122_IG67
dec r12d
mov esi, r12d
movzx rdi, word ptr [rdi+2*rsi+0x0C]
mov esi, dword ptr [rbx+0x70]
mov rdx, gword ptr [rbx+0x30]
lea rcx, bword ptr [rbx+0x5C]
mov r8, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexNode:CreateOneWithCaseConversion(ushort,int,System.Globalization.CultureInfo,byref):System.Text.RegularExpressions.RegexNode
call [r8]System.Text.RegularExpressions.RegexNode:CreateOneWithCaseConversion(ushort,int,System.Globalization.CultureInfo,byref):System.Text.RegularExpressions.RegexNode
- lea rdi, bword ptr [rbx+0x20]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x20], rax
mov eax, dword ptr [rbp-0x2C]
- ;; size=76 bbWeight=2 PerfScore 43.50
+ ;; size=68 bbWeight=2 PerfScore 42.00
G_M39122_IG18:
cmp eax, 63
jbe G_M39122_IG27
;; size=9 bbWeight=4 PerfScore 5.00
G_M39122_IG19:
lea r13d, [rax-0x5B]
cmp r13d, 3
ja SHORT G_M39122_IG21
;; size=10 bbWeight=2 PerfScore 3.50
G_M39122_IG20:
mov edi, r13d
lea rax, [reloc @RWD00]
mov eax, dword ptr [rax+4*rdi]
lea rcx, G_M39122_IG02
add rax, rcx
jmp rax
;; size=25 bbWeight=1.60 PerfScore 9.60
G_M39122_IG21:
cmp eax, 123
je G_M39122_IG33
cmp eax, 124
jne G_M39122_IG42
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:AddAlternate():this
call [rax]System.Text.RegularExpressions.RegexParser:AddAlternate():this
jmp G_M39122_IG57
;; size=38 bbWeight=2 PerfScore 16.00
G_M39122_IG22:
test byte ptr [rbx+0x70], 2
je SHORT G_M39122_IG23
mov r12d, 14
jmp SHORT G_M39122_IG24
;; size=14 bbWeight=2 PerfScore 12.50
G_M39122_IG23:
mov r12d, 18
;; size=6 bbWeight=2 PerfScore 0.50
G_M39122_IG24:
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, dword ptr [rbx+0x70]
mov byte ptr [rax+0x2E], r12b
mov dword ptr [rax+0x28], edi
- lea rdi, bword ptr [rbx+0x20]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x20], rax
jmp G_M39122_IG42
- ;; size=42 bbWeight=2 PerfScore 18.00
+ ;; size=34 bbWeight=2 PerfScore 16.50
G_M39122_IG25:
mov edi, dword ptr [rbx+0x58]
mov rsi, gword ptr [rbx+0x28]
cmp edi, dword ptr [rsi+0x08]
je G_M39122_IG60
mov rdi, rbx
xor esi, esi
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanBackslash(ubyte):System.Text.RegularExpressions.RegexNode:this
call [rax]System.Text.RegularExpressions.RegexParser:ScanBackslash(ubyte):System.Text.RegularExpressions.RegexNode:this
- lea rdi, bword ptr [rbx+0x20]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x20], rax
jmp G_M39122_IG42
- ;; size=50 bbWeight=2 PerfScore 31.00
+ ;; size=42 bbWeight=2 PerfScore 29.50
G_M39122_IG26:
mov esi, dword ptr [rbx+0x70]
and esi, 1
mov rdi, rbx
xor edx, edx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanCharClass(ubyte,ubyte):System.Text.RegularExpressions.RegexCharClass:this
call [rax]System.Text.RegularExpressions.RegexParser:ScanCharClass(ubyte,ubyte):System.Text.RegularExpressions.RegexCharClass:this
mov rdi, rax
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexCharClass:ToStringClass():System.String:this
cmp dword ptr [rdi], edi
call [rax]System.Text.RegularExpressions.RegexCharClass:ToStringClass():System.String:this
mov r15, rax
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov r13, rax
mov edi, dword ptr [rbx+0x70]
and edi, -2
mov byte ptr [r13+0x2E], 11
mov dword ptr [r13+0x28], edi
lea rdi, bword ptr [r13+0x10]
mov rsi, r15
call CORINFO_HELP_ASSIGN_REF
- lea rdi, bword ptr [rbx+0x20]
- mov rsi, r13
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x20], r13
jmp G_M39122_IG42
- ;; size=105 bbWeight=2 PerfScore 48.00
+ ;; size=97 bbWeight=2 PerfScore 46.50
G_M39122_IG27:
lea r12d, [rax-0x20]
cmp r12d, 14
ja SHORT G_M39122_IG29
;; size=10 bbWeight=2 PerfScore 3.50
G_M39122_IG28:
mov edi, r12d
lea rcx, [reloc @RWD16]
mov ecx, dword ptr [rcx+4*rdi]
lea rdx, G_M39122_IG02
add rcx, rdx
jmp rcx
;; size=25 bbWeight=1.88 PerfScore 11.25
G_M39122_IG29:
cmp eax, 63
je SHORT G_M39122_IG33
jmp G_M39122_IG42
;; size=10 bbWeight=2 PerfScore 6.50
G_M39122_IG30:
test byte ptr [rbx+0x70], 16
je SHORT G_M39122_IG31
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
- mov rsi, rax
mov edi, dword ptr [rbx+0x70]
and edi, -2
- mov byte ptr [rsi+0x2E], 11
- mov dword ptr [rsi+0x28], edi
+ mov byte ptr [rax+0x2E], 11
+ mov dword ptr [rax+0x28], edi
mov rdi, 0xD1FFAB1E ; ''
- mov gword ptr [rsi+0x10], rdi
+ mov gword ptr [rax+0x10], rdi
jmp SHORT G_M39122_IG32
- ;; size=53 bbWeight=2 PerfScore 26.00
+ ;; size=50 bbWeight=2 PerfScore 25.50
G_M39122_IG31:
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
- mov rsi, rax
mov edi, dword ptr [rbx+0x70]
and edi, -2
- mov byte ptr [rsi+0x2E], 10
- mov dword ptr [rsi+0x28], edi
- mov word ptr [rsi+0x2C], 10
- ;; size=37 bbWeight=2 PerfScore 13.50
+ mov byte ptr [rax+0x2E], 10
+ mov dword ptr [rax+0x28], edi
+ mov word ptr [rax+0x2C], 10
+ ;; size=34 bbWeight=2 PerfScore 13.00
G_M39122_IG32:
- lea rdi, bword ptr [rbx+0x20]
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x20], rax
jmp G_M39122_IG42
- ;; size=14 bbWeight=2 PerfScore 7.00
+ ;; size=9 bbWeight=2 PerfScore 6.00
G_M39122_IG33:
cmp gword ptr [rbx+0x20], 0
je G_M39122_IG61
dec dword ptr [rbx+0x58]
jmp G_M39122_IG42
;; size=19 bbWeight=2 PerfScore 18.00
G_M39122_IG34:
cmp gword ptr [rbx], 0
je G_M39122_IG64
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:AddGroup():this
call [rax]System.Text.RegularExpressions.RegexParser:AddGroup():this
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:PopGroup():this
call [rax]System.Text.RegularExpressions.RegexParser:PopGroup():this
lea rdi, bword ptr [rbx+0x78]
dec dword ptr [rdi+0x08]
mov esi, dword ptr [rdi+0x08]
add rdi, 16
cmp esi, dword ptr [rdi+0x08]
jae G_M39122_IG67
mov rdi, bword ptr [rdi]
mov edi, dword ptr [rdi+4*rsi]
mov dword ptr [rbx+0x70], edi
cmp gword ptr [rbx+0x20], 0
jne G_M39122_IG42
jmp G_M39122_IG57
;; size=88 bbWeight=2 PerfScore 63.50
G_M39122_IG35:
lea rdi, bword ptr [rbx+0x78]
mov esi, dword ptr [rbx+0x70]
mov r15d, dword ptr [rdi+0x08]
mov r13, bword ptr [rdi+0x10]
mov eax, dword ptr [rdi+0x18]
cmp r15d, eax
jb SHORT G_M39122_IG36
mov rax, 0xD1FFAB1E ; code for System.Collections.Generic.ValueListBuilder`1[int]:AddWithResize(int):this
call [rax]System.Collections.Generic.ValueListBuilder`1[int]:AddWithResize(int):this
jmp SHORT G_M39122_IG37
;; size=37 bbWeight=2 PerfScore 30.00
G_M39122_IG36:
mov eax, r15d
mov dword ptr [r13+4*rax], esi
inc r15d
mov dword ptr [rdi+0x08], r15d
;; size=15 bbWeight=2 PerfScore 5.00
G_M39122_IG37:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanGroupOpen():System.Text.RegularExpressions.RegexNode:this
call [rax]System.Text.RegularExpressions.RegexParser:ScanGroupOpen():System.Text.RegularExpressions.RegexNode:this
mov r15, rax
test r15, r15
jne SHORT G_M39122_IG38
lea rdi, bword ptr [rbx+0x78]
dec dword ptr [rdi+0x08]
jmp G_M39122_IG57
;; size=35 bbWeight=2 PerfScore 21.00
G_M39122_IG38:
mov rdi, gword ptr [rbx+0x08]
lea rdi, bword ptr [rdi+0x18]
mov rsi, gword ptr [rbx]
call CORINFO_HELP_ASSIGN_REF
mov rdi, gword ptr [rbx+0x10]
lea rdi, bword ptr [rdi+0x18]
mov rsi, gword ptr [rbx+0x08]
call CORINFO_HELP_ASSIGN_REF
mov rdi, gword ptr [rbx+0x18]
lea rdi, bword ptr [rdi+0x18]
mov rsi, gword ptr [rbx+0x10]
call CORINFO_HELP_ASSIGN_REF
- mov rsi, gword ptr [rbx+0x18]
- mov rdi, rbx
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- lea rdi, bword ptr [rbx+0x08]
- mov rsi, r15
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov rdi, gword ptr [rbx+0x18]
+ mov gword ptr [rbx], rdi
+ mov gword ptr [rbx+0x08], r15
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, dword ptr [rbx+0x70]
mov byte ptr [rax+0x2E], 24
mov dword ptr [rax+0x28], edi
- lea rdi, bword ptr [rbx+0x10]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x10], rax
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, dword ptr [rbx+0x70]
mov byte ptr [rax+0x2E], 25
mov dword ptr [rax+0x28], edi
- lea rdi, bword ptr [rbx+0x18]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x18], rax
jmp G_M39122_IG57
- ;; size=153 bbWeight=2 PerfScore 75.00
+ ;; size=124 bbWeight=2 PerfScore 70.00
G_M39122_IG39:
test byte ptr [rbx+0x70], 2
je SHORT G_M39122_IG40
mov r15d, 15
jmp SHORT G_M39122_IG41
;; size=14 bbWeight=2 PerfScore 12.50
G_M39122_IG40:
mov r15d, 20
;; size=6 bbWeight=2 PerfScore 0.50
G_M39122_IG41:
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
- mov edi, dword ptr [rbx+0x70]
+ mov ecx, dword ptr [rbx+0x70]
mov byte ptr [rax+0x2E], r15b
- mov dword ptr [rax+0x28], edi
- lea rdi, bword ptr [rbx+0x20]
- mov rsi, rax
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- ;; size=37 bbWeight=2 PerfScore 14.00
+ mov dword ptr [rax+0x28], ecx
+ mov gword ptr [rbx+0x20], rax
+ ;; size=29 bbWeight=2 PerfScore 12.50
G_M39122_IG42:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
call [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
mov edi, dword ptr [rbx+0x58]
mov rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
je G_M39122_IG56
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
call [rax]System.Text.RegularExpressions.RegexParser:IsTrueQuantifier():ubyte:this
mov r14d, eax
test r14d, r14d
je G_M39122_IG56
mov rdi, gword ptr [rbx+0x28]
mov r13d, dword ptr [rbx+0x58]
lea eax, [r13+0x01]
mov dword ptr [rbx+0x58], eax
cmp r13d, dword ptr [rdi+0x08]
jae G_M39122_IG67
mov eax, r13d
movzx rax, word ptr [rdi+2*rax+0x0C]
mov r12d, eax
cmp gword ptr [rbx+0x20], 0
je G_M39122_IG57
;; size=105 bbWeight=2 PerfScore 65.00
G_M39122_IG43:
xor r15d, r15d
xor r13d, r13d
cmp r12d, 43
jbe G_M39122_IG51
;; size=16 bbWeight=16 PerfScore 28.00
G_M39122_IG44:
cmp r12d, 63
jne SHORT G_M39122_IG45
mov r13d, 1
jmp G_M39122_IG53
;; size=17 bbWeight=8 PerfScore 28.00
G_M39122_IG45:
cmp r12d, 123
jne G_M39122_IG53
mov r13d, dword ptr [rbx+0x58]
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
call [rax]System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
mov r15d, eax
mov eax, r15d
mov edi, dword ptr [rbx+0x58]
cmp r13d, edi
jge SHORT G_M39122_IG48
mov rcx, gword ptr [rbx+0x28]
cmp dword ptr [rcx+0x08], edi
jle SHORT G_M39122_IG48
mov edx, edi
cmp edx, dword ptr [rcx+0x08]
jae G_M39122_IG67
cmp word ptr [rcx+2*rdx+0x0C], 44
jne SHORT G_M39122_IG48
inc edi
mov dword ptr [rbx+0x58], edi
mov edi, dword ptr [rbx+0x58]
mov rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
je SHORT G_M39122_IG46
cmp edi, dword ptr [rax+0x08]
jae G_M39122_IG67
cmp word ptr [rax+2*rdi+0x0C], 125
jne SHORT G_M39122_IG47
;; size=105 bbWeight=8 PerfScore 336.00
G_M39122_IG46:
mov eax, 0xD1FFAB1E
jmp SHORT G_M39122_IG48
;; size=7 bbWeight=8 PerfScore 18.00
G_M39122_IG47:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
call [rax]System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
;; size=15 bbWeight=8 PerfScore 28.00
G_M39122_IG48:
mov edi, dword ptr [rbx+0x58]
cmp r13d, edi
je SHORT G_M39122_IG49
mov rsi, gword ptr [rbx+0x28]
cmp dword ptr [rsi+0x08], edi
je SHORT G_M39122_IG49
lea ecx, [rdi+0x01]
mov dword ptr [rbx+0x58], ecx
cmp edi, dword ptr [rsi+0x08]
jae G_M39122_IG67
cmp word ptr [rsi+2*rdi+0x0C], 125
je SHORT G_M39122_IG50
;; size=40 bbWeight=8 PerfScore 150.00
G_M39122_IG49:
mov rdi, gword ptr [rbx+0x18]
mov rsi, gword ptr [rbx+0x20]
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
cmp dword ptr [rdi], edi
call [rax]System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
xor rdi, rdi
mov gword ptr [rbx+0x20], rdi
dec r13d
mov dword ptr [rbx+0x58], r13d
jmp G_M39122_IG57
;; size=40 bbWeight=2 PerfScore 29.50
G_M39122_IG50:
mov r13d, eax
jmp SHORT G_M39122_IG53
;; size=5 bbWeight=4 PerfScore 9.00
G_M39122_IG51:
cmp r12d, 42
je SHORT G_M39122_IG52
cmp r12d, 43
jne SHORT G_M39122_IG53
mov r15d, 1
;; size=18 bbWeight=8 PerfScore 22.00
G_M39122_IG52:
mov r13d, 0xD1FFAB1E
;; size=6 bbWeight=8 PerfScore 2.00
G_M39122_IG53:
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanBlank():this
call [rax]System.Text.RegularExpressions.RegexParser:ScanBlank():this
xor esi, esi
mov edi, dword ptr [rbx+0x58]
mov rdx, gword ptr [rbx+0x28]
cmp edi, dword ptr [rdx+0x08]
jge SHORT G_M39122_IG55
;; size=29 bbWeight=16 PerfScore 188.00
G_M39122_IG54:
mov rdx, gword ptr [rbx+0x28]
mov ecx, edi
cmp ecx, dword ptr [rdx+0x08]
jae G_M39122_IG67
cmp word ptr [rdx+2*rcx+0x0C], 63
jne SHORT G_M39122_IG55
inc edi
mov dword ptr [rbx+0x58], edi
mov esi, 1
;; size=33 bbWeight=8 PerfScore 94.00
G_M39122_IG55:
cmp r15d, r13d
jg G_M39122_IG65
mov rax, gword ptr [rbx+0x18]
mov gword ptr [rbp-0x38], rax
mov rdi, gword ptr [rbx+0x20]
mov edx, r15d
mov ecx, r13d
mov r8, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexNode:MakeQuantifier(ubyte,int,int):System.Text.RegularExpressions.RegexNode:this
cmp dword ptr [rdi], edi
call [r8]System.Text.RegularExpressions.RegexNode:MakeQuantifier(ubyte,int,int):System.Text.RegularExpressions.RegexNode:this
mov rsi, rax
mov rdi, gword ptr [rbp-0x38]
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
cmp dword ptr [rdi], edi
call [rax]System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
xor rdi, rdi
mov gword ptr [rbx+0x20], rdi
cmp gword ptr [rbx+0x20], 0
jne G_M39122_IG43
jmp SHORT G_M39122_IG57
;; size=82 bbWeight=16 PerfScore 444.00
G_M39122_IG56:
mov rdi, gword ptr [rbx+0x18]
mov rsi, gword ptr [rbx+0x20]
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
cmp dword ptr [rdi], edi
call [rax]System.Text.RegularExpressions.RegexNode:AddChild(System.Text.RegularExpressions.RegexNode):this
xor rdi, rdi
mov gword ptr [rbx+0x20], rdi
;; size=28 bbWeight=2 PerfScore 23.00
G_M39122_IG57:
mov edi, dword ptr [rbx+0x58]
mov rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
mov r15d, r14d
jl G_M39122_IG03
;; size=19 bbWeight=4 PerfScore 33.00
G_M39122_IG58:
cmp gword ptr [rbx], 0
jne G_M39122_IG66
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:AddGroup():this
call [rax]System.Text.RegularExpressions.RegexParser:AddGroup():this
mov rdi, gword ptr [rbx+0x20]
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexNode:FinalOptimize():System.Text.RegularExpressions.RegexNode:this
cmp dword ptr [rdi], edi
call [rax]System.Text.RegularExpressions.RegexNode:FinalOptimize():System.Text.RegularExpressions.RegexNode:this
nop
;; size=44 bbWeight=1 PerfScore 16.00
G_M39122_IG59:
add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=1 PerfScore 4.25
G_M39122_IG60:
mov rax, 0xD1FFAB1E ; code for System.SR:get_UnescapedEndingBackslash():System.String
call [rax]System.SR:get_UnescapedEndingBackslash():System.String
mov rdx, rax
mov rdi, rbx
mov esi, 13
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
call [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
mov rdi, rax
call CORINFO_HELP_THROW
int3
;; size=44 bbWeight=0 PerfScore 0.00
G_M39122_IG61:
test r15d, r15d
je SHORT G_M39122_IG62
mov dword ptr [rbp-0x2C], eax
mov rdi, 0xD1FFAB1E ; System.Char
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov rdi, 0xD1FFAB1E ; 'NestedQuantifiersNotParenthesized'
mov rax, 0xD1FFAB1E ; code for System.SR:GetResourceString(System.String):System.String
call [rax]System.SR:GetResourceString(System.String):System.String
mov rdi, rax
mov r12d, dword ptr [rbp-0x2C]
mov word ptr [r15+0x08], r12w
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String
call [rax]System.SR:Format(System.String,System.Object):System.String
mov rdx, rax
mov rdi, rbx
mov esi, 28
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
call [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
jmp SHORT G_M39122_IG63
;; size=100 bbWeight=0 PerfScore 0.00
G_M39122_IG62:
mov dword ptr [rbp-0x2C], eax
mov rdi, 0xD1FFAB1E ; System.Char
call CORINFO_HELP_NEWSFAST
mov r15, rax
mov rdi, 0xD1FFAB1E ; 'QuantifierAfterNothing'
mov rax, 0xD1FFAB1E ; code for System.SR:GetResourceString(System.String):System.String
call [rax]System.SR:GetResourceString(System.String):System.String
mov rdi, rax
mov r12d, dword ptr [rbp-0x2C]
mov word ptr [r15+0x08], r12w
mov rsi, r15
mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String
call [rax]System.SR:Format(System.String,System.Object):System.String
mov rdx, rax
mov rdi, rbx
mov esi, 29
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
call [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
;; size=93 bbWeight=0 PerfScore 0.00
G_M39122_IG63:
mov rdi, rax
call CORINFO_HELP_THROW
int3
;; size=9 bbWeight=0 PerfScore 0.00
G_M39122_IG64:
mov rax, 0xD1FFAB1E ; code for System.SR:get_InsufficientOpeningParentheses():System.String
call [rax]System.SR:get_InsufficientOpeningParentheses():System.String
mov rdx, rax
mov rdi, rbx
mov esi, 30
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
call [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
mov rdi, rax
call CORINFO_HELP_THROW
int3
;; size=44 bbWeight=0 PerfScore 0.00
G_M39122_IG65:
mov rax, 0xD1FFAB1E ; code for System.SR:get_ReversedQuantifierRange():System.String
call [rax]System.SR:get_ReversedQuantifierRange():System.String
mov rdx, rax
mov rdi, rbx
mov esi, 27
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
call [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
mov rdi, rax
call CORINFO_HELP_THROW
int3
;; size=44 bbWeight=0 PerfScore 0.00
G_M39122_IG66:
mov rax, 0xD1FFAB1E ; code for System.SR:get_InsufficientClosingParentheses():System.String
call [rax]System.SR:get_InsufficientClosingParentheses():System.String
mov rdx, rax
mov rdi, rbx
mov esi, 26
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
call [rax]System.Text.RegularExpressions.RegexParser:MakeException(int,System.String):System.Text.RegularExpressions.RegexParseException:this
mov rdi, rax
call CORINFO_HELP_THROW
int3
;; size=44 bbWeight=0 PerfScore 0.00
G_M39122_IG67:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
RWD00 dd G_M39122_IG26 - G_M39122_IG02
dd G_M39122_IG25 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG22 - G_M39122_IG02
RWD16 dd G_M39122_IG57 - G_M39122_IG02
dd G_M39122_IG58 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG39 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG35 - G_M39122_IG02
dd G_M39122_IG34 - G_M39122_IG02
dd G_M39122_IG33 - G_M39122_IG02
dd G_M39122_IG33 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG42 - G_M39122_IG02
dd G_M39122_IG30 - G_M39122_IG02
-; Total bytes of code 2490, prolog size 22, PerfScore 3132.85, instruction count 612, allocated bytes for code 2490 (MethodHash=7576672d) for method System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts)
+; Total bytes of code 2382, prolog size 22, PerfScore 3116.10, instruction count 586, allocated bytes for code 2382 (MethodHash=7576672d) for method System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts) -124 (-35.43 % of base) - System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this ; Assembly listing for method System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts)
; Emitting BLENDED_CODE for X86 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 23, 23 ) byref -> rbx this single-def
+; V00 this [V00,T00] ( 23, 23 ) byref -> rdi this single-def
; V01 arg1 [V01,T02] ( 3, 3 ) ref -> rsi class-hnd single-def <System.String>
-; V02 arg2 [V02,T05] ( 3, 3 ) int -> r13 single-def
-; V03 arg3 [V03,T03] ( 3, 3 ) ref -> r15 class-hnd single-def <System.Globalization.CultureInfo>
-; V04 arg4 [V04,T04] ( 3, 3 ) ref -> r14 class-hnd single-def <System.Collections.Hashtable>
-; V05 arg5 [V05,T06] ( 3, 3 ) int -> r12 single-def
+; V02 arg2 [V02,T05] ( 3, 3 ) int -> rdx single-def
+; V03 arg3 [V03,T03] ( 3, 3 ) ref -> rcx class-hnd single-def <System.Globalization.CultureInfo>
+; V04 arg4 [V04,T04] ( 3, 3 ) ref -> r8 class-hnd single-def <System.Collections.Hashtable>
+; V05 arg5 [V05,T06] ( 3, 3 ) int -> r9 single-def
; V06 arg6 [V06,T07] ( 1, 1 ) ref -> [rbp+0x10] class-hnd single-def <System.Collections.Hashtable>
;* V07 arg7 [V07 ] ( 0, 0 ) struct (16) zero-ref single-def <System.Span`1[int]>
;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V09 tmp1 [V09 ] ( 0, 0 ) struct (32) zero-ref do-not-enreg[SF] ld-addr-op "NewObj constructor temp" <System.Collections.Generic.ValueListBuilder`1[int]>
; V10 tmp2 [V10,T08] ( 1, 1 ) byref -> [rbp+0x18] single-def "field V07._reference (fldOffset=0x0)" P-INDEP
; V11 tmp3 [V11,T09] ( 1, 1 ) int -> [rbp+0x20] single-def "field V07._length (fldOffset=0x8)" P-INDEP
;* V12 tmp4 [V12 ] ( 0, 0 ) ref -> zero-ref "V09.[000..008)"
;* V13 tmp5 [V13 ] ( 0, 0 ) int -> zero-ref "V09.[008..012)"
;* V14 tmp6 [V14 ] ( 0, 0 ) byref -> zero-ref single-def "V09.[016..024)"
;* V15 tmp7 [V15 ] ( 0, 0 ) int -> zero-ref "V09.[024..028)"
; V16 tmp8 [V16,T01] ( 5, 10 ) byref -> rax single-def "Spilling address for field-by-field copy"
;
; Lcl frame size = 0
G_M19169_IG01:
push rbp
- push r15
- push r14
- push r13
- push r12
- push rbx
- lea rbp, [rsp+0x28]
- mov rbx, rdi
- mov r13d, edx
- mov r15, rcx
- mov r14, r8
- mov r12d, r9d
- ;; size=30 bbWeight=1 PerfScore 7.75
+ mov rbp, rsp
+ ;; size=4 bbWeight=1 PerfScore 1.25
G_M19169_IG02:
- lea rdi, bword ptr [rbx+0x28]
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x70], r13d
- lea rdi, bword ptr [rbx+0x30]
- mov rsi, r15
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- xor edi, edi
- mov dword ptr [rbx+0x5C], edi
- mov byte ptr [rbx+0x74], 0
- lea rdi, bword ptr [rbx+0x38]
- mov rsi, r14
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- mov dword ptr [rbx+0x6C], r12d
- lea rdi, bword ptr [rbx+0x40]
- mov rsi, gword ptr [rbp+0x10]
- call CORINFO_HELP_CHECKED_ASSIGN_REF
- lea rax, bword ptr [rbx+0x78]
+ mov gword ptr [rdi+0x28], rsi
+ mov dword ptr [rdi+0x70], edx
+ mov gword ptr [rdi+0x30], rcx
+ xor eax, eax
+ mov dword ptr [rdi+0x5C], eax
+ mov byte ptr [rdi+0x74], 0
+ mov gword ptr [rdi+0x38], r8
+ mov dword ptr [rdi+0x6C], r9d
+ mov rax, gword ptr [rbp+0x10]
+ mov gword ptr [rdi+0x40], rax
+ lea rax, bword ptr [rdi+0x78]
xor rcx, rcx
mov gword ptr [rax], rcx
- ;; size=72 bbWeight=1 PerfScore 13.50
+ ;; size=45 bbWeight=1 PerfScore 11.00
G_M19169_IG03:
mov dword ptr [rax+0x08], ecx
- mov r15, bword ptr [rbp+0x18]
- mov bword ptr [rax+0x10], r15
- mov r15d, dword ptr [rbp+0x20]
- mov dword ptr [rax+0x18], r15d
- ;; size=19 bbWeight=1 PerfScore 5.00
+ mov rcx, bword ptr [rbp+0x18]
+ mov bword ptr [rax+0x10], rcx
+ mov ecx, dword ptr [rbp+0x20]
+ mov dword ptr [rax+0x18], ecx
+ xor rax, rax
+ mov gword ptr [rdi], rax
+ ;; size=22 bbWeight=1 PerfScore 6.25
G_M19169_IG04:
- mov gword ptr [rbx], rcx
- ;; size=3 bbWeight=1 PerfScore 1.00
+ mov gword ptr [rdi+0x08], rax
+ ;; size=4 bbWeight=1 PerfScore 1.00
G_M19169_IG05:
- mov gword ptr [rbx+0x08], rcx
+ mov gword ptr [rdi+0x10], rax
;; size=4 bbWeight=1 PerfScore 1.00
G_M19169_IG06:
- mov gword ptr [rbx+0x10], rcx
+ mov gword ptr [rdi+0x18], rax
;; size=4 bbWeight=1 PerfScore 1.00
G_M19169_IG07:
- mov gword ptr [rbx+0x18], rcx
+ mov gword ptr [rdi+0x20], rax
;; size=4 bbWeight=1 PerfScore 1.00
G_M19169_IG08:
- mov gword ptr [rbx+0x20], rcx
- ;; size=4 bbWeight=1 PerfScore 1.00
+ mov dword ptr [rdi+0x58], eax
+ ;; size=3 bbWeight=1 PerfScore 1.00
G_M19169_IG09:
- mov dword ptr [rbx+0x58], ecx
+ mov dword ptr [rdi+0x60], eax
;; size=3 bbWeight=1 PerfScore 1.00
G_M19169_IG10:
- mov dword ptr [rbx+0x60], ecx
+ mov dword ptr [rdi+0x64], eax
;; size=3 bbWeight=1 PerfScore 1.00
G_M19169_IG11:
- mov dword ptr [rbx+0x64], ecx
+ mov dword ptr [rdi+0x68], eax
;; size=3 bbWeight=1 PerfScore 1.00
G_M19169_IG12:
- mov dword ptr [rbx+0x68], ecx
- ;; size=3 bbWeight=1 PerfScore 1.00
-G_M19169_IG13:
- mov gword ptr [rbx+0x48], rcx
+ mov gword ptr [rdi+0x48], rax
;; size=4 bbWeight=1 PerfScore 1.00
-G_M19169_IG14:
- mov gword ptr [rbx+0x50], rcx
- mov byte ptr [rbx+0x75], 0
+G_M19169_IG13:
+ mov gword ptr [rdi+0x50], rax
+ mov byte ptr [rdi+0x75], 0
;; size=8 bbWeight=1 PerfScore 2.00
-G_M19169_IG15:
- pop rbx
- pop r12
- pop r13
- pop r14
- pop r15
+G_M19169_IG14:
pop rbp
ret
- ;; size=11 bbWeight=1 PerfScore 4.00
+ ;; size=2 bbWeight=1 PerfScore 1.50
-; Total bytes of code 175, prolog size 15, PerfScore 42.25, instruction count 55, allocated bytes for code 175 (MethodHash=855eb51e) for method System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts)
+; Total bytes of code 113, prolog size 4, PerfScore 31.00, instruction count 35, allocated bytes for code 113 (MethodHash=855eb51e) for method System.Text.RegularExpressions.RegexParser:.ctor(System.String,int,System.Globalization.CultureInfo,System.Collections.Hashtable,int,System.Collections.Hashtable,System.Span`1[int]):this (FullOpts) Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/00b455223ac28ae23254b7c8e80edb2d |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 15 minutes.
dotnet/runtime#103503
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: