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 #469
Comments
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 X64 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] (128,1077 ) byref -> rbx this single-def
; V01 loc0 [V01,T03] ( 28, 588 ) ushort -> [rbp-0x2C]
; V02 loc1 [V02,T44] ( 8, 19 ) ubyte -> registers
; V03 loc2 [V03,T76] ( 3, 6 ) ubyte -> r15
; V04 loc3 [V04,T29] ( 8, 38 ) int -> r13
; V05 loc4 [V05,T33] ( 5, 26 ) int -> r12
; V06 loc5 [V06,T77] ( 3, 6 ) int -> rdx
; V07 loc6 [V07,T74] ( 3, 6 ) ref -> r15 class-hnd exact <System.Text.RegularExpressions.RegexNode>
; V08 loc7 [V08,T82] ( 2, 4 ) ref -> r15 class-hnd exact <System.String>
; V09 loc8 [V09,T26] ( 8, 40 ) int -> registers
; V10 loc9 [V10,T11] ( 6, 72 ) int -> r15
; V11 loc10 [V11,T10] ( 7, 80 ) int -> registers
; V12 loc11 [V12,T28] ( 3, 40 ) ubyte -> rsi
;# V13 OutArgs [V13 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
; V14 tmp1 [V14,T60] ( 5, 10 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V15 tmp2 [V15,T64] ( 2, 8 ) int -> rdi "dup spill"
; V16 tmp3 [V16,T90] ( 3, 0 ) ref -> r15 class-hnd exact "Single-def Box Helper" <System.Char>
; V17 tmp4 [V17,T93] ( 2, 0 ) ref -> rdi class-hnd exact "impImportAndPushBox" <System.String>
; V18 tmp5 [V18,T91] ( 3, 0 ) ref -> rax
; V19 tmp6 [V19,T92] ( 3, 0 ) ref -> r15 class-hnd exact "Single-def Box Helper" <System.Char>
; V20 tmp7 [V20,T94] ( 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,T78] ( 3, 6 ) int -> r15
; V24 tmp11 [V24,T45] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V25 tmp12 [V25,T65] ( 2, 8 ) int -> r14 "dup spill"
; V26 tmp13 [V26,T50] ( 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,T31] ( 2, 32 ) int -> r15 "dup spill"
; V29 tmp16 [V29,T17] ( 3, 48 ) ref -> rsi class-hnd exact "impAppendStmt" <System.String>
; V30 tmp17 [V30,T38] ( 3, 24 ) int -> rax
; V31 tmp18 [V31,T40] ( 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,T41] ( 5, 20 ) ref -> rsi class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+; V33 tmp20 [V33,T41] ( 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,T75] ( 3, 6 ) ref -> rsi
-; V36 tmp23 [V36,T42] ( 5, 20 ) ref -> rsi class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
+; V35 tmp22 [V35,T75] ( 3, 6 ) ref -> rax
+; V36 tmp23 [V36,T42] ( 5, 20 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V37 tmp24 [V37,T51] ( 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,T79] ( 3, 6 ) int -> r15
; V41 tmp28 [V41,T46] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V42 tmp29 [V42,T04] ( 2, 512 ) int -> rax "dup spill"
; V43 tmp30 [V43,T14] ( 2, 64 ) int -> r12 "dup spill"
; V44 tmp31 [V44,T84] ( 2, 4 ) int -> rdi "Inlining Arg"
; V45 tmp32 [V45,T61] ( 4, 8 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V46 tmp33 [V46,T62] ( 4, 8 ) ref -> rax class-hnd exact single-def "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V47 tmp34 [V47,T85] ( 2, 4 ) int -> rdi "Inlining Arg"
; V48 tmp35 [V48,T86] ( 2, 4 ) int -> rdi "Inlining Arg"
;* V49 tmp36 [V49,T49] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V50 tmp37 [V50,T32] ( 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,T15] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V54 tmp41 [V54,T07] ( 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,T89] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
;* V58 tmp45 [V58,T88] ( 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,T80] ( 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,T66] ( 2, 8 ) int -> rdi "Inlining Arg"
; V65 tmp52 [V65,T34] ( 6, 24 ) byref -> rdi "Inlining Arg"
; V66 tmp53 [V66,T63] ( 4, 8 ) int -> rax "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,T55] ( 3, 12 ) int -> rsi "Inlining Arg"
; V69 tmp56 [V69,T47] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V70 tmp57 [V70,T48] ( 4, 16 ) ref -> rax class-hnd exact "NewObj constructor temp" <System.Text.RegularExpressions.RegexNode>
; V71 tmp58 [V71,T67] ( 2, 8 ) int -> rdi "Inlining Arg"
; V72 tmp59 [V72,T68] ( 2, 8 ) int -> rdi "Inlining Arg"
;* V73 tmp60 [V73 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V74 tmp61 [V74,T43] ( 5, 20 ) byref -> rdi "Inlining Arg"
; V75 tmp62 [V75,T56] ( 3, 12 ) int -> rsi "Span.get_Item index"
; V76 tmp63 [V76,T52] ( 3, 12 ) byref -> rdi "Span.get_Item ptrToSpan"
;* V77 tmp64 [V77 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V78 tmp65 [V78,T69] ( 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,T70] ( 2, 8 ) int -> rdi "Inlining Arg"
;* V82 tmp69 [V82 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
; V83 tmp70 [V83,T71] ( 2, 8 ) int -> rdi "Inlining Arg"
; V84 tmp71 [V84,T72] ( 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,T83] ( 2, 4 ) byref -> rcx "field V67._reference (fldOffset=0x0)" P-INDEP
; V102 tmp89 [V102,T87] ( 2, 4 ) int -> rdx "field V67._length (fldOffset=0x8)" P-INDEP
; V103 tmp90 [V103,T01] ( 3, 768 ) ref -> rcx "arr expr"
; V104 tmp91 [V104,T02] ( 3, 768 ) int -> rax "index expr"
; V105 tmp92 [V105,T08] ( 3, 96 ) ref -> rax "arr expr"
; V106 tmp93 [V106,T09] ( 3, 96 ) int -> rdi "index expr"
; V107 tmp94 [V107,T53] ( 3, 12 ) ref -> rdi "arr expr"
; V108 tmp95 [V108,T57] ( 3, 12 ) int -> rsi "index expr"
; V109 tmp96 [V109,T54] ( 3, 12 ) ref -> rdi "arr expr"
; V110 tmp97 [V110,T73] ( 2, 8 ) int -> rdi "argument with side effect"
; V111 tmp98 [V111,T95] ( 2, 0 ) ref -> rdx "argument with side effect"
; V112 tmp99 [V112,T96] ( 2, 0 ) ref -> rdx "argument with side effect"
; V113 tmp100 [V113,T97] ( 2, 0 ) ref -> rdx "argument with side effect"
; V114 tmp101 [V114,T98] ( 2, 0 ) ref -> rdx "argument with side effect"
; V115 tmp102 [V115,T18] ( 3, 48 ) ref -> rcx "arr expr"
; V116 tmp103 [V116,T22] ( 3, 48 ) int -> rdx "index expr"
; V117 tmp104 [V117,T19] ( 3, 48 ) ref -> rax "arr expr"
; V118 tmp105 [V118,T23] ( 3, 48 ) int -> rdi "index expr"
; V119 tmp106 [V119,T20] ( 3, 48 ) ref -> rdx "arr expr"
; V120 tmp107 [V120,T24] ( 3, 48 ) int -> rcx "index expr"
; V121 tmp108 [V121,T12] ( 2, 64 ) ref -> rsi "argument with side effect"
; V122 tmp109 [V122,T13] ( 2, 64 ) ref -> [rbp-0x38] spill-single-def "argument with side effect"
; V123 tmp110 [V123,T99] ( 2, 0 ) ref -> rdx "argument with side effect"
; V124 tmp111 [V124,T100] ( 2, 0 ) ref -> rdx single-def "argument with side effect"
; V125 cse0 [V125,T81] ( 3, 6 ) int -> rdi "CSE #11: conservative"
; V126 cse1 [V126,T05] ( 3, 384 ) ref -> rcx "CSE #04: aggressive"
; V127 cse2 [V127,T06] ( 3, 384 ) int -> rax "CSE #05: aggressive"
; V128 cse3 [V128,T27] ( 5, 40 ) int -> rdi "CSE #18: moderate"
; V129 cse4 [V129,T30] ( 4, 32 ) int -> rdi "CSE #22: moderate"
; V130 cse5 [V130,T21] ( 3, 48 ) ref -> rax "CSE #02: moderate"
; V131 cse6 [V131,T25] ( 3, 48 ) int -> rdi "CSE #03: moderate"
; V132 cse7 [V132,T16] ( 4, 48 ) int -> rdi "CSE #25: moderate"
; V133 cse8 [V133,T35] ( 3, 24 ) ref -> rcx "CSE #19: conservative"
; V134 cse9 [V134,T36] ( 3, 24 ) ref -> rax "CSE #20: conservative"
; V135 cse10 [V135,T39] ( 3, 24 ) int -> rdi "CSE #21: conservative"
; V136 cse11 [V136,T37] ( 3, 24 ) ref -> rsi "CSE #23: conservative"
; V137 rat0 [V137,T58] ( 3, 11.75) int -> r13 "ReplaceWithLclVar is creating a new local variable"
; V138 rat1 [V138,T59] ( 3, 11.20) 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_IG46
- ;; 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 G_M39122_IG09
jmp SHORT G_M39122_IG05
;; size=36 bbWeight=4 PerfScore 48.00
G_M39122_IG04:
inc dword ptr [rbx+0x58]
;; size=3 bbWeight=64 PerfScore 192.00
G_M39122_IG05:
mov edi, dword ptr [rbx+0x58]
mov rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
jge SHORT G_M39122_IG06
cmp edi, dword ptr [rax+0x08]
jae G_M39122_IG69
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], 0
jbe SHORT G_M39122_IG04
cmp r12d, 123
jne SHORT G_M39122_IG06
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
;; size=77 bbWeight=16 PerfScore 412.00
G_M39122_IG06:
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 rax, gword ptr [rbx+0x28]
cmp edi, dword ptr [rax+0x08]
jne SHORT G_M39122_IG12
;; size=31 bbWeight=16 PerfScore 216.00
G_M39122_IG07:
mov eax, 33
jmp G_M39122_IG16
;; size=10 bbWeight=2 PerfScore 4.50
G_M39122_IG08:
inc dword ptr [rbx+0x58]
;; size=3 bbWeight=32 PerfScore 96.00
G_M39122_IG09:
mov eax, dword ptr [rbx+0x58]
mov rcx, gword ptr [rbx+0x28]
cmp eax, dword ptr [rcx+0x08]
jge SHORT G_M39122_IG06
cmp eax, dword ptr [rcx+0x08]
jae G_M39122_IG69
mov edi, eax
movzx rax, word ptr [rcx+2*rdi+0x0C]
mov r12d, eax
cmp r12d, 124
jg SHORT G_M39122_IG08
;; size=37 bbWeight=128 PerfScore 2016.00
G_M39122_IG10:
mov edi, r12d
mov rax, 0xD1FFAB1E ; static handle
cmp byte ptr [rdi+rax], 3
jb SHORT G_M39122_IG08
;; size=19 bbWeight=64 PerfScore 288.00
G_M39122_IG11:
cmp r12d, 123
jne SHORT G_M39122_IG06
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_IG08
jmp SHORT G_M39122_IG06
;; size=27 bbWeight=128 PerfScore 1024.00
G_M39122_IG12:
mov rdi, gword ptr [rbx+0x28]
mov esi, dword ptr [rbx+0x58]
cmp esi, dword ptr [rdi+0x08]
jae G_M39122_IG69
movzx rdi, word ptr [rdi+2*rsi+0x0C]
mov eax, edi
cmp eax, 124
jg SHORT G_M39122_IG13
mov edi, eax
mov rsi, 0xD1FFAB1E ; static handle
movzx rdi, byte ptr [rdi+rsi]
cmp edi, 3
jl SHORT G_M39122_IG13
cmp eax, 123
jg SHORT G_M39122_IG14
cmp edi, 4
sete r14b
movzx r14, r14b
jmp SHORT G_M39122_IG15
;; size=68 bbWeight=2 PerfScore 40.00
G_M39122_IG13:
mov dword ptr [rbp-0x2C], 32
mov eax, dword ptr [rbp-0x2C]
jmp SHORT G_M39122_IG16
;; size=12 bbWeight=2 PerfScore 8.00
G_M39122_IG14:
xor r14d, r14d
;; size=3 bbWeight=2 PerfScore 0.50
G_M39122_IG15:
inc dword ptr [rbx+0x58]
;; size=3 bbWeight=2 PerfScore 6.00
G_M39122_IG16:
cmp r13d, r12d
- jge G_M39122_IG19
- ;; size=9 bbWeight=4 PerfScore 5.00
+ jge SHORT G_M39122_IG19
+ ;; size=5 bbWeight=4 PerfScore 5.00
G_M39122_IG17:
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_IG18
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_IG18:
test r14d, r14d
je SHORT G_M39122_IG19
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_IG69
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_IG19:
cmp eax, 63
ja SHORT G_M39122_IG22
;; size=5 bbWeight=4 PerfScore 5.00
G_M39122_IG20:
lea r13d, [rax-0x20]
cmp r13d, 14
ja G_M39122_IG30
;; size=14 bbWeight=2 PerfScore 3.50
G_M39122_IG21:
mov edi, r13d
lea rcx, [reloc @RWD00]
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_IG22:
lea r12d, [rax-0x5B]
cmp r12d, 3
ja SHORT G_M39122_IG24
;; size=10 bbWeight=2 PerfScore 3.50
G_M39122_IG23:
mov edi, r12d
lea rax, [reloc @RWD60]
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_IG24:
cmp eax, 123
je G_M39122_IG34
cmp eax, 124
jne G_M39122_IG43
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_IG45
;; size=38 bbWeight=2 PerfScore 16.00
G_M39122_IG25:
test byte ptr [rbx+0x70], 2
jne SHORT G_M39122_IG26
mov r15d, 18
jmp SHORT G_M39122_IG27
;; size=14 bbWeight=2 PerfScore 12.50
G_M39122_IG26:
mov r15d, 14
;; size=6 bbWeight=2 PerfScore 0.50
G_M39122_IG27:
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, 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
+ mov gword ptr [rbx+0x20], rax
jmp G_M39122_IG43
- ;; size=42 bbWeight=2 PerfScore 18.00
+ ;; size=34 bbWeight=2 PerfScore 16.50
G_M39122_IG28:
mov edi, dword ptr [rbx+0x58]
mov rsi, gword ptr [rbx+0x28]
cmp edi, dword ptr [rsi+0x08]
je G_M39122_IG62
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_IG43
- ;; size=50 bbWeight=2 PerfScore 31.00
+ ;; size=42 bbWeight=2 PerfScore 29.50
G_M39122_IG29:
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_IG43
- ;; size=105 bbWeight=2 PerfScore 48.00
+ ;; size=97 bbWeight=2 PerfScore 46.50
G_M39122_IG30:
cmp eax, 63
je SHORT G_M39122_IG34
jmp G_M39122_IG43
;; size=10 bbWeight=2 PerfScore 6.50
G_M39122_IG31:
test byte ptr [rbx+0x70], 16
jne SHORT G_M39122_IG32
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
+ mov byte ptr [rax+0x2E], 10
+ mov dword ptr [rax+0x28], edi
+ mov word ptr [rax+0x2C], 10
jmp SHORT G_M39122_IG33
- ;; size=45 bbWeight=2 PerfScore 25.50
+ ;; size=42 bbWeight=2 PerfScore 25.00
G_M39122_IG32:
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
- ;; size=45 bbWeight=2 PerfScore 14.00
+ mov gword ptr [rax+0x10], rdi
+ ;; size=42 bbWeight=2 PerfScore 13.50
G_M39122_IG33:
- lea rdi, bword ptr [rbx+0x20]
- call CORINFO_HELP_CHECKED_ASSIGN_REF
+ mov gword ptr [rbx+0x20], rax
jmp G_M39122_IG43
- ;; size=14 bbWeight=2 PerfScore 7.00
+ ;; size=9 bbWeight=2 PerfScore 6.00
G_M39122_IG34:
cmp gword ptr [rbx+0x20], 0
je G_M39122_IG63
dec dword ptr [rbx+0x58]
jmp G_M39122_IG43
;; size=19 bbWeight=2 PerfScore 18.00
G_M39122_IG35:
cmp gword ptr [rbx], 0
je 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, 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_IG69
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_IG43
jmp G_M39122_IG45
;; size=88 bbWeight=2 PerfScore 63.50
G_M39122_IG36:
lea rdi, bword ptr [rbx+0x78]
mov esi, dword ptr [rbx+0x70]
mov eax, dword ptr [rdi+0x08]
mov rcx, bword ptr [rdi+0x10]
mov edx, dword ptr [rdi+0x18]
cmp eax, edx
jae SHORT G_M39122_IG37
mov edx, eax
mov dword ptr [rcx+4*rdx], esi
inc eax
mov dword ptr [rdi+0x08], eax
jmp SHORT G_M39122_IG38
;; size=33 bbWeight=2 PerfScore 28.50
G_M39122_IG37:
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
;; size=12 bbWeight=2 PerfScore 6.50
G_M39122_IG38:
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
je G_M39122_IG39
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_IG45
- ;; size=180 bbWeight=2 PerfScore 85.00
+ ;; size=151 bbWeight=2 PerfScore 80.00
G_M39122_IG39:
lea rdi, bword ptr [rbx+0x78]
dec dword ptr [rdi+0x08]
jmp G_M39122_IG45
;; size=12 bbWeight=2 PerfScore 11.00
G_M39122_IG40:
test byte ptr [rbx+0x70], 2
jne SHORT G_M39122_IG41
mov r15d, 20
jmp SHORT G_M39122_IG42
;; size=14 bbWeight=2 PerfScore 12.50
G_M39122_IG41:
mov r15d, 15
;; size=6 bbWeight=2 PerfScore 0.50
G_M39122_IG42:
mov rdi, 0xD1FFAB1E ; System.Text.RegularExpressions.RegexNode
call CORINFO_HELP_NEWSFAST
mov edi, 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 gword ptr [rbx+0x20], rax
+ ;; size=29 bbWeight=2 PerfScore 12.50
G_M39122_IG43:
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 SHORT G_M39122_IG44
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
jne SHORT G_M39122_IG48
;; size=50 bbWeight=2 PerfScore 33.00
G_M39122_IG44:
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_IG45:
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_IG46:
cmp gword ptr [rbx], 0
jne G_M39122_IG68
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_IG47:
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_IG48:
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_IG69
mov eax, r13d
movzx rax, word ptr [rdi+2*rax+0x0C]
mov r12d, eax
cmp gword ptr [rbx+0x20], 0
je SHORT G_M39122_IG45
;; size=43 bbWeight=2 PerfScore 32.00
G_M39122_IG49:
xor r15d, r15d
xor r13d, r13d
cmp r12d, 43
ja G_M39122_IG55
;; size=16 bbWeight=16 PerfScore 28.00
G_M39122_IG50:
cmp r12d, 42
je SHORT G_M39122_IG51
cmp r12d, 43
jne SHORT G_M39122_IG52
mov r15d, 1
;; size=18 bbWeight=8 PerfScore 22.00
G_M39122_IG51:
mov r13d, 0xD1FFAB1E
;; size=6 bbWeight=8 PerfScore 2.00
G_M39122_IG52:
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_IG54
;; size=29 bbWeight=16 PerfScore 188.00
G_M39122_IG53:
mov rdx, gword ptr [rbx+0x28]
mov ecx, edi
cmp ecx, dword ptr [rdx+0x08]
jae G_M39122_IG69
cmp word ptr [rdx+2*rcx+0x0C], 63
jne SHORT G_M39122_IG54
inc edi
mov dword ptr [rbx+0x58], edi
mov esi, 1
;; size=33 bbWeight=8 PerfScore 94.00
G_M39122_IG54:
cmp r15d, r13d
jg G_M39122_IG67
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_IG49
jmp G_M39122_IG45
;; size=85 bbWeight=16 PerfScore 444.00
G_M39122_IG55:
cmp r12d, 63
je SHORT G_M39122_IG56
cmp r12d, 123
jne G_M39122_IG52
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_IG59
mov rcx, gword ptr [rbx+0x28]
cmp dword ptr [rcx+0x08], edi
jle SHORT G_M39122_IG59
mov edx, edi
cmp edx, dword ptr [rcx+0x08]
jae G_M39122_IG69
cmp word ptr [rcx+2*rdx+0x0C], 44
jne SHORT G_M39122_IG59
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_IG57
cmp edi, dword ptr [rax+0x08]
jae G_M39122_IG69
cmp word ptr [rax+2*rdi+0x0C], 125
je SHORT G_M39122_IG57
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
call [rax]System.Text.RegularExpressions.RegexParser:ScanDecimal():int:this
jmp SHORT G_M39122_IG58
;; size=128 bbWeight=8 PerfScore 390.00
G_M39122_IG56:
mov r13d, 1
jmp G_M39122_IG52
;; size=11 bbWeight=8 PerfScore 18.00
G_M39122_IG57:
mov eax, 0xD1FFAB1E
;; size=5 bbWeight=8 PerfScore 2.00
G_M39122_IG58:
mov edi, eax
mov eax, edi
;; size=4 bbWeight=8 PerfScore 4.00
G_M39122_IG59:
mov edi, dword ptr [rbx+0x58]
cmp r13d, edi
je SHORT G_M39122_IG60
mov rsi, gword ptr [rbx+0x28]
cmp dword ptr [rsi+0x08], edi
je SHORT G_M39122_IG60
lea ecx, [rdi+0x01]
mov dword ptr [rbx+0x58], ecx
cmp edi, dword ptr [rsi+0x08]
jae G_M39122_IG69
cmp word ptr [rsi+2*rdi+0x0C], 125
je SHORT G_M39122_IG61
;; size=40 bbWeight=8 PerfScore 150.00
G_M39122_IG60:
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_IG45
;; size=40 bbWeight=2 PerfScore 29.50
G_M39122_IG61:
mov r13d, eax
jmp G_M39122_IG52
;; size=8 bbWeight=4 PerfScore 9.00
G_M39122_IG62:
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_IG63:
test r15d, r15d
je SHORT G_M39122_IG64
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_IG65
;; size=100 bbWeight=0 PerfScore 0.00
G_M39122_IG64:
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_IG65:
mov rdi, rax
call CORINFO_HELP_THROW
int3
;; size=9 bbWeight=0 PerfScore 0.00
G_M39122_IG66:
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_IG67:
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_IG68:
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_IG69:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
RWD00 dd G_M39122_IG45 - G_M39122_IG02
dd G_M39122_IG46 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG40 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG36 - G_M39122_IG02
dd G_M39122_IG35 - G_M39122_IG02
dd G_M39122_IG34 - G_M39122_IG02
dd G_M39122_IG34 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG31 - G_M39122_IG02
RWD60 dd G_M39122_IG29 - G_M39122_IG02
dd G_M39122_IG28 - G_M39122_IG02
dd G_M39122_IG43 - G_M39122_IG02
dd G_M39122_IG25 - G_M39122_IG02
-; Total bytes of code 2491, prolog size 22, PerfScore 6429.85, instruction count 615, allocated bytes for code 2491 (MethodHash=7576672d) for method System.Text.RegularExpressions.RegexParser:ScanRegex():System.Text.RegularExpressions.RegexNode:this (FullOpts)
+; Total bytes of code 2383, prolog size 22, PerfScore 6413.10, instruction count 589, allocated bytes for code 2383 (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 X64 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) Larger list of diffs: https://gist.github.com/MihuBot/d10028a60fc96725a3a87d05492fd727 |
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: