MihuBot / runtime-utils

0 stars 0 forks source link

[JitDiff X64] [xtqqczze] Do not ignore `MemoryMarshal.TryWrite` result in `Guid` #551

Open MihuBot opened 1 month ago

MihuBot commented 1 month ago

Job completed in 14 minutes. https://github.com/dotnet/runtime/pull/104728

Diffs

Found 265 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39660084
Total bytes of diff: 39660036
Total bytes of delta: -48 (-0.00 % of base)
Total relative delta: -0.35
    diff is an improvement.
    relative diff is an improvement.

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

2 total files with Code Size differences (2 improved, 0 regressed), 257 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)
          -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 (-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)
          -2 (-6.06 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte:this (FullOpts)

Top method improvements (percentages):
         -12 (-11.43 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte],ubyte,byref):ubyte:this (FullOpts)
          -2 (-6.06 % of base) : System.Private.CoreLib.dasm - System.Guid:TryWriteBytes(System.Span`1[ubyte]):ubyte: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)
          -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)

8 total methods with Code Size differences (8 improved, 0 regressed), 231423 unchanged.

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

Artifacts:

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 ; 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" +;* 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 "Inlining Arg" -;* 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" +;* V10 tmp5 [V10 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V11 tmp6 [V11 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "NewObj constructor temp" +;* V12 tmp7 [V12 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V13 tmp8 [V13 ] ( 0, 0 ) byref -> zero-ref single-def "Inlining Arg" +;* V14 tmp9 [V14 ] ( 0, 0 ) int -> zero-ref "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 +;* V18 tmp13 [V18 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +;* V19 tmp14 [V19 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" +; V20 tmp15 [V20,T01] ( 6, 3.50) byref -> rsi single-def "field V01._reference (fldOffset=0x0)" P-INDEP +; V21 tmp16 [V21,T04] ( 2, 2 ) int -> rdx single-def "field V01._length (fldOffset=0x8)" P-INDEP +;* V22 tmp17 [V22 ] ( 0, 0 ) byref -> zero-ref single-def "field V06._reference (fldOffset=0x0)" P-INDEP +;* V23 tmp18 [V23 ] ( 0, 0 ) int -> zero-ref "field V06._length (fldOffset=0x8)" P-INDEP +;* V24 tmp19 [V24 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP +;* V25 tmp20 [V25 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +;* V26 tmp21 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V08._reference (fldOffset=0x0)" P-INDEP +;* V27 tmp22 [V27 ] ( 0, 0 ) int -> zero-ref "field V08._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 +;* V36 tmp31 [V36 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V37 tmp32 [V37 ] ( 0, 0 ) int -> zero-ref "field V15._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" +;* V44 tmp39 [V44 ] ( 0, 0 ) byref -> zero-ref single-def "field V19._reference (fldOffset=0x0)" P-INDEP +;* V45 tmp40 [V45 ] ( 0, 0 ) int -> zero-ref "field V19._length (fldOffset=0x8)" P-INDEP +; V46 tmp41 [V46,T05] ( 4, 2 ) int -> rax "V04.[000..004)" +; V47 tmp42 [V47,T06] ( 4, 2 ) short -> rcx "V04.[004..006)" +; V48 tmp43 [V48,T07] ( 4, 2 ) short -> rdx "V04.[006..008)" +; V49 cse0 [V49,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 - jl SHORT G_M3213_IG07 + jb SHORT G_M3213_IG07 ;; size=5 bbWeight=1 PerfScore 1.25 G_M3213_IG03: cmp cl, 1 jne SHORT G_M3213_IG04 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_IG05 + 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 jmp SHORT G_M3213_IG05 - ;; size=62 bbWeight=0.50 PerfScore 11.25 + ;; size=55 bbWeight=0.50 PerfScore 10.62 G_M3213_IG04: - cmp edx, 16 - jb SHORT G_M3213_IG05 vmovups xmm0, xmmword ptr [rdi] vmovups xmmword ptr [rsi], xmm0 - ;; size=13 bbWeight=0.50 PerfScore 3.62 + ;; size=8 bbWeight=0.50 PerfScore 3.00 G_M3213_IG05: mov dword ptr [r8], 16 mov eax, 1 ;; size=12 bbWeight=0.50 PerfScore 0.62 G_M3213_IG06: pop rbp ret ;; size=2 bbWeight=0.50 PerfScore 0.75 G_M3213_IG07: xor eax, eax mov dword ptr [r8], eax ;; size=5 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) ```
-9 (-2.17 % 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 ; 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" +;* V25 tmp20 [V25 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" ;* V26 tmp21 [V26 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "Inlining Arg" -;* V27 tmp22 [V27 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op "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" +;* V27 tmp22 [V27 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V28 tmp23 [V28,T08] ( 2, 4 ) int -> rcx "Inlining Arg" +;* V29 tmp24 [V29 ] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +;* V30 tmp25 [V30 ] ( 0, 0 ) ref -> zero-ref single-def "field V04._buffer (fldOffset=0x0)" P-INDEP +;* V31 tmp26 [V31 ] ( 0, 0 ) int -> zero-ref "field V04._start (fldOffset=0x8)" P-INDEP +; V32 tmp27 [V32,T10] ( 3, 3 ) int -> rdx "field V04._end (fldOffset=0xc)" P-INDEP +; V33 tmp28 [V33,T11] ( 3, 3 ) int -> rax "field V04._position (fldOffset=0x10)" P-INDEP +; V34 tmp29 [V34,T06] ( 5, 4 ) ref -> rdi single-def "field V09.Buffer (fldOffset=0x0)" P-INDEP +; V35 tmp30 [V35,T02] ( 8, 6 ) int -> rsi "field V09.Start (fldOffset=0x8)" P-INDEP +; V36 tmp31 [V36,T16] ( 2, 2 ) int -> rdx "field V09.k__BackingField (fldOffset=0xc)" P-INDEP +;* V37 tmp32 [V37 ] ( 0, 0 ) byref -> zero-ref "field V17._reference (fldOffset=0x0)" P-INDEP +;* V38 tmp33 [V38 ] ( 0, 0 ) int -> zero-ref "field V17._length (fldOffset=0x8)" P-INDEP +; V39 tmp34 [V39,T17] ( 3, 1.50) byref -> r8 "field V18._reference (fldOffset=0x0)" P-INDEP +; V40 tmp35 [V40,T13] ( 3, 2 ) int -> rcx "field V18._length (fldOffset=0x8)" P-INDEP +; V41 tmp36 [V41,T19] ( 2, 1 ) byref -> r8 single-def "field V19._reference (fldOffset=0x0)" P-INDEP +; V42 tmp37 [V42,T20] ( 2, 1 ) int -> rcx "field V19._length (fldOffset=0x8)" P-INDEP +;* V43 tmp38 [V43 ] ( 0, 0 ) byref -> zero-ref single-def "field V20._reference (fldOffset=0x0)" P-INDEP +;* V44 tmp39 [V44 ] ( 0, 0 ) int -> zero-ref "field V20._length (fldOffset=0x8)" P-INDEP +;* V45 tmp40 [V45 ] ( 0, 0 ) byref -> zero-ref single-def "field V24._reference (fldOffset=0x0)" P-INDEP +;* V46 tmp41 [V46 ] ( 0, 0 ) int -> zero-ref "field V24._length (fldOffset=0x8)" P-INDEP +;* V47 tmp42 [V47 ] ( 0, 0 ) byref -> zero-ref single-def "field V25._reference (fldOffset=0x0)" P-INDEP +;* V48 tmp43 [V48 ] ( 0, 0 ) int -> zero-ref "field V25._length (fldOffset=0x8)" P-INDEP +;* V49 tmp44 [V49 ] ( 0, 0 ) byref -> zero-ref single-def "field V26._reference (fldOffset=0x0)" P-INDEP +;* V50 tmp45 [V50 ] ( 0, 0 ) int -> zero-ref "field V26._length (fldOffset=0x8)" P-INDEP +; V51 cse0 [V51,T09] ( 3, 3 ) ref -> rdx "CSE #01: moderate" +; V52 cse1 [V52,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_IG12 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_IG11 + jg SHORT G_M23392_IG11 lea eax, [rsi+0x10] test rdi, rdi je SHORT G_M23392_IG05 - ;; size=14 bbWeight=1 PerfScore 2.75 + ;; size=10 bbWeight=1 PerfScore 2.75 G_M23392_IG04: mov ecx, dword ptr [rdi+0x08] cmp ecx, esi jb SHORT G_M23392_IG10 mov r8d, esi lea r8, bword ptr [rdi+r8+0x10] sub ecx, esi jmp SHORT G_M23392_IG06 ;; size=19 bbWeight=0.50 PerfScore 3.38 G_M23392_IG05: test esi, esi jne SHORT G_M23392_IG10 xor r8, r8 xor ecx, ecx ;; size=9 bbWeight=0.50 PerfScore 0.88 G_M23392_IG06: cmp ecx, 16 - jl SHORT G_M23392_IG08 + jb SHORT G_M23392_IG08 ;; size=5 bbWeight=1 PerfScore 1.25 G_M23392_IG07: - cmp ecx, 16 - jb SHORT G_M23392_IG08 vmovups xmmword ptr [r8], xmm0 - ;; size=10 bbWeight=0.50 PerfScore 1.62 + ;; size=5 bbWeight=0.50 PerfScore 1.00 G_M23392_IG08: mov ecx, dword ptr [rbp-0x30] add edx, -4 cmp eax, edx jg SHORT G_M23392_IG11 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_IG09: 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_IG10: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M23392_IG11: 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_IG12: 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 415, prolog size 19, PerfScore 98.62, instruction count 113, allocated bytes for code 415 (MethodHash=bbe9a49f) for method System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts) +; Total bytes of code 406, prolog size 19, PerfScore 98.00, instruction count 111, allocated bytes for code 406 (MethodHash=bbe9a49f) for method System.Reflection.Metadata.Ecma335.PortablePdbBuilder:Serialize(System.Reflection.Metadata.BlobBuilder):System.Reflection.Metadata.BlobContentId:this (FullOpts) ```
-5 (-5.75 % 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 ; 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" +;* 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 ] ( 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" +;* V14 tmp11 [V14 ] ( 0, 0 ) byref -> zero-ref "field V04._reference (fldOffset=0x0)" P-INDEP +;* V15 tmp12 [V15 ] ( 0, 0 ) int -> zero-ref "field V04._length (fldOffset=0x8)" P-INDEP +; V16 tmp13 [V16,T06] ( 3, 1.50) byref -> rcx "field V05._reference (fldOffset=0x0)" P-INDEP +; V17 tmp14 [V17,T03] ( 3, 2 ) int -> rax "field V05._length (fldOffset=0x8)" P-INDEP +; V18 tmp15 [V18,T08] ( 2, 1 ) byref -> rcx single-def "field V06._reference (fldOffset=0x0)" P-INDEP +; V19 tmp16 [V19,T09] ( 2, 1 ) int -> rax "field V06._length (fldOffset=0x8)" P-INDEP +;* V20 tmp17 [V20 ] ( 0, 0 ) byref -> zero-ref single-def "field V07._reference (fldOffset=0x0)" P-INDEP +;* V21 tmp18 [V21 ] ( 0, 0 ) int -> zero-ref "field V07._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 +;* V24 tmp21 [V24 ] ( 0, 0 ) byref -> zero-ref single-def "field V12._reference (fldOffset=0x0)" P-INDEP +;* V25 tmp22 [V25 ] ( 0, 0 ) int -> zero-ref "field V12._length (fldOffset=0x8)" P-INDEP +;* V26 tmp23 [V26 ] ( 0, 0 ) byref -> zero-ref single-def "field V13._reference (fldOffset=0x0)" P-INDEP +;* V27 tmp24 [V27 ] ( 0, 0 ) int -> zero-ref "field V13._length (fldOffset=0x8)" P-INDEP +; V28 cse0 [V28,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 je SHORT G_M7642_IG04 ;; size=5 bbWeight=1 PerfScore 1.25 G_M7642_IG03: mov eax, dword ptr [rdi+0x08] cmp eax, esi jb SHORT G_M7642_IG08 mov ecx, esi lea rcx, bword ptr [rdi+rcx+0x10] sub eax, esi jmp SHORT G_M7642_IG05 ;; size=18 bbWeight=0.50 PerfScore 3.38 G_M7642_IG04: test esi, esi jne SHORT G_M7642_IG08 xor rcx, rcx xor eax, eax ;; size=8 bbWeight=0.50 PerfScore 0.88 G_M7642_IG05: cmp eax, 16 - jl SHORT G_M7642_IG07 + jb SHORT G_M7642_IG07 ;; size=5 bbWeight=1 PerfScore 1.25 G_M7642_IG06: - cmp eax, 16 - jb SHORT G_M7642_IG07 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_IG07: add rsp, 16 pop rbp ret ;; size=6 bbWeight=1 PerfScore 1.75 G_M7642_IG08: 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 87, prolog size 10, PerfScore 15.38, instruction count 30, allocated bytes for code 87 (MethodHash=e440e225) for method System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts) +; Total bytes of code 82, prolog size 10, PerfScore 14.75, instruction count 28, allocated bytes for code 82 (MethodHash=e440e225) for method System.Reflection.BlobUtilities:WriteGuid(ubyte[],int,System.Guid) (FullOpts) ```
-5 (-3.14 % 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 ; 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" +;* 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 "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" +;* V17 tmp14 [V17 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP +;* V18 tmp15 [V18 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +; V19 tmp16 [V19,T07] ( 3, 1.50) byref -> rax "field V08._reference (fldOffset=0x0)" P-INDEP +; V20 tmp17 [V20,T04] ( 3, 2 ) int -> rcx "field V08._length (fldOffset=0x8)" P-INDEP +; V21 tmp18 [V21,T09] ( 2, 1 ) byref -> rax single-def "field V09._reference (fldOffset=0x0)" P-INDEP +; V22 tmp19 [V22,T10] ( 2, 1 ) int -> rcx "field V09._length (fldOffset=0x8)" P-INDEP +;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP +;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V25 tmp22 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP +;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP +;* V27 tmp24 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +;* V29 tmp26 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP +;* V30 tmp27 [V30 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP +; V31 cse0 [V31,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 je SHORT G_M55272_IG06 ;; size=16 bbWeight=1 PerfScore 4.75 G_M55272_IG05: mov ecx, dword ptr [rax+0x08] cmp ecx, r15d jb SHORT G_M55272_IG10 mov edx, r15d lea rax, bword ptr [rax+rdx+0x10] sub ecx, r15d jmp SHORT G_M55272_IG07 ;; size=21 bbWeight=0.50 PerfScore 3.38 G_M55272_IG06: test r15d, r15d jne SHORT G_M55272_IG10 xor rax, rax xor ecx, ecx ;; size=9 bbWeight=0.50 PerfScore 0.88 G_M55272_IG07: cmp ecx, 16 - jl SHORT G_M55272_IG09 + jb SHORT G_M55272_IG09 ;; size=5 bbWeight=1 PerfScore 1.25 G_M55272_IG08: - cmp ecx, 16 - jb SHORT G_M55272_IG09 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_IG09: add rsp, 16 pop rbx pop r15 pop rbp ret ;; size=9 bbWeight=1 PerfScore 2.75 G_M55272_IG10: 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 159, prolog size 13, PerfScore 32.12, instruction count 51, allocated bytes for code 159 (MethodHash=88a42817) for method System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts) +; Total bytes of code 154, prolog size 13, PerfScore 31.50, instruction count 49, allocated bytes for code 154 (MethodHash=88a42817) for method System.Reflection.Metadata.BlobBuilder:WriteGuid(System.Guid):this (FullOpts) ```
-5 (-4.10 % 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 ; 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" +;* 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 "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" +;* V17 tmp14 [V17 ] ( 0, 0 ) byref -> zero-ref "field V07._reference (fldOffset=0x0)" P-INDEP +;* V18 tmp15 [V18 ] ( 0, 0 ) int -> zero-ref "field V07._length (fldOffset=0x8)" P-INDEP +; V19 tmp16 [V19,T07] ( 3, 1.50) byref -> rcx "field V08._reference (fldOffset=0x0)" P-INDEP +; V20 tmp17 [V20,T04] ( 3, 2 ) int -> rdx "field V08._length (fldOffset=0x8)" P-INDEP +; V21 tmp18 [V21,T09] ( 2, 1 ) byref -> rcx single-def "field V09._reference (fldOffset=0x0)" P-INDEP +; V22 tmp19 [V22,T10] ( 2, 1 ) int -> rdx "field V09._length (fldOffset=0x8)" P-INDEP +;* V23 tmp20 [V23 ] ( 0, 0 ) byref -> zero-ref single-def "field V10._reference (fldOffset=0x0)" P-INDEP +;* V24 tmp21 [V24 ] ( 0, 0 ) int -> zero-ref "field V10._length (fldOffset=0x8)" P-INDEP +;* V25 tmp22 [V25 ] ( 0, 0 ) byref -> zero-ref single-def "field V14._reference (fldOffset=0x0)" P-INDEP +;* V26 tmp23 [V26 ] ( 0, 0 ) int -> zero-ref "field V14._length (fldOffset=0x8)" P-INDEP +;* V27 tmp24 [V27 ] ( 0, 0 ) byref -> zero-ref single-def "field V15._reference (fldOffset=0x0)" P-INDEP +;* V28 tmp25 [V28 ] ( 0, 0 ) int -> zero-ref "field V15._length (fldOffset=0x8)" P-INDEP +;* V29 tmp26 [V29 ] ( 0, 0 ) byref -> zero-ref single-def "field V16._reference (fldOffset=0x0)" P-INDEP +;* V30 tmp27 [V30 ] ( 0, 0 ) int -> zero-ref "field V16._length (fldOffset=0x8)" P-INDEP +; V31 cse0 [V31,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_IG09 lea ecx, [rax+0x10] mov dword ptr [rdi+0x10], ecx mov rcx, gword ptr [rdi] test rcx, rcx je SHORT G_M46534_IG04 ;; size=27 bbWeight=1 PerfScore 10.25 G_M46534_IG03: mov edx, dword ptr [rcx+0x08] cmp edx, eax jb SHORT G_M46534_IG08 mov edi, eax lea rcx, bword ptr [rcx+rdi+0x10] sub edx, eax jmp SHORT G_M46534_IG05 ;; size=18 bbWeight=0.50 PerfScore 3.38 G_M46534_IG04: test eax, eax jne SHORT G_M46534_IG08 xor rcx, rcx xor edx, edx ;; size=8 bbWeight=0.50 PerfScore 0.88 G_M46534_IG05: cmp edx, 16 - jl SHORT G_M46534_IG07 + jb SHORT G_M46534_IG07 ;; size=5 bbWeight=1 PerfScore 1.25 G_M46534_IG06: - cmp edx, 16 - jb SHORT G_M46534_IG07 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_IG07: add rsp, 16 pop rbp ret ;; size=6 bbWeight=1 PerfScore 1.75 G_M46534_IG08: mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentOutOfRangeException() call [rax]System.ThrowHelper:ThrowArgumentOutOfRangeException() int3 ;; size=13 bbWeight=0 PerfScore 0.00 G_M46534_IG09: 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 122, prolog size 10, PerfScore 24.38, instruction count 41, allocated bytes for code 122 (MethodHash=ebdf4a39) for method System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts) +; Total bytes of code 117, prolog size 10, PerfScore 23.75, instruction count 39, allocated bytes for code 117 (MethodHash=ebdf4a39) for method System.Reflection.Metadata.BlobWriter:WriteGuid(System.Guid):this (FullOpts) ```

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

MihuBot commented 1 month ago

@xtqqczze