MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] xtqqczze/dotnet-runtime/GuidTryWrite #506

Open MihuBot opened 1 month ago

MihuBot commented 1 month ago

Job completed in 15 minutes.

Diffs

Found 265 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 41772749
Total bytes of diff: 41772684
Total bytes of delta: -65 (-0.00 % of base)
Total relative delta: -0.74
    diff is an improvement.
    relative diff is an improvement.

Top file improvements (bytes):
         -34 : System.Reflection.Metadata.dasm (-0.01 % of base)
         -29 : System.Private.CoreLib.dasm (-0.00 % of base)
          -2 : System.Private.DataContractSerialization.dasm (-0.00 % of base)

3 total files with Code Size differences (3 improved, 0 regressed), 256 unchanged.

Top method improvements (bytes):
         -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.16 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts)
          -5 (-5.62 % of base) : System.Reflection.Metadata.dasm - System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts)
          -5 (-3.11 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts)
          -5 (-4.03 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts)
          -5 (-1.57 % 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)
          -3 (-7.89 % of base) : System.Private.CoreLib.dasm - System.Guid:ToByteArray():ubyte[]:this (FullOpts)
          -3 (-2.61 % of base) : System.Private.CoreLib.dasm - System.Guid:ToByteArray(ubyte):ubyte[]:this (FullOpts)
          -2 (-1.29 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.XmlBinaryNodeWriter:WriteGuidText(System.Guid):this (FullOpts)

Top method improvements (percentages):
         -11 (-33.33 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this (FullOpts)
         -12 (-11.43 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte],ubyte,byref):ubyte:this (FullOpts)
          -3 (-7.89 % of base) : System.Private.CoreLib.dasm - System.Guid:ToByteArray():ubyte[]:this (FullOpts)
          -5 (-5.62 % of base) : System.Reflection.Metadata.dasm - System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts)
          -5 (-4.03 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts)
          -5 (-3.11 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts)
          -3 (-2.61 % of base) : System.Private.CoreLib.dasm - System.Guid:ToByteArray(ubyte):ubyte[]:this (FullOpts)
          -9 (-2.16 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts)
          -5 (-1.57 % of base) : System.Reflection.Metadata.dasm - System.Reflection.Metadata.Ecma335.MetadataBuilder:GetOrAddGuid(System.Guid):System.Reflection.Metadata.GuidHandle:this (FullOpts)
          -2 (-1.29 % of base) : System.Private.DataContractSerialization.dasm - System.Xml.XmlBinaryNodeWriter:WriteGuidText(System.Guid):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)

11 total methods with Code Size differences (11 improved, 0 regressed), 255797 unchanged.

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

Artifacts:

xtqqczze commented 1 month ago

https://github.com/dotnet/runtime/pull/104728

MihuBot commented 1 month ago

Top method improvements

-12 (-11.43 % of base) - System.Guid:TryWriteBytes(System.Span`1[ubyte],ubyte,byref):ubyte:this ```diff ; Assembly listing for method System.Guid:TryWriteBytes(System.Span`1[ubyte],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; 6 single block inlinees; 5 inlinees without PGO data +; 0 inlinees with PGO data; 6 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 7, 4.50) byref -> rdi this single-def ;* V01 arg1 [V01 ] ( 0, 0 ) struct (16) zero-ref multireg-arg ld-addr-op single-def -; V02 arg2 [V02,T04] ( 3, 2.50) ubyte -> rcx single-def +; V02 arg2 [V02,T03] ( 3, 2.50) ubyte -> rcx single-def ; V03 arg3 [V03,T02] ( 4, 3 ) byref -> r8 single-def ;* V04 loc0 [V04,T09] ( 0, 0 ) struct (16) zero-ref do-not-enreg[SF] ld-addr-op ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V06 tmp1 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V07 tmp2 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" -;* V08 tmp3 [V08 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "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 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V11 tmp6 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V12 tmp7 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" -;* V13 tmp8 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V14 tmp9 [V14 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" -;* V15 tmp10 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V12 tmp7 [V12 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +;* V13 tmp8 [V13 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" +;* V14 tmp9 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V15 tmp10 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V16 tmp11 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V17 tmp12 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V18 tmp13 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V19 tmp14 [V19 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V20 tmp15 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V21 tmp16 [V21 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V22 tmp17 [V22,T01] ( 6, 3.50) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V23 tmp18 [V23,T03] ( 4, 3 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP -;* V24 tmp19 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP -;* V25 tmp20 [V25 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP -;* V26 tmp21 [V26 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP -;* V27 tmp22 [V27 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP -;* V28 tmp23 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP -;* V29 tmp24 [V29 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP -;* V30 tmp25 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP -;* V31 tmp26 [V31 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP -;* V32 tmp27 [V32 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP -;* V33 tmp28 [V33 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP -;* V34 tmp29 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP -;* V35 tmp30 [V35 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP -;* V36 tmp31 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP -;* V37 tmp32 [V37 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP -;* V38 tmp33 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP -;* V39 tmp34 [V39 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP -;* V40 tmp35 [V40 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP -;* V41 tmp36 [V41 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP -;* V42 tmp37 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V18._reference (fldOffset=0x0)" P-INDEP -;* V43 tmp38 [V43 ] ( 0, 0 ) int -> zero-ref "field V18._length (fldOffset=0x8)" P-INDEP -;* V44 tmp39 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP -;* V45 tmp40 [V45 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP -;* V46 tmp41 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "field V21._reference (fldOffset=0x0)" P-INDEP -;* V47 tmp42 [V47 ] ( 0, 0 ) int -> zero-ref "field V21._length (fldOffset=0x8)" P-INDEP -; V48 tmp43 [V48,T05] ( 4, 2 ) int -> rax "V04.[000..004)" -; V49 tmp44 [V49,T06] ( 4, 2 ) short -> rcx "V04.[004..006)" -; V50 tmp45 [V50,T07] ( 4, 2 ) short -> r9 "V04.[006..008)" -; V51 cse0 [V51,T08] ( 2, 1 ) long -> rdi "CSE #01: moderate" +;* V17 tmp12 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V18 tmp13 [V18,T01] ( 6, 3.50) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V19 tmp14 [V19,T04] ( 2, 2 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP +;* V20 tmp15 [V20 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP +;* V21 tmp16 [V21 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP +;* V22 tmp17 [V22 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP +;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +;* V24 tmp19 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP +;* V25 tmp20 [V25 ] ( 0, 0 ) int -> zero-ref "field V08._length (fldOffset=0x8)" P-INDEP +;* V26 tmp21 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V09._reference (fldOffset=0x0)" P-INDEP +;* V27 tmp22 [V27 ] ( 0, 0 ) int -> zero-ref "field V09._length (fldOffset=0x8)" P-INDEP +;* V28 tmp23 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP +;* V29 tmp24 [V29 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V30 tmp25 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP +;* V31 tmp26 [V31 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP +;* V32 tmp27 [V32 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP +;* V33 tmp28 [V33 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP +;* V34 tmp29 [V34 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V35 tmp30 [V35 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +;* V36 tmp31 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP +;* V37 tmp32 [V37 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP +;* V38 tmp33 [V38 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP +;* V39 tmp34 [V39 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP +; V40 tmp35 [V40,T05] ( 4, 2 ) int -> rax "V04.[000..004)" +; V41 tmp36 [V41,T06] ( 4, 2 ) short -> rcx "V04.[004..006)" +; V42 tmp37 [V42,T07] ( 4, 2 ) short -> rdx "V04.[006..008)" +; V43 cse0 [V43,T08] ( 2, 1 ) long -> rdi "CSE #01: moderate" ; ; Lcl frame size = 0 G_M3213_IG01: push rbp mov rbp, rsp ;; size=4 bbWeight=1 PerfScore 1.25 G_M3213_IG02: cmp edx, 16 jge SHORT G_M3213_IG05 ;; size=5 bbWeight=1 PerfScore 1.25 G_M3213_IG03: xor eax, eax mov dword ptr [r8], eax ;; size=5 bbWeight=0.50 PerfScore 0.62 G_M3213_IG04: pop rbp ret ;; size=2 bbWeight=0.50 PerfScore 0.75 G_M3213_IG05: cmp cl, 1 je SHORT G_M3213_IG06 - cmp edx, 16 - jb SHORT G_M3213_IG07 vmovups xmm0, xmmword ptr [rdi] vmovups xmmword ptr [rsi], xmm0 jmp SHORT G_M3213_IG07 - ;; size=20 bbWeight=0.50 PerfScore 5.25 + ;; size=15 bbWeight=0.50 PerfScore 4.62 G_M3213_IG06: mov eax, dword ptr [rdi] movsx rcx, word ptr [rdi+0x04] - movsx r9, word ptr [rdi+0x06] + movsx rdx, word ptr [rdi+0x06] mov rdi, qword ptr [rdi+0x08] bswap eax ror cx, 8 movsx rcx, cx - ror r9w, 8 - movsx r9, r9w - cmp edx, 16 - jb SHORT G_M3213_IG07 + ror dx, 8 + movsx rdx, dx mov dword ptr [rsi], eax mov word ptr [rsi+0x04], cx - mov word ptr [rsi+0x06], r9w + mov word ptr [rsi+0x06], dx mov qword ptr [rsi+0x08], rdi - ;; size=55 bbWeight=0.50 PerfScore 9.62 + ;; size=48 bbWeight=0.50 PerfScore 9.00 G_M3213_IG07: mov dword ptr [r8], 16 mov eax, 1 ;; size=12 bbWeight=0.50 PerfScore 0.62 G_M3213_IG08: pop rbp ret ;; size=2 bbWeight=0.50 PerfScore 0.75 -; Total bytes of code 105, prolog size 4, PerfScore 20.12, instruction count 34, allocated bytes for code 105 (MethodHash=8006f372) for method System.Guid:TryWriteBytes(System.Span`1[ubyte],ubyte,byref):ubyte:this (FullOpts) +; Total bytes of code 93, prolog size 4, PerfScore 18.88, instruction count 30, allocated bytes for code 93 (MethodHash=8006f372) for method System.Guid:TryWriteBytes(System.Span`1[ubyte],ubyte,byref):ubyte:this (FullOpts) ```
-11 (-33.33 % of base) - System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this ```diff ; Assembly listing for method System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this (FullOpts) ; Emitting BLENDED_CODE for X64 with AVX512 - Unix ; FullOpts code ; optimized code -; rbp based frame +; rsp based frame ; partially interruptible ; No PGO data -; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data +; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 3, 2.50) byref -> rdi this 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 ) ubyte -> zero-ref "Inline return value spill temp" -;* V04 tmp2 [V04 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V05 tmp3 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -; V06 tmp4 [V06,T02] ( 2, 1.50) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP -; V07 tmp5 [V07,T01] ( 3, 2.50) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP -;* V08 tmp6 [V08 ] ( 0, 0 ) byref -> zero-ref single-def "field V04._reference (fldOffset=0x0)" P-INDEP -;* V09 tmp7 [V09 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP -;* V10 tmp8 [V10 ] ( 0, 0 ) byref -> zero-ref single-def "field V05._reference (fldOffset=0x0)" P-INDEP -;* V11 tmp9 [V11 ] ( 0, 0 ) int -> zero-ref "field V05._length (fldOffset=0x8)" P-INDEP +;* V03 tmp1 [V03 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V04 tmp2 [V04,T02] ( 2, 1.50) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V05 tmp3 [V05,T01] ( 2, 2 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP +;* V06 tmp4 [V06 ] ( 0, 0 ) byref -> zero-ref single-def "field V03._reference (fldOffset=0x0)" P-INDEP +;* V07 tmp5 [V07 ] ( 0, 0 ) int -> zero-ref "field V03._length (fldOffset=0x8)" P-INDEP ; ; Lcl frame size = 0 G_M45208_IG01: - push rbp - mov rbp, rsp - ;; size=4 bbWeight=1 PerfScore 1.25 + ;; size=0 bbWeight=1 PerfScore 0.00 G_M45208_IG02: cmp edx, 16 jge SHORT G_M45208_IG05 ;; size=5 bbWeight=1 PerfScore 1.25 G_M45208_IG03: xor eax, eax ;; size=2 bbWeight=0.50 PerfScore 0.12 G_M45208_IG04: - pop rbp ret - ;; size=2 bbWeight=0.50 PerfScore 0.75 + ;; size=1 bbWeight=0.50 PerfScore 0.50 G_M45208_IG05: - cmp edx, 16 - jb SHORT G_M45208_IG06 vmovups xmm0, xmmword ptr [rdi] vmovups xmmword ptr [rsi], xmm0 - ;; size=13 bbWeight=0.50 PerfScore 3.62 -G_M45208_IG06: mov eax, 1 - ;; size=5 bbWeight=0.50 PerfScore 0.12 -G_M45208_IG07: - pop rbp + ;; size=13 bbWeight=0.50 PerfScore 3.12 +G_M45208_IG06: ret - ;; size=2 bbWeight=0.50 PerfScore 0.75 + ;; size=1 bbWeight=0.50 PerfScore 0.50 -; Total bytes of code 33, prolog size 4, PerfScore 7.88, instruction count 14, allocated bytes for code 33 (MethodHash=9a754f67) for method System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this (FullOpts) +; Total bytes of code 22, prolog size 0, PerfScore 5.50, instruction count 8, allocated bytes for code 22 (MethodHash=9a754f67) for method System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this (FullOpts) ```
-9 (-2.16 % of base) - System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this ```diff ; Assembly listing for method System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId: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; 11 single block inlinees; 5 inlinees without PGO data +; 0 inlinees with PGO data; 11 single block inlinees; 4 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 12, 12 ) ref -> rbx this class-hnd single-def ; V01 RetBuf [V01,T03] ( 4, 4 ) byref -> r14 single-def ; V02 arg1 [V02,T01] ( 8, 8 ) ref -> r15 class-hnd single-def ; V03 loc0 [V03,T07] ( 4, 4 ) struct (24) [rbp-0x40] do-not-enreg[HS] hidden-struct-arg ld-addr-op ;* V04 loc1 [V04 ] ( 0, 0 ) struct (24) zero-ref ld-addr-op ;# V05 OutArgs [V05 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V06 tmp1 [V06,T04] ( 3, 6 ) ref -> r13 class-hnd single-def "impAppendStmt" ; V07 tmp2 [V07,T05] ( 3, 6 ) ref -> r12 class-hnd exact single-def "Single-def Box Helper" ; V08 tmp3 [V08,T12] ( 2, 3 ) struct (16) mm0 "spilled call-like call argument" ;* V09 tmp4 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V10 tmp5 [V10 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "impAppendStmt" ;* V11 tmp6 [V11 ] ( 0, 0 ) int -> zero-ref "impAppendStmt" ;* V12 tmp7 [V12 ] ( 0, 0 ) int -> zero-ref "Inlining Arg" ;* V13 tmp8 [V13 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" ;* V15 tmp10 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V16 tmp11 [V16 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "Inlining Arg" ;* V17 tmp12 [V17 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V18 tmp13 [V18 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" ;* V19 tmp14 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V20 tmp15 [V20 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" ; V21 tmp16 [V21,T14] ( 2, 2 ) byref -> r8 single-def "Inlining Arg" ; V22 tmp17 [V22,T15] ( 2, 2 ) int -> rcx "Inlining Arg" ;* V23 tmp18 [V23 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V24 tmp19 [V24 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V25 tmp20 [V25 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V26 tmp21 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V27 tmp22 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V25 tmp20 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V26 tmp21 [V26 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V27 tmp22 [V27,T08] ( 2, 4 ) int -> rcx "Inlining Arg" ;* V28 tmp23 [V28 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V29 tmp24 [V29,T08] ( 2, 4 ) int -> rcx "Inlining Arg" -;* V30 tmp25 [V30 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -;* V31 tmp26 [V31 ] ( 0, 0 ) ref -> zero-ref single-def "field V04._buffer (fldOffset=0x0)" P-INDEP -;* V32 tmp27 [V32 ] ( 0, 0 ) int -> zero-ref "field V04._start (fldOffset=0x8)" P-INDEP -; V33 tmp28 [V33,T10] ( 3, 3 ) int -> rdx "field V04._end (fldOffset=0xc)" P-INDEP -; V34 tmp29 [V34,T11] ( 3, 3 ) int -> rax "field V04._position (fldOffset=0x10)" P-INDEP -; V35 tmp30 [V35,T06] ( 5, 4 ) ref -> rdi single-def "field V09.Buffer (fldOffset=0x0)" P-INDEP -; V36 tmp31 [V36,T02] ( 8, 6 ) int -> rsi "field V09.Start (fldOffset=0x8)" P-INDEP -; V37 tmp32 [V37,T16] ( 2, 2 ) int -> rdx "field V09.k__BackingField (fldOffset=0xc)" P-INDEP -;* V38 tmp33 [V38 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP -;* V39 tmp34 [V39 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP -; V40 tmp35 [V40,T17] ( 3, 1.50) byref -> r8 "field V18._reference (fldOffset=0x0)" P-INDEP -; V41 tmp36 [V41,T13] ( 4, 2.50) int -> rcx "field V18._length (fldOffset=0x8)" P-INDEP -; V42 tmp37 [V42,T19] ( 2, 1 ) byref -> r8 single-def "field V19._reference (fldOffset=0x0)" P-INDEP -; V43 tmp38 [V43,T20] ( 2, 1 ) int -> rcx "field V19._length (fldOffset=0x8)" P-INDEP -;* V44 tmp39 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP -;* V45 tmp40 [V45 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP -;* V46 tmp41 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP -;* V47 tmp42 [V47 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP -;* V48 tmp43 [V48 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP -;* V49 tmp44 [V49 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP -;* V50 tmp45 [V50 ] ( 0, 0 ) byref -> zero-ref single-def "field V27._reference (fldOffset=0x0)" P-INDEP -;* V51 tmp46 [V51 ] ( 0, 0 ) int -> zero-ref "field V27._length (fldOffset=0x8)" P-INDEP -; V52 cse0 [V52,T09] ( 3, 3 ) ref -> rdx "CSE #01: moderate" -; V53 cse1 [V53,T18] ( 3, 1.50) int -> rcx "CSE #02: moderate" +;* V29 tmp24 [V29 ] ( 0, 0 ) ref -> zero-ref single-def "field V04._buffer (fldOffset=0x0)" P-INDEP +;* V30 tmp25 [V30 ] ( 0, 0 ) int -> zero-ref "field V04._start (fldOffset=0x8)" P-INDEP +; V31 tmp26 [V31,T10] ( 3, 3 ) int -> rdx "field V04._end (fldOffset=0xc)" P-INDEP +; V32 tmp27 [V32,T11] ( 3, 3 ) int -> rax "field V04._position (fldOffset=0x10)" P-INDEP +; V33 tmp28 [V33,T06] ( 5, 4 ) ref -> rdi single-def "field V09.Buffer (fldOffset=0x0)" P-INDEP +; V34 tmp29 [V34,T02] ( 8, 6 ) int -> rsi "field V09.Start (fldOffset=0x8)" P-INDEP +; V35 tmp30 [V35,T16] ( 2, 2 ) int -> rdx "field V09.k__BackingField (fldOffset=0xc)" P-INDEP +;* V36 tmp31 [V36 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP +;* V37 tmp32 [V37 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP +; V38 tmp33 [V38,T17] ( 3, 1.50) byref -> r8 "field V18._reference (fldOffset=0x0)" P-INDEP +; V39 tmp34 [V39,T13] ( 3, 2 ) int -> rcx "field V18._length (fldOffset=0x8)" P-INDEP +; V40 tmp35 [V40,T19] ( 2, 1 ) byref -> r8 single-def "field V19._reference (fldOffset=0x0)" P-INDEP +; V41 tmp36 [V41,T20] ( 2, 1 ) int -> rcx "field V19._length (fldOffset=0x8)" P-INDEP +;* V42 tmp37 [V42 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP +;* V43 tmp38 [V43 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP +;* V44 tmp39 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP +;* V45 tmp40 [V45 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP +;* V46 tmp41 [V46 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP +;* V47 tmp42 [V47 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP +; V48 cse0 [V48,T09] ( 3, 3 ) ref -> rdx "CSE #01: moderate" +; V49 cse1 [V49,T18] ( 3, 1.50) int -> rcx "CSE #02: moderate" ; ; Lcl frame size = 24 G_M23392_IG01: push rbp push r15 push r14 push r13 push r12 push rbx sub rsp, 24 lea rbp, [rsp+0x40] mov rbx, rdi mov r14, rsi mov r15, rdx ;; size=28 bbWeight=1 PerfScore 7.50 G_M23392_IG02: test r15, r15 je G_M23392_IG13 mov rdx, gword ptr [rbx+0x10] mov rdx, gword ptr [rdx+0x10] mov rdi, r15 mov rsi, 0xD1FFAB1E ; 'PDB v1.0' mov rax, 0xD1FFAB1E ; code for System.Reflection.Metadata.Ecma335.MetadataBuilder:SerializeMetadataHeader(System.Reflection.Metadata.BlobBuilder,System.String,System.Reflection.Metadata.Ecma335.MetadataSizes) call [rax]System.Reflection.Metadata.Ecma335.MetadataBuilder:SerializeMetadataHeader(System.Reflection.Metadata.BlobBuilder,System.String,System.Reflection.Metadata.Ecma335.MetadataSizes) mov rdi, rbx mov rsi, r15 mov rax, 0xD1FFAB1E ; code for System.Reflection.Metadata.Ecma335.PortablePdbBuilder:SerializeStandalonePdbStream(System.Reflection.Metadata.BlobBuilder):this call [rax]System.Reflection.Metadata.Ecma335.PortablePdbBuilder:SerializeStandalonePdbStream(System.Reflection.Metadata.BlobBuilder):this mov rdx, gword ptr [rbx+0x10] mov rcx, gword ptr [rdx+0x18] mov rdx, gword ptr [rdx+0x10] mov rdi, gword ptr [rbx+0x08] mov rsi, r15 xor r8d, r8d xor r9d, r9d mov rax, 0xD1FFAB1E ; code for System.Reflection.Metadata.Ecma335.MetadataBuilder:SerializeMetadataTables(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataSizes,System.Collections.Immutable.ImmutableArray`1[int],int,int):this cmp dword ptr [rdi], edi call [rax]System.Reflection.Metadata.Ecma335.MetadataBuilder:SerializeMetadataTables(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataSizes,System.Collections.Immutable.ImmutableArray`1[int],int,int):this mov rdx, gword ptr [rbx+0x10] mov rdx, gword ptr [rdx+0x08] mov rdi, gword ptr [rbx+0x08] mov rsi, r15 mov rax, 0xD1FFAB1E ; code for System.Reflection.Metadata.Ecma335.MetadataBuilder:WriteHeapsTo(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this cmp dword ptr [rdi], edi call [rax]System.Reflection.Metadata.Ecma335.MetadataBuilder:WriteHeapsTo(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder):this mov r13, gword ptr [rbx+0x18] mov rdi, 0xD1FFAB1E ; System.Reflection.Metadata.BlobBuilder+Blobs call CORINFO_HELP_NEWSFAST mov r12, rax lea rsi, bword ptr [r12+0x08] mov rdi, r15 mov rax, 0xD1FFAB1E ; code for System.Reflection.Metadata.BlobBuilder:GetBlobs():System.Reflection.Metadata.BlobBuilder+Blobs:this call [rax]System.Reflection.Metadata.BlobBuilder:GetBlobs():System.Reflection.Metadata.BlobBuilder+Blobs:this mov rdx, r12 lea rsi, [rbp-0x40] mov rdi, gword ptr [r13+0x08] call [r13+0x18]System.Func`2[System.__Canon,System.Reflection.Metadata.BlobContentId]:Invoke(System.__Canon):System.Reflection.Metadata.BlobContentId:this mov rdi, gword ptr [rbx+0x20] mov esi, dword ptr [rbx+0x28] mov edx, dword ptr [rbx+0x2C] add edx, esi vmovups xmm0, xmmword ptr [rbp-0x40] lea eax, [rdx-0x10] cmp esi, eax ;; size=207 bbWeight=1 PerfScore 63.50 G_M23392_IG03: - jg G_M23392_IG12 + jg SHORT G_M23392_IG12 lea eax, [rsi+0x10] test rdi, rdi jne SHORT G_M23392_IG05 - ;; size=14 bbWeight=1 PerfScore 2.75 + ;; size=10 bbWeight=1 PerfScore 2.75 G_M23392_IG04: test esi, esi je SHORT G_M23392_IG06 jmp SHORT G_M23392_IG11 ;; size=6 bbWeight=0.50 PerfScore 1.62 G_M23392_IG05: mov ecx, dword ptr [rdi+0x08] cmp ecx, esi jb SHORT G_M23392_IG11 mov r8d, esi lea r8, bword ptr [rdi+r8+0x10] sub ecx, esi jmp SHORT G_M23392_IG07 ;; size=19 bbWeight=0.50 PerfScore 3.38 G_M23392_IG06: xor r8, r8 xor ecx, ecx ;; size=5 bbWeight=0.50 PerfScore 0.25 G_M23392_IG07: cmp ecx, 16 jl SHORT G_M23392_IG09 ;; size=5 bbWeight=1 PerfScore 1.25 G_M23392_IG08: - cmp ecx, 16 - jb SHORT G_M23392_IG09 vmovups xmmword ptr [r8], xmm0 - ;; size=10 bbWeight=0.50 PerfScore 1.62 + ;; size=5 bbWeight=0.50 PerfScore 1.00 G_M23392_IG09: mov ecx, dword ptr [rbp-0x30] add edx, -4 cmp eax, edx jg SHORT G_M23392_IG12 mov esi, eax mov edx, ecx mov rax, 0xD1FFAB1E ; code for System.Reflection.BlobUtilities:WriteUInt32(ubyte[],int,uint) call [rax]System.Reflection.BlobUtilities:WriteUInt32(ubyte[],int,uint) vmovdqu xmm0, xmmword ptr [rbp-0x40] vmovdqu xmmword ptr [r14], xmm0 mov eax, dword ptr [rbp-0x30] mov dword ptr [r14+0x10], eax mov rax, r14 ;; size=46 bbWeight=1 PerfScore 13.50 G_M23392_IG10: add rsp, 24 pop rbx pop r12 pop r13 pop r14 pop r15 pop rbp ret ;; size=15 bbWeight=1 PerfScore 4.25 G_M23392_IG11: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M23392_IG12: mov rax, 0xD1FFAB1E ; code for System.Reflection.Throw:OutOfBounds() call [rax]System.Reflection.Throw:OutOfBounds() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M23392_IG13: mov edi, 0x18B7 mov rsi, 0xD1FFAB1E call CORINFO_HELP_STRCNS mov rdi, rax mov rax, 0xD1FFAB1E ; code for System.Reflection.Throw:ArgumentNull(System.String) call [rax]System.Reflection.Throw:ArgumentNull(System.String) int3 ;; size=36 bbWeight=0 PerfScore 0.00 -; Total bytes of code 417, prolog size 19, PerfScore 99.62, instruction count 114, allocated bytes for code 417 (MethodHash=bbe9a49f) for method System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts) +; Total bytes of code 408, prolog size 19, PerfScore 99.00, instruction count 112, allocated bytes for code 408 (MethodHash=bbe9a49f) for method System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts) ```
-5 (-5.62 % of base) - System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) ```diff ; Assembly listing for method System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (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; 3 inlinees without PGO data +; 0 inlinees with PGO data; 2 single block inlinees; 2 inlinees without PGO data ; Final local variable assignments ; ; V00 arg0 [V00,T01] ( 5, 4 ) ref -> rdi class-hnd single-def ; V01 arg1 [V01,T00] ( 6, 4 ) int -> rsi single-def ; V02 arg2 [V02,T02] ( 3, 2.50) struct (16) [rbp-0x10] do-not-enreg[SA] 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 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" ;* V06 tmp3 [V06 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V07 tmp4 [V07 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" ; V08 tmp5 [V08,T04] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" ; V09 tmp6 [V09,T05] ( 2, 2 ) int -> rax "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V11 tmp8 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V12 tmp9 [V12 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V13 tmp10 [V13 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V15 tmp12 [V15 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP -;* V16 tmp13 [V16 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP -; V17 tmp14 [V17,T06] ( 3, 1.50) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP -; V18 tmp15 [V18,T03] ( 4, 2.50) int -> rax "field V05._length (fldOffset=0x8)" P-INDEP -; V19 tmp16 [V19,T08] ( 2, 1 ) byref -> rcx single-def "field V06._reference (fldOffset=0x0)" P-INDEP -; V20 tmp17 [V20,T09] ( 2, 1 ) int -> rax "field V06._length (fldOffset=0x8)" P-INDEP -;* V21 tmp18 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP -;* V22 tmp19 [V22 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP -;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP -;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP -;* V25 tmp22 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP -;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP -;* V27 tmp24 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP -;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP -; V29 cse0 [V29,T07] ( 3, 1.50) int -> rax "CSE #01: moderate" +;* V12 tmp9 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V13 tmp10 [V13 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP +;* V14 tmp11 [V14 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP +; V15 tmp12 [V15,T06] ( 3, 1.50) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP +; V16 tmp13 [V16,T03] ( 3, 2 ) int -> rax "field V05._length (fldOffset=0x8)" P-INDEP +; V17 tmp14 [V17,T08] ( 2, 1 ) byref -> rcx single-def "field V06._reference (fldOffset=0x0)" P-INDEP +; V18 tmp15 [V18,T09] ( 2, 1 ) int -> rax "field V06._length (fldOffset=0x8)" P-INDEP +;* V19 tmp16 [V19 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP +;* V20 tmp17 [V20 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +;* V21 tmp18 [V21 ] ( 0, 0 ) byref -> zero-ref single-def "field V11._reference (fldOffset=0x0)" P-INDEP +;* V22 tmp19 [V22 ] ( 0, 0 ) int -> zero-ref "field V11._length (fldOffset=0x8)" P-INDEP +;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP +;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP +; V25 cse0 [V25,T07] ( 3, 1.50) int -> rax "CSE #01: moderate" ; ; Lcl frame size = 16 G_M7642_IG01: push rbp sub rsp, 16 lea rbp, [rsp+0x10] mov qword ptr [rbp-0x10], rdx mov qword ptr [rbp-0x08], rcx ;; size=18 bbWeight=1 PerfScore 3.75 G_M7642_IG02: test rdi, rdi jne SHORT G_M7642_IG04 ;; size=5 bbWeight=1 PerfScore 1.25 G_M7642_IG03: test esi, esi je SHORT G_M7642_IG05 jmp SHORT G_M7642_IG09 ;; size=6 bbWeight=0.50 PerfScore 1.62 G_M7642_IG04: mov eax, dword ptr [rdi+0x08] cmp eax, esi jb SHORT G_M7642_IG09 mov ecx, esi lea rcx, bword ptr [rdi+rcx+0x10] sub eax, esi jmp SHORT G_M7642_IG06 ;; size=18 bbWeight=0.50 PerfScore 3.38 G_M7642_IG05: xor rcx, rcx xor eax, eax ;; size=4 bbWeight=0.50 PerfScore 0.25 G_M7642_IG06: cmp eax, 16 jl SHORT G_M7642_IG08 ;; size=5 bbWeight=1 PerfScore 1.25 G_M7642_IG07: - cmp eax, 16 - jb SHORT G_M7642_IG08 vmovups xmm0, xmmword ptr [rbp-0x10] vmovups xmmword ptr [rcx], xmm0 - ;; size=14 bbWeight=0.50 PerfScore 3.12 + ;; size=9 bbWeight=0.50 PerfScore 2.50 G_M7642_IG08: add rsp, 16 pop rbp ret ;; size=6 bbWeight=1 PerfScore 1.75 G_M7642_IG09: 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 89, prolog size 10, PerfScore 16.38, instruction count 31, allocated bytes for code 89 (MethodHash=e440e225) for method System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts) +; Total bytes of code 84, prolog size 10, PerfScore 15.75, instruction count 29, allocated bytes for code 84 (MethodHash=e440e225) for method System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts) ```
-5 (-3.11 % of base) - System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this ```diff ; Assembly listing for method System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):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; 4 single block inlinees; 4 inlinees without PGO data +; 0 inlinees with PGO data; 4 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 7, 6.50) ref -> rbx this class-hnd single-def ; V01 arg1 [V01,T03] ( 3, 2.50) struct (16) [rbp-0x20] do-not-enreg[SA] multireg-arg single-def ;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T02] ( 8, 5.50) int -> r15 "Inline stloc first use temp" ;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V06 tmp3 [V06,T01] ( 4, 6 ) ref -> rax class-hnd single-def "Inlining Arg" ;* V07 tmp4 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V08 tmp5 [V08 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" ;* V09 tmp6 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V10 tmp7 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" ; V11 tmp8 [V11,T05] ( 2, 2 ) byref -> rax single-def "Inlining Arg" ; V12 tmp9 [V12,T06] ( 2, 2 ) int -> rcx "Inlining Arg" ;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V15 tmp12 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V17 tmp14 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* 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,T07] ( 3, 1.50) byref -> rax "field V08._reference (fldOffset=0x0)" P-INDEP -; V21 tmp18 [V21,T04] ( 4, 2.50) int -> rcx "field V08._length (fldOffset=0x8)" P-INDEP -; V22 tmp19 [V22,T09] ( 2, 1 ) byref -> rax single-def "field V09._reference (fldOffset=0x0)" P-INDEP -; V23 tmp20 [V23,T10] ( 2, 1 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP -;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP -;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP -;* V26 tmp23 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP -;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP -;* V28 tmp25 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP -;* V29 tmp26 [V29 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP -;* V30 tmp27 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP -;* V31 tmp28 [V31 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP -; V32 cse0 [V32,T08] ( 3, 1.50) int -> rcx "CSE #01: moderate" +;* V15 tmp12 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V16 tmp13 [V16 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP +;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +; V18 tmp15 [V18,T07] ( 3, 1.50) byref -> rax "field V08._reference (fldOffset=0x0)" P-INDEP +; V19 tmp16 [V19,T04] ( 3, 2 ) int -> rcx "field V08._length (fldOffset=0x8)" P-INDEP +; V20 tmp17 [V20,T09] ( 2, 1 ) byref -> rax single-def "field V09._reference (fldOffset=0x0)" P-INDEP +; V21 tmp18 [V21,T10] ( 2, 1 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP +;* V22 tmp19 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP +;* V23 tmp20 [V23 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP +;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP +;* V26 tmp23 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +; V28 cse0 [V28,T08] ( 3, 1.50) int -> rcx "CSE #01: moderate" ; ; Lcl frame size = 16 G_M55272_IG01: push rbp push r15 push rbx sub rsp, 16 lea rbp, [rsp+0x20] mov qword ptr [rbp-0x20], rsi mov qword ptr [rbp-0x18], rdx mov rbx, rdi ;; size=24 bbWeight=1 PerfScore 6.00 G_M55272_IG02: mov r15d, dword ptr [rbx+0x1C] mov rdi, gword ptr [rbx+0x10] mov edi, dword ptr [rdi+0x08] add edi, -16 movsxd rdi, edi mov esi, r15d cmp rdi, rsi jge SHORT G_M55272_IG04 ;; size=25 bbWeight=1 PerfScore 8.00 G_M55272_IG03: mov rdi, rbx mov esi, 16 mov rax, 0xD1FFAB1E ; code for System.Reflection.Metadata.BlobBuilder:Expand(int):this call [rax]System.Reflection.Metadata.BlobBuilder:Expand(int):this xor r15d, r15d ;; size=23 bbWeight=0.50 PerfScore 2.00 G_M55272_IG04: lea eax, [r15+0x10] mov dword ptr [rbx+0x1C], eax mov rax, gword ptr [rbx+0x10] test rax, rax jne SHORT G_M55272_IG06 ;; size=16 bbWeight=1 PerfScore 4.75 G_M55272_IG05: test r15d, r15d je SHORT G_M55272_IG07 jmp SHORT G_M55272_IG11 ;; size=7 bbWeight=0.50 PerfScore 1.62 G_M55272_IG06: mov ecx, dword ptr [rax+0x08] cmp ecx, r15d jb SHORT G_M55272_IG11 mov edx, r15d lea rax, bword ptr [rax+rdx+0x10] sub ecx, r15d jmp SHORT G_M55272_IG08 ;; size=21 bbWeight=0.50 PerfScore 3.38 G_M55272_IG07: xor rax, rax xor ecx, ecx ;; size=4 bbWeight=0.50 PerfScore 0.25 G_M55272_IG08: cmp ecx, 16 jl SHORT G_M55272_IG10 ;; size=5 bbWeight=1 PerfScore 1.25 G_M55272_IG09: - cmp ecx, 16 - jb SHORT G_M55272_IG10 vmovups xmm0, xmmword ptr [rbp-0x20] vmovups xmmword ptr [rax], xmm0 - ;; size=14 bbWeight=0.50 PerfScore 3.12 + ;; size=9 bbWeight=0.50 PerfScore 2.50 G_M55272_IG10: add rsp, 16 pop rbx pop r15 pop rbp ret ;; size=9 bbWeight=1 PerfScore 2.75 G_M55272_IG11: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -; Total bytes of code 161, prolog size 13, PerfScore 33.12, instruction count 52, allocated bytes for code 161 (MethodHash=88a42817) for method System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts) +; Total bytes of code 156, prolog size 13, PerfScore 32.50, instruction count 50, allocated bytes for code 156 (MethodHash=88a42817) for method System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts) ```
-5 (-4.03 % of base) - System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this ```diff ; Assembly listing for method System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):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; 3 single block inlinees; 4 inlinees without PGO data +; 0 inlinees with PGO data; 3 single block inlinees; 3 inlinees without PGO data ; Final local variable assignments ; ; V00 this [V00,T00] ( 6, 6 ) byref -> rdi this single-def ; V01 arg1 [V01,T03] ( 3, 2.50) struct (16) [rbp-0x10] do-not-enreg[SA] multireg-arg single-def ;* V02 loc0 [V02 ] ( 0, 0 ) int -> zero-ref ;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ; V04 tmp1 [V04,T02] ( 7, 5 ) int -> rax "Inline stloc first use temp" ;* V05 tmp2 [V05 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ; V06 tmp3 [V06,T01] ( 4, 6 ) ref -> rcx class-hnd single-def "Inlining Arg" ;* V07 tmp4 [V07 ] ( 0, 0 ) struct (16) zero-ref "spilled call-like call argument" ;* V08 tmp5 [V08 ] ( 0, 0 ) struct (16) zero-ref "Inline return value spill temp" ;* V09 tmp6 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" ;* V10 tmp7 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inline ldloca(s) first use temp" ; V11 tmp8 [V11,T05] ( 2, 2 ) byref -> rcx single-def "Inlining Arg" ; V12 tmp9 [V12,T06] ( 2, 2 ) int -> rdx "Inlining Arg" ;* V13 tmp10 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" ;* V14 tmp11 [V14 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V15 tmp12 [V15 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V16 tmp13 [V16 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V17 tmp14 [V17 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* 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,T07] ( 3, 1.50) byref -> rcx "field V08._reference (fldOffset=0x0)" P-INDEP -; V21 tmp18 [V21,T04] ( 4, 2.50) int -> rdx "field V08._length (fldOffset=0x8)" P-INDEP -; V22 tmp19 [V22,T09] ( 2, 1 ) byref -> rcx single-def "field V09._reference (fldOffset=0x0)" P-INDEP -; V23 tmp20 [V23,T10] ( 2, 1 ) int -> rdx "field V09._length (fldOffset=0x8)" P-INDEP -;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP -;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP -;* V26 tmp23 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP -;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP -;* V28 tmp25 [V28 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP -;* V29 tmp26 [V29 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP -;* V30 tmp27 [V30 ] ( 0, 0 ) byref -> zero-ref single-def "field V17._reference (fldOffset=0x0)" P-INDEP -;* V31 tmp28 [V31 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP -; V32 cse0 [V32,T08] ( 3, 1.50) int -> rdx "CSE #01: moderate" +;* V15 tmp12 [V15 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V16 tmp13 [V16 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP +;* V17 tmp14 [V17 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +; V18 tmp15 [V18,T07] ( 3, 1.50) byref -> rcx "field V08._reference (fldOffset=0x0)" P-INDEP +; V19 tmp16 [V19,T04] ( 3, 2 ) int -> rdx "field V08._length (fldOffset=0x8)" P-INDEP +; V20 tmp17 [V20,T09] ( 2, 1 ) byref -> rcx single-def "field V09._reference (fldOffset=0x0)" P-INDEP +; V21 tmp18 [V21,T10] ( 2, 1 ) int -> rdx "field V09._length (fldOffset=0x8)" P-INDEP +;* V22 tmp19 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP +;* V23 tmp20 [V23 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP +;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP +;* V26 tmp23 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +; V28 cse0 [V28,T08] ( 3, 1.50) int -> rdx "CSE #01: moderate" ; ; Lcl frame size = 16 G_M46534_IG01: push rbp sub rsp, 16 lea rbp, [rsp+0x10] mov qword ptr [rbp-0x10], rsi mov qword ptr [rbp-0x08], rdx ;; size=18 bbWeight=1 PerfScore 3.75 G_M46534_IG02: mov eax, dword ptr [rdi+0x10] mov ecx, dword ptr [rdi+0x0C] add ecx, -16 cmp eax, ecx jg SHORT G_M46534_IG10 lea ecx, [rax+0x10] mov dword ptr [rdi+0x10], ecx mov rcx, gword ptr [rdi] test rcx, rcx jne SHORT G_M46534_IG04 ;; size=27 bbWeight=1 PerfScore 10.25 G_M46534_IG03: test eax, eax je SHORT G_M46534_IG05 jmp SHORT G_M46534_IG09 ;; size=6 bbWeight=0.50 PerfScore 1.62 G_M46534_IG04: mov edx, dword ptr [rcx+0x08] cmp edx, eax jb SHORT G_M46534_IG09 mov edi, eax lea rcx, bword ptr [rcx+rdi+0x10] sub edx, eax jmp SHORT G_M46534_IG06 ;; size=18 bbWeight=0.50 PerfScore 3.38 G_M46534_IG05: xor rcx, rcx xor edx, edx ;; size=4 bbWeight=0.50 PerfScore 0.25 G_M46534_IG06: cmp edx, 16 jl SHORT G_M46534_IG08 ;; size=5 bbWeight=1 PerfScore 1.25 G_M46534_IG07: - cmp edx, 16 - jb SHORT G_M46534_IG08 vmovups xmm0, xmmword ptr [rbp-0x10] vmovups xmmword ptr [rcx], xmm0 - ;; size=14 bbWeight=0.50 PerfScore 3.12 + ;; size=9 bbWeight=0.50 PerfScore 2.50 G_M46534_IG08: add rsp, 16 pop rbp ret ;; size=6 bbWeight=1 PerfScore 1.75 G_M46534_IG09: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M46534_IG10: mov rax, 0xD1FFAB1E ; code for System.Reflection.Throw:OutOfBounds() call [rax]System.Reflection.Throw:OutOfBounds() int3 ;; size=13 bbWeight=0 PerfScore 0.00 -; Total bytes of code 124, prolog size 10, PerfScore 25.38, instruction count 42, allocated bytes for code 124 (MethodHash=ebdf4a39) for method System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts) +; Total bytes of code 119, prolog size 10, PerfScore 24.75, instruction count 40, allocated bytes for code 119 (MethodHash=ebdf4a39) for method System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts) ```

Larger list of diffs: https://gist.github.com/MihuBot/2c7e503d4d7c3fdbad2fdfcc9df151dc

MihuBot commented 1 month ago

@xtqqczze