MihuBot / runtime-utils

0 stars 0 forks source link

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

Open MihuBot opened 1 month ago

MihuBot commented 1 month ago

Job completed in 14 minutes.

Diffs

Found 272 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39660084
Total bytes of diff: 39659740
Total bytes of delta: -344 (-0.00 % of base)
Total relative delta: -2.72
    diff is an improvement.
    relative diff is an improvement.

Top file regressions (bytes):
          32 : System.Private.Xml.dasm (0.00 % of base)
          18 : System.Formats.Tar.dasm (0.01 % of base)
           6 : System.Private.CoreLib.dasm (0.00 % of base)

Top file improvements (bytes):
        -270 : System.IO.Hashing.dasm (-1.06 % 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)

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

Top method regressions (bytes):
          32 (9.01 % of base) : System.Private.Xml.dasm - System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int:this (FullOpts)
          18 (6.41 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this (FullOpts)
          18 (27.69 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)
           6 (1.54 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)
           5 (4.35 % of base) : System.Private.CoreLib.dasm - System.Decimal:GetBytes(byref,System.Span`1[ubyte]) (FullOpts)

Top method improvements (bytes):
         -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)
         -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)
          -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 (-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):
          18 (27.69 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)
          32 (9.01 % of base) : System.Private.Xml.dasm - System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int:this (FullOpts)
          18 (6.41 % of base) : System.Formats.Tar.dasm - System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this (FullOpts)
           5 (4.35 % of base) : System.Private.CoreLib.dasm - System.Decimal:GetBytes(byref,System.Span`1[ubyte]) (FullOpts)
           6 (1.54 % of base) : System.Private.CoreLib.dasm - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts)

Top method improvements (percentages):
         -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)
         -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)
         -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)
          -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)
          -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)

25 total methods with Code Size differences (20 improved, 5 regressed), 231406 unchanged.

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

Artifacts:

xtqqczze commented 1 month ago

https://github.com/xtqqczze/dotnet-runtime/commit/e23af4f0cdaa48f4c118735696acadf1cadc939e

MihuBot commented 1 month ago

Top method regressions

32 (9.01 % 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 ; 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 ;* 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 ;# 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" ;* 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" ;* 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 +; V47 tmp40 [V47,T01] ( 10, 37 ) byref -> rax "field V02._reference (fldOffset=0x0)" P-INDEP +; V48 tmp41 [V48,T00] ( 13, 49 ) 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" ; ; Lcl frame size = 8 G_M6289_IG01: push rbp push rbx push rax lea rbp, [rsp+0x10] mov rbx, rdi ;; size=11 bbWeight=1 PerfScore 3.75 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 r8d, ecx add rdi, r8 mov r8d, dword ptr [rax+0x08] cmp rdi, r8 - ja G_M6289_IG17 + ja G_M6289_IG18 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 G_M6289_IG04: or edx, ecx - jne G_M6289_IG17 + jne G_M6289_IG18 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 ;; size=7 bbWeight=1 PerfScore 3.25 G_M6289_IG06: add rax, 2 add ecx, -2 ;; size=7 bbWeight=4 PerfScore 2.00 G_M6289_IG07: cmp ecx, 2 - jb SHORT G_M6289_IG12 + jl G_M6289_IG13 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 + jmp SHORT G_M6289_IG12 align [0 bytes for IG08] - ;; size=34 bbWeight=4 PerfScore 43.00 + ;; size=38 bbWeight=4 PerfScore 43.00 G_M6289_IG08: add rax, 2 add ecx, -2 ;; size=7 bbWeight=4 PerfScore 2.00 G_M6289_IG09: cmp ecx, 2 - jb SHORT G_M6289_IG10 + jl SHORT G_M6289_IG10 movzx rdi, word ptr [rax] + cmp ecx, 2 + jb G_M6289_IG18 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 + ja G_M6289_IG17 cmp ecx, 2 - jb SHORT G_M6289_IG15 + jl SHORT G_M6289_IG16 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 + ja SHORT G_M6289_IG15 + cmp ecx, 2 + jae SHORT G_M6289_IG08 + jmp G_M6289_IG18 + ;; size=92 bbWeight=4 PerfScore 78.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: + cmp ecx, 2 + jae G_M6289_IG06 + jmp SHORT G_M6289_IG18 + ;; size=11 bbWeight=4 PerfScore 13.00 +G_M6289_IG13: 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: +G_M6289_IG14: add rsp, 8 pop rbx pop rbp ret ;; size=7 bbWeight=0.50 PerfScore 1.12 -G_M6289_IG14: +G_M6289_IG15: 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: +G_M6289_IG16: 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: +G_M6289_IG17: 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: +G_M6289_IG18: 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 387, prolog size 11, PerfScore 161.50, instruction count 109, allocated bytes for code 390 (MethodHash=9dc8e76e) for method System.Xml.XmlSqlBinaryReader:CheckText(ubyte):int:this (FullOpts) ```
18 (6.41 % of base) - System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this ```diff ; Assembly listing for method System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 7 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T03] ( 4, 2.50) ref -> rbx this class-hnd single-def ; V01 arg1 [V01,T00] ( 7, 5 ) long -> rax single-def ;* V02 arg2 [V02 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04,T12] ( 0, 0 ) int -> zero-ref ; V05 tmp2 [V05,T13] ( 3, 0 ) ref -> r15 class-hnd exact single-def "Single-def Box Helper" ; V06 tmp3 [V06,T15] ( 2, 0 ) ref -> r14 class-hnd exact single-def "impImportAndPushBox" ; V07 tmp4 [V07,T14] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" ;* V08 tmp5 [V08 ] ( 0, 0 ) struct (16) zero-ref ;* V09 tmp6 [V09 ] ( 0, 0 ) struct (16) zero-ref ; V10 tmp7 [V10,T08] ( 2, 1 ) int -> rdi ;* V11 tmp8 [V11 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V12 tmp9 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ; V13 tmp10 [V13,T09] ( 2, 1 ) int -> rdi ld-addr-op "Inline stloc first use temp" ;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V15 tmp12 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V17 tmp14 [V17,T04] ( 2, 2 ) byref -> rdi single-def "Inlining Arg" ; V18 tmp15 [V18,T05] ( 2, 2 ) int -> rsi "Inlining Arg" ; V19 tmp16 [V19,T10] ( 2, 1 ) long -> rax ld-addr-op "Inline stloc first use temp" ;* V20 tmp17 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V21 tmp18 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V22 tmp19 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V23 tmp20 [V23 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op "NewObj constructor temp" ;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" ;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" -; V26 tmp23 [V26,T01] ( 5, 3 ) byref -> rdx single-def "field V02._reference (fldOffset=0x0)" P-INDEP -; V27 tmp24 [V27,T02] ( 5, 3 ) int -> rcx single-def "field V02._length (fldOffset=0x8)" P-INDEP +; V26 tmp23 [V26,T02] ( 5, 3 ) byref -> rdx single-def "field V02._reference (fldOffset=0x0)" P-INDEP +; V27 tmp24 [V27,T01] ( 6, 3.50) int -> rcx single-def "field V02._length (fldOffset=0x8)" P-INDEP ;* V28 tmp25 [V28 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP ;* V29 tmp26 [V29 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP ;* V30 tmp27 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP ;* V31 tmp28 [V31 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP ;* V32 tmp29 [V32 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V33 tmp30 [V33 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP ;* V34 tmp31 [V34 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP ;* V35 tmp32 [V35 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP ;* V36 tmp33 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP ;* V37 tmp34 [V37 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP ;* V38 tmp35 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP ;* V39 tmp36 [V39 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP ;* V40 tmp37 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP ;* V41 tmp38 [V41 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP ;* V42 tmp39 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP ;* V43 tmp40 [V43 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP ;* V44 tmp41 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP ;* V45 tmp42 [V45 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP ;* V46 tmp43 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP ;* V47 tmp44 [V47 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP ; V48 tmp45 [V48,T07] ( 2, 1 ) byref -> rdi single-def "field V23._reference (fldOffset=0x0)" P-INDEP ; V49 tmp46 [V49,T11] ( 2, 1 ) int -> rsi "field V23._length (fldOffset=0x8)" P-INDEP ; V50 tmp47 [V50,T16] ( 2, 0 ) ref -> rsi single-def "argument with side effect" ; V51 cse0 [V51,T06] ( 3, 1.50) int -> r15 "CSE #01: moderate" ; ; Lcl frame size = 8 G_M39441_IG01: push rbp push r15 push r14 push rbx push rax lea rbp, [rsp+0x20] mov rbx, rdi mov rax, rsi ;; size=18 bbWeight=1 PerfScore 6.00 G_M39441_IG02: test rax, rax jge SHORT G_M39441_IG06 ;; size=5 bbWeight=1 PerfScore 1.25 G_M39441_IG03: mov r15d, dword ptr [rbx+0x70] cmp r15d, 3 jne SHORT G_M39441_IG07 ;; size=10 bbWeight=0.50 PerfScore 1.62 G_M39441_IG04: mov rsi, rdx mov edx, ecx mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.Formats.Tar.TarHeader:FormatOctal(long,System.Span`1[ubyte]):int call [rax]System.Formats.Tar.TarHeader:FormatOctal(long,System.Span`1[ubyte]):int nop ;; size=21 bbWeight=0.50 PerfScore 2.12 G_M39441_IG05: add rsp, 8 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M39441_IG06: mov rsi, 0xD1FFAB1E cmp rax, rsi jle SHORT G_M39441_IG04 jmp SHORT G_M39441_IG03 ;; size=17 bbWeight=0.50 PerfScore 1.75 G_M39441_IG07: cmp r15d, 4 - jne SHORT G_M39441_IG10 + jne SHORT G_M39441_IG11 mov edi, -1 mov esi, 0xD1FFAB1E test rax, rax cmovge edi, esi bswap edi cmp ecx, 4 - jb SHORT G_M39441_IG09 + jl SHORT G_M39441_IG10 mov dword ptr [rdx], edi + cmp ecx, 4 + jb SHORT G_M39441_IG09 lea rdi, bword ptr [rdx+0x04] lea esi, [rcx-0x04] bswap rax cmp esi, 8 - jb SHORT G_M39441_IG09 + jl SHORT G_M39441_IG10 mov qword ptr [rdi], rax mov rdi, rdx mov esi, ecx mov rax, 0xD1FFAB1E ; code for System.Formats.Tar.TarHeader:Checksum(System.ReadOnlySpan`1[ubyte]):int call [rax]System.Formats.Tar.TarHeader:Checksum(System.ReadOnlySpan`1[ubyte]):int nop - ;; size=67 bbWeight=0.50 PerfScore 6.62 + ;; size=72 bbWeight=0.50 PerfScore 7.25 G_M39441_IG08: add rsp, 8 pop rbx pop r14 pop r15 pop rbp ret ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M39441_IG09: + mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() + call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() + int3 + ;; size=13 bbWeight=0 PerfScore 0.00 +G_M39441_IG10: 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_M39441_IG10: +G_M39441_IG11: mov rdi, 0xD1FFAB1E ; System.Formats.Tar.TarEntryFormat call CORINFO_HELP_NEWSFAST mov r15, rax mov rax, 0xD1FFAB1E ; code for System.SR:get_TarFieldTooLargeForEntryFormat():System.String call [rax]System.SR:get_TarFieldTooLargeForEntryFormat():System.String mov r14, rax mov edi, dword ptr [rbx+0x70] mov dword ptr [r15+0x08], edi mov rdi, 0xD1FFAB1E ; System.ArgumentException call CORINFO_HELP_NEWSFAST mov rbx, rax mov rsi, r15 mov rdi, r14 mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object):System.String call [rax]System.SR:Format(System.String,System.Object):System.String mov 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=103 bbWeight=0 PerfScore 0.00 -; Total bytes of code 281, prolog size 12, PerfScore 22.62, instruction count 82, allocated bytes for code 281 (MethodHash=f56765ee) for method System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this (FullOpts) +; Total bytes of code 299, prolog size 12, PerfScore 23.25, instruction count 87, allocated bytes for code 299 (MethodHash=f56765ee) for method System.Formats.Tar.TarHeader:FormatNumeric(long,System.Span`1[ubyte]):int:this (FullOpts) ```
18 (27.69 % of base) - System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) ```diff ; Assembly listing for method System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (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; 3 single block inlinees; 2 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,T11] ( 0, 0 ) int -> zero-ref ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" ; V05 tmp2 [V05,T07] ( 2, 8 ) ushort -> r8 ld-addr-op "Inline stloc first use temp" ;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V07 tmp4 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V08 tmp5 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V09 tmp6 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V10 tmp7 [V10,T00] ( 2, 16 ) byref -> rdx "Inlining Arg" -; V11 tmp8 [V11,T01] ( 2, 16 ) int -> rcx "Inlining Arg" +; V10 tmp7 [V10,T01] ( 2, 16 ) byref -> rdx "Inlining Arg" +; V11 tmp8 [V11,T02] ( 2, 16 ) int -> rcx "Inlining Arg" ; V12 tmp9 [V12,T09] ( 2, 5 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP ; V13 tmp10 [V13,T10] ( 3, 2.25) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V14 tmp11 [V14,T02] ( 4, 13 ) byref -> rdx "field V01._reference (fldOffset=0x0)" P-INDEP -; V15 tmp12 [V15,T03] ( 4, 13 ) int -> rcx "field V01._length (fldOffset=0x8)" P-INDEP +; V14 tmp11 [V14,T03] ( 4, 13 ) byref -> rdx "field V01._reference (fldOffset=0x0)" P-INDEP +; V15 tmp12 [V15,T00] ( 5, 17 ) int -> rcx "field V01._length (fldOffset=0x8)" P-INDEP ;* V16 tmp13 [V16 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP ;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP ;* V18 tmp15 [V18 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP ;* V19 tmp16 [V19 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP ;* V20 tmp17 [V20 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP ;* V21 tmp18 [V21 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP ; V22 tmp19 [V22,T06] ( 2, 8 ) byref -> rdx "field V09._reference (fldOffset=0x0)" P-INDEP ; V23 tmp20 [V23,T08] ( 2, 8 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP ; V24 rat0 [V24,T04] ( 4, 12.25) long -> rax "Strength reduced derived IV" ; V25 rat1 [V25,T05] ( 4, 12.25) int -> rsi "Trip count IV" ; ; Lcl frame size = 0 G_M7504_IG01: push rbp mov rbp, rsp ;; size=4 bbWeight=1 PerfScore 1.25 G_M7504_IG02: test esi, esi jle SHORT G_M7504_IG05 ;; size=4 bbWeight=1 PerfScore 1.25 G_M7504_IG03: xor eax, eax align [0 bytes for IG04] ;; size=2 bbWeight=0.25 PerfScore 0.06 G_M7504_IG04: movbe r8w, word ptr [rdi+rax] movzx r8, r8w cmp ecx, 2 - jb SHORT G_M7504_IG06 + jl SHORT G_M7504_IG07 mov word ptr [rdx], r8w + cmp ecx, 2 + jb SHORT G_M7504_IG06 add rdx, 2 add ecx, -2 add rax, 2 dec esi jne SHORT G_M7504_IG04 - ;; size=35 bbWeight=4 PerfScore 30.00 + ;; size=40 bbWeight=4 PerfScore 35.00 G_M7504_IG05: pop rbp ret ;; size=2 bbWeight=1 PerfScore 1.50 G_M7504_IG06: + mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() + call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() + int3 + ;; size=13 bbWeight=0 PerfScore 0.00 +G_M7504_IG07: 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 65, prolog size 4, PerfScore 34.06, instruction count 22, allocated bytes for code 65 (MethodHash=ed4ae2af) for method System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts) +; Total bytes of code 83, prolog size 4, PerfScore 39.06, instruction count 27, allocated bytes for code 83 (MethodHash=ed4ae2af) for method System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinal(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts) ```
6 (1.54 % 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; 21 single block inlinees; 9 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,T11] ( 3, 6 ) ushort -> rdx ; V05 loc3 [V05,T16] ( 2, 4 ) ushort -> rcx ld-addr-op ; V06 loc4 [V06,T17] ( 2, 4 ) ushort -> rax 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 "impAppendStmt" ; V09 tmp2 [V09,T12] ( 3, 6 ) int -> rax "Inline return value spill temp" ; V10 tmp3 [V10,T01] ( 5, 20 ) int -> r12 "Inlining Arg" ; V11 tmp4 [V11,T18] ( 2, 4 ) long -> rax "Inline stloc first use temp" ;* V12 tmp5 [V12 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V13 tmp6 [V13 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V14 tmp7 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* 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 ) ushort -> zero-ref "Inlining Arg" ; V18 tmp11 [V18,T19] ( 2, 4 ) ushort -> rcx ld-addr-op "Inline stloc first use temp" ;* V19 tmp12 [V19 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V20 tmp13 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V21 tmp14 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V22 tmp15 [V22 ] ( 0, 0 ) ushort -> zero-ref "Inlining Arg" ; V23 tmp16 [V23,T20] ( 2, 4 ) ushort -> rax ld-addr-op "Inline stloc first use temp" ;* V24 tmp17 [V24 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V25 tmp18 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V26 tmp19 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V27 tmp20 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V28 tmp21 [V28,T07] ( 2, 8 ) byref -> rbx "Inlining Arg" -; V29 tmp22 [V29,T09] ( 2, 8 ) int -> r15 "Inlining Arg" +; V28 tmp21 [V28,T07] ( 2, 8 ) byref -> r15 "Inlining Arg" +; V29 tmp22 [V29,T09] ( 2, 8 ) int -> rbx "Inlining Arg" ;* V30 tmp23 [V30 ] ( 0, 0 ) ushort -> zero-ref "Inline return value spill temp" ; V31 tmp24 [V31,T21] ( 2, 4 ) long -> rax "Inline stloc first use temp" ;* V32 tmp25 [V32 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V33 tmp26 [V33 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V34 tmp27 [V34 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V35 tmp28 [V35 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V36 tmp29 [V36,T22] ( 2, 4 ) ushort -> rdi ld-addr-op "Inline stloc first use temp" ;* V37 tmp30 [V37 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V38 tmp31 [V38 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V39 tmp32 [V39 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -; V40 tmp33 [V40,T08] ( 2, 8 ) byref -> rbx "Inlining Arg" -; V41 tmp34 [V41,T10] ( 2, 8 ) int -> r15 "Inlining Arg" +; V40 tmp33 [V40,T08] ( 2, 8 ) byref -> r15 "Inlining Arg" +; V41 tmp34 [V41,T10] ( 2, 8 ) int -> rbx "Inlining Arg" ; V42 tmp35 [V42,T06] ( 3, 7 ) byref -> r13 single-def "field V00._reference (fldOffset=0x0)" P-INDEP ; V43 tmp36 [V43,T05] ( 4, 8 ) int -> r14 single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V44 tmp37 [V44,T02] ( 8, 15 ) byref -> rbx "field V01._reference (fldOffset=0x0)" P-INDEP -; V45 tmp38 [V45,T03] ( 8, 15 ) int -> r15 "field V01._length (fldOffset=0x8)" P-INDEP +; V44 tmp37 [V44,T03] ( 8, 15 ) byref -> r15 "field V01._reference (fldOffset=0x0)" P-INDEP +; V45 tmp38 [V45,T02] ( 9, 17 ) int -> rbx "field V01._length (fldOffset=0x8)" P-INDEP ;* V46 tmp39 [V46 ] ( 0, 0 ) byref -> zero-ref "field V08._reference (fldOffset=0x0)" P-INDEP ;* V47 tmp40 [V47 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP ;* V48 tmp41 [V48 ] ( 0, 0 ) byref -> zero-ref "field V12._reference (fldOffset=0x0)" P-INDEP ;* V49 tmp42 [V49 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP ;* V50 tmp43 [V50 ] ( 0, 0 ) byref -> zero-ref "field V15._reference (fldOffset=0x0)" P-INDEP ;* V51 tmp44 [V51 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP ;* V52 tmp45 [V52 ] ( 0, 0 ) byref -> zero-ref "field V16._reference (fldOffset=0x0)" P-INDEP ;* V53 tmp46 [V53 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP ;* V54 tmp47 [V54 ] ( 0, 0 ) byref -> zero-ref "field V19._reference (fldOffset=0x0)" P-INDEP ;* V55 tmp48 [V55 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP ;* V56 tmp49 [V56 ] ( 0, 0 ) byref -> zero-ref "field V20._reference (fldOffset=0x0)" P-INDEP ;* V57 tmp50 [V57 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP ;* V58 tmp51 [V58 ] ( 0, 0 ) byref -> zero-ref "field V21._reference (fldOffset=0x0)" P-INDEP ;* V59 tmp52 [V59 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP ;* V60 tmp53 [V60 ] ( 0, 0 ) byref -> zero-ref "field V24._reference (fldOffset=0x0)" P-INDEP ;* V61 tmp54 [V61 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP ;* V62 tmp55 [V62 ] ( 0, 0 ) byref -> zero-ref "field V25._reference (fldOffset=0x0)" P-INDEP ;* V63 tmp56 [V63 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP ;* V64 tmp57 [V64 ] ( 0, 0 ) byref -> zero-ref "field V26._reference (fldOffset=0x0)" P-INDEP ;* V65 tmp58 [V65 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP -; V66 tmp59 [V66,T14] ( 2, 4 ) byref -> rbx "field V27._reference (fldOffset=0x0)" P-INDEP -; V67 tmp60 [V67,T23] ( 2, 4 ) int -> r15 "field V27._length (fldOffset=0x8)" P-INDEP +; V66 tmp59 [V66,T14] ( 2, 4 ) byref -> r15 "field V27._reference (fldOffset=0x0)" P-INDEP +; V67 tmp60 [V67,T23] ( 2, 4 ) int -> rbx "field V27._length (fldOffset=0x8)" P-INDEP ;* V68 tmp61 [V68 ] ( 0, 0 ) byref -> zero-ref "field V32._reference (fldOffset=0x0)" P-INDEP ;* V69 tmp62 [V69 ] ( 0, 0 ) int -> zero-ref "field V32._length (fldOffset=0x8)" P-INDEP ;* V70 tmp63 [V70 ] ( 0, 0 ) byref -> zero-ref "field V34._reference (fldOffset=0x0)" P-INDEP ;* V71 tmp64 [V71 ] ( 0, 0 ) int -> zero-ref "field V34._length (fldOffset=0x8)" P-INDEP ;* V72 tmp65 [V72 ] ( 0, 0 ) byref -> zero-ref "field V35._reference (fldOffset=0x0)" P-INDEP ;* V73 tmp66 [V73 ] ( 0, 0 ) int -> zero-ref "field V35._length (fldOffset=0x8)" P-INDEP ;* V74 tmp67 [V74 ] ( 0, 0 ) byref -> zero-ref "field V37._reference (fldOffset=0x0)" P-INDEP ;* V75 tmp68 [V75 ] ( 0, 0 ) int -> zero-ref "field V37._length (fldOffset=0x8)" P-INDEP ;* V76 tmp69 [V76 ] ( 0, 0 ) byref -> zero-ref "field V38._reference (fldOffset=0x0)" P-INDEP ;* V77 tmp70 [V77 ] ( 0, 0 ) int -> zero-ref "field V38._length (fldOffset=0x8)" P-INDEP -; V78 tmp71 [V78,T15] ( 2, 4 ) byref -> rbx "field V39._reference (fldOffset=0x0)" P-INDEP -; V79 tmp72 [V79,T24] ( 2, 4 ) int -> r15 "field V39._length (fldOffset=0x8)" P-INDEP +; V78 tmp71 [V78,T15] ( 2, 4 ) byref -> r15 "field V39._reference (fldOffset=0x0)" P-INDEP +; V79 tmp72 [V79,T24] ( 2, 4 ) int -> rbx "field V39._length (fldOffset=0x8)" P-INDEP ; V80 cse0 [V80,T13] ( 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 + mov r15, rdx + mov ebx, ecx + ;; size=27 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_IG10 - mov word ptr [rbx], di - add rbx, 2 - add r15d, -2 + cmp ebx, 2 + jl G_M46204_IG10 + mov word ptr [r15], di + cmp ebx, 2 + jb G_M46204_IG09 + add r15, 2 + add ebx, -2 jmp G_M46204_IG07 - ;; size=68 bbWeight=2 PerfScore 31.00 + ;; size=76 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 rcx, 0xD1FFAB1E ; static handle movzx rax, word ptr [rcx+2*rax] add eax, r12d movzx rax, ax and r12d, -0x10000 or eax, r12d lea ecx, [rax+D1FFAB1EH] shr ecx, 10 movzx rcx, cx and eax, 0x3FF add eax, 0xDC00 movzx rax, ax ror cx, 8 movzx rcx, cx - cmp r15d, 2 - jb SHORT G_M46204_IG10 - mov word ptr [rbx], cx + cmp ebx, 2 + jl SHORT G_M46204_IG10 + mov word ptr [r15], cx ror ax, 8 movzx rax, ax - mov word ptr [rbx], ax + mov word ptr [r15], ax mov r12d, dword ptr [rbp-0x30] - cmp r15d, 4 + cmp ebx, 4 jb SHORT G_M46204_IG09 - add rbx, 4 - add r15d, -4 - ;; size=140 bbWeight=2 PerfScore 38.50 + add r15, 4 + add ebx, -4 + ;; size=139 bbWeight=2 PerfScore 38.50 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 rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M46204_IG10: 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_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 124.25, instruction count 101, 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 395, prolog size 16, PerfScore 126.75, instruction count 103, allocated bytes for code 395 (MethodHash=50e94b83) for method System.Globalization.CompareInfo:InvariantCreateSortKeyOrdinalIgnoreCase(System.ReadOnlySpan`1[ushort],System.Span`1[ubyte]) (FullOpts) ```
5 (4.35 % of base) - System.Decimal:GetBytes(byref,System.Span`1[ubyte]) ```diff ; Assembly listing for method System.Decimal:GetBytes(byref,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; 10 single block inlinees; 11 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T01] ( 6, 6 ) byref -> rdi single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ;# V02 OutArgs [V02 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" ;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" ;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref "impAppendStmt" ;* V06 tmp4 [V06 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ; V07 tmp5 [V07,T06] ( 2, 4 ) int -> rax ld-addr-op "Inlining Arg" ;* V08 tmp6 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V09 tmp7 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V10 tmp8 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V11 tmp9 [V11,T03] ( 2, 4 ) byref -> rax single-def "Inlining Arg" ; V12 tmp10 [V12,T07] ( 2, 4 ) int -> rcx "Inlining Arg" ; V13 tmp11 [V13,T08] ( 2, 4 ) int -> r8 ld-addr-op "Inlining Arg" ;* V14 tmp12 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V15 tmp13 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V16 tmp14 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V17 tmp15 [V17,T04] ( 2, 4 ) byref -> rax single-def "Inlining Arg" ; V18 tmp16 [V18,T09] ( 2, 4 ) int -> rcx "Inlining Arg" ; V19 tmp17 [V19,T10] ( 2, 4 ) int -> r8 ld-addr-op "Inlining Arg" ;* V20 tmp18 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V21 tmp19 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V22 tmp20 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ; V23 tmp21 [V23,T05] ( 2, 4 ) byref -> rsi single-def "Inlining Arg" ; V24 tmp22 [V24,T11] ( 2, 4 ) int -> rdx "Inlining Arg" ; V25 tmp23 [V25,T12] ( 2, 4 ) int -> rax ld-addr-op "Inlining Arg" ;* V26 tmp24 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V27 tmp25 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V28 tmp26 [V28,T02] ( 5, 5 ) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V29 tmp27 [V29,T00] ( 7, 7 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V29 tmp27 [V29,T00] ( 8, 8 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V30 tmp28 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "field V03._reference (fldOffset=0x0)" P-INDEP ;* V31 tmp29 [V31 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP ;* V32 tmp30 [V32 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP ;* V33 tmp31 [V33 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP ;* V34 tmp32 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP ;* V35 tmp33 [V35 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP ;* V36 tmp34 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP ;* V37 tmp35 [V37 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP ;* V38 tmp36 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP ;* V39 tmp37 [V39 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP ;* V40 tmp38 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP ;* V41 tmp39 [V41 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP ;* V42 tmp40 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP ;* V43 tmp41 [V43 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP ;* V44 tmp42 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP ;* V45 tmp43 [V45 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP ;* V46 tmp44 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP ;* V47 tmp45 [V47 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP ;* V48 tmp46 [V48 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP ;* V49 tmp47 [V49 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP ;* V50 tmp48 [V50 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP ;* V51 tmp49 [V51 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP ;* V52 tmp50 [V52 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP ;* V53 tmp51 [V53 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP ;* V54 tmp52 [V54 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP ;* V55 tmp53 [V55 ] ( 0, 0 ) int -> zero-ref "field V22._length (fldOffset=0x8)" P-INDEP ;* V56 tmp54 [V56 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP ;* V57 tmp55 [V57 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP ;* V58 tmp56 [V58 ] ( 0, 0 ) byref -> zero-ref single-def "field V27._reference (fldOffset=0x0)" P-INDEP ;* V59 tmp57 [V59 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP ; ; Lcl frame size = 0 G_M64391_IG01: push rbp mov rbp, rsp ;; size=4 bbWeight=1 PerfScore 1.25 G_M64391_IG02: mov eax, dword ptr [rdi+0x08] cmp edx, 4 - jb SHORT G_M64391_IG05 + jl SHORT G_M64391_IG05 mov dword ptr [rsi], eax + cmp edx, 4 + jb SHORT G_M64391_IG04 lea rax, bword ptr [rsi+0x04] lea ecx, [rdx-0x04] mov r8, qword ptr [rdi+0x08] shr r8, 32 cmp ecx, 4 - jb SHORT G_M64391_IG05 + jl SHORT G_M64391_IG05 mov dword ptr [rax], r8d cmp edx, 8 jb SHORT G_M64391_IG04 lea rax, bword ptr [rsi+0x08] lea ecx, [rdx-0x08] mov r8d, dword ptr [rdi+0x04] cmp ecx, 4 - jb SHORT G_M64391_IG05 + jl SHORT G_M64391_IG05 mov dword ptr [rax], r8d cmp edx, 12 jb SHORT G_M64391_IG04 add rsi, 12 add edx, -12 mov eax, dword ptr [rdi] cmp edx, 4 - jb SHORT G_M64391_IG05 + jl SHORT G_M64391_IG05 mov dword ptr [rsi], eax - ;; size=78 bbWeight=1 PerfScore 22.50 + ;; size=83 bbWeight=1 PerfScore 23.75 G_M64391_IG03: pop rbp ret ;; size=2 bbWeight=1 PerfScore 1.50 G_M64391_IG04: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M64391_IG05: 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 115, prolog size 4, PerfScore 25.25, instruction count 38, allocated bytes for code 115 (MethodHash=cd270478) for method System.Decimal:GetBytes(byref,System.Span`1[ubyte]) (FullOpts) +; Total bytes of code 120, prolog size 4, PerfScore 26.50, instruction count 40, allocated bytes for code 120 (MethodHash=cd270478) for method System.Decimal:GetBytes(byref,System.Span`1[ubyte]) (FullOpts) ```
MihuBot commented 1 month ago

Top method improvements

-43 (-31.16 % of base) - System.IO.Hashing.Crc64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte ```diff ; Assembly listing for method System.IO.Hashing.Crc64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):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; 3 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 arg2 [V02,T00] ( 4, 3 ) byref -> rbx single-def ;* V03 loc0 [V03 ] ( 0, 0 ) long -> zero-ref single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V05 tmp1 [V05,T05] ( 3, 1.50) long -> rax "Inline return value spill temp" ;* V06 tmp2 [V06 ] ( 0, 0 ) ubyte -> zero-ref single-def "Inline return value spill temp" ;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V08 tmp4 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V09 tmp5 [V09,T06] ( 2, 1 ) long -> rax ld-addr-op single-def "Inline stloc first use 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,T03] ( 3, 2 ) byref -> rsi single-def "field V00._reference (fldOffset=0x0)" P-INDEP +; V13 tmp9 [V13,T02] ( 3, 2 ) byref -> rsi single-def "field V00._reference (fldOffset=0x0)" P-INDEP ; V14 tmp10 [V14,T01] ( 4, 2.50) int -> rax single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V15 tmp11 [V15,T04] ( 2, 1.50) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V16 tmp12 [V16,T02] ( 3, 2.50) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V15 tmp11 [V15,T04] ( 2, 1.50) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V16 tmp12 [V16,T03] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V17 tmp13 [V17 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP ;* V18 tmp14 [V18 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP ;* V19 tmp15 [V19 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP ;* V20 tmp16 [V20 ] ( 0, 0 ) int -> zero-ref single-def "field V10._length (fldOffset=0x8)" P-INDEP ;* V21 tmp17 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V22 tmp18 [V22 ] ( 0, 0 ) int -> zero-ref single-def "field V11._length (fldOffset=0x8)" P-INDEP ;* V23 tmp19 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP ;* V24 tmp20 [V24 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M55114_IG01: push rbp push r15 - push r14 push rbx - push rax - lea rbp, [rsp+0x20] + lea rbp, [rsp+0x10] mov eax, esi mov rsi, rdi - mov r14, rdx - mov r15d, ecx + mov r15, rdx mov rbx, r8 - ;; size=26 bbWeight=1 PerfScore 6.75 + ;; size=20 bbWeight=1 PerfScore 4.50 G_M55114_IG02: - cmp r15d, 8 + cmp ecx, 8 jl SHORT G_M55114_IG07 - ;; size=6 bbWeight=1 PerfScore 1.25 + ;; size=5 bbWeight=1 PerfScore 1.25 G_M55114_IG03: cmp eax, 16 jge SHORT G_M55114_IG04 mov edx, eax xor edi, edi mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.Crc64:UpdateScalar(ulong,System.ReadOnlySpan`1[ubyte]):ulong call [rax]System.IO.Hashing.Crc64:UpdateScalar(ulong,System.ReadOnlySpan`1[ubyte]):ulong jmp SHORT G_M55114_IG05 ;; size=23 bbWeight=0.50 PerfScore 3.50 G_M55114_IG04: mov edx, eax xor edi, edi mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.Crc64:UpdateVectorized(ulong,System.ReadOnlySpan`1[ubyte]):ulong call [rax]System.IO.Hashing.Crc64:UpdateVectorized(ulong,System.ReadOnlySpan`1[ubyte]):ulong ;; size=16 bbWeight=0.50 PerfScore 1.88 G_M55114_IG05: bswap rax - cmp r15d, 8 - jb SHORT G_M55114_IG09 - mov qword ptr [r14], rax + mov qword ptr [r15], rax mov dword ptr [rbx], 8 mov eax, 1 - ;; size=23 bbWeight=0.50 PerfScore 2.25 + ;; size=17 bbWeight=0.50 PerfScore 1.62 G_M55114_IG06: - add rsp, 8 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=11 bbWeight=0.50 PerfScore 1.62 + ;; size=5 bbWeight=0.50 PerfScore 1.25 G_M55114_IG07: xor eax, eax mov dword ptr [rbx], eax ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M55114_IG08: - add rsp, 8 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=11 bbWeight=0.50 PerfScore 1.62 -G_M55114_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 + ;; size=5 bbWeight=0.50 PerfScore 1.25 -; Total bytes of code 138, prolog size 12, PerfScore 19.50, instruction count 48, allocated bytes for code 138 (MethodHash=5ef028b5) for method System.IO.Hashing.Crc64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts) +; Total bytes of code 95, prolog size 9, PerfScore 15.88, instruction count 35, allocated bytes for code 95 (MethodHash=5ef028b5) for method System.IO.Hashing.Crc64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts) ```
-43 (-39.81 % of base) - System.IO.Hashing.XxHash32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,int):ubyte ```diff ; Assembly listing for method System.IO.Hashing.XxHash32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,int):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; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 arg2 [V02,T00] ( 4, 3 ) byref -> rbx single-def ; V03 arg3 [V03,T01] ( 3, 2.50) int -> r9 single-def ; V04 loc0 [V04,T06] ( 2, 1 ) int -> rax single-def ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V06 tmp1 [V06,T07] ( 2, 1 ) int -> rax ld-addr-op single-def "Inline stloc first use temp" ;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V10 tmp5 [V10,T03] ( 2, 1.50) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP ; V11 tmp6 [V11,T05] ( 2, 1.50) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V12 tmp7 [V12,T04] ( 2, 1.50) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V13 tmp8 [V13,T02] ( 3, 2.50) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V12 tmp7 [V12,T04] ( 2, 1.50) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V13 tmp8 [V13,T02] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V14 tmp9 [V14 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP ;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP ;* V16 tmp11 [V16 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP ;* V17 tmp12 [V17 ] ( 0, 0 ) int -> zero-ref single-def "field V08._length (fldOffset=0x8)" P-INDEP ;* V18 tmp13 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP ;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M36118_IG01: push rbp push r15 - push r14 push rbx - push rax - lea rbp, [rsp+0x20] - mov r14, rdx - mov r15d, ecx + lea rbp, [rsp+0x10] + mov r15, rdx mov rbx, r8 - ;; size=21 bbWeight=1 PerfScore 6.25 + ;; size=15 bbWeight=1 PerfScore 4.00 G_M36118_IG02: - cmp r15d, 4 + cmp ecx, 4 jl SHORT G_M36118_IG05 - ;; size=6 bbWeight=1 PerfScore 1.25 + ;; size=5 bbWeight=1 PerfScore 1.25 G_M36118_IG03: mov edx, r9d mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash32:HashToUInt32(System.ReadOnlySpan`1[ubyte],int):uint call [rax]System.IO.Hashing.XxHash32:HashToUInt32(System.ReadOnlySpan`1[ubyte],int):uint bswap eax - cmp r15d, 4 - jb SHORT G_M36118_IG07 - mov dword ptr [r14], eax + mov dword ptr [r15], eax mov dword ptr [rbx], 4 mov eax, 1 - ;; size=37 bbWeight=0.50 PerfScore 3.75 + ;; size=31 bbWeight=0.50 PerfScore 3.12 G_M36118_IG04: - add rsp, 8 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=11 bbWeight=0.50 PerfScore 1.62 + ;; size=5 bbWeight=0.50 PerfScore 1.25 G_M36118_IG05: xor eax, eax mov dword ptr [rbx], eax ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M36118_IG06: - add rsp, 8 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=11 bbWeight=0.50 PerfScore 1.62 -G_M36118_IG07: - 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 + ;; size=5 bbWeight=0.50 PerfScore 1.25 -; Total bytes of code 108, prolog size 12, PerfScore 15.12, instruction count 38, allocated bytes for code 108 (MethodHash=c50672e9) for method System.IO.Hashing.XxHash32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,int):ubyte (FullOpts) +; Total bytes of code 65, prolog size 9, PerfScore 11.50, instruction count 25, allocated bytes for code 65 (MethodHash=c50672e9) for method 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.XxHash64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,long):ubyte ```diff ; Assembly listing for method System.IO.Hashing.XxHash64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,long):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; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 arg2 [V02,T00] ( 4, 3 ) byref -> rbx single-def ; V03 arg3 [V03,T01] ( 3, 2.50) long -> r9 single-def ; V04 loc0 [V04,T06] ( 2, 1 ) long -> rax single-def ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V06 tmp1 [V06,T07] ( 2, 1 ) long -> rax ld-addr-op single-def "Inline stloc first use temp" ;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V08 tmp3 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V10 tmp5 [V10,T03] ( 2, 1.50) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP ; V11 tmp6 [V11,T05] ( 2, 1.50) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V12 tmp7 [V12,T04] ( 2, 1.50) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V13 tmp8 [V13,T02] ( 3, 2.50) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V12 tmp7 [V12,T04] ( 2, 1.50) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V13 tmp8 [V13,T02] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V14 tmp9 [V14 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP ;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP ;* V16 tmp11 [V16 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP ;* V17 tmp12 [V17 ] ( 0, 0 ) int -> zero-ref single-def "field V08._length (fldOffset=0x8)" P-INDEP ;* V18 tmp13 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP ;* V19 tmp14 [V19 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP ; -; Lcl frame size = 8 +; Lcl frame size = 0 G_M59884_IG01: push rbp push r15 - push r14 push rbx - push rax - lea rbp, [rsp+0x20] - mov r14, rdx - mov r15d, ecx + lea rbp, [rsp+0x10] + mov r15, rdx mov rbx, r8 - ;; size=21 bbWeight=1 PerfScore 6.25 + ;; size=15 bbWeight=1 PerfScore 4.00 G_M59884_IG02: - cmp r15d, 8 + cmp ecx, 8 jl SHORT G_M59884_IG05 - ;; size=6 bbWeight=1 PerfScore 1.25 + ;; size=5 bbWeight=1 PerfScore 1.25 G_M59884_IG03: mov rdx, r9 mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash64:HashToUInt64(System.ReadOnlySpan`1[ubyte],long):ulong call [rax]System.IO.Hashing.XxHash64:HashToUInt64(System.ReadOnlySpan`1[ubyte],long):ulong bswap rax - cmp r15d, 8 - jb SHORT G_M59884_IG07 - mov qword ptr [r14], rax + mov qword ptr [r15], rax mov dword ptr [rbx], 8 mov eax, 1 - ;; size=38 bbWeight=0.50 PerfScore 4.00 + ;; size=32 bbWeight=0.50 PerfScore 3.38 G_M59884_IG04: - add rsp, 8 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=11 bbWeight=0.50 PerfScore 1.62 + ;; size=5 bbWeight=0.50 PerfScore 1.25 G_M59884_IG05: xor eax, eax mov dword ptr [rbx], eax ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M59884_IG06: - add rsp, 8 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=11 bbWeight=0.50 PerfScore 1.62 -G_M59884_IG07: - 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 + ;; size=5 bbWeight=0.50 PerfScore 1.25 -; Total bytes of code 109, prolog size 12, PerfScore 15.38, instruction count 38, allocated bytes for code 109 (MethodHash=83591613) for method System.IO.Hashing.XxHash64:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref,long):ubyte (FullOpts) +; Total bytes of code 66, prolog size 9, PerfScore 11.75, instruction count 25, allocated bytes for code 66 (MethodHash=83591613) for method 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.Crc32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte ```diff ; Assembly listing for method System.IO.Hashing.Crc32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (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; 3 single block inlinees; 6 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 arg2 [V02,T03] ( 4, 3 ) byref -> rbx single-def ; V03 loc0 [V03,T13] ( 2, 1 ) int -> rax single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V05 tmp1 [V05,T11] ( 3, 1.50) int -> r13 "Inline return value spill temp" +; V05 tmp1 [V05,T11] ( 3, 1.50) int -> r14 "Inline return value spill temp" ;* V06 tmp2 [V06 ] ( 0, 0 ) ubyte -> zero-ref single-def "Inline return value spill temp" ;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V08 tmp4 [V08 ] ( 0, 0 ) int -> zero-ref ;* V09 tmp5 [V09 ] ( 0, 0 ) int -> zero-ref ;* V10 tmp6 [V10 ] ( 0, 0 ) int -> zero-ref ;* V11 tmp7 [V11 ] ( 0, 0 ) int -> zero-ref ;* V12 tmp8 [V12 ] ( 0, 0 ) int -> zero-ref ;* V13 tmp9 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V14 tmp10 [V14 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" ;* V15 tmp11 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" ;* V16 tmp12 [V16,T14] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V17 tmp13 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V18 tmp14 [V18,T00] ( 5, 26 ) int -> rdx "Inlining Arg" ; V19 tmp15 [V19,T02] ( 3, 12 ) ubyte -> r8 "Inline stloc first use temp" ;* V20 tmp16 [V20 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" ;* V21 tmp17 [V21 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V22 tmp18 [V22 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inlining Arg" ;* V23 tmp19 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V24 tmp20 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V25 tmp21 [V25,T09] ( 3, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP -; V26 tmp22 [V26,T05] ( 4, 2.50) int -> [rbp-0x24] single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V27 tmp23 [V27,T10] ( 2, 1.50) byref -> r14 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V28 tmp24 [V28,T06] ( 3, 2.50) int -> r15 single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V25 tmp21 [V25,T08] ( 3, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP +; V26 tmp22 [V26,T05] ( 4, 2.50) int -> [rbp-0x1C] single-def "field V00._length (fldOffset=0x8)" P-INDEP +; V27 tmp23 [V27,T10] ( 2, 1.50) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V28 tmp24 [V28,T09] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V29 tmp25 [V29 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP ;* V30 tmp26 [V30 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP -; V31 tmp27 [V31,T07] ( 2, 4.50) byref -> rax single-def "field V15._reference (fldOffset=0x0)" P-INDEP +; V31 tmp27 [V31,T06] ( 2, 4.50) byref -> rax single-def "field V15._reference (fldOffset=0x0)" P-INDEP ;* V32 tmp28 [V32,T15] ( 0, 0 ) int -> zero-ref single-def "field V15._length (fldOffset=0x8)" P-INDEP -; V33 tmp29 [V33,T08] ( 2, 4.50) byref -> rdi single-def "field V17._reference (fldOffset=0x0)" P-INDEP +; V33 tmp29 [V33,T07] ( 2, 4.50) byref -> rdi single-def "field V17._reference (fldOffset=0x0)" P-INDEP ; V34 tmp30 [V34,T04] ( 3, 5 ) int -> rsi single-def "field V17._length (fldOffset=0x8)" P-INDEP ; V35 tmp31 [V35,T12] ( 2, 1 ) byref -> rax single-def "field V20._reference (fldOffset=0x0)" P-INDEP ;* V36 tmp32 [V36,T16] ( 0, 0 ) int -> zero-ref single-def "field V20._length (fldOffset=0x8)" P-INDEP ;* V37 tmp33 [V37 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP ;* V38 tmp34 [V38 ] ( 0, 0 ) int -> zero-ref single-def "field V21._length (fldOffset=0x8)" P-INDEP ;* V39 tmp35 [V39 ] ( 0, 0 ) byref -> zero-ref single-def "field V23._reference (fldOffset=0x0)" P-INDEP ;* V40 tmp36 [V40 ] ( 0, 0 ) int -> zero-ref single-def "field V23._length (fldOffset=0x8)" P-INDEP ;* V41 tmp37 [V41 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP ;* V42 tmp38 [V42 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP ; V43 rat0 [V43,T01] ( 5, 16.50) long -> rcx "Widened IV V16" ; -; Lcl frame size = 16 +; Lcl frame size = 8 G_M17033_IG01: push rbp push r15 push r14 - push r13 push rbx - sub rsp, 16 - lea rbp, [rsp+0x30] - mov r14, rdx - mov r15d, ecx + push rax + lea rbp, [rsp+0x20] + mov r15, rdx mov rbx, r8 - ;; size=26 bbWeight=1 PerfScore 6.50 + ;; size=18 bbWeight=1 PerfScore 6.00 G_M17033_IG02: - cmp r15d, 4 + cmp ecx, 4 jl G_M17033_IG09 - ;; size=10 bbWeight=1 PerfScore 1.25 + ;; size=9 bbWeight=1 PerfScore 1.25 G_M17033_IG03: cmp esi, 16 jge SHORT G_M17033_IG06 mov edx, -1 mov rax, 0xD1FFAB1E ; static handle xor ecx, ecx test esi, esi jle SHORT G_M17033_IG05 align [0 bytes for IG04] ;; size=26 bbWeight=0.50 PerfScore 1.62 G_M17033_IG04: movzx r8, byte ptr [rdi+rcx] xor r8d, edx movzx r8, r8b cmp r8d, 256 - jae SHORT G_M17033_IG12 + jae SHORT G_M17033_IG11 shr edx, 8 xor edx, dword ptr [rax+4*r8] inc ecx cmp ecx, esi jl SHORT G_M17033_IG04 ;; size=34 bbWeight=4 PerfScore 35.00 G_M17033_IG05: - mov r13d, edx + mov r14d, edx jmp SHORT G_M17033_IG07 ;; size=5 bbWeight=0.50 PerfScore 1.12 G_M17033_IG06: - mov dword ptr [rbp-0x24], esi + mov dword ptr [rbp-0x1C], esi mov rsi, rdi - mov edx, dword ptr [rbp-0x24] + mov edx, dword ptr [rbp-0x1C] mov edi, -1 mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.Crc32:UpdateVectorized(uint,System.ReadOnlySpan`1[ubyte]):uint call [rax]System.IO.Hashing.Crc32:UpdateVectorized(uint,System.ReadOnlySpan`1[ubyte]):uint - mov r13d, eax + mov r14d, eax ;; size=29 bbWeight=0.50 PerfScore 3.00 G_M17033_IG07: - mov eax, r13d + mov eax, r14d not eax - cmp r15d, 4 - jb SHORT G_M17033_IG11 - mov dword ptr [r14], eax + mov dword ptr [r15], eax mov dword ptr [rbx], 4 mov eax, 1 - ;; size=25 bbWeight=0.50 PerfScore 2.00 + ;; size=19 bbWeight=0.50 PerfScore 1.38 G_M17033_IG08: - add rsp, 16 + add rsp, 8 pop rbx - pop r13 pop r14 pop r15 pop rbp ret - ;; size=13 bbWeight=0.50 PerfScore 1.88 + ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M17033_IG09: xor eax, eax mov dword ptr [rbx], eax ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M17033_IG10: - add rsp, 16 + add rsp, 8 pop rbx - pop r13 pop r14 pop r15 pop rbp ret - ;; size=13 bbWeight=0.50 PerfScore 1.88 + ;; size=11 bbWeight=0.50 PerfScore 1.62 G_M17033_IG11: - 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_M17033_IG12: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 209, prolog size 26, PerfScore 54.88, instruction count 68, allocated bytes for code 209 (MethodHash=6cb4bd76) for method System.IO.Hashing.Crc32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts) +; Total bytes of code 172, prolog size 18, PerfScore 53.25, instruction count 58, allocated bytes for code 172 (MethodHash=6cb4bd76) for method System.IO.Hashing.Crc32:TryHash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],byref):ubyte (FullOpts) ```
-31 (-16.67 % of base) - System.IO.Hashing.Crc32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int ```diff ; Assembly listing for method System.IO.Hashing.Crc32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):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; 3 single block inlinees; 6 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 loc0 [V02,T11] ( 2, 2 ) int -> rax single-def ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" -; V04 tmp1 [V04,T10] ( 3, 2 ) int -> r14 "Inline return value spill temp" +; V04 tmp1 [V04,T10] ( 3, 2 ) int -> r15 "Inline return value spill temp" ;* V05 tmp2 [V05 ] ( 0, 0 ) ubyte -> zero-ref single-def "Inline return value spill temp" ;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V07 tmp4 [V07 ] ( 0, 0 ) int -> zero-ref ;* V08 tmp5 [V08 ] ( 0, 0 ) int -> zero-ref ;* V09 tmp6 [V09 ] ( 0, 0 ) int -> zero-ref ;* V10 tmp7 [V10 ] ( 0, 0 ) int -> zero-ref ;* V11 tmp8 [V11 ] ( 0, 0 ) int -> zero-ref ;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V13 tmp10 [V13 ] ( 0, 0 ) int -> zero-ref "Inline return value spill temp" ;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline stloc first use temp" ;* V15 tmp12 [V15,T13] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V17 tmp14 [V17,T00] ( 5, 26 ) int -> rdx "Inlining Arg" ; V18 tmp15 [V18,T02] ( 3, 12 ) ubyte -> r8 "Inline stloc first use temp" ;* V19 tmp16 [V19 ] ( 0, 0 ) struct (16) zero-ref "ReadOnlySpan for CreateSpan" ;* V20 tmp17 [V20 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V21 tmp18 [V21 ] ( 0, 0 ) int -> zero-ref ld-addr-op "Inlining Arg" ;* V22 tmp19 [V22 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V23 tmp20 [V23 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V24 tmp21 [V24,T08] ( 3, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP -; V25 tmp22 [V25,T03] ( 4, 3 ) int -> [rbp-0x1C] single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V26 tmp23 [V26,T09] ( 2, 2 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V27 tmp24 [V27,T04] ( 3, 3 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V24 tmp21 [V24,T07] ( 3, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP +; V25 tmp22 [V25,T03] ( 4, 3 ) int -> [rbp-0x14] single-def "field V00._length (fldOffset=0x8)" P-INDEP +; V26 tmp23 [V26,T08] ( 2, 2 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V27 tmp24 [V27,T09] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V28 tmp25 [V28 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP ;* V29 tmp26 [V29 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP -; V30 tmp27 [V30,T06] ( 2, 4.50) byref -> rax single-def "field V14._reference (fldOffset=0x0)" P-INDEP +; V30 tmp27 [V30,T05] ( 2, 4.50) byref -> rax single-def "field V14._reference (fldOffset=0x0)" P-INDEP ;* V31 tmp28 [V31,T14] ( 0, 0 ) int -> zero-ref single-def "field V14._length (fldOffset=0x8)" P-INDEP -; V32 tmp29 [V32,T07] ( 2, 4.50) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP -; V33 tmp30 [V33,T05] ( 3, 5 ) int -> rsi single-def "field V16._length (fldOffset=0x8)" P-INDEP +; V32 tmp29 [V32,T06] ( 2, 4.50) byref -> rdi single-def "field V16._reference (fldOffset=0x0)" P-INDEP +; V33 tmp30 [V33,T04] ( 3, 5 ) int -> rsi single-def "field V16._length (fldOffset=0x8)" P-INDEP ; V34 tmp31 [V34,T12] ( 2, 1 ) byref -> rax single-def "field V19._reference (fldOffset=0x0)" P-INDEP ;* V35 tmp32 [V35,T15] ( 0, 0 ) int -> zero-ref single-def "field V19._length (fldOffset=0x8)" P-INDEP ;* V36 tmp33 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP ;* V37 tmp34 [V37 ] ( 0, 0 ) int -> zero-ref single-def "field V20._length (fldOffset=0x8)" P-INDEP ;* V38 tmp35 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V22._reference (fldOffset=0x0)" P-INDEP ;* V39 tmp36 [V39 ] ( 0, 0 ) int -> zero-ref single-def "field V22._length (fldOffset=0x8)" P-INDEP ;* V40 tmp37 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V23._reference (fldOffset=0x0)" P-INDEP ;* V41 tmp38 [V41 ] ( 0, 0 ) int -> zero-ref "field V23._length (fldOffset=0x8)" P-INDEP ; V42 rat0 [V42,T01] ( 5, 16.50) long -> rcx "Widened IV V15" ; -; Lcl frame size = 8 +; Lcl frame size = 16 G_M38940_IG01: push rbp push r15 - push r14 push rbx - push rax + sub rsp, 16 lea rbp, [rsp+0x20] - mov r15, rdx - mov ebx, ecx - ;; size=17 bbWeight=1 PerfScore 6.00 + mov rbx, rdx + ;; size=16 bbWeight=1 PerfScore 4.00 G_M38940_IG02: - cmp ebx, 4 - jl G_M38940_IG10 + cmp ecx, 4 + jl SHORT G_M38940_IG09 cmp esi, 16 jge SHORT G_M38940_IG06 - ;; size=14 bbWeight=1 PerfScore 2.50 + ;; size=10 bbWeight=1 PerfScore 2.50 G_M38940_IG03: mov edx, -1 mov rax, 0xD1FFAB1E ; static handle xor ecx, ecx test esi, esi jle SHORT G_M38940_IG05 align [0 bytes for IG04] ;; size=21 bbWeight=0.50 PerfScore 1.00 G_M38940_IG04: movzx r8, byte ptr [rdi+rcx] xor r8d, edx movzx r8, r8b cmp r8d, 256 - jae SHORT G_M38940_IG11 + jae SHORT G_M38940_IG10 shr edx, 8 xor edx, dword ptr [rax+4*r8] inc ecx cmp ecx, esi jl SHORT G_M38940_IG04 ;; size=34 bbWeight=4 PerfScore 35.00 G_M38940_IG05: - mov r14d, edx + mov r15d, edx jmp SHORT G_M38940_IG07 ;; size=5 bbWeight=0.50 PerfScore 1.12 G_M38940_IG06: - mov dword ptr [rbp-0x1C], esi + mov dword ptr [rbp-0x14], esi mov rsi, rdi - mov edx, dword ptr [rbp-0x1C] + mov edx, dword ptr [rbp-0x14] mov edi, -1 mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.Crc32:UpdateVectorized(uint,System.ReadOnlySpan`1[ubyte]):uint call [rax]System.IO.Hashing.Crc32:UpdateVectorized(uint,System.ReadOnlySpan`1[ubyte]):uint - mov r14d, eax + mov r15d, eax ;; size=29 bbWeight=0.50 PerfScore 3.00 G_M38940_IG07: - mov eax, r14d + mov eax, r15d not eax - cmp ebx, 4 - jb SHORT G_M38940_IG09 - mov dword ptr [r15], eax + mov dword ptr [rbx], eax mov eax, 4 - ;; size=18 bbWeight=1 PerfScore 3.00 + ;; size=12 bbWeight=1 PerfScore 1.75 G_M38940_IG08: - add rsp, 8 + add rsp, 16 pop rbx - pop r14 pop r15 pop rbp ret - ;; size=11 bbWeight=1 PerfScore 3.25 + ;; size=9 bbWeight=1 PerfScore 2.75 G_M38940_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_M38940_IG10: mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() call [rax]System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -G_M38940_IG11: +G_M38940_IG10: call CORINFO_HELP_RNGCHKFAIL int3 ;; size=6 bbWeight=0 PerfScore 0.00 -; Total bytes of code 186, prolog size 17, PerfScore 54.88, instruction count 58, allocated bytes for code 186 (MethodHash=b30467e3) for method System.IO.Hashing.Crc32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts) +; Total bytes of code 155, prolog size 16, PerfScore 51.12, instruction count 49, allocated bytes for code 159 (MethodHash=b30467e3) for method System.IO.Hashing.Crc32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts) ```
-25 (-29.41 % of base) - System.IO.Hashing.XxHash32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],int):int ```diff ; Assembly listing for method System.IO.Hashing.XxHash32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],int):int (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; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 arg2 [V02,T00] ( 3, 3 ) int -> r8 single-def ; V03 loc0 [V03,T05] ( 2, 2 ) int -> rax single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V05 tmp1 [V05,T06] ( 2, 2 ) int -> rax ld-addr-op single-def "Inline stloc first use temp" ;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V09 tmp5 [V09,T02] ( 2, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP -; V10 tmp6 [V10,T04] ( 2, 2 ) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V11 tmp7 [V11,T03] ( 2, 2 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V12 tmp8 [V12,T01] ( 3, 3 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V09 tmp5 [V09,T01] ( 2, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP +; V10 tmp6 [V10,T03] ( 2, 2 ) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP +; V11 tmp7 [V11,T02] ( 2, 2 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V12 tmp8 [V12,T04] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V13 tmp9 [V13 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP ;* V14 tmp10 [V14 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP ;* V15 tmp11 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP ;* V16 tmp12 [V16 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP ;* V17 tmp13 [V17 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP ;* V18 tmp14 [V18 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP ; -; Lcl frame size = 0 +; Lcl frame size = 8 G_M27075_IG01: push rbp - push r15 push rbx + push rax lea rbp, [rsp+0x10] - mov r15, rdx - mov ebx, ecx - ;; size=14 bbWeight=1 PerfScore 4.00 + mov rbx, rdx + ;; size=11 bbWeight=1 PerfScore 3.75 G_M27075_IG02: - cmp ebx, 4 - jl SHORT G_M27075_IG05 + cmp ecx, 4 + jl SHORT G_M27075_IG04 mov edx, r8d mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash32:HashToUInt32(System.ReadOnlySpan`1[ubyte],int):uint call [rax]System.IO.Hashing.XxHash32:HashToUInt32(System.ReadOnlySpan`1[ubyte],int):uint bswap eax - cmp ebx, 4 - jb SHORT G_M27075_IG04 - mov dword ptr [r15], eax + mov dword ptr [rbx], eax mov eax, 4 - ;; size=35 bbWeight=1 PerfScore 7.75 + ;; size=29 bbWeight=1 PerfScore 6.50 G_M27075_IG03: + add rsp, 8 pop rbx - pop r15 pop rbp ret - ;; size=5 bbWeight=1 PerfScore 2.50 + ;; size=7 bbWeight=1 PerfScore 2.25 G_M27075_IG04: - 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_M27075_IG05: mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() call [rax]System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -; Total bytes of code 85, prolog size 9, PerfScore 14.25, instruction count 27, allocated bytes for code 85 (MethodHash=fb2a963c) for method System.IO.Hashing.XxHash32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],int):int (FullOpts) +; Total bytes of code 60, prolog size 8, PerfScore 12.50, instruction count 20, allocated bytes for code 60 (MethodHash=fb2a963c) for method System.IO.Hashing.XxHash32:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],int):int (FullOpts) ```
-24 (-20.87 % of base) - System.IO.Hashing.Crc64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int ```diff ; Assembly listing for method System.IO.Hashing.Crc64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (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; 3 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ;* V02 loc0 [V02 ] ( 0, 0 ) long -> zero-ref single-def ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T04] ( 3, 2 ) long -> rax "Inline return value spill temp" ;* V05 tmp2 [V05 ] ( 0, 0 ) ubyte -> zero-ref single-def "Inline return value spill temp" ;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V07 tmp4 [V07 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ; V08 tmp5 [V08,T05] ( 2, 2 ) long -> rax ld-addr-op single-def "Inline stloc first use temp" ;* V09 tmp6 [V09 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V11 tmp8 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V12 tmp9 [V12,T02] ( 3, 2 ) byref -> rsi single-def "field V00._reference (fldOffset=0x0)" P-INDEP +; V12 tmp9 [V12,T01] ( 3, 2 ) byref -> rsi single-def "field V00._reference (fldOffset=0x0)" P-INDEP ; V13 tmp10 [V13,T00] ( 4, 3 ) int -> rax single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V14 tmp11 [V14,T03] ( 2, 2 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V15 tmp12 [V15,T01] ( 3, 3 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V14 tmp11 [V14,T02] ( 2, 2 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V15 tmp12 [V15,T03] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V16 tmp13 [V16 ] ( 0, 0 ) byref -> zero-ref "field V06._reference (fldOffset=0x0)" P-INDEP ;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP ;* V18 tmp15 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP ;* V19 tmp16 [V19 ] ( 0, 0 ) int -> zero-ref single-def "field V09._length (fldOffset=0x8)" P-INDEP ;* V20 tmp17 [V20 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP ;* V21 tmp18 [V21 ] ( 0, 0 ) int -> zero-ref single-def "field V10._length (fldOffset=0x8)" P-INDEP ;* V22 tmp19 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V23 tmp20 [V23 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP ; -; Lcl frame size = 0 +; Lcl frame size = 8 G_M59327_IG01: push rbp - push r15 push rbx + push rax lea rbp, [rsp+0x10] mov eax, esi mov rsi, rdi - mov r15, rdx - mov ebx, ecx - ;; size=19 bbWeight=1 PerfScore 4.50 + mov rbx, rdx + ;; size=16 bbWeight=1 PerfScore 4.25 G_M59327_IG02: - cmp ebx, 8 - jl SHORT G_M59327_IG08 + cmp ecx, 8 + jl SHORT G_M59327_IG07 cmp eax, 16 jge SHORT G_M59327_IG04 ;; size=10 bbWeight=1 PerfScore 2.50 G_M59327_IG03: mov edx, eax xor edi, edi mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.Crc64:UpdateScalar(ulong,System.ReadOnlySpan`1[ubyte]):ulong call [rax]System.IO.Hashing.Crc64:UpdateScalar(ulong,System.ReadOnlySpan`1[ubyte]):ulong jmp SHORT G_M59327_IG05 ;; size=18 bbWeight=0.50 PerfScore 2.88 G_M59327_IG04: mov edx, eax xor edi, edi mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.Crc64:UpdateVectorized(ulong,System.ReadOnlySpan`1[ubyte]):ulong call [rax]System.IO.Hashing.Crc64:UpdateVectorized(ulong,System.ReadOnlySpan`1[ubyte]):ulong ;; size=16 bbWeight=0.50 PerfScore 1.88 G_M59327_IG05: bswap rax - cmp ebx, 8 - jb SHORT G_M59327_IG07 - mov qword ptr [r15], rax + mov qword ptr [rbx], rax mov eax, 8 - ;; size=16 bbWeight=1 PerfScore 3.50 + ;; size=11 bbWeight=1 PerfScore 2.25 G_M59327_IG06: + add rsp, 8 pop rbx - pop r15 pop rbp ret - ;; size=5 bbWeight=1 PerfScore 2.50 + ;; size=7 bbWeight=1 PerfScore 2.25 G_M59327_IG07: - 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_M59327_IG08: mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() call [rax]System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -; Total bytes of code 115, prolog size 9, PerfScore 17.75, instruction count 37, allocated bytes for code 115 (MethodHash=ca6f1840) for method System.IO.Hashing.Crc64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts) +; Total bytes of code 91, prolog size 8, PerfScore 16.00, instruction count 30, allocated bytes for code 91 (MethodHash=ca6f1840) for method System.IO.Hashing.Crc64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte]):int (FullOpts) ```
-24 (-27.91 % of base) - System.IO.Hashing.XxHash64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],long):int ```diff ; Assembly listing for method System.IO.Hashing.XxHash64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],long):int (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; 2 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ; ;* V00 arg0 [V00 ] ( 0, 0 ) struct (16) zero-ref multireg-arg single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 arg2 [V02,T00] ( 3, 3 ) long -> r8 single-def ; V03 loc0 [V03,T05] ( 2, 2 ) long -> rax single-def ;# V04 OutArgs [V04 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V05 tmp1 [V05,T06] ( 2, 2 ) long -> rax ld-addr-op single-def "Inline stloc first use temp" ;* V06 tmp2 [V06 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V07 tmp3 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V08 tmp4 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V09 tmp5 [V09,T02] ( 2, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP -; V10 tmp6 [V10,T04] ( 2, 2 ) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP -; V11 tmp7 [V11,T03] ( 2, 2 ) byref -> r15 single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V12 tmp8 [V12,T01] ( 3, 3 ) int -> rbx single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V09 tmp5 [V09,T01] ( 2, 2 ) byref -> rdi single-def "field V00._reference (fldOffset=0x0)" P-INDEP +; V10 tmp6 [V10,T03] ( 2, 2 ) int -> rsi single-def "field V00._length (fldOffset=0x8)" P-INDEP +; V11 tmp7 [V11,T02] ( 2, 2 ) byref -> rbx single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V12 tmp8 [V12,T04] ( 2, 2 ) int -> rcx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V13 tmp9 [V13 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP ;* V14 tmp10 [V14 ] ( 0, 0 ) int -> zero-ref single-def "field V06._length (fldOffset=0x8)" P-INDEP ;* V15 tmp11 [V15 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP ;* V16 tmp12 [V16 ] ( 0, 0 ) int -> zero-ref single-def "field V07._length (fldOffset=0x8)" P-INDEP ;* V17 tmp13 [V17 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP ;* V18 tmp14 [V18 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP ; -; Lcl frame size = 0 +; Lcl frame size = 8 G_M49657_IG01: push rbp - push r15 push rbx + push rax lea rbp, [rsp+0x10] - mov r15, rdx - mov ebx, ecx - ;; size=14 bbWeight=1 PerfScore 4.00 + mov rbx, rdx + ;; size=11 bbWeight=1 PerfScore 3.75 G_M49657_IG02: - cmp ebx, 8 - jl SHORT G_M49657_IG05 + cmp ecx, 8 + jl SHORT G_M49657_IG04 mov rdx, r8 mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.XxHash64:HashToUInt64(System.ReadOnlySpan`1[ubyte],long):ulong call [rax]System.IO.Hashing.XxHash64:HashToUInt64(System.ReadOnlySpan`1[ubyte],long):ulong bswap rax - cmp ebx, 8 - jb SHORT G_M49657_IG04 - mov qword ptr [r15], rax + mov qword ptr [rbx], rax mov eax, 8 - ;; size=36 bbWeight=1 PerfScore 8.25 + ;; size=31 bbWeight=1 PerfScore 7.00 G_M49657_IG03: + add rsp, 8 pop rbx - pop r15 pop rbp ret - ;; size=5 bbWeight=1 PerfScore 2.50 + ;; size=7 bbWeight=1 PerfScore 2.25 G_M49657_IG04: - 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_M49657_IG05: mov rax, 0xD1FFAB1E ; code for System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() call [rax]System.IO.Hashing.NonCryptographicHashAlgorithm:ThrowDestinationTooShort() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -; Total bytes of code 86, prolog size 9, PerfScore 14.75, instruction count 27, allocated bytes for code 86 (MethodHash=3cb63e06) for method System.IO.Hashing.XxHash64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],long):int (FullOpts) +; Total bytes of code 62, prolog size 8, PerfScore 13.00, instruction count 20, allocated bytes for code 62 (MethodHash=3cb63e06) for method System.IO.Hashing.XxHash64:Hash(System.ReadOnlySpan`1[ubyte],System.Span`1[ubyte],long):int (FullOpts) ```
-23 (-20.72 % of base) - System.Net.IPAddress:TryWriteBytes(System.Span`1[ubyte],byref):ubyte:this ```diff ; Assembly listing for method System.Net.IPAddress:TryWriteBytes(System.Span`1[ubyte],byref):ubyte:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code ; rbp based frame ; partially interruptible ; No PGO data ; 0 inlinees with PGO data; 7 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T01] ( 4, 3.50) ref -> rdi this class-hnd single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def ; V02 arg2 [V02,T00] ( 6, 4 ) byref -> rcx single-def ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T05] ( 3, 1.50) ref -> r8 class-hnd single-def "Inline stloc first use temp" ; V05 tmp2 [V05,T07] ( 5, 2.50) simd16 -> mm0 "Inline stloc first use temp" ;* V06 tmp3 [V06 ] ( 0, 0 ) simd16 -> zero-ref "impAppendStmt" ;* V07 tmp4 [V07 ] ( 0, 0 ) simd16 -> zero-ref "spilled call-like call argument" ;* V08 tmp5 [V08 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V09 tmp6 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V10 tmp7 [V10,T06] ( 2, 1 ) int -> rax ld-addr-op "Inline stloc first use temp" ;* V11 tmp8 [V11 ] ( 0, 0 ) struct (16) zero-ref "Inlining Arg" ;* V12 tmp9 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V13 tmp10 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V14 tmp11 [V14,T03] ( 3, 2 ) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V15 tmp12 [V15,T02] ( 4, 2.50) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP +; V14 tmp11 [V14,T02] ( 3, 2 ) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V15 tmp12 [V15,T03] ( 3, 2 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP ;* V16 tmp13 [V16 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP ;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP ;* V18 tmp15 [V18 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP ;* V19 tmp16 [V19 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP ;* V20 tmp17 [V20 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP ;* V21 tmp18 [V21 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP ;* V22 tmp19 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP ;* V23 tmp20 [V23 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP ;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP ;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP ; V26 cse0 [V26,T04] ( 3, 2.50) ref -> r8 "CSE #01: aggressive" ; ; Lcl frame size = 0 G_M50495_IG01: push rbp mov rbp, rsp ;; size=4 bbWeight=1 PerfScore 1.25 G_M50495_IG02: mov r8, gword ptr [rdi+0x08] test r8, r8 jne SHORT G_M50495_IG06 ;; size=9 bbWeight=1 PerfScore 3.25 G_M50495_IG03: cmp edx, 4 jl SHORT G_M50495_IG04 mov eax, dword ptr [rdi+0x18] - cmp edx, 4 - jb SHORT G_M50495_IG11 mov dword ptr [rsi], eax mov dword ptr [rcx], 4 jmp SHORT G_M50495_IG07 - ;; size=23 bbWeight=0.50 PerfScore 4.25 + ;; size=18 bbWeight=0.50 PerfScore 3.62 G_M50495_IG04: xor eax, eax mov dword ptr [rcx], eax ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M50495_IG05: pop rbp ret ;; size=2 bbWeight=0.50 PerfScore 0.75 G_M50495_IG06: cmp edx, 16 jl SHORT G_M50495_IG09 cmp byte ptr [r8], r8b vmovups xmm0, xmmword ptr [r8+0x10] vpsllw xmm1, xmm0, 8 vpsrlw xmm0, xmm0, 8 vpor xmm0, xmm0, xmm1 vmovups xmmword ptr [rsi], xmm0 mov dword ptr [rcx], 16 ;; size=38 bbWeight=0.50 PerfScore 6.79 G_M50495_IG07: mov eax, 1 ;; size=5 bbWeight=0.50 PerfScore 0.12 G_M50495_IG08: pop rbp ret ;; size=2 bbWeight=0.50 PerfScore 0.75 G_M50495_IG09: xor eax, eax mov dword ptr [rcx], eax ;; size=4 bbWeight=0.50 PerfScore 0.62 G_M50495_IG10: pop rbp ret ;; size=2 bbWeight=0.50 PerfScore 0.75 -G_M50495_IG11: - 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 111, prolog size 4, PerfScore 19.17, instruction count 37, allocated bytes for code 111 (MethodHash=ea6a3ac0) for method System.Net.IPAddress:TryWriteBytes(System.Span`1[ubyte],byref):ubyte:this (FullOpts) +; Total bytes of code 88, prolog size 4, PerfScore 18.54, instruction count 31, allocated bytes for code 88 (MethodHash=ea6a3ac0) for method System.Net.IPAddress:TryWriteBytes(System.Span`1[ubyte],byref):ubyte: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/f9b1b681dcc09e29aa478c68514b0d3e

MihuBot commented 1 month ago

@xtqqczze