MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] xtqqczze/dotnet-runtime/UIntCastLengthCheck #555

Open MihuBot opened 1 month ago

MihuBot commented 1 month ago

Job completed in 14 minutes.

Diffs

Found 273 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39660267
Total bytes of diff: 39659626
Total bytes of delta: -641 (-0.00 % of base)
Total relative delta: -4.30
    diff is an improvement.
    relative diff is an improvement.

Top file improvements (bytes):
        -270 : System.IO.Hashing.dasm (-1.06 % of base)
        -158 : System.Private.CoreLib.dasm (-0.00 % of base)
         -73 : System.Private.Xml.dasm (-0.00 % of base)
         -73 : System.Text.Json.dasm (-0.01 % of base)
         -34 : System.Reflection.Metadata.dasm (-0.01 % of base)
         -23 : System.Net.Primitives.dasm (-0.03 % of base)
         -10 : System.Formats.Tar.dasm (-0.01 % of base)

7 total files with Code Size differences (7 improved, 0 regressed), 252 unchanged.

Top method regressions (bytes):
          10 (2.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)

Top method improvements (bytes):
         -85 (-32.32 % of base) : System.Private.CoreLib.dasm - System.Decimal:ToDecimal(System.ReadOnlySpan`1[ubyte]):System.Decimal (FullOpts)
         -73 (-20.56 % of base) : System.Private.Xml.dasm - System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int:this (FullOpts)
         -61 (-2.42 % of base) : System.Text.Json.dasm - System.Text.Json.JsonDocument:Parse(System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonReaderOptions,byref,byref) (FullOpts)
         -55 (-47.83 % of base) : System.Private.CoreLib.dasm - System.Decimal:GetBytes(byref,System.Span`1[ubyte]) (FullOpts)
         -43 (-31.16 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts)
         -43 (-39.81 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,int):ubyte (FullOpts)
         -43 (-39.45 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,long):ubyte (FullOpts)
         -37 (-17.70 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts)
         -31 (-16.67 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts)
         -25 (-29.41 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],int):int (FullOpts)
         -24 (-20.87 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts)
         -24 (-27.91 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],long):int (FullOpts)
         -23 (-20.72 % of base) : System.Net.Primitives.dasm - System.Net.IPAddress:TryWriteBytes(System.Span`1[ubyte],byref):ubyte:this (FullOpts)
         -12 (-11.43 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte],ubyte,byref):ubyte:this (FullOpts)
         -11 (-33.33 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this (FullOpts)
         -10 (-3.56 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this (FullOpts)
          -9 (-2.17 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts)
          -6 (-6.38 % of base) : System.Text.Json.dasm - System.Text.Json.JsonDocument+MetadataDb:SetHasComplexChildren(int):this (FullOpts)
          -6 (-6.25 % of base) : System.Text.Json.dasm - System.Text.Json.JsonDocument+MetadataDb:SetNumberOfRows(int,int):this (FullOpts)
          -5 (-7.69 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)
          -5 (-5.75 % of base) : System.Reflection.Metadata.dasm - System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts)
          -5 (-3.14 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts)
          -5 (-4.10 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts)
          -5 (-1.54 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.MetadataBuilder:GetOrAddGuid(System.Guid):System.Reflection.Metadata.GuidHandle:this (FullOpts)
          -5 (-0.67 % of base) : System.Reflection.Metadata.dasm - System.Reflection.PortableExecutable.DebugDirectoryBuilder:WriteCodeViewData(System.Reflection.Metadata.BlobBuilder,System.String,System.Guid,int):int (FullOpts)

Top method regressions (percentages):
          10 (2.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)

Top method improvements (percentages):
         -55 (-47.83 % of base) : System.Private.CoreLib.dasm - System.Decimal:GetBytes(byref,System.Span`1[ubyte]) (FullOpts)
         -43 (-39.81 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,int):ubyte (FullOpts)
         -43 (-39.45 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,long):ubyte (FullOpts)
         -11 (-33.33 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this (FullOpts)
         -85 (-32.32 % of base) : System.Private.CoreLib.dasm - System.Decimal:ToDecimal(System.ReadOnlySpan`1[ubyte]):System.Decimal (FullOpts)
         -43 (-31.16 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts)
         -25 (-29.41 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],int):int (FullOpts)
         -24 (-27.91 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.XxHash64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],long):int (FullOpts)
         -24 (-20.87 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts)
         -23 (-20.72 % of base) : System.Net.Primitives.dasm - System.Net.IPAddress:TryWriteBytes(System.Span`1[ubyte],byref):ubyte:this (FullOpts)
         -73 (-20.56 % of base) : System.Private.Xml.dasm - System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int:this (FullOpts)
         -37 (-17.70 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts)
         -31 (-16.67 % of base) : System.IO.Hashing.dasm - System.IO.Hashing.Crc32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts)
         -12 (-11.43 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte],ubyte,byref):ubyte:this (FullOpts)
          -5 (-7.69 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)
          -6 (-6.38 % of base) : System.Text.Json.dasm - System.Text.Json.JsonDocument+MetadataDb:SetHasComplexChildren(int):this (FullOpts)
          -6 (-6.25 % of base) : System.Text.Json.dasm - System.Text.Json.JsonDocument+MetadataDb:SetNumberOfRows(int,int):this (FullOpts)
          -5 (-5.75 % of base) : System.Reflection.Metadata.dasm - System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts)
          -5 (-4.10 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts)
         -10 (-3.56 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this (FullOpts)
          -5 (-3.14 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts)
         -61 (-2.42 % of base) : System.Text.Json.dasm - System.Text.Json.JsonDocument:Parse(System.ReadOnlySpan`1[ubyte],System.Text.Json.JsonReaderOptions,byref,byref) (FullOpts)
          -9 (-2.17 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts)
          -5 (-1.54 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.MetadataBuilder:GetOrAddGuid(System.Guid):System.Reflection.Metadata.GuidHandle:this (FullOpts)
          -5 (-0.67 % of base) : System.Reflection.Metadata.dasm - System.Reflection.PortableExecutable.DebugDirectoryBuilder:WriteCodeViewData(System.Reflection.Metadata.BlobBuilder,System.String,System.Guid,int):int (FullOpts)

26 total methods with Code Size differences (25 improved, 1 regressed), 231408 unchanged.

--------------------------------------------------------------------------------

Artifacts:

MihuBot commented 1 month ago

Top method regressions

10 (2.57 % of base) - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) ```diff ; Assembly listing for method System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (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; 23 single block inlinees; 11 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 loc0 [V02,T00] ( 8, 23 ) int -> r12 ; V03 loc1 [V03,T04] ( 5, 14 ) ushort -> [rbp-0x2C] spill-single-def ; V04 loc2 [V04,T12] ( 3, 6 ) ushort -> rdx ; V05 loc3 [V05,T17] ( 2, 4 ) ushort -> rax ld-addr-op ; V06 loc4 [V06,T18] ( 2, 4 ) ushort -> rdi ld-addr-op ;* V07 loc5 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op ;# V08 OutArgs [V08 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V09 tmp1 [V09 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" ;* V10 tmp2 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ; V11 tmp3 [V11,T13] ( 3, 6 ) int -> rdi "Inline return value spill temp" ; V12 tmp4 [V12,T01] ( 5, 20 ) int -> r12 "Inlining Arg" ; V13 tmp5 [V13,T19] ( 2, 4 ) long -> rax "Inline stloc first use temp" ;* V14 tmp6 [V14 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V15 tmp7 [V15 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V16 tmp8 [V16 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V17 tmp9 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V18 tmp10 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V19 tmp11 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V20 tmp12 [V20 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V21 tmp13 [V21 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" ; V22 tmp14 [V22,T20] ( 2, 4 ) ushort -> rax ld-addr-op "Inline stloc first use temp" ;* V23 tmp15 [V23 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V24 tmp16 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V25 tmp17 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V26 tmp18 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V27 tmp19 [V27,T07] ( 2, 8 ) byref -> rax "Inlining Arg" ;* V28 tmp20 [V28 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V29 tmp21 [V29 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" ; V30 tmp22 [V30,T21] ( 2, 4 ) ushort -> rdi ld-addr-op "Inline stloc first use temp" ;* V31 tmp23 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V32 tmp24 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V33 tmp25 [V33 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V34 tmp26 [V34,T08] ( 2, 8 ) byref -> rbx "Inlining Arg" ; V35 tmp27 [V35,T10] ( 2, 8 ) int -> r15 "Inlining Arg" ;* V36 tmp28 [V36 ] ( 0, 0 ) ushort -> zero-ref "Inline return value spill temp" ; V37 tmp29 [V37,T22] ( 2, 4 ) long -> rax "Inline stloc first use temp" ;* V38 tmp30 [V38 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V39 tmp31 [V39 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V40 tmp32 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V41 tmp33 [V41 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V42 tmp34 [V42,T23] ( 2, 4 ) ushort -> rdi ld-addr-op "Inline stloc first use temp" ;* V43 tmp35 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V44 tmp36 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V45 tmp37 [V45 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V46 tmp38 [V46,T09] ( 2, 8 ) byref -> rbx "Inlining Arg" ; V47 tmp39 [V47,T11] ( 2, 8 ) int -> r15 "Inlining Arg" ; V48 tmp40 [V48,T06] ( 3, 7 ) byref -> r13 single-def "field V00._reference (fldOffset=0x0)" P-INDEP ; V49 tmp41 [V49,T05] ( 4, 8 ) int -> r14 single-def "field V00._length (fldOffset=0x8)" P-INDEP ; V50 tmp42 [V50,T02] ( 8, 15 ) byref -> rbx "field V01._reference (fldOffset=0x0)" P-INDEP -; V51 tmp43 [V51,T03] ( 7, 13 ) int -> r15 "field V01._length (fldOffset=0x8)" P-INDEP +; V51 tmp43 [V51,T03] ( 8, 15 ) int -> r15 "field V01._length (fldOffset=0x8)" P-INDEP ;* V52 tmp44 [V52 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP ;* V53 tmp45 [V53 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP ;* V54 tmp46 [V54 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP ;* V55 tmp47 [V55 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP ;* V56 tmp48 [V56 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP ;* V57 tmp49 [V57 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP ;* V58 tmp50 [V58 ] ( 0, 0 ) byref -> zero-ref "field V14._reference (fldOffset=0x0)" P-INDEP ;* V59 tmp51 [V59 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP ;* V60 tmp52 [V60 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP ;* V61 tmp53 [V61 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP ;* V62 tmp54 [V62 ] ( 0, 0 ) byref -> zero-ref "field V18._reference (fldOffset=0x0)" P-INDEP ;* V63 tmp55 [V63 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP ;* V64 tmp56 [V64 ] ( 0, 0 ) byref -> zero-ref "field V19._reference (fldOffset=0x0)" P-INDEP ;* V65 tmp57 [V65 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP ;* V66 tmp58 [V66 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP ;* V67 tmp59 [V67 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP ;* V68 tmp60 [V68 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP ;* V69 tmp61 [V69 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP ;* V70 tmp62 [V70 ] ( 0, 0 ) byref -> zero-ref "field V25._reference (fldOffset=0x0)" P-INDEP ;* V71 tmp63 [V71 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP ;* V72 tmp64 [V72 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP ;* V73 tmp65 [V73 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP ;* V74 tmp66 [V74 ] ( 0, 0 ) byref -> zero-ref "field V31._reference (fldOffset=0x0)" P-INDEP ;* V75 tmp67 [V75 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP ;* V76 tmp68 [V76 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP ;* V77 tmp69 [V77 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP ; V78 tmp70 [V78,T15] ( 2, 4 ) byref -> rbx "field V33._reference (fldOffset=0x0)" P-INDEP ; V79 tmp71 [V79,T24] ( 2, 4 ) int -> r15 "field V33._length (fldOffset=0x8)" P-INDEP ;* V80 tmp72 [V80 ] ( 0, 0 ) byref -> zero-ref "field V38._reference (fldOffset=0x0)" P-INDEP ;* V81 tmp73 [V81 ] ( 0, 0 ) int -> zero-ref "field V38._length (fldOffset=0x8)" P-INDEP ;* V82 tmp74 [V82 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP ;* V83 tmp75 [V83 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP ;* V84 tmp76 [V84 ] ( 0, 0 ) byref -> zero-ref "field V41._reference (fldOffset=0x0)" P-INDEP ;* V85 tmp77 [V85 ] ( 0, 0 ) int -> zero-ref "field V41._length (fldOffset=0x8)" P-INDEP ;* V86 tmp78 [V86 ] ( 0, 0 ) byref -> zero-ref "field V43._reference (fldOffset=0x0)" P-INDEP ;* V87 tmp79 [V87 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP ;* V88 tmp80 [V88 ] ( 0, 0 ) byref -> zero-ref "field V44._reference (fldOffset=0x0)" P-INDEP ;* V89 tmp81 [V89 ] ( 0, 0 ) int -> zero-ref "field V44._length (fldOffset=0x8)" P-INDEP ; V90 tmp82 [V90,T16] ( 2, 4 ) byref -> rbx "field V45._reference (fldOffset=0x0)" P-INDEP ; V91 tmp83 [V91,T25] ( 2, 4 ) int -> r15 "field V45._length (fldOffset=0x8)" P-INDEP ; V92 cse0 [V92,T14] ( 3, 6 ) int -> [rbp-0x30] "CSE #01: moderate" ; ; Lcl frame size = 8 G_M46204_IG01: push rbp push r15 push r14 push r13 push r12 push rbx push rax lea rbp, [rsp+0x30] mov r13, rdi mov r14d, esi mov rbx, rdx mov r15d, ecx ;; size=28 bbWeight=1 PerfScore 8.50 G_M46204_IG02: xor r12d, r12d test r14d, r14d jle G_M46204_IG08 ;; size=12 bbWeight=1 PerfScore 1.50 G_M46204_IG03: mov edi, r12d movzx rax, word ptr [r13+2*rdi] mov dword ptr [rbp-0x2C], eax lea edi, [rax-0xD800] cmp edi, 0x3FF ja SHORT G_M46204_IG05 ;; size=26 bbWeight=4 PerfScore 20.00 G_M46204_IG04: lea edi, [r14-0x01] cmp r12d, edi jge SHORT G_M46204_IG05 lea ecx, [r12+0x01] mov edi, ecx movzx rdx, word ptr [r13+2*rdi] lea edi, [rdx-0xDC00] cmp edi, 0x3FF mov dword ptr [rbp-0x30], ecx jbe SHORT G_M46204_IG06 ;; size=39 bbWeight=2 PerfScore 14.50 G_M46204_IG05: mov edi, eax mov rcx, 0xD1FFAB1E ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong call [rcx]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong mov rdi, 0xD1FFAB1E ; static handle movsx rdi, word ptr [rdi+2*rax] add edi, dword ptr [rbp-0x2C] movzx rdi, di ror di, 8 movzx rdi, di cmp r15d, 2 - jb G_M46204_IG09 + jl G_M46204_IG09 mov word ptr [rbx], di + cmp r15d, 2 + jb G_M46204_IG10 add rbx, 2 add r15d, -2 jmp G_M46204_IG07 - ;; size=68 bbWeight=2 PerfScore 31.00 + ;; size=78 bbWeight=2 PerfScore 33.50 G_M46204_IG06: mov edi, eax shl edi, 10 lea r12d, [rdi+rdx+D1FFAB1EH] cmp r12d, 0xD1FFAB1E ja G_M46204_IG11 mov edi, r12d mov rax, 0xD1FFAB1E ; code for System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong call [rax]System.Globalization.CharUnicodeInfo:GetCategoryCasingTableOffsetNoBoundsChecks(uint):ulong mov rdi, 0xD1FFAB1E ; static handle movzx rdi, word ptr [rdi+2*rax] add edi, r12d movzx rdi, di and r12d, -0x10000 or edi, r12d lea eax, [rdi+D1FFAB1EH] shr eax, 10 movzx rax, ax and edi, 0x3FF add edi, 0xDC00 movzx rdi, di cmp r15d, 4 jb SHORT G_M46204_IG10 ror ax, 8 movzx rax, ax mov word ptr [rbx], ax lea rax, bword ptr [rbx+0x02] ror di, 8 movzx rdi, di mov word ptr [rax], di add rbx, 4 add r15d, -4 mov r12d, dword ptr [rbp-0x30] ;; size=140 bbWeight=2 PerfScore 37.00 G_M46204_IG07: inc r12d cmp r12d, r14d jl G_M46204_IG03 ;; size=12 bbWeight=4 PerfScore 6.00 G_M46204_IG08: add rsp, 8 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=1 PerfScore 4.25 G_M46204_IG09: mov edi, 40 mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int) call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int) int3 ;; size=18 bbWeight=0 PerfScore 0.00 G_M46204_IG10: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M46204_IG11: mov edi, 83 mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int) call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int) int3 ;; size=18 bbWeight=0 PerfScore 0.00 -; Total bytes of code 389, prolog size 16, PerfScore 122.75, instruction count 100, allocated bytes for code 389 (MethodHash=50e94b83) for method System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts) +; Total bytes of code 399, prolog size 16, PerfScore 125.25, instruction count 102, allocated bytes for code 399 (MethodHash=50e94b83) for method System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts) ```
MihuBot commented 1 month ago

Top method improvements

-85 (-32.32 % of base) - System.Decimal:ToDecimal(System.ReadOnlySpan`1[ubyte]):System.Decimal ```diff ; Assembly listing for method System.Decimal:ToDecimal(System.ReadOnlySpan`1[ubyte]):System.Decimal (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; 11 single block inlinees; 9 inlinees without PGO data +; 0 inlinees with PGO data; 12 single block inlinees; 10 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def -; V01 loc0 [V01,T09] ( 2, 0 ) int -> rcx -; V02 loc1 [V02,T10] ( 2, 0 ) int -> rdx -; V03 loc2 [V03,T02] ( 4, 0 ) int -> rdi -;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V05 tmp1 [V05,T11] ( 2, 0 ) int -> rax "impAppendStmt" -;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V09 tmp5 [V09,T03] ( 4, 0 ) struct (16) [rbp-0x18] do-not-enreg[SFR] multireg-ret ld-addr-op "NewObj constructor temp" -;* V10 tmp6 [V10 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -;* V11 tmp7 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V12 tmp8 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V13 tmp9 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V14 tmp10 [V14,T05] ( 2, 0 ) byref -> rcx single-def "Inlining Arg" -; V15 tmp11 [V15,T12] ( 2, 0 ) int -> rdx "Inlining Arg" -;* V16 tmp12 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V17 tmp13 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V18 tmp14 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V19 tmp15 [V19,T06] ( 2, 0 ) byref -> rdx single-def "Inlining Arg" -; V20 tmp16 [V20,T13] ( 2, 0 ) int -> r8 "Inlining Arg" -;* V21 tmp17 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V22 tmp18 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V23 tmp19 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V24 tmp20 [V24,T07] ( 2, 0 ) byref -> rdi single-def "Inlining Arg" -; V25 tmp21 [V25,T14] ( 2, 0 ) int -> rsi "Inlining Arg" -;* V26 tmp22 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V27 tmp23 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V28 tmp24 [V28,T04] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" -;* V29 tmp25 [V29,T16] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V30 tmp26 [V30,T01] ( 5, 1 ) byref -> [rbp-0x28] single-def "field V00._reference (fldOffset=0x0)" P-INDEP -; V31 tmp27 [V31,T00] ( 8, 1 ) int -> [rbp-0x1C] single-def "field V00._length (fldOffset=0x8)" P-INDEP -;* V32 tmp28 [V32 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP -;* V33 tmp29 [V33 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP -;* V34 tmp30 [V34 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP -;* V35 tmp31 [V35 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP -;* V36 tmp32 [V36 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP -;* V37 tmp33 [V37 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP -;* V38 tmp34 [V38 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP -;* V39 tmp35 [V39 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP -;* V40 tmp36 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP -;* V41 tmp37 [V41 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP -;* V42 tmp38 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP -;* V43 tmp39 [V43 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP -;* V44 tmp40 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP -;* V45 tmp41 [V45 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP -;* V46 tmp42 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP -;* V47 tmp43 [V47 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP -;* V48 tmp44 [V48 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP -;* V49 tmp45 [V49 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP -;* V50 tmp46 [V50 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP -;* V51 tmp47 [V51 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP -;* V52 tmp48 [V52 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP -;* V53 tmp49 [V53 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP -;* V54 tmp50 [V54 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP -;* V55 tmp51 [V55 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP -;* V56 tmp52 [V56 ] ( 0, 0 ) byref -> zero-ref single-def "field V23._reference (fldOffset=0x0)" P-INDEP -;* V57 tmp53 [V57 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP -;* V58 tmp54 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP -;* V59 tmp55 [V59 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP -;* V60 tmp56 [V60 ] ( 0, 0 ) byref -> zero-ref single-def "field V27._reference (fldOffset=0x0)" P-INDEP -;* V61 tmp57 [V61 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP -;* V62 tmp58 [V62 ] ( 0, 0 ) int -> zero-ref "V09.[000..004)" -;* V63 tmp59 [V63 ] ( 0, 0 ) int -> zero-ref "V09.[004..008)" -; V64 tmp60 [V64,T15] ( 2, 0 ) long -> rax "V09.[008..016)" -; V65 tmp61 [V65,T08] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +;* V01 loc0 [V01 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op +; V02 loc1 [V02,T09] ( 2, 0 ) int -> rcx +; V03 loc2 [V03,T10] ( 2, 0 ) int -> rdx +; V04 loc3 [V04,T02] ( 4, 0 ) int -> rdi +;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" +; V06 tmp1 [V06,T11] ( 2, 0 ) int -> rax "impAppendStmt" +;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +; V10 tmp5 [V10,T03] ( 4, 0 ) struct (16) [rbp-0x18] do-not-enreg[SFR] multireg-ret ld-addr-op "NewObj constructor temp" +;* V11 tmp6 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V12 tmp7 [V12 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V13 tmp8 [V13 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" +;* V14 tmp9 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V15 tmp10 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V16 tmp11 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V17 tmp12 [V17,T05] ( 2, 0 ) byref -> rcx single-def "Inlining Arg" +;* V18 tmp13 [V18 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V19 tmp14 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V20 tmp15 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V21 tmp16 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V22 tmp17 [V22,T06] ( 2, 0 ) byref -> rdx single-def "Inlining Arg" +;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V24 tmp19 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V25 tmp20 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V26 tmp21 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V27 tmp22 [V27,T07] ( 2, 0 ) byref -> rdi single-def "Inlining Arg" +;* V28 tmp23 [V28 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V29 tmp24 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V30 tmp25 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V31 tmp26 [V31,T04] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" +;* V32 tmp27 [V32,T13] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V33 tmp28 [V33,T00] ( 5, 1 ) byref -> [rbp-0x28] single-def "field V00._reference (fldOffset=0x0)" P-INDEP +; V34 tmp29 [V34,T01] ( 2, 1 ) int -> [rbp-0x1C] single-def "field V00._length (fldOffset=0x8)" P-INDEP +;* V35 tmp30 [V35 ] ( 0, 0 ) byref -> zero-ref single-def "field V01._reference (fldOffset=0x0)" P-INDEP +;* V36 tmp31 [V36 ] ( 0, 0 ) int -> zero-ref "field V01._length (fldOffset=0x8)" P-INDEP +;* V37 tmp32 [V37 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP +;* V38 tmp33 [V38 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +;* V39 tmp34 [V39 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP +;* V40 tmp35 [V40 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP +;* V41 tmp36 [V41 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP +;* V42 tmp37 [V42 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP +;* V43 tmp38 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP +;* V44 tmp39 [V44 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP +;* V45 tmp40 [V45 ] ( 0, 0 ) byref -> zero-ref "field V13._reference (fldOffset=0x0)" P-INDEP +;* V46 tmp41 [V46 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP +;* V47 tmp42 [V47 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP +;* V48 tmp43 [V48 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP +;* V49 tmp44 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V50 tmp45 [V50 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +;* V51 tmp46 [V51 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP +;* V52 tmp47 [V52 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP +;* V53 tmp48 [V53 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP +;* V54 tmp49 [V54 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP +;* V55 tmp50 [V55 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP +;* V56 tmp51 [V56 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP +;* V57 tmp52 [V57 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP +;* V58 tmp53 [V58 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP +;* V59 tmp54 [V59 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP +;* V60 tmp55 [V60 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP +;* V61 tmp56 [V61 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP +;* V62 tmp57 [V62 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP +;* V63 tmp58 [V63 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP +;* V64 tmp59 [V64 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP +;* V65 tmp60 [V65 ] ( 0, 0 ) byref -> zero-ref single-def "field V29._reference (fldOffset=0x0)" P-INDEP +;* V66 tmp61 [V66 ] ( 0, 0 ) int -> zero-ref "field V29._length (fldOffset=0x8)" P-INDEP +;* V67 tmp62 [V67 ] ( 0, 0 ) byref -> zero-ref single-def "field V30._reference (fldOffset=0x0)" P-INDEP +;* V68 tmp63 [V68 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP +;* V69 tmp64 [V69 ] ( 0, 0 ) int -> zero-ref "V10.[000..004)" +;* V70 tmp65 [V70 ] ( 0, 0 ) int -> zero-ref "V10.[004..008)" +; V71 tmp66 [V71,T12] ( 2, 0 ) long -> rax "V10.[008..016)" +; V72 tmp67 [V72,T08] ( 2, 0 ) ref -> rsi single-def "argument with side effect" ; ; Lcl frame size = 40 G_M2786_IG01: push rbp push rbx sub rsp, 40 lea rbp, [rsp+0x30] mov bword ptr [rbp-0x28], rdi mov dword ptr [rbp-0x1C], esi ;; size=18 bbWeight=0 PerfScore 0.00 G_M2786_IG02: - mov esi, dword ptr [rbp-0x1C] - cmp esi, 4 - jl G_M2786_IG06 + cmp dword ptr [rbp-0x1C], 16 + jb G_M2786_IG05 mov rdi, bword ptr [rbp-0x28] mov eax, dword ptr [rdi] - cmp esi, 4 - jb G_M2786_IG05 lea rcx, bword ptr [rdi+0x04] - lea edx, [rsi-0x04] - cmp edx, 4 - jl G_M2786_IG06 mov ecx, dword ptr [rcx] - cmp esi, 8 - jb G_M2786_IG05 lea rdx, bword ptr [rdi+0x08] - lea r8d, [rsi-0x08] - cmp r8d, 4 - jl G_M2786_IG06 mov edx, dword ptr [rdx] - cmp esi, 12 - jb G_M2786_IG05 add rdi, 12 - add esi, -12 - cmp esi, 4 - jl G_M2786_IG06 mov edi, dword ptr [rdi] test edi, 0xD1FFAB1E jne SHORT G_M2786_IG04 mov esi, edi and esi, 0xD1FFAB1E cmp esi, 0xD1FFAB1E ja SHORT G_M2786_IG04 shl rcx, 32 add rax, rcx mov dword ptr [rbp-0x18], edi mov dword ptr [rbp-0x14], edx mov qword ptr [rbp-0x10], rax mov rax, qword ptr [rbp-0x18] mov rdx, qword ptr [rbp-0x10] - ;; size=150 bbWeight=0 PerfScore 0.00 + ;; size=83 bbWeight=0 PerfScore 0.00 G_M2786_IG03: add rsp, 40 pop rbx pop rbp ret ;; size=7 bbWeight=0 PerfScore 0.00 G_M2786_IG04: mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_Arg_DecBitCtor():System.String call [rax]System.SR:get_Arg_DecBitCtor():System.String mov rsi, rax mov rdi, rbx mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String):this call [rax]System.ArgumentException:.ctor(System.String):this mov rdi, rbx call CORINFO_HELP_THROW int3 ;; size=57 bbWeight=0 PerfScore 0.00 G_M2786_IG05: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M2786_IG06: - mov edi, 40 - mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException(int) - call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException(int) - int3 - ;; size=18 bbWeight=0 PerfScore 0.00 -; Total bytes of code 263, prolog size 11, PerfScore 0.00, instruction count 68, allocated bytes for code 263 (MethodHash=fd21f51d) for method System.Decimal:ToDecimal(System.ReadOnlySpan`1[ubyte]):System.Decimal (FullOpts) +; Total bytes of code 178, prolog size 11, PerfScore 0.00, instruction count 48, allocated bytes for code 178 (MethodHash=fd21f51d) for method System.Decimal:ToDecimal(System.ReadOnlySpan`1[ubyte]):System.Decimal (FullOpts) ```
-73 (-20.56 % of base) - System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int:this ```diff ; Assembly listing for method System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int: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; 26 single block inlinees; 9 inlinees without PGO data +; 0 inlinees with PGO data; 29 single block inlinees; 12 inlinees without PGO data ; Final local variable assignments ; -; V00 this [V00,T15] ( 7, 5.50) ref -> rbx this class-hnd single-def -; V01 arg1 [V01,T19] ( 3, 3 ) ubyte -> rsi single-def +; V00 this [V00,T21] ( 5, 5 ) ref -> rdi this class-hnd single-def +; V01 arg1 [V01,T22] ( 3, 3 ) ubyte -> rsi single-def ;* V02 loc0 [V02 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op -; V03 loc1 [V03,T09] ( 3, 12 ) ushort -> rdi ld-addr-op -;* V04 loc2 [V04 ] ( 0, 0 ) ushort -> zero-ref -; V05 loc3 [V05,T08] ( 5, 12 ) ushort -> rdi ld-addr-op -; V06 loc4 [V06,T10] ( 3, 8 ) ushort -> rsi ld-addr-op +; V03 loc1 [V03,T09] ( 3, 24 ) ushort -> rsi ld-addr-op +; V04 loc2 [V04,T08] ( 4, 24 ) ushort -> rsi +; V05 loc3 [V05,T10] ( 3, 16 ) ushort -> rax ld-addr-op +; V06 loc4 [V06,T11] ( 3, 16 ) ushort -> rcx ld-addr-op ;# V07 OutArgs [V07 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V08 tmp1 [V08 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -; V09 tmp2 [V09,T16] ( 4, 6 ) ref -> rax class-hnd single-def "Inlining Arg" -; V10 tmp3 [V10,T17] ( 4, 5 ) int -> rdx "Inlining Arg" -; V11 tmp4 [V11,T18] ( 4, 5 ) int -> rcx "Inlining Arg" -;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V13 tmp6 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V14 tmp7 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V15 tmp8 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" -;* V16 tmp9 [V16 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -;* V18 tmp11 [V18 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V19 tmp12 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V20 tmp13 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V21 tmp14 [V21 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" -;* V22 tmp15 [V22 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -;* V23 tmp16 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V09 tmp2 [V09 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V10 tmp3 [V10 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V11 tmp4 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +; V12 tmp5 [V12,T16] ( 4, 8 ) ref -> rdx class-hnd single-def "Inlining Arg" +; V13 tmp6 [V13,T17] ( 4, 8 ) int -> r8 "Inlining Arg" +; V14 tmp7 [V14,T18] ( 4, 8 ) int -> rdi "Inlining Arg" +;* V15 tmp8 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V16 tmp9 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V17 tmp10 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V18 tmp11 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +;* V19 tmp12 [V19 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V20 tmp13 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V21 tmp14 [V21 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V22 tmp15 [V22 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V23 tmp16 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V24 tmp17 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V25 tmp18 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V26 tmp19 [V26,T04] ( 2, 16 ) byref -> rax "Inlining Arg" -; V27 tmp20 [V27,T06] ( 2, 16 ) int -> rcx "Inlining Arg" -;* V28 tmp21 [V28 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -;* V29 tmp22 [V29 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V30 tmp23 [V30 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V31 tmp24 [V31 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V25 tmp18 [V25 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" +;* V26 tmp19 [V26 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V27 tmp20 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V28 tmp21 [V28 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V29 tmp22 [V29 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V30 tmp23 [V30,T04] ( 2, 32 ) byref -> rdx "Inlining Arg" +; V31 tmp24 [V31,T06] ( 2, 32 ) int -> rdi "Inlining Arg" ;* V32 tmp25 [V32 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V33 tmp26 [V33,T02] ( 2, 16 ) byref -> rax "Inlining Arg" -; V34 tmp27 [V34,T03] ( 2, 16 ) int -> rcx "Inlining Arg" -;* V35 tmp28 [V35 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -;* V36 tmp29 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V37 tmp30 [V37 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V38 tmp31 [V38 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" -;* V39 tmp32 [V39 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V40 tmp33 [V40 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V41 tmp34 [V41 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V42 tmp35 [V42 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -;* V43 tmp36 [V43 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" -;* V44 tmp37 [V44 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V45 tmp38 [V45,T05] ( 2, 16 ) byref -> rax "Inlining Arg" -; V46 tmp39 [V46,T07] ( 2, 16 ) int -> rcx "Inlining Arg" -; V47 tmp40 [V47,T00] ( 10, 37 ) byref -> rax "field V02._reference (fldOffset=0x0)" P-INDEP -; V48 tmp41 [V48,T01] ( 10, 37 ) int -> rcx "field V02._length (fldOffset=0x8)" P-INDEP -;* V49 tmp42 [V49 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP -;* V50 tmp43 [V50 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP -; V51 tmp44 [V51,T23] ( 3, 2 ) byref -> rax "field V12._reference (fldOffset=0x0)" P-INDEP -; V52 tmp45 [V52,T24] ( 3, 2 ) int -> rcx "field V12._length (fldOffset=0x8)" P-INDEP -;* V53 tmp46 [V53 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP -;* V54 tmp47 [V54 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP -; V55 tmp48 [V55,T25] ( 2, 2 ) byref -> rax single-def "field V14._reference (fldOffset=0x0)" P-INDEP -; V56 tmp49 [V56,T26] ( 2, 2 ) int -> rcx "field V14._length (fldOffset=0x8)" P-INDEP -;* V57 tmp50 [V57 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP -;* V58 tmp51 [V58 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP -;* V59 tmp52 [V59 ] ( 0, 0 ) byref -> zero-ref "field V19._reference (fldOffset=0x0)" P-INDEP -;* V60 tmp53 [V60 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP -;* V61 tmp54 [V61 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP -;* V62 tmp55 [V62 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP -;* V63 tmp56 [V63 ] ( 0, 0 ) byref -> zero-ref "field V22._reference (fldOffset=0x0)" P-INDEP -;* V64 tmp57 [V64 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP -;* V65 tmp58 [V65 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP -;* V66 tmp59 [V66 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP -;* V67 tmp60 [V67 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP -;* V68 tmp61 [V68 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP -; V69 tmp62 [V69,T11] ( 2, 8 ) byref -> rax "field V25._reference (fldOffset=0x0)" P-INDEP -; V70 tmp63 [V70,T13] ( 2, 8 ) int -> rcx "field V25._length (fldOffset=0x8)" P-INDEP -;* V71 tmp64 [V71 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP -;* V72 tmp65 [V72 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x8)" P-INDEP -;* V73 tmp66 [V73 ] ( 0, 0 ) byref -> zero-ref "field V30._reference (fldOffset=0x0)" P-INDEP -;* V74 tmp67 [V74 ] ( 0, 0 ) int -> zero-ref "field V30._length (fldOffset=0x8)" P-INDEP -;* V75 tmp68 [V75 ] ( 0, 0 ) byref -> zero-ref "field V31._reference (fldOffset=0x0)" P-INDEP -;* V76 tmp69 [V76 ] ( 0, 0 ) int -> zero-ref "field V31._length (fldOffset=0x8)" P-INDEP -;* V77 tmp70 [V77,T20] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP -;* V78 tmp71 [V78,T21] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP -;* V79 tmp72 [V79 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP -;* V80 tmp73 [V80 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP -;* V81 tmp74 [V81 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP -;* V82 tmp75 [V82 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP -;* V83 tmp76 [V83 ] ( 0, 0 ) byref -> zero-ref "field V37._reference (fldOffset=0x0)" P-INDEP -;* V84 tmp77 [V84 ] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x8)" P-INDEP -;* V85 tmp78 [V85 ] ( 0, 0 ) byref -> zero-ref "field V38._reference (fldOffset=0x0)" P-INDEP -;* V86 tmp79 [V86 ] ( 0, 0 ) int -> zero-ref "field V38._length (fldOffset=0x8)" P-INDEP -;* V87 tmp80 [V87 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP -;* V88 tmp81 [V88 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP -;* V89 tmp82 [V89 ] ( 0, 0 ) byref -> zero-ref "field V41._reference (fldOffset=0x0)" P-INDEP -;* V90 tmp83 [V90 ] ( 0, 0 ) int -> zero-ref "field V41._length (fldOffset=0x8)" P-INDEP -; V91 tmp84 [V91,T12] ( 2, 8 ) byref -> rax "field V44._reference (fldOffset=0x0)" P-INDEP -; V92 tmp85 [V92,T14] ( 2, 8 ) int -> rcx "field V44._length (fldOffset=0x8)" P-INDEP -; V93 tmp86 [V93,T27] ( 2, 0 ) ref -> rsi "argument with side effect" -; V94 cse0 [V94,T22] ( 3, 3 ) int -> rdi "CSE #01: conservative" +;* V33 tmp26 [V33 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V34 tmp27 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V35 tmp28 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V36 tmp29 [V36 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V37 tmp30 [V37 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V38 tmp31 [V38,T02] ( 2, 32 ) byref -> rdx "Inlining Arg" +; V39 tmp32 [V39,T03] ( 2, 32 ) int -> rdi "Inlining Arg" +;* V40 tmp33 [V40 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" +;* V41 tmp34 [V41 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V42 tmp35 [V42 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V43 tmp36 [V43 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V44 tmp37 [V44 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" +;* V45 tmp38 [V45 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V46 tmp39 [V46 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V47 tmp40 [V47 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V48 tmp41 [V48 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V49 tmp42 [V49 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" +;* V50 tmp43 [V50 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +; V51 tmp44 [V51,T05] ( 2, 32 ) byref -> rdx "Inlining Arg" +; V52 tmp45 [V52,T07] ( 2, 32 ) int -> rdi "Inlining Arg" +; V53 tmp46 [V53,T00] ( 10, 73 ) byref -> rdx "field V02._reference (fldOffset=0x0)" P-INDEP +; V54 tmp47 [V54,T01] ( 10, 73 ) int -> rdi "field V02._length (fldOffset=0x8)" P-INDEP +;* V55 tmp48 [V55 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP +;* V56 tmp49 [V56 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP +;* V57 tmp50 [V57 ] ( 0, 0 ) byref -> zero-ref "field V09._reference (fldOffset=0x0)" P-INDEP +;* V58 tmp51 [V58 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP +;* V59 tmp52 [V59 ] ( 0, 0 ) byref -> zero-ref "field V10._reference (fldOffset=0x0)" P-INDEP +;* V60 tmp53 [V60 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V61 tmp54 [V61 ] ( 0, 0 ) byref -> zero-ref "field V11._reference (fldOffset=0x0)" P-INDEP +;* V62 tmp55 [V62 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP +; V63 tmp56 [V63,T23] ( 3, 3 ) byref -> rdx "field V15._reference (fldOffset=0x0)" P-INDEP +; V64 tmp57 [V64,T24] ( 3, 3 ) int -> rdi "field V15._length (fldOffset=0x8)" P-INDEP +;* V65 tmp58 [V65 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP +;* V66 tmp59 [V66 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP +; V67 tmp60 [V67,T26] ( 2, 2 ) byref -> rdx single-def "field V17._reference (fldOffset=0x0)" P-INDEP +; V68 tmp61 [V68,T27] ( 2, 2 ) int -> rdi "field V17._length (fldOffset=0x8)" P-INDEP +;* V69 tmp62 [V69 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP +;* V70 tmp63 [V70 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP +;* V71 tmp64 [V71 ] ( 0, 0 ) byref -> zero-ref "field V23._reference (fldOffset=0x0)" P-INDEP +;* V72 tmp65 [V72 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP +;* V73 tmp66 [V73 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP +;* V74 tmp67 [V74 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP +;* V75 tmp68 [V75 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP +;* V76 tmp69 [V76 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP +;* V77 tmp70 [V77 ] ( 0, 0 ) byref -> zero-ref "field V27._reference (fldOffset=0x0)" P-INDEP +;* V78 tmp71 [V78 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP +;* V79 tmp72 [V79 ] ( 0, 0 ) byref -> zero-ref "field V28._reference (fldOffset=0x0)" P-INDEP +;* V80 tmp73 [V80 ] ( 0, 0 ) int -> zero-ref "field V28._length (fldOffset=0x8)" P-INDEP +; V81 tmp74 [V81,T12] ( 2, 16 ) byref -> rdx "field V29._reference (fldOffset=0x0)" P-INDEP +; V82 tmp75 [V82,T14] ( 2, 16 ) int -> rdi "field V29._length (fldOffset=0x8)" P-INDEP +;* V83 tmp76 [V83 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP +;* V84 tmp77 [V84 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP +;* V85 tmp78 [V85 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP +;* V86 tmp79 [V86 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP +;* V87 tmp80 [V87 ] ( 0, 0 ) byref -> zero-ref "field V36._reference (fldOffset=0x0)" P-INDEP +;* V88 tmp81 [V88 ] ( 0, 0 ) int -> zero-ref "field V36._length (fldOffset=0x8)" P-INDEP +;* V89 tmp82 [V89,T19] ( 0, 0 ) byref -> zero-ref "field V37._reference (fldOffset=0x0)" P-INDEP +;* V90 tmp83 [V90,T20] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x8)" P-INDEP +;* V91 tmp84 [V91 ] ( 0, 0 ) byref -> zero-ref "field V40._reference (fldOffset=0x0)" P-INDEP +;* V92 tmp85 [V92 ] ( 0, 0 ) int -> zero-ref "field V40._length (fldOffset=0x8)" P-INDEP +;* V93 tmp86 [V93 ] ( 0, 0 ) byref -> zero-ref "field V41._reference (fldOffset=0x0)" P-INDEP +;* V94 tmp87 [V94 ] ( 0, 0 ) int -> zero-ref "field V41._length (fldOffset=0x8)" P-INDEP +;* V95 tmp88 [V95 ] ( 0, 0 ) byref -> zero-ref "field V42._reference (fldOffset=0x0)" P-INDEP +;* V96 tmp89 [V96 ] ( 0, 0 ) int -> zero-ref "field V42._length (fldOffset=0x8)" P-INDEP +;* V97 tmp90 [V97 ] ( 0, 0 ) byref -> zero-ref "field V43._reference (fldOffset=0x0)" P-INDEP +;* V98 tmp91 [V98 ] ( 0, 0 ) int -> zero-ref "field V43._length (fldOffset=0x8)" P-INDEP +;* V99 tmp92 [V99 ] ( 0, 0 ) byref -> zero-ref "field V46._reference (fldOffset=0x0)" P-INDEP +;* V100 tmp93 [V100 ] ( 0, 0 ) int -> zero-ref "field V46._length (fldOffset=0x8)" P-INDEP +;* V101 tmp94 [V101 ] ( 0, 0 ) byref -> zero-ref "field V47._reference (fldOffset=0x0)" P-INDEP +;* V102 tmp95 [V102 ] ( 0, 0 ) int -> zero-ref "field V47._length (fldOffset=0x8)" P-INDEP +; V103 tmp96 [V103,T13] ( 2, 16 ) byref -> rdx "field V50._reference (fldOffset=0x0)" P-INDEP +; V104 tmp97 [V104,T15] ( 2, 16 ) int -> rdi "field V50._length (fldOffset=0x8)" P-INDEP +;* V105 tmp98 [V105 ] ( 0, 0 ) ref -> zero-ref "argument with side effect" +; V106 cse0 [V106,T25] ( 3, 3 ) int -> rcx "CSE #01: conservative" ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M6289_IG01: push rbp - push rbx - push rax - lea rbp, [rsp+0x10] - mov rbx, rdi - ;; size=11 bbWeight=1 PerfScore 3.75 + mov rbp, rsp + ;; size=4 bbWeight=1 PerfScore 1.25 G_M6289_IG02: - mov rax, gword ptr [rbx+0x10] - mov edi, dword ptr [rbx+0xB4] - mov edx, edi - mov ecx, dword ptr [rbx+0x80] - sub ecx, edi - test rax, rax - je SHORT G_M6289_IG04 - ;; size=25 bbWeight=1 PerfScore 7.75 -G_M6289_IG03: - mov edi, edx + mov rdx, gword ptr [rdi+0x10] + mov ecx, dword ptr [rdi+0xB4] mov r8d, ecx - add rdi, r8 - mov r8d, dword ptr [rax+0x08] - cmp rdi, r8 - ja G_M6289_IG17 - mov edx, edx - lea rax, bword ptr [rax+rdx+0x10] - jmp SHORT G_M6289_IG05 - align [0 bytes for IG06] - ;; size=30 bbWeight=0.50 PerfScore 3.62 + mov edi, dword ptr [rdi+0x80] + sub edi, ecx + test rdx, rdx + je SHORT G_M6289_IG03 + mov ecx, r8d + mov eax, edi + add rcx, rax + mov eax, dword ptr [rdx+0x08] + cmp rcx, rax + ja G_M6289_IG11 + lea rdx, bword ptr [rdx+r8+0x10] + jmp SHORT G_M6289_IG04 + align [0 bytes for IG05] + ;; size=53 bbWeight=1 PerfScore 14.75 +G_M6289_IG03: + or r8d, edi + jne G_M6289_IG11 + xor rdx, rdx + xor edi, edi + ;; size=13 bbWeight=1 PerfScore 1.75 G_M6289_IG04: - or edx, ecx - jne G_M6289_IG17 - xor rax, rax - xor ecx, ecx - ;; size=12 bbWeight=0.50 PerfScore 0.88 -G_M6289_IG05: test sil, sil - jne SHORT G_M6289_IG09 - jmp SHORT G_M6289_IG07 + jne SHORT G_M6289_IG08 + jmp SHORT G_M6289_IG06 ;; size=7 bbWeight=1 PerfScore 3.25 +G_M6289_IG05: + add rdx, 2 + add edi, -2 + ;; size=7 bbWeight=8 PerfScore 4.00 G_M6289_IG06: - add rax, 2 - add ecx, -2 - ;; size=7 bbWeight=4 PerfScore 2.00 + cmp edi, 2 + jb G_M6289_IG11 + movzx rsi, word ptr [rdx] + cmp esi, 255 + jg SHORT G_M6289_IG08 + mov rcx, 0xD1FFAB1E ; static handle + test byte ptr [rsi+rcx], 1 + je SHORT G_M6289_IG08 + jmp SHORT G_M6289_IG05 + align [0 bytes for IG07] + ;; size=38 bbWeight=8 PerfScore 86.00 G_M6289_IG07: - cmp ecx, 2 - jb SHORT G_M6289_IG12 - movzx rdi, word ptr [rax] - cmp edi, 255 - jg SHORT G_M6289_IG09 - mov rsi, 0xD1FFAB1E ; static handle - test byte ptr [rdi+rsi], 1 - je SHORT G_M6289_IG09 - jmp SHORT G_M6289_IG06 - align [0 bytes for IG08] - ;; size=34 bbWeight=4 PerfScore 43.00 + add rdx, 2 + add edi, -2 + ;; size=7 bbWeight=8 PerfScore 4.00 G_M6289_IG08: - add rax, 2 - add ecx, -2 - ;; size=7 bbWeight=4 PerfScore 2.00 + cmp edi, 2 + jb G_M6289_IG11 + movzx rax, word ptr [rdx] + add rdx, 2 + add edi, -2 + mov esi, eax + mov ecx, esi + mov r8, 0xD1FFAB1E ; static handle + test byte ptr [rcx+r8], 16 + jne SHORT G_M6289_IG08 + lea ecx, [rsi-0xD800] + cmp ecx, 0x3FF + ja SHORT G_M6289_IG10 + cmp edi, 2 + jb SHORT G_M6289_IG11 + movzx rcx, word ptr [rdx] + lea r8d, [rcx-0xDC00] + cmp r8d, 0x3FF + jbe SHORT G_M6289_IG07 + ;; size=78 bbWeight=8 PerfScore 122.00 G_M6289_IG09: - cmp ecx, 2 - jb SHORT G_M6289_IG10 - movzx rdi, word ptr [rax] - add rax, 2 - add ecx, -2 - mov esi, edi - mov rdx, 0xD1FFAB1E ; static handle - test byte ptr [rsi+rdx], 16 - jne SHORT G_M6289_IG09 - lea esi, [rdi-0xD800] - cmp esi, 0x3FF - ja G_M6289_IG16 - cmp ecx, 2 - jb SHORT G_M6289_IG15 - movzx rsi, word ptr [rax] - lea edx, [rsi-0xDC00] - cmp edx, 0x3FF - jbe SHORT G_M6289_IG08 - jmp SHORT G_M6289_IG14 - ;; size=75 bbWeight=4 PerfScore 68.00 -G_M6289_IG10: - mov eax, 3 - ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M6289_IG11: - add rsp, 8 - pop rbx - pop rbp - ret - ;; size=7 bbWeight=0.50 PerfScore 1.12 -G_M6289_IG12: - mov eax, 14 - mov edi, 13 - cmp byte ptr [rbx+0xC0], 0 - cmove eax, edi - ;; size=20 bbWeight=0.50 PerfScore 1.88 -G_M6289_IG13: - add rsp, 8 - pop rbx - pop rbp - ret - ;; size=7 bbWeight=0.50 PerfScore 1.12 -G_M6289_IG14: + mov edi, esi + mov esi, ecx xor edx, edx xor ecx, ecx xor r8d, r8d mov rax, 0xD1FFAB1E ; code for System.Xml.XmlConvert:CreateInvalidSurrogatePairException(ushort,ushort,int,int,int):System.Exception call [rax]System.Xml.XmlConvert:CreateInvalidSurrogatePairException(ushort,ushort,int,int,int):System.Exception mov rdi, rax call CORINFO_HELP_THROW int3 - ;; size=28 bbWeight=0 PerfScore 0.00 -G_M6289_IG15: - mov rax, 0xD1FFAB1E ; code for System.SR:get_Xml_InvalidSurrogateMissingLowChar():System.String - call [rax]System.SR:get_Xml_InvalidSurrogateMissingLowChar():System.String - mov rsi, rax - mov rdi, rbx - mov rax, 0xD1FFAB1E ; code for System.Xml.XmlSqlBinaryReader:CreateXmlException(System.String):System.Xml.XmlException:this - call [rax]System.Xml.XmlSqlBinaryReader:CreateXmlException(System.String):System.Xml.XmlException:this - mov rdi, rax - call CORINFO_HELP_THROW - int3 - ;; size=39 bbWeight=0 PerfScore 0.00 -G_M6289_IG16: + ;; size=32 bbWeight=0 PerfScore 0.00 +G_M6289_IG10: + mov edi, eax xor esi, esi mov edx, 1 mov rax, 0xD1FFAB1E ; code for System.Xml.XmlConvert:CreateInvalidCharException(ushort,ushort,int):System.Exception call [rax]System.Xml.XmlConvert:CreateInvalidCharException(ushort,ushort,int):System.Exception mov rdi, rax call CORINFO_HELP_THROW int3 - ;; size=28 bbWeight=0 PerfScore 0.00 -G_M6289_IG17: + ;; size=30 bbWeight=0 PerfScore 0.00 +G_M6289_IG11: 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 355, prolog size 11, PerfScore 138.50, instruction count 102, allocated bytes for code 359 (MethodHash=9dc8e76e) for method System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int:this (FullOpts) +; Total bytes of code 282, prolog size 4, PerfScore 237.00, instruction count 79, allocated bytes for code 282 (MethodHash=9dc8e76e) for method System.Xml.XmlSqlBinaryReader:CheckText(ubyte):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/b68369c2a30081e57097caf828da1849

MihuBot commented 1 month ago

@xtqqczze