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
[JitDiff X64] [MihaZupan] Improve char.IsWhiteSpace for non-ASCII #916
Comments
Top method regressions166 (25.00 % of base) - System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int ; Assembly listing for method System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (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; 28 single block inlinees; 9 inlinees without PGO data
+; 0 inlinees with PGO data; 56 single block inlinees; 21 inlinees without PGO data
; Final local variable assignments
;
;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def <System.ReadOnlySpan`1[ushort]>
-; V02 loc0 [V02,T30] ( 5, 7.50) long -> rbx
+; V02 loc0 [V02,T37] ( 5, 7.50) long -> rdi
; V03 loc1 [V03 ] ( 1, 1 ) byref -> [rbp-0x30] must-init pinned single-def
-; V04 loc2 [V04,T28] ( 4, 10 ) long -> r15
+; V04 loc2 [V04,T35] ( 4, 10 ) long -> rdx
; V05 loc3 [V05 ] ( 1, 1 ) byref -> [rbp-0x38] must-init pinned single-def
-; V06 loc4 [V06,T09] ( 5, 33 ) long -> r14
-; V07 loc5 [V07,T19] ( 7, 18.50) long -> r13
-; V08 loc6 [V08,T00] ( 12,104 ) long -> r12
-; V09 loc7 [V09,T01] ( 11, 84 ) long -> [rbp-0x40]
+; V06 loc4 [V06,T12] ( 5, 33 ) long -> rax
+; V07 loc5 [V07,T26] ( 7, 18.50) long -> rbx
+; V08 loc6 [V08,T02] ( 12,104 ) long -> rcx
+; V09 loc7 [V09,T05] ( 10, 76 ) long -> rsi
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V11 tmp1 [V11,T10] ( 2, 32 ) int -> [rbp-0x44] spill-single-def "impAppendStmt"
+; V11 tmp1 [V11,T17] ( 2, 32 ) int -> r8 "impAppendStmt"
;* V12 tmp2 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
;* V13 tmp3 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ushort]>
;* V14 tmp4 [V14 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
-; V15 tmp5 [V15,T07] ( 3, 48 ) ushort -> [rbp-0x48] spill-single-def "Inlining Arg"
+; V15 tmp5 [V15,T03] ( 5, 80 ) ushort -> r8 "Inlining Arg"
;* V16 tmp6 [V16 ] ( 0, 0 ) ushort -> zero-ref "Inline return value spill temp"
-; V17 tmp7 [V17,T20] ( 2, 16 ) long -> rax "Inline stloc first use temp"
+; V17 tmp7 [V17,T27] ( 2, 16 ) long -> r10 "Inline stloc first use temp"
;* V18 tmp8 [V18 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
;* V19 tmp9 [V19 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-;* V20 tmp10 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V21 tmp11 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-; V22 tmp12 [V22,T08] ( 3, 48 ) ushort -> [rbp-0x4C] spill-single-def "Inlining Arg"
-;* V23 tmp13 [V23 ] ( 0, 0 ) ushort -> zero-ref "Inline return value spill temp"
-; V24 tmp14 [V24,T21] ( 2, 16 ) long -> rax "Inline stloc first use temp"
+;* V20 tmp10 [V20 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
+;* V21 tmp11 [V21 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+; V22 tmp12 [V22,T13] ( 4, 32 ) int -> r10 "Inline stloc first use temp"
+;* V23 tmp13 [V23 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V24 tmp14 [V24 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
;* V25 tmp15 [V25 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V26 tmp16 [V26 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-;* V27 tmp17 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V29 tmp19 [V29 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
-;* V30 tmp20 [V30 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
-;* V31 tmp21 [V31 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
-;* V32 tmp22 [V32,T29] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V33 tmp23 [V33,T11] ( 2, 32 ) ushort -> rcx "Inlining Arg"
-; V34 tmp24 [V34,T12] ( 2, 32 ) ushort -> rdx "Inlining Arg"
-; V35 tmp25 [V35,T22] ( 2, 16 ) ushort -> [rbp-0x50] ld-addr-op spill-single-def "Inline ldloca(s) first use temp"
-; V36 tmp26 [V36,T23] ( 2, 16 ) ushort -> [rbp-0x54] ld-addr-op spill-single-def "Inline ldloca(s) first use temp"
-; V37 tmp27 [V37,T13] ( 2, 32 ) ushort -> [rbp-0x58] spill-single-def "Inlining Arg"
-; V38 tmp28 [V38,T14] ( 2, 32 ) ushort -> [rbp-0x5C] spill-single-def "Inlining Arg"
-; V39 tmp29 [V39,T24] ( 2, 16 ) ushort -> rax ld-addr-op "Inline ldloca(s) first use temp"
-; V40 tmp30 [V40,T25] ( 2, 16 ) ushort -> rdi ld-addr-op "Inline ldloca(s) first use temp"
-; V41 tmp31 [V41,T15] ( 3, 24 ) int -> rdi "Inline return value spill temp"
-; V42 tmp32 [V42,T02] ( 5, 80 ) int -> [rbp-0x60] spill-single-def "Inlining Arg"
-; V43 tmp33 [V43,T26] ( 2, 16 ) long -> rax "Inline stloc first use temp"
+;* V26 tmp16 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V27 tmp17 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V28 tmp18 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V29 tmp19 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V30 tmp20 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V31 tmp21 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V32 tmp22 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V33 tmp23 [V33 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+; V34 tmp24 [V34,T04] ( 5, 80 ) ushort -> r9 "Inlining Arg"
+;* V35 tmp25 [V35 ] ( 0, 0 ) ushort -> zero-ref "Inline return value spill temp"
+; V36 tmp26 [V36,T28] ( 2, 16 ) long -> r10 "Inline stloc first use temp"
+;* V37 tmp27 [V37 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V38 tmp28 [V38 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V39 tmp29 [V39 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
+;* V40 tmp30 [V40 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+; V41 tmp31 [V41,T14] ( 4, 32 ) int -> r10 "Inline stloc first use temp"
+;* V42 tmp32 [V42 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V43 tmp33 [V43 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
;* V44 tmp34 [V44 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V45 tmp35 [V45 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-;* V46 tmp36 [V46 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V45 tmp35 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V46 tmp36 [V46 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
;* V47 tmp37 [V47 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
;* V48 tmp38 [V48 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-; V49 tmp39 [V49,T16] ( 3, 24 ) int -> rdi "Inline return value spill temp"
-; V50 tmp40 [V50,T03] ( 5, 80 ) int -> [rbp-0x64] spill-single-def "Inlining Arg"
-; V51 tmp41 [V51,T27] ( 2, 16 ) long -> rax "Inline stloc first use temp"
-;* V52 tmp42 [V52 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V53 tmp43 [V53 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
-;* V54 tmp44 [V54 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
-;* V55 tmp45 [V55 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V56 tmp46 [V56 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-; V57 tmp47 [V57,T31] ( 3, 3 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP
-; V58 tmp48 [V58,T34] ( 2, 2 ) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP
-; V59 tmp49 [V59,T32] ( 3, 3 ) byref -> rdx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-; V60 tmp50 [V60,T33] ( 3, 3 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;* V61 tmp51 [V61 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP
-;* V62 tmp52 [V62 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
-;* V63 tmp53 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
-;* V64 tmp54 [V64 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
-;* V65 tmp55 [V65 ] ( 0, 0 ) byref -> zero-ref "field V18._reference (fldOffset=0x0)" P-INDEP
-;* V66 tmp56 [V66 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
-;* V67 tmp57 [V67 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP
-;* V68 tmp58 [V68 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP
-;* V69 tmp59 [V69 ] ( 0, 0 ) byref -> zero-ref "field V21._reference (fldOffset=0x0)" P-INDEP
-;* V70 tmp60 [V70 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
-;* V71 tmp61 [V71 ] ( 0, 0 ) byref -> zero-ref "field V25._reference (fldOffset=0x0)" P-INDEP
-;* V72 tmp62 [V72 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
-;* V73 tmp63 [V73 ] ( 0, 0 ) byref -> zero-ref "field V27._reference (fldOffset=0x0)" P-INDEP
-;* V74 tmp64 [V74 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
-;* V75 tmp65 [V75 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP
-;* V76 tmp66 [V76 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x8)" P-INDEP
-;* V77 tmp67 [V77 ] ( 0, 0 ) byref -> zero-ref "field V44._reference (fldOffset=0x0)" P-INDEP
-;* V78 tmp68 [V78 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP
-;* V79 tmp69 [V79 ] ( 0, 0 ) byref -> zero-ref "field V47._reference (fldOffset=0x0)" P-INDEP
-;* V80 tmp70 [V80 ] ( 0, 0 ) int -> zero-ref "field V47._length (fldOffset=0x8)" P-INDEP
-;* V81 tmp71 [V81 ] ( 0, 0 ) byref -> zero-ref "field V48._reference (fldOffset=0x0)" P-INDEP
-;* V82 tmp72 [V82 ] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x8)" P-INDEP
-;* V83 tmp73 [V83 ] ( 0, 0 ) byref -> zero-ref "field V52._reference (fldOffset=0x0)" P-INDEP
-;* V84 tmp74 [V84 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x8)" P-INDEP
-;* V85 tmp75 [V85 ] ( 0, 0 ) byref -> zero-ref "field V55._reference (fldOffset=0x0)" P-INDEP
-;* V86 tmp76 [V86 ] ( 0, 0 ) int -> zero-ref "field V55._length (fldOffset=0x8)" P-INDEP
-;* V87 tmp77 [V87 ] ( 0, 0 ) byref -> zero-ref "field V56._reference (fldOffset=0x0)" P-INDEP
-;* V88 tmp78 [V88 ] ( 0, 0 ) int -> zero-ref "field V56._length (fldOffset=0x8)" P-INDEP
-; V89 tmp79 [V89,T35] ( 2, 4 ) long -> rbx "Cast away GC"
-; V90 tmp80 [V90,T36] ( 2, 4 ) long -> r15 "Cast away GC"
-; V91 cse0 [V91,T17] ( 3, 24 ) int -> rdx "CSE #04: moderate"
-; V92 cse1 [V92,T18] ( 3, 24 ) int -> rsi "CSE #05: moderate"
-; V93 cse2 [V93,T04] ( 6, 64 ) int -> rax "CSE #01: aggressive"
-; V94 cse3 [V94,T05] ( 6, 48 ) int -> rcx multi-def "CSE #03: aggressive"
-; V95 cse4 [V95,T06] ( 6, 48 ) long -> [rbp-0x70] multi-def "CSE #02: aggressive"
-; V96 rat0 [V96,T37] ( 3, 3 ) long -> rax "ReplaceWithLclVar is creating a new local variable"
+;* V49 tmp39 [V49 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V50 tmp40 [V50 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V51 tmp41 [V51 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V52 tmp42 [V52 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V53 tmp43 [V53 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
+;* V54 tmp44 [V54 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
+;* V55 tmp45 [V55 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg"
+;* V56 tmp46 [V56,T36] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
+; V57 tmp47 [V57,T18] ( 2, 32 ) ushort -> r9 "Inlining Arg"
+; V58 tmp48 [V58,T19] ( 2, 32 ) ushort -> r10 "Inlining Arg"
+; V59 tmp49 [V59,T29] ( 2, 16 ) ushort -> r10 ld-addr-op "Inline ldloca(s) first use temp"
+; V60 tmp50 [V60,T30] ( 2, 16 ) ushort -> r9 ld-addr-op "Inline ldloca(s) first use temp"
+; V61 tmp51 [V61,T20] ( 2, 32 ) ushort -> r8 "Inlining Arg"
+; V62 tmp52 [V62,T21] ( 2, 32 ) ushort -> r11 "Inlining Arg"
+; V63 tmp53 [V63,T31] ( 2, 16 ) ushort -> r11 ld-addr-op "Inline ldloca(s) first use temp"
+; V64 tmp54 [V64,T32] ( 2, 16 ) ushort -> r8 ld-addr-op "Inline ldloca(s) first use temp"
+; V65 tmp55 [V65,T22] ( 3, 24 ) int -> r9 "Inline return value spill temp"
+; V66 tmp56 [V66,T00] ( 7,112 ) int -> r9 "Inlining Arg"
+; V67 tmp57 [V67,T33] ( 2, 16 ) long -> r10 "Inline stloc first use temp"
+;* V68 tmp58 [V68 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V69 tmp59 [V69 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V70 tmp60 [V70 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V71 tmp61 [V71 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
+;* V72 tmp62 [V72 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+; V73 tmp63 [V73,T15] ( 4, 32 ) int -> r10 "Inline stloc first use temp"
+;* V74 tmp64 [V74 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V75 tmp65 [V75 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V76 tmp66 [V76 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V77 tmp67 [V77 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V78 tmp68 [V78 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V79 tmp69 [V79 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V80 tmp70 [V80 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V81 tmp71 [V81 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V82 tmp72 [V82 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V83 tmp73 [V83 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V84 tmp74 [V84 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+; V85 tmp75 [V85,T23] ( 3, 24 ) int -> r8 "Inline return value spill temp"
+; V86 tmp76 [V86,T01] ( 7,112 ) int -> r8 "Inlining Arg"
+; V87 tmp77 [V87,T34] ( 2, 16 ) long -> r11 "Inline stloc first use temp"
+;* V88 tmp78 [V88 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V89 tmp79 [V89 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V90 tmp80 [V90 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp"
+;* V91 tmp81 [V91 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
+;* V92 tmp82 [V92 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+; V93 tmp83 [V93,T16] ( 4, 32 ) int -> r11 "Inline stloc first use temp"
+;* V94 tmp84 [V94 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V95 tmp85 [V95 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V96 tmp86 [V96 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V97 tmp87 [V97 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V98 tmp88 [V98 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V99 tmp89 [V99 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V100 tmp90 [V100 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V101 tmp91 [V101 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V102 tmp92 [V102 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V103 tmp93 [V103 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V104 tmp94 [V104 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+; V105 tmp95 [V105,T38] ( 3, 3 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP
+; V106 tmp96 [V106,T41] ( 2, 2 ) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP
+; V107 tmp97 [V107,T39] ( 3, 3 ) byref -> rdx single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+; V108 tmp98 [V108,T40] ( 3, 3 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V109 tmp99 [V109 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V110 tmp100 [V110 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
+;* V111 tmp101 [V111 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+;* V112 tmp102 [V112 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
+;* V113 tmp103 [V113 ] ( 0, 0 ) byref -> zero-ref "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V114 tmp104 [V114 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
+;* V115 tmp105 [V115 ] ( 0, 0 ) byref -> zero-ref "field V21._reference (fldOffset=0x0)" P-INDEP
+;* V116 tmp106 [V116 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP
+;* V117 tmp107 [V117 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP
+;* V118 tmp108 [V118 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP
+;* V119 tmp109 [V119 ] ( 0, 0 ) byref -> zero-ref "field V25._reference (fldOffset=0x0)" P-INDEP
+;* V120 tmp110 [V120 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP
+;* V121 tmp111 [V121 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP
+;* V122 tmp112 [V122 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP
+;* V123 tmp113 [V123 ] ( 0, 0 ) byref -> zero-ref "field V27._reference (fldOffset=0x0)" P-INDEP
+;* V124 tmp114 [V124 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP
+;* V125 tmp115 [V125 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP
+;* V126 tmp116 [V126 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x8)" P-INDEP
+;* V127 tmp117 [V127 ] ( 0, 0 ) byref -> zero-ref "field V29._reference (fldOffset=0x0)" P-INDEP
+;* V128 tmp118 [V128 ] ( 0, 0 ) int -> zero-ref "field V29._length (fldOffset=0x8)" P-INDEP
+;* V129 tmp119 [V129 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP
+;* V130 tmp120 [V130 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP
+;* V131 tmp121 [V131 ] ( 0, 0 ) byref -> zero-ref "field V31._reference (fldOffset=0x0)" P-INDEP
+;* V132 tmp122 [V132 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP
+;* V133 tmp123 [V133 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP
+;* V134 tmp124 [V134 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP
+;* V135 tmp125 [V135 ] ( 0, 0 ) byref -> zero-ref "field V33._reference (fldOffset=0x0)" P-INDEP
+;* V136 tmp126 [V136 ] ( 0, 0 ) int -> zero-ref "field V33._length (fldOffset=0x8)" P-INDEP
+;* V137 tmp127 [V137 ] ( 0, 0 ) byref -> zero-ref "field V37._reference (fldOffset=0x0)" P-INDEP
+;* V138 tmp128 [V138 ] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x8)" P-INDEP
+;* V139 tmp129 [V139 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP
+;* V140 tmp130 [V140 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP
+;* V141 tmp131 [V141 ] ( 0, 0 ) byref -> zero-ref "field V42._reference (fldOffset=0x0)" P-INDEP
+;* V142 tmp132 [V142 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP
+;* V143 tmp133 [V143 ] ( 0, 0 ) byref -> zero-ref "field V44._reference (fldOffset=0x0)" P-INDEP
+;* V144 tmp134 [V144 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP
+;* V145 tmp135 [V145 ] ( 0, 0 ) byref -> zero-ref "field V45._reference (fldOffset=0x0)" P-INDEP
+;* V146 tmp136 [V146 ] ( 0, 0 ) int -> zero-ref "field V45._length (fldOffset=0x8)" P-INDEP
+;* V147 tmp137 [V147 ] ( 0, 0 ) byref -> zero-ref "field V46._reference (fldOffset=0x0)" P-INDEP
+;* V148 tmp138 [V148 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x8)" P-INDEP
+;* V149 tmp139 [V149 ] ( 0, 0 ) byref -> zero-ref "field V47._reference (fldOffset=0x0)" P-INDEP
+;* V150 tmp140 [V150 ] ( 0, 0 ) int -> zero-ref "field V47._length (fldOffset=0x8)" P-INDEP
+;* V151 tmp141 [V151 ] ( 0, 0 ) byref -> zero-ref "field V48._reference (fldOffset=0x0)" P-INDEP
+;* V152 tmp142 [V152 ] ( 0, 0 ) int -> zero-ref "field V48._length (fldOffset=0x8)" P-INDEP
+;* V153 tmp143 [V153 ] ( 0, 0 ) byref -> zero-ref "field V49._reference (fldOffset=0x0)" P-INDEP
+;* V154 tmp144 [V154 ] ( 0, 0 ) int -> zero-ref "field V49._length (fldOffset=0x8)" P-INDEP
+;* V155 tmp145 [V155 ] ( 0, 0 ) byref -> zero-ref "field V50._reference (fldOffset=0x0)" P-INDEP
+;* V156 tmp146 [V156 ] ( 0, 0 ) int -> zero-ref "field V50._length (fldOffset=0x8)" P-INDEP
+;* V157 tmp147 [V157 ] ( 0, 0 ) byref -> zero-ref "field V51._reference (fldOffset=0x0)" P-INDEP
+;* V158 tmp148 [V158 ] ( 0, 0 ) int -> zero-ref "field V51._length (fldOffset=0x8)" P-INDEP
+;* V159 tmp149 [V159 ] ( 0, 0 ) byref -> zero-ref "field V52._reference (fldOffset=0x0)" P-INDEP
+;* V160 tmp150 [V160 ] ( 0, 0 ) int -> zero-ref "field V52._length (fldOffset=0x8)" P-INDEP
+;* V161 tmp151 [V161 ] ( 0, 0 ) byref -> zero-ref "field V68._reference (fldOffset=0x0)" P-INDEP
+;* V162 tmp152 [V162 ] ( 0, 0 ) int -> zero-ref "field V68._length (fldOffset=0x8)" P-INDEP
+;* V163 tmp153 [V163 ] ( 0, 0 ) byref -> zero-ref "field V72._reference (fldOffset=0x0)" P-INDEP
+;* V164 tmp154 [V164 ] ( 0, 0 ) int -> zero-ref "field V72._length (fldOffset=0x8)" P-INDEP
+;* V165 tmp155 [V165 ] ( 0, 0 ) byref -> zero-ref "field V74._reference (fldOffset=0x0)" P-INDEP
+;* V166 tmp156 [V166 ] ( 0, 0 ) int -> zero-ref "field V74._length (fldOffset=0x8)" P-INDEP
+;* V167 tmp157 [V167 ] ( 0, 0 ) byref -> zero-ref "field V76._reference (fldOffset=0x0)" P-INDEP
+;* V168 tmp158 [V168 ] ( 0, 0 ) int -> zero-ref "field V76._length (fldOffset=0x8)" P-INDEP
+;* V169 tmp159 [V169 ] ( 0, 0 ) byref -> zero-ref "field V77._reference (fldOffset=0x0)" P-INDEP
+;* V170 tmp160 [V170 ] ( 0, 0 ) int -> zero-ref "field V77._length (fldOffset=0x8)" P-INDEP
+;* V171 tmp161 [V171 ] ( 0, 0 ) byref -> zero-ref "field V78._reference (fldOffset=0x0)" P-INDEP
+;* V172 tmp162 [V172 ] ( 0, 0 ) int -> zero-ref "field V78._length (fldOffset=0x8)" P-INDEP
+;* V173 tmp163 [V173 ] ( 0, 0 ) byref -> zero-ref "field V79._reference (fldOffset=0x0)" P-INDEP
+;* V174 tmp164 [V174 ] ( 0, 0 ) int -> zero-ref "field V79._length (fldOffset=0x8)" P-INDEP
+;* V175 tmp165 [V175 ] ( 0, 0 ) byref -> zero-ref "field V80._reference (fldOffset=0x0)" P-INDEP
+;* V176 tmp166 [V176 ] ( 0, 0 ) int -> zero-ref "field V80._length (fldOffset=0x8)" P-INDEP
+;* V177 tmp167 [V177 ] ( 0, 0 ) byref -> zero-ref "field V81._reference (fldOffset=0x0)" P-INDEP
+;* V178 tmp168 [V178 ] ( 0, 0 ) int -> zero-ref "field V81._length (fldOffset=0x8)" P-INDEP
+;* V179 tmp169 [V179 ] ( 0, 0 ) byref -> zero-ref "field V82._reference (fldOffset=0x0)" P-INDEP
+;* V180 tmp170 [V180 ] ( 0, 0 ) int -> zero-ref "field V82._length (fldOffset=0x8)" P-INDEP
+;* V181 tmp171 [V181 ] ( 0, 0 ) byref -> zero-ref "field V83._reference (fldOffset=0x0)" P-INDEP
+;* V182 tmp172 [V182 ] ( 0, 0 ) int -> zero-ref "field V83._length (fldOffset=0x8)" P-INDEP
+;* V183 tmp173 [V183 ] ( 0, 0 ) byref -> zero-ref "field V84._reference (fldOffset=0x0)" P-INDEP
+;* V184 tmp174 [V184 ] ( 0, 0 ) int -> zero-ref "field V84._length (fldOffset=0x8)" P-INDEP
+;* V185 tmp175 [V185 ] ( 0, 0 ) byref -> zero-ref "field V88._reference (fldOffset=0x0)" P-INDEP
+;* V186 tmp176 [V186 ] ( 0, 0 ) int -> zero-ref "field V88._length (fldOffset=0x8)" P-INDEP
+;* V187 tmp177 [V187 ] ( 0, 0 ) byref -> zero-ref "field V92._reference (fldOffset=0x0)" P-INDEP
+;* V188 tmp178 [V188 ] ( 0, 0 ) int -> zero-ref "field V92._length (fldOffset=0x8)" P-INDEP
+;* V189 tmp179 [V189 ] ( 0, 0 ) byref -> zero-ref "field V94._reference (fldOffset=0x0)" P-INDEP
+;* V190 tmp180 [V190 ] ( 0, 0 ) int -> zero-ref "field V94._length (fldOffset=0x8)" P-INDEP
+;* V191 tmp181 [V191 ] ( 0, 0 ) byref -> zero-ref "field V96._reference (fldOffset=0x0)" P-INDEP
+;* V192 tmp182 [V192 ] ( 0, 0 ) int -> zero-ref "field V96._length (fldOffset=0x8)" P-INDEP
+;* V193 tmp183 [V193 ] ( 0, 0 ) byref -> zero-ref "field V97._reference (fldOffset=0x0)" P-INDEP
+;* V194 tmp184 [V194 ] ( 0, 0 ) int -> zero-ref "field V97._length (fldOffset=0x8)" P-INDEP
+;* V195 tmp185 [V195 ] ( 0, 0 ) byref -> zero-ref "field V98._reference (fldOffset=0x0)" P-INDEP
+;* V196 tmp186 [V196 ] ( 0, 0 ) int -> zero-ref "field V98._length (fldOffset=0x8)" P-INDEP
+;* V197 tmp187 [V197 ] ( 0, 0 ) byref -> zero-ref "field V99._reference (fldOffset=0x0)" P-INDEP
+;* V198 tmp188 [V198 ] ( 0, 0 ) int -> zero-ref "field V99._length (fldOffset=0x8)" P-INDEP
+;* V199 tmp189 [V199 ] ( 0, 0 ) byref -> zero-ref "field V100._reference (fldOffset=0x0)" P-INDEP
+;* V200 tmp190 [V200 ] ( 0, 0 ) int -> zero-ref "field V100._length (fldOffset=0x8)" P-INDEP
+;* V201 tmp191 [V201 ] ( 0, 0 ) byref -> zero-ref "field V101._reference (fldOffset=0x0)" P-INDEP
+;* V202 tmp192 [V202 ] ( 0, 0 ) int -> zero-ref "field V101._length (fldOffset=0x8)" P-INDEP
+;* V203 tmp193 [V203 ] ( 0, 0 ) byref -> zero-ref "field V102._reference (fldOffset=0x0)" P-INDEP
+;* V204 tmp194 [V204 ] ( 0, 0 ) int -> zero-ref "field V102._length (fldOffset=0x8)" P-INDEP
+;* V205 tmp195 [V205 ] ( 0, 0 ) byref -> zero-ref "field V103._reference (fldOffset=0x0)" P-INDEP
+;* V206 tmp196 [V206 ] ( 0, 0 ) int -> zero-ref "field V103._length (fldOffset=0x8)" P-INDEP
+;* V207 tmp197 [V207 ] ( 0, 0 ) byref -> zero-ref "field V104._reference (fldOffset=0x0)" P-INDEP
+;* V208 tmp198 [V208 ] ( 0, 0 ) int -> zero-ref "field V104._length (fldOffset=0x8)" P-INDEP
+; V209 tmp199 [V209,T42] ( 2, 4 ) long -> rdi "Cast away GC"
+; V210 tmp200 [V210,T43] ( 2, 4 ) long -> rdx "Cast away GC"
+; V211 cse0 [V211,T24] ( 3, 24 ) int -> r10 "CSE #07: moderate"
+; V212 cse1 [V212,T25] ( 3, 24 ) int -> r11 "CSE #08: moderate"
+; V213 cse2 [V213,T06] ( 6, 64 ) int -> r8 "CSE #01: aggressive"
+; V214 cse3 [V214,T07] ( 7, 56 ) int -> r9 multi-def "CSE #02: aggressive"
+; V215 cse4 [V215,T08] ( 6, 48 ) long -> r15 multi-def "CSE #03: aggressive"
+; V216 cse5 [V216,T09] ( 6, 48 ) long -> r14 multi-def "CSE #04: aggressive"
+; V217 cse6 [V217,T10] ( 6, 48 ) long -> r13 multi-def "CSE #05: aggressive"
+; V218 cse7 [V218,T11] ( 6, 48 ) long -> r12 multi-def "CSE #06: aggressive"
+; V219 rat0 [V219,T44] ( 3, 3 ) long -> rax "ReplaceWithLclVar is creating a new local variable"
;
-; Lcl frame size = 72
+; Lcl frame size = 24
G_M25271_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 72
- lea rbp, [rsp+0x70]
+ sub rsp, 24
+ lea rbp, [rsp+0x40]
xor eax, eax
mov qword ptr [rbp-0x30], rax
mov qword ptr [rbp-0x38], rax
;; size=29 bbWeight=1 PerfScore 9.00
G_M25271_IG02:
mov bword ptr [rbp-0x30], rdi
- mov rbx, rdi
mov bword ptr [rbp-0x38], rdx
- mov r15, rdx
- mov edi, ecx
- lea r14, [r15+2*rdi-0x02]
+ mov eax, ecx
+ lea rax, [rdx+2*rax-0x02]
sub esi, ecx
- movsxd rdi, esi
- lea r13, [rbx+2*rdi]
- cmp r13, rbx
+ movsxd rcx, esi
+ lea rbx, [rdi+2*rcx]
+ cmp rbx, rdi
jb G_M25271_IG13
- ;; size=39 bbWeight=1 PerfScore 6.00
+ ;; size=33 bbWeight=1 PerfScore 5.50
G_M25271_IG03:
- mov r12, r15
- mov rdi, r13
- cmp r15, r14
+ mov rcx, rdx
+ mov rsi, rbx
+ cmp rdx, rax
ja G_M25271_IG12
+ align [0 bytes for IG04]
;; size=15 bbWeight=4 PerfScore 7.00
G_M25271_IG04:
- movzx rax, word ptr [r12]
- lea ecx, [rax-0xD800]
- cmp ecx, 0x3FF
+ movzx r8, word ptr [rcx]
+ lea r9d, [r8-0xD800]
+ cmp r9d, 0x3FF
ja G_M25271_IG09
- ;; size=23 bbWeight=16 PerfScore 60.00
+ ;; size=24 bbWeight=16 PerfScore 60.00
G_M25271_IG05:
- cmp r12, r14
+ cmp rcx, rax
je G_M25271_IG09
- movzx rcx, word ptr [rdi]
- lea edx, [rcx-0xD800]
- cmp edx, 0x3FF
+ movzx r9, word ptr [rsi]
+ lea r10d, [r9-0xD800]
+ cmp r10d, 0x3FF
ja SHORT G_M25271_IG06
- movzx rdx, word ptr [rdi+0x02]
- lea esi, [rdx-0xDC00]
- cmp esi, 0x3FF
+ movzx r10, word ptr [rsi+0x02]
+ lea r11d, [r10-0xDC00]
+ cmp r11d, 0x3FF
ja SHORT G_M25271_IG06
- movzx rsi, word ptr [r12+0x02]
- lea r8d, [rsi-0xDC00]
- cmp r8d, 0x3FF
+ movzx r11, word ptr [rcx+0x02]
+ lea r15d, [r11-0xDC00]
+ cmp r15d, 0x3FF
jbe SHORT G_M25271_IG07
- ;; size=66 bbWeight=8 PerfScore 100.00
+ ;; size=71 bbWeight=8 PerfScore 100.00
G_M25271_IG06:
- cmp eax, ecx
+ cmp r8d, r9d
jne G_M25271_IG12
- add rdi, 2
- mov qword ptr [rbp-0x40], rdi
- add r12, 2
- mov rdi, qword ptr [rbp-0x40]
+ add rsi, 2
+ add rcx, 2
jmp G_M25271_IG11
- ;; size=29 bbWeight=8 PerfScore 46.00
+ ;; size=22 bbWeight=8 PerfScore 30.00
G_M25271_IG07:
- mov dword ptr [rbp-0x58], eax
- mov dword ptr [rbp-0x5C], esi
- shl ecx, 10
- lea ecx, [rcx+rdx+D1FFAB1EH]
- mov dword ptr [rbp-0x60], ecx
- cmp ecx, 0xD1FFAB1E
- mov qword ptr [rbp-0x40], rdi
+ shl r9d, 10
+ lea r9d, [r9+r10+D1FFAB1EH]
+ cmp r9d, 0xD1FFAB1E
ja G_M25271_IG15
- mov edi, ecx
- mov rdx, 0xD1FFAB1E ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- call [rdx]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- mov rcx, 0xD1FFAB1E ; static handle
- mov qword ptr [rbp-0x70], rcx
- movzx rdi, word ptr [rcx+2*rax]
- mov eax, dword ptr [rbp-0x60]
- add edi, eax
- movzx rdi, di
- and eax, -0x10000
- or edi, eax
- lea eax, [rdi+D1FFAB1EH]
- shr eax, 10
- movzx rax, ax
- mov dword ptr [rbp-0x50], eax
- and edi, 0x3FF
- add edi, 0xDC00
- movzx rdx, di
- mov dword ptr [rbp-0x54], edx
- mov edi, dword ptr [rbp-0x58]
- shl edi, 10
- mov esi, dword ptr [rbp-0x5C]
- lea esi, [rdi+rsi+D1FFAB1EH]
- mov dword ptr [rbp-0x64], esi
- cmp esi, 0xD1FFAB1E
+ mov r10d, r9d
+ shr r10d, 9
+ mov r15, 0xD1FFAB1E ; static handle
+ movzx r10, byte ptr [r10+r15]
+ shl r10d, 6
+ mov r14d, r9d
+ shr r14d, 3
+ and r14d, 62
+ add r10d, r14d
+ mov r14, 0xD1FFAB1E ; static handle
+ movzx r10, word ptr [r10+r14]
+ shl r10d, 4
+ mov r13d, r9d
+ and r13d, 15
+ add r10d, r13d
+ mov r13, 0xD1FFAB1E ; static handle
+ movzx r10, byte ptr [r10+r13]
+ mov r12, 0xD1FFAB1E ; static handle
+ movzx r10, word ptr [r12+2*r10]
+ add r10d, r9d
+ movzx r10, r10w
+ and r9d, -0x10000
+ or r9d, r10d
+ lea r10d, [r9+D1FFAB1EH]
+ shr r10d, 10
+ movzx r10, r10w
+ and r9d, 0x3FF
+ add r9d, 0xDC00
+ movzx r9, r9w
+ shl r8d, 10
+ lea r8d, [r8+r11+D1FFAB1EH]
+ cmp r8d, 0xD1FFAB1E
ja G_M25271_IG15
- mov edi, esi
- mov r8, 0xD1FFAB1E ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- call [r8]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- mov rcx, qword ptr [rbp-0x70]
- movzx rdi, word ptr [rcx+2*rax]
- mov esi, dword ptr [rbp-0x64]
- add edi, esi
- movzx rdi, di
- and esi, -0x10000
- or edi, esi
- lea eax, [rdi+D1FFAB1EH]
- shr eax, 10
- movzx rax, ax
- and edi, 0x3FF
- add edi, 0xDC00
- movzx rdi, di
- mov ecx, dword ptr [rbp-0x50]
- cmp ecx, eax
- jne G_M25271_IG12
- mov edx, dword ptr [rbp-0x54]
- cmp edx, edi
- ;; size=228 bbWeight=8 PerfScore 314.00
+ mov r11d, r8d
+ shr r11d, 9
+ movzx r11, byte ptr [r11+r15]
+ shl r11d, 6
+ mov r15d, r8d
+ shr r15d, 3
+ and r15d, 62
+ add r11d, r15d
+ movzx r11, word ptr [r11+r14]
+ shl r11d, 4
+ mov r14d, r8d
+ and r14d, 15
+ add r11d, r14d
+ movzx r11, byte ptr [r11+r13]
+ movzx r11, word ptr [r12+2*r11]
+ add r11d, r8d
+ movzx r11, r11w
+ and r8d, -0x10000
+ or r8d, r11d
+ lea r11d, [r8+D1FFAB1EH]
+ shr r11d, 10
+ movzx r11, r11w
+ and r8d, 0x3FF
+ add r8d, 0xDC00
+ movzx r8, r8w
+ cmp r10d, r11d
+ ;; size=311 bbWeight=8 PerfScore 290.00
G_M25271_IG08:
jne G_M25271_IG12
- mov rax, qword ptr [rbp-0x40]
- add rax, 4
- add r12, 4
- mov rdi, rax
- jmp SHORT G_M25271_IG11
- ;; size=23 bbWeight=8 PerfScore 38.00
+ cmp r9d, r8d
+ jne G_M25271_IG12
+ add rsi, 4
+ add rcx, 4
+ jmp G_M25271_IG11
+ ;; size=28 bbWeight=8 PerfScore 38.00
G_M25271_IG09:
- mov qword ptr [rbp-0x40], rdi
- movzx rcx, word ptr [rdi]
- cmp eax, ecx
- je SHORT G_M25271_IG10
- mov dword ptr [rbp-0x48], eax
- mov edi, eax
- mov rcx, 0xD1FFAB1E ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- call [rcx]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- mov rcx, 0xD1FFAB1E ; static handle
- mov qword ptr [rbp-0x70], rcx
- movsx rdi, word ptr [rcx+2*rax]
- add edi, dword ptr [rbp-0x48]
- movzx rax, di
- mov dword ptr [rbp-0x44], eax
- mov rdx, qword ptr [rbp-0x40]
- movzx rsi, word ptr [rdx]
- mov dword ptr [rbp-0x4C], esi
- mov edi, esi
- mov r8, 0xD1FFAB1E ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- call [r8]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- mov rdi, qword ptr [rbp-0x70]
- movsx rdi, word ptr [rdi+2*rax]
- add edi, dword ptr [rbp-0x4C]
- movzx rdi, di
- cmp edi, dword ptr [rbp-0x44]
+ movzx r9, word ptr [rsi]
+ cmp r8d, r9d
+ je G_M25271_IG10
+ mov r10d, r8d
+ shr r10d, 9
+ mov r15, 0xD1FFAB1E ; static handle
+ movzx r10, byte ptr [r10+r15]
+ shl r10d, 6
+ mov r11d, r8d
+ shr r11d, 3
+ and r11d, 62
+ add r10d, r11d
+ mov r14, 0xD1FFAB1E ; static handle
+ movzx r10, word ptr [r10+r14]
+ shl r10d, 4
+ mov r11d, r8d
+ and r11d, 15
+ add r10d, r11d
+ mov r13, 0xD1FFAB1E ; static handle
+ movzx r10, byte ptr [r10+r13]
+ mov r12, 0xD1FFAB1E ; static handle
+ movsx r10, word ptr [r12+2*r10]
+ add r8d, r10d
+ movzx r8, r8w
+ mov r10d, r9d
+ shr r10d, 9
+ movzx r10, byte ptr [r10+r15]
+ shl r10d, 6
+ mov r11d, r9d
+ shr r11d, 3
+ and r11d, 62
+ add r10d, r11d
+ movzx r10, word ptr [r10+r14]
+ shl r10d, 4
+ mov r11d, r9d
+ and r11d, 15
+ add r10d, r11d
+ movzx r10, byte ptr [r10+r13]
+ movsx r10, word ptr [r12+2*r10]
+ add r9d, r10d
+ movzx r9, r9w
+ cmp r9d, r8d
jne SHORT G_M25271_IG12
- ;; size=101 bbWeight=8 PerfScore 280.00
+ ;; size=190 bbWeight=8 PerfScore 272.00
G_M25271_IG10:
- add r12, 2
- mov rdi, qword ptr [rbp-0x40]
- add rdi, 2
- ;; size=12 bbWeight=8 PerfScore 12.00
+ add rcx, 2
+ add rsi, 2
+ ;; size=8 bbWeight=8 PerfScore 4.00
G_M25271_IG11:
- cmp r12, r14
+ cmp rcx, rax
jbe G_M25271_IG04
;; size=9 bbWeight=16 PerfScore 20.00
G_M25271_IG12:
- cmp r12, r14
+ cmp rcx, rax
ja SHORT G_M25271_IG16
- add r13, -2
- cmp r13, rbx
+ add rbx, -2
+ cmp rbx, rdi
jae G_M25271_IG03
;; size=18 bbWeight=4 PerfScore 11.00
G_M25271_IG13:
mov eax, -1
;; size=5 bbWeight=0.50 PerfScore 0.12
G_M25271_IG14:
- add rsp, 72
+ add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
G_M25271_IG15:
mov edi, 83
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int)
int3
;; size=18 bbWeight=0.50 PerfScore 1.88
G_M25271_IG16:
- mov rax, r13
- sub rax, rbx
+ mov rax, rbx
+ sub rax, rdi
mov rcx, rax
shr rcx, 63
add rax, rcx
sar rax, 1
;; size=19 bbWeight=0.50 PerfScore 1.00
G_M25271_IG17:
- add rsp, 72
+ add rsp, 24
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=15 bbWeight=0.50 PerfScore 2.12
-; Total bytes of code 664, prolog size 29, PerfScore 910.25, instruction count 175, allocated bytes for code 664 (MethodHash=c4829d48) for method System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
+; Total bytes of code 830, prolog size 29, PerfScore 853.75, instruction count 196, allocated bytes for code 830 (MethodHash=c4829d48) for method System.Globalization.InvariantModeCasing:LastIndexOfIgnoreCase(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort]):int (FullOpts)
; ============================================================ 54 (135.00 % of base) - System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort ; Assembly listing for method System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rsp based frame
; partially interruptible
; No PGO data
-; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 9 single block inlinees; 4 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 3, 3 ) ushort -> rdi single-def
-; V01 loc0 [V01,T02] ( 2, 2 ) long -> rax
+; V00 arg0 [V00,T01] ( 3, 3 ) ushort -> rdi single-def
+; V01 loc0 [V01,T03] ( 2, 2 ) long -> rcx
;* V02 loc1 [V02 ] ( 0, 0 ) byref -> zero-ref
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
-;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
-;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
-;* V07 tmp4 [V07 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
-;* V08 tmp5 [V08 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
-;* V09 tmp6 [V09 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP
-;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP
-;* V11 tmp8 [V11 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP
-;* V12 tmp9 [V12 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
-; V13 cse0 [V13,T01] ( 3, 3 ) int -> rbx "CSE #01: aggressive"
+;* V05 tmp2 [V05 ] ( 0, 0 ) long -> zero-ref "Inline return value spill temp"
+;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+; V07 tmp4 [V07,T02] ( 4, 4 ) int -> rcx "Inline stloc first use temp"
+;* V08 tmp5 [V08 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V09 tmp6 [V09 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp"
+;* V10 tmp7 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" <System.ReadOnlySpan`1[ubyte]>
+;* V11 tmp8 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V12 tmp9 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V13 tmp10 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V15 tmp12 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V17 tmp14 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[ubyte]>
+;* V18 tmp15 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" <System.ReadOnlySpan`1[ubyte]>
+;* V19 tmp16 [V19 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP
+;* V20 tmp17 [V20 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP
+;* V21 tmp18 [V21 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V22 tmp19 [V22 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP
+;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP
+;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP
+;* V25 tmp22 [V25 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP
+;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP
+;* V27 tmp24 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP
+;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP
+;* V29 tmp26 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP
+;* V30 tmp27 [V30 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP
+;* V31 tmp28 [V31 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP
+;* V32 tmp29 [V32 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP
+;* V33 tmp30 [V33 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP
+;* V34 tmp31 [V34 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP
+;* V35 tmp32 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP
+;* V36 tmp33 [V36 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP
+;* V37 tmp34 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP
+;* V38 tmp35 [V38 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP
+;* V39 tmp36 [V39 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP
+;* V40 tmp37 [V40 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP
+;* V41 tmp38 [V41 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP
+;* V42 tmp39 [V42 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP
+; V43 cse0 [V43,T00] ( 5, 5 ) int -> rax "CSE #01: aggressive"
;
; Lcl frame size = 0
G_M18090_IG01:
- push rbx
- ;; size=1 bbWeight=1 PerfScore 1.00
+ ;; size=0 bbWeight=1 PerfScore 0.00
G_M18090_IG02:
- movzx rbx, di
- mov edi, ebx
- mov rax, 0xD1FFAB1E ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- call [rax]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong
- mov rcx, 0xD1FFAB1E ; static handle
- movsx rax, word ptr [rcx+2*rax]
- add eax, ebx
+ movzx rax, di
+ mov ecx, eax
+ shr ecx, 9
+ mov rdx, 0xD1FFAB1E ; static handle
+ movzx rcx, byte ptr [rcx+rdx]
+ shl ecx, 6
+ mov edx, eax
+ shr edx, 3
+ and edx, 62
+ add ecx, edx
+ mov rdx, 0xD1FFAB1E ; static handle
+ movzx rcx, word ptr [rcx+rdx]
+ shl ecx, 4
+ mov edx, eax
+ and edx, 15
+ add ecx, edx
+ mov rdx, 0xD1FFAB1E ; static handle
+ movzx rcx, byte ptr [rcx+rdx]
+ mov rdx, 0xD1FFAB1E ; static handle
+ movsx rcx, word ptr [rdx+2*rcx]
+ add eax, ecx
movzx rax, ax
- ;; size=37 bbWeight=1 PerfScore 8.50
+ ;; size=93 bbWeight=1 PerfScore 15.50
G_M18090_IG03:
- pop rbx
ret
- ;; size=2 bbWeight=1 PerfScore 1.50
+ ;; size=1 bbWeight=1 PerfScore 1.00
-; Total bytes of code 40, prolog size 1, PerfScore 11.00, instruction count 11, allocated bytes for code 40 (MethodHash=1f2bb955) for method System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
+; Total bytes of code 94, prolog size 0, PerfScore 16.50, instruction count 23, allocated bytes for code 94 (MethodHash=1f2bb955) for method System.Globalization.CharUnicodeInfo:ToLower(ushort):ushort (FullOpts)
; ============================================================ Larger list of diffs: https://gist.github.com/MihuBot/e1206ad081a5241c5730af92aacd99b0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 15 minutes 27 seconds.
dotnet/runtime#111569
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: