Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JitDiff X64] [xtqqczze] Use Unsafe.BitCast for generic span casting #752

Open
MihuBot opened this issue Oct 24, 2024 · 3 comments
Open

Comments

@MihuBot
Copy link
Owner

MihuBot commented Oct 24, 2024

Job completed in 18 minutes 53 seconds.
dotnet/runtime#109136

Diffs

Found 261 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 39563404
Total bytes of diff: 39563630
Total bytes of delta: 226 (0.00 % of base)
Total relative delta: -2.81
    diff is a regression.
    relative diff is an improvement.


Top file regressions (bytes):
         226 : System.Private.CoreLib.dasm (0.00 % of base)

1 total files with Code Size differences (0 improved, 1 regressed), 258 unchanged.

Top method regressions (bytes):
         644 (26.30 % of base) : System.Private.CoreLib.dasm - System.Enum:GetValuesAsUnderlyingType(System.RuntimeType):System.Array (FullOpts)
           3 (0.05 % of base) : System.Private.CoreLib.dasm - System.DateTimeFormat:FormatCustomized[ubyte](System.DateTime,System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo,System.TimeSpan,byref) (FullOpts)

Top method improvements (bytes):
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -23 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[short]():short[]:this (FullOpts)
         -23 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[short]():short[]:this (FullOpts)
         -23 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[short]():short[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[double]():double[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[int]():int[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[long]():long[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -20 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
         -20 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
         -20 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
         -19 (-14.73 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
          -7 (-2.78 % of base) : System.Private.CoreLib.dasm - System.DateTimeFormat:AppendChar[ubyte](byref,ushort) (FullOpts)
          -2 (-0.31 % of base) : System.Private.CoreLib.dasm - System.DateTimeFormat:ParseQuoteString[ubyte](System.ReadOnlySpan`1[ushort],int,byref):int (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[double]():double[]:this (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[int]():int[]:this (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[long]():long[]:this (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)

Top method regressions (percentages):
         644 (26.30 % of base) : System.Private.CoreLib.dasm - System.Enum:GetValuesAsUnderlyingType(System.RuntimeType):System.Array (FullOpts)
           3 (0.05 % of base) : System.Private.CoreLib.dasm - System.DateTimeFormat:FormatCustomized[ubyte](System.DateTime,System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo,System.TimeSpan,byref) (FullOpts)

Top method improvements (percentages):
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
         -24 (-17.39 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -23 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[short]():short[]:this (FullOpts)
         -23 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[short]():short[]:this (FullOpts)
         -23 (-16.91 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[short]():short[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[double]():double[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[int]():int[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[long]():long[]:this (FullOpts)
         -23 (-16.79 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
         -20 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[double]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
         -20 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[int]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
         -20 (-15.38 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[long]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
         -19 (-14.73 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[short]:CloneValues[ubyte]():ubyte[]:this (FullOpts)
          -7 (-2.78 % of base) : System.Private.CoreLib.dasm - System.DateTimeFormat:AppendChar[ubyte](byref,ushort) (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[double]():double[]:this (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[int]():int[]:this (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[long]():long[]:this (FullOpts)
          -1 (-0.87 % of base) : System.Private.CoreLib.dasm - System.Enum+EnumInfo`1[ubyte]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
          -2 (-0.31 % of base) : System.Private.CoreLib.dasm - System.DateTimeFormat:ParseQuoteString[ubyte](System.ReadOnlySpan`1[ushort],int,byref):int (FullOpts)

26 total methods with Code Size differences (24 improved, 2 regressed), 232637 unchanged.

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

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 24, 2024

Top method regressions

Note: some changes were skipped as they were too large to fit into a comment.

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

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 24, 2024

Top method improvements

-24 (-17.39 % of base) - System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this
 ; Assembly listing for method System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - 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; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Enum+EnumInfo`1[double]>
-;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[int]>
+;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[int]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[double]>
-;  V04 tmp2         [V04,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <double[]>
-;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[double]>
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[double]>
-;* V09 tmp7         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V10 tmp8         [V10,T02] (  4,  3   )     int  ->  r15         "Inline stloc first use temp"
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V13 tmp11        [V13,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <int[]>
-;  V14 tmp12        [V14,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <int[]>
-;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19        [V21    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V22 tmp20        [V22,T05] (  3,  2   )   byref  ->  rbx         "field V05._reference (fldOffset=0x0)" P-INDEP
-;  V23 tmp21        [V23,T06] (  3,  2   )     int  ->  rsi         "field V05._length (fldOffset=0x8)" P-INDEP
-;  V24 tmp22        [V24,T07] (  2,  1.50)   byref  ->  rbx         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23        [V25    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V03 tmp1         [V03,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <double[]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[double]>
+;  V05 tmp3         [V05,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <int[]>
+;  V06 tmp4         [V06,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <int[]>
+;* V07 tmp5         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V08 tmp6         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
+;  V12 tmp10        [V12,T05] (  3,  1.50)   byref  ->  rbx         "field V04._reference (fldOffset=0x0)" P-INDEP
+;  V13 tmp11        [V13,T02] (  5,  3   )     int  ->  r15         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 8
 
 G_M792_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
 						;; size=12 bbWeight=1 PerfScore 5.50
 G_M792_IG02:
        mov      rsi, gword ptr [rdi+0x08]
        test     rsi, rsi
        je       SHORT G_M792_IG04
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M792_IG03:
        lea      rbx, bword ptr [rsi+0x10]
-       mov      esi, dword ptr [rsi+0x08]
+       mov      r15d, dword ptr [rsi+0x08]
        jmp      SHORT G_M792_IG05
-						;; size=9 bbWeight=0.50 PerfScore 2.25
+						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M792_IG04:
        xor      rbx, rbx
-       xor      esi, esi
-						;; size=4 bbWeight=0.50 PerfScore 0.25
+       xor      r15d, r15d
+						;; size=5 bbWeight=0.50 PerfScore 0.25
 G_M792_IG05:
-       mov      r15d, esi
-       shl      r15, 3
-       shr      r15, 2
-       cmp      r15, 0xD1FFAB1E
-       ja       SHORT G_M792_IG09
        test     r15d, r15d
        je       SHORT G_M792_IG07
-						;; size=25 bbWeight=1 PerfScore 3.75
+						;; size=5 bbWeight=1 PerfScore 1.25
 G_M792_IG06:
-       movsxd   rsi, r15d
+       mov      esi, r15d
        mov      rdi, 0xD1FFAB1E      ; int[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        mov      edx, r15d
        shl      rdx, 2
        lea      rdi, bword ptr [r14+0x10]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rax, r14
        jmp      SHORT G_M792_IG08
 						;; size=52 bbWeight=0.50 PerfScore 4.38
 G_M792_IG07:
        mov      rax, 0xD1FFAB1E      ; 'System.Int32[]'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M792_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M792_IG09:
-       call     CORINFO_HELP_OVERFLOW
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=7719fce7) for method System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=7719fce7) for method System.Enum+EnumInfo`1[double]:CloneValues[int]():int[]:this (FullOpts)
 ; ============================================================
-24 (-17.39 % of base) - System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this
 ; Assembly listing for method System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - 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; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Enum+EnumInfo`1[double]>
-;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[System.Numerics.Vector`1[float]]>
+;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[System.Numerics.Vector`1[float]]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[double]>
-;  V04 tmp2         [V04,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <double[]>
-;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[double]>
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[double]>
-;* V09 tmp7         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V10 tmp8         [V10,T02] (  4,  3   )     int  ->  r15         "Inline stloc first use temp"
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[System.Numerics.Vector`1[float]]>
-;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V13 tmp11        [V13,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
-;  V14 tmp12        [V14,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
-;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19        [V21    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V22 tmp20        [V22,T05] (  3,  2   )   byref  ->  rbx         "field V05._reference (fldOffset=0x0)" P-INDEP
-;  V23 tmp21        [V23,T06] (  3,  2   )     int  ->  rsi         "field V05._length (fldOffset=0x8)" P-INDEP
-;  V24 tmp22        [V24,T07] (  2,  1.50)   byref  ->  rbx         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23        [V25    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V03 tmp1         [V03,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <double[]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[double]>
+;  V05 tmp3         [V05,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
+;  V06 tmp4         [V06,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
+;* V07 tmp5         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V08 tmp6         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
+;  V12 tmp10        [V12,T05] (  3,  1.50)   byref  ->  rbx         "field V04._reference (fldOffset=0x0)" P-INDEP
+;  V13 tmp11        [V13,T02] (  5,  3   )     int  ->  r15         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 8
 
 G_M34328_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
 						;; size=12 bbWeight=1 PerfScore 5.50
 G_M34328_IG02:
        mov      rsi, gword ptr [rdi+0x08]
        test     rsi, rsi
        je       SHORT G_M34328_IG04
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M34328_IG03:
        lea      rbx, bword ptr [rsi+0x10]
-       mov      esi, dword ptr [rsi+0x08]
+       mov      r15d, dword ptr [rsi+0x08]
        jmp      SHORT G_M34328_IG05
-						;; size=9 bbWeight=0.50 PerfScore 2.25
+						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M34328_IG04:
        xor      rbx, rbx
-       xor      esi, esi
-						;; size=4 bbWeight=0.50 PerfScore 0.25
+       xor      r15d, r15d
+						;; size=5 bbWeight=0.50 PerfScore 0.25
 G_M34328_IG05:
-       mov      r15d, esi
-       shl      r15, 3
-       shr      r15, 5
-       cmp      r15, 0xD1FFAB1E
-       ja       SHORT G_M34328_IG09
        test     r15d, r15d
        je       SHORT G_M34328_IG07
-						;; size=25 bbWeight=1 PerfScore 3.75
+						;; size=5 bbWeight=1 PerfScore 1.25
 G_M34328_IG06:
-       movsxd   rsi, r15d
+       mov      esi, r15d
        mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float][]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        mov      edx, r15d
        shl      rdx, 5
        lea      rdi, bword ptr [r14+0x10]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rax, r14
        jmp      SHORT G_M34328_IG08
 						;; size=52 bbWeight=0.50 PerfScore 4.38
 G_M34328_IG07:
        mov      rax, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single][]'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M34328_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M34328_IG09:
-       call     CORINFO_HELP_OVERFLOW
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=9f3479e7) for method System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=9f3479e7) for method System.Enum+EnumInfo`1[double]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
 ; ============================================================
-24 (-17.39 % of base) - System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this
 ; Assembly listing for method System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - 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; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Enum+EnumInfo`1[int]>
-;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[double]>
+;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[double]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[int]>
-;  V04 tmp2         [V04,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <int[]>
-;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V09 tmp7         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V10 tmp8         [V10,T02] (  4,  3   )     int  ->  r15         "Inline stloc first use temp"
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[double]>
-;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V13 tmp11        [V13,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <double[]>
-;  V14 tmp12        [V14,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <double[]>
-;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19        [V21    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V22 tmp20        [V22,T05] (  3,  2   )   byref  ->  rbx         "field V05._reference (fldOffset=0x0)" P-INDEP
-;  V23 tmp21        [V23,T06] (  3,  2   )     int  ->  rsi         "field V05._length (fldOffset=0x8)" P-INDEP
-;  V24 tmp22        [V24,T07] (  2,  1.50)   byref  ->  rbx         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23        [V25    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V03 tmp1         [V03,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <int[]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
+;  V05 tmp3         [V05,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <double[]>
+;  V06 tmp4         [V06,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <double[]>
+;* V07 tmp5         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V08 tmp6         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
+;  V12 tmp10        [V12,T05] (  3,  1.50)   byref  ->  rbx         "field V04._reference (fldOffset=0x0)" P-INDEP
+;  V13 tmp11        [V13,T02] (  5,  3   )     int  ->  r15         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 8
 
 G_M44254_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
 						;; size=12 bbWeight=1 PerfScore 5.50
 G_M44254_IG02:
        mov      rsi, gword ptr [rdi+0x08]
        test     rsi, rsi
        je       SHORT G_M44254_IG04
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M44254_IG03:
        lea      rbx, bword ptr [rsi+0x10]
-       mov      esi, dword ptr [rsi+0x08]
+       mov      r15d, dword ptr [rsi+0x08]
        jmp      SHORT G_M44254_IG05
-						;; size=9 bbWeight=0.50 PerfScore 2.25
+						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M44254_IG04:
        xor      rbx, rbx
-       xor      esi, esi
-						;; size=4 bbWeight=0.50 PerfScore 0.25
+       xor      r15d, r15d
+						;; size=5 bbWeight=0.50 PerfScore 0.25
 G_M44254_IG05:
-       mov      r15d, esi
-       shl      r15, 2
-       shr      r15, 3
-       cmp      r15, 0xD1FFAB1E
-       ja       SHORT G_M44254_IG09
        test     r15d, r15d
        je       SHORT G_M44254_IG07
-						;; size=25 bbWeight=1 PerfScore 3.75
+						;; size=5 bbWeight=1 PerfScore 1.25
 G_M44254_IG06:
-       movsxd   rsi, r15d
+       mov      esi, r15d
        mov      rdi, 0xD1FFAB1E      ; double[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        mov      edx, r15d
        shl      rdx, 3
        lea      rdi, bword ptr [r14+0x10]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rax, r14
        jmp      SHORT G_M44254_IG08
 						;; size=52 bbWeight=0.50 PerfScore 4.38
 G_M44254_IG07:
        mov      rax, 0xD1FFAB1E      ; 'System.Double[]'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M44254_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M44254_IG09:
-       call     CORINFO_HELP_OVERFLOW
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=6bb45321) for method System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=6bb45321) for method System.Enum+EnumInfo`1[int]:CloneValues[double]():double[]:this (FullOpts)
 ; ============================================================
-24 (-17.39 % of base) - System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this
 ; Assembly listing for method System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - 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; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Enum+EnumInfo`1[int]>
-;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[long]>
+;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[long]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[int]>
-;  V04 tmp2         [V04,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <int[]>
-;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V09 tmp7         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V10 tmp8         [V10,T02] (  4,  3   )     int  ->  r15         "Inline stloc first use temp"
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
-;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V13 tmp11        [V13,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <long[]>
-;  V14 tmp12        [V14,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <long[]>
-;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19        [V21    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V22 tmp20        [V22,T05] (  3,  2   )   byref  ->  rbx         "field V05._reference (fldOffset=0x0)" P-INDEP
-;  V23 tmp21        [V23,T06] (  3,  2   )     int  ->  rsi         "field V05._length (fldOffset=0x8)" P-INDEP
-;  V24 tmp22        [V24,T07] (  2,  1.50)   byref  ->  rbx         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23        [V25    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V03 tmp1         [V03,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <int[]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
+;  V05 tmp3         [V05,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <long[]>
+;  V06 tmp4         [V06,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <long[]>
+;* V07 tmp5         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V08 tmp6         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
+;  V12 tmp10        [V12,T05] (  3,  1.50)   byref  ->  rbx         "field V04._reference (fldOffset=0x0)" P-INDEP
+;  V13 tmp11        [V13,T02] (  5,  3   )     int  ->  r15         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 8
 
 G_M64478_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
 						;; size=12 bbWeight=1 PerfScore 5.50
 G_M64478_IG02:
        mov      rsi, gword ptr [rdi+0x08]
        test     rsi, rsi
        je       SHORT G_M64478_IG04
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M64478_IG03:
        lea      rbx, bword ptr [rsi+0x10]
-       mov      esi, dword ptr [rsi+0x08]
+       mov      r15d, dword ptr [rsi+0x08]
        jmp      SHORT G_M64478_IG05
-						;; size=9 bbWeight=0.50 PerfScore 2.25
+						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M64478_IG04:
        xor      rbx, rbx
-       xor      esi, esi
-						;; size=4 bbWeight=0.50 PerfScore 0.25
+       xor      r15d, r15d
+						;; size=5 bbWeight=0.50 PerfScore 0.25
 G_M64478_IG05:
-       mov      r15d, esi
-       shl      r15, 2
-       shr      r15, 3
-       cmp      r15, 0xD1FFAB1E
-       ja       SHORT G_M64478_IG09
        test     r15d, r15d
        je       SHORT G_M64478_IG07
-						;; size=25 bbWeight=1 PerfScore 3.75
+						;; size=5 bbWeight=1 PerfScore 1.25
 G_M64478_IG06:
-       movsxd   rsi, r15d
+       mov      esi, r15d
        mov      rdi, 0xD1FFAB1E      ; long[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        mov      edx, r15d
        shl      rdx, 3
        lea      rdi, bword ptr [r14+0x10]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rax, r14
        jmp      SHORT G_M64478_IG08
 						;; size=52 bbWeight=0.50 PerfScore 4.38
 G_M64478_IG07:
        mov      rax, 0xD1FFAB1E      ; 'System.Int64[]'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M64478_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M64478_IG09:
-       call     CORINFO_HELP_OVERFLOW
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=10b20421) for method System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=10b20421) for method System.Enum+EnumInfo`1[int]:CloneValues[long]():long[]:this (FullOpts)
 ; ============================================================
-24 (-17.39 % of base) - System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this
 ; Assembly listing for method System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - 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; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Enum+EnumInfo`1[int]>
-;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[System.Numerics.Vector`1[float]]>
+;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[System.Numerics.Vector`1[float]]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[int]>
-;  V04 tmp2         [V04,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <int[]>
-;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[int]>
-;* V09 tmp7         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V10 tmp8         [V10,T02] (  4,  3   )     int  ->  r15         "Inline stloc first use temp"
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[System.Numerics.Vector`1[float]]>
-;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V13 tmp11        [V13,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
-;  V14 tmp12        [V14,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
-;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19        [V21    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V22 tmp20        [V22,T05] (  3,  2   )   byref  ->  rbx         "field V05._reference (fldOffset=0x0)" P-INDEP
-;  V23 tmp21        [V23,T06] (  3,  2   )     int  ->  rsi         "field V05._length (fldOffset=0x8)" P-INDEP
-;  V24 tmp22        [V24,T07] (  2,  1.50)   byref  ->  rbx         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23        [V25    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V03 tmp1         [V03,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <int[]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[int]>
+;  V05 tmp3         [V05,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
+;  V06 tmp4         [V06,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
+;* V07 tmp5         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V08 tmp6         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
+;  V12 tmp10        [V12,T05] (  3,  1.50)   byref  ->  rbx         "field V04._reference (fldOffset=0x0)" P-INDEP
+;  V13 tmp11        [V13,T02] (  5,  3   )     int  ->  r15         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 8
 
 G_M4350_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
 						;; size=12 bbWeight=1 PerfScore 5.50
 G_M4350_IG02:
        mov      rsi, gword ptr [rdi+0x08]
        test     rsi, rsi
        je       SHORT G_M4350_IG04
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M4350_IG03:
        lea      rbx, bword ptr [rsi+0x10]
-       mov      esi, dword ptr [rsi+0x08]
+       mov      r15d, dword ptr [rsi+0x08]
        jmp      SHORT G_M4350_IG05
-						;; size=9 bbWeight=0.50 PerfScore 2.25
+						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M4350_IG04:
        xor      rbx, rbx
-       xor      esi, esi
-						;; size=4 bbWeight=0.50 PerfScore 0.25
+       xor      r15d, r15d
+						;; size=5 bbWeight=0.50 PerfScore 0.25
 G_M4350_IG05:
-       mov      r15d, esi
-       shl      r15, 2
-       shr      r15, 5
-       cmp      r15, 0xD1FFAB1E
-       ja       SHORT G_M4350_IG09
        test     r15d, r15d
        je       SHORT G_M4350_IG07
-						;; size=25 bbWeight=1 PerfScore 3.75
+						;; size=5 bbWeight=1 PerfScore 1.25
 G_M4350_IG06:
-       movsxd   rsi, r15d
+       mov      esi, r15d
        mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float][]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        mov      edx, r15d
        shl      rdx, 5
        lea      rdi, bword ptr [r14+0x10]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rax, r14
        jmp      SHORT G_M4350_IG08
 						;; size=52 bbWeight=0.50 PerfScore 4.38
 G_M4350_IG07:
        mov      rax, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single][]'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M4350_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M4350_IG09:
-       call     CORINFO_HELP_OVERFLOW
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=4129ef01) for method System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=4129ef01) for method System.Enum+EnumInfo`1[int]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
 ; ============================================================
-24 (-17.39 % of base) - System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this
 ; Assembly listing for method System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - 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; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Enum+EnumInfo`1[long]>
-;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[int]>
+;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[int]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[long]>
-;  V04 tmp2         [V04,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <long[]>
-;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[long]>
-;* V09 tmp7         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V10 tmp8         [V10,T02] (  4,  3   )     int  ->  r15         "Inline stloc first use temp"
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V13 tmp11        [V13,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <int[]>
-;  V14 tmp12        [V14,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <int[]>
-;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19        [V21    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V22 tmp20        [V22,T05] (  3,  2   )   byref  ->  rbx         "field V05._reference (fldOffset=0x0)" P-INDEP
-;  V23 tmp21        [V23,T06] (  3,  2   )     int  ->  rsi         "field V05._length (fldOffset=0x8)" P-INDEP
-;  V24 tmp22        [V24,T07] (  2,  1.50)   byref  ->  rbx         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23        [V25    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V03 tmp1         [V03,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <long[]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;  V05 tmp3         [V05,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <int[]>
+;  V06 tmp4         [V06,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <int[]>
+;* V07 tmp5         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V08 tmp6         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
+;  V12 tmp10        [V12,T05] (  3,  1.50)   byref  ->  rbx         "field V04._reference (fldOffset=0x0)" P-INDEP
+;  V13 tmp11        [V13,T02] (  5,  3   )     int  ->  r15         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 8
 
 G_M41863_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
 						;; size=12 bbWeight=1 PerfScore 5.50
 G_M41863_IG02:
        mov      rsi, gword ptr [rdi+0x08]
        test     rsi, rsi
        je       SHORT G_M41863_IG04
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M41863_IG03:
        lea      rbx, bword ptr [rsi+0x10]
-       mov      esi, dword ptr [rsi+0x08]
+       mov      r15d, dword ptr [rsi+0x08]
        jmp      SHORT G_M41863_IG05
-						;; size=9 bbWeight=0.50 PerfScore 2.25
+						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M41863_IG04:
        xor      rbx, rbx
-       xor      esi, esi
-						;; size=4 bbWeight=0.50 PerfScore 0.25
+       xor      r15d, r15d
+						;; size=5 bbWeight=0.50 PerfScore 0.25
 G_M41863_IG05:
-       mov      r15d, esi
-       shl      r15, 3
-       shr      r15, 2
-       cmp      r15, 0xD1FFAB1E
-       ja       SHORT G_M41863_IG09
        test     r15d, r15d
        je       SHORT G_M41863_IG07
-						;; size=25 bbWeight=1 PerfScore 3.75
+						;; size=5 bbWeight=1 PerfScore 1.25
 G_M41863_IG06:
-       movsxd   rsi, r15d
+       mov      esi, r15d
        mov      rdi, 0xD1FFAB1E      ; int[]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        mov      edx, r15d
        shl      rdx, 2
        lea      rdi, bword ptr [r14+0x10]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rax, r14
        jmp      SHORT G_M41863_IG08
 						;; size=52 bbWeight=0.50 PerfScore 4.38
 G_M41863_IG07:
        mov      rax, 0xD1FFAB1E      ; 'System.Int32[]'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M41863_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M41863_IG09:
-       call     CORINFO_HELP_OVERFLOW
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=d1c45c78) for method System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=d1c45c78) for method System.Enum+EnumInfo`1[long]:CloneValues[int]():int[]:this (FullOpts)
 ; ============================================================
-24 (-17.39 % of base) - System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this
 ; Assembly listing for method System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - 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; 2 single block inlinees; 3 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Enum+EnumInfo`1[long]>
-;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.Span`1[System.Numerics.Vector`1[float]]>
+;* V01 loc0         [V01    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[System.Numerics.Vector`1[float]]>
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;* V03 tmp1         [V03    ] (  0,  0   )  struct (16) zero-ref    "spilled call-like call argument" <System.Span`1[long]>
-;  V04 tmp2         [V04,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <long[]>
-;* V05 tmp3         [V05    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;* V08 tmp6         [V08    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[long]>
-;* V09 tmp7         [V09    ] (  0,  0   )     int  ->  zero-ref    "Inline stloc first use temp"
-;  V10 tmp8         [V10,T02] (  4,  3   )     int  ->  r15         "Inline stloc first use temp"
-;* V11 tmp9         [V11    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.Span`1[System.Numerics.Vector`1[float]]>
-;* V12 tmp10        [V12    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;  V13 tmp11        [V13,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
-;  V14 tmp12        [V14,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
-;* V15 tmp13        [V15    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V16 tmp14        [V16    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
-;* V17 tmp15        [V17    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
-;* V18 tmp16        [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;* V19 tmp17        [V19    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
-;* V20 tmp18        [V20    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V21 tmp19        [V21    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V22 tmp20        [V22,T05] (  3,  2   )   byref  ->  rbx         "field V05._reference (fldOffset=0x0)" P-INDEP
-;  V23 tmp21        [V23,T06] (  3,  2   )     int  ->  rsi         "field V05._length (fldOffset=0x8)" P-INDEP
-;  V24 tmp22        [V24,T07] (  2,  1.50)   byref  ->  rbx         single-def "field V08._reference (fldOffset=0x0)" P-INDEP
-;* V25 tmp23        [V25    ] (  0,  0   )     int  ->  zero-ref    "field V08._length (fldOffset=0x8)" P-INDEP
-;* V26 tmp24        [V26    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V11._reference (fldOffset=0x0)" P-INDEP
-;* V27 tmp25        [V27    ] (  0,  0   )     int  ->  zero-ref    "field V11._length (fldOffset=0x8)" P-INDEP
+;  V03 tmp1         [V03,T00] (  4,  6   )     ref  ->  rsi         class-hnd single-def "Inlining Arg" <long[]>
+;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "NewObj constructor temp" <System.ReadOnlySpan`1[long]>
+;  V05 tmp3         [V05,T04] (  3,  2   )     ref  ->  rax         class-hnd "Inline return value spill temp" <System.Numerics.Vector`1[float][]>
+;  V06 tmp4         [V06,T03] (  3,  3   )     ref  ->  r14         class-hnd exact single-def "dup spill" <System.Numerics.Vector`1[float][]>
+;* V07 tmp5         [V07    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V08 tmp6         [V08    ] (  0,  0   )   byref  ->  zero-ref    "Inlining Arg"
+;* V09 tmp7         [V09    ] (  0,  0   )    long  ->  zero-ref    "Inlining Arg"
+;* V10 tmp8         [V10    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;* V11 tmp9         [V11    ] (  0,  0   )     int  ->  zero-ref    "field V01._length (fldOffset=0x8)" P-INDEP
+;  V12 tmp10        [V12,T05] (  3,  1.50)   byref  ->  rbx         "field V04._reference (fldOffset=0x0)" P-INDEP
+;  V13 tmp11        [V13,T02] (  5,  3   )     int  ->  r15         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 8
 
 G_M51399_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
 						;; size=12 bbWeight=1 PerfScore 5.50
 G_M51399_IG02:
        mov      rsi, gword ptr [rdi+0x08]
        test     rsi, rsi
        je       SHORT G_M51399_IG04
 						;; size=9 bbWeight=1 PerfScore 3.25
 G_M51399_IG03:
        lea      rbx, bword ptr [rsi+0x10]
-       mov      esi, dword ptr [rsi+0x08]
+       mov      r15d, dword ptr [rsi+0x08]
        jmp      SHORT G_M51399_IG05
-						;; size=9 bbWeight=0.50 PerfScore 2.25
+						;; size=10 bbWeight=0.50 PerfScore 2.25
 G_M51399_IG04:
        xor      rbx, rbx
-       xor      esi, esi
-						;; size=4 bbWeight=0.50 PerfScore 0.25
+       xor      r15d, r15d
+						;; size=5 bbWeight=0.50 PerfScore 0.25
 G_M51399_IG05:
-       mov      r15d, esi
-       shl      r15, 3
-       shr      r15, 5
-       cmp      r15, 0xD1FFAB1E
-       ja       SHORT G_M51399_IG09
        test     r15d, r15d
        je       SHORT G_M51399_IG07
-						;; size=25 bbWeight=1 PerfScore 3.75
+						;; size=5 bbWeight=1 PerfScore 1.25
 G_M51399_IG06:
-       movsxd   rsi, r15d
+       mov      esi, r15d
        mov      rdi, 0xD1FFAB1E      ; System.Numerics.Vector`1[float][]
        call     CORINFO_HELP_NEWARR_1_VC
        mov      r14, rax
        mov      edx, r15d
        shl      rdx, 5
        lea      rdi, bword ptr [r14+0x10]
        mov      rsi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.SpanHelpers:Memmove(byref,byref,ulong)
        call     [rax]System.SpanHelpers:Memmove(byref,byref,ulong)
        mov      rax, r14
        jmp      SHORT G_M51399_IG08
 						;; size=52 bbWeight=0.50 PerfScore 4.38
 G_M51399_IG07:
        mov      rax, 0xD1FFAB1E      ; 'System.Numerics.Vector`1[System.Single][]'
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M51399_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M51399_IG09:
-       call     CORINFO_HELP_OVERFLOW
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 138, prolog size 12, PerfScore 22.75, instruction count 42, allocated bytes for code 138 (MethodHash=54963738) for method System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
+; Total bytes of code 114, prolog size 12, PerfScore 20.25, instruction count 35, allocated bytes for code 114 (MethodHash=54963738) for method System.Enum+EnumInfo`1[long]:CloneValues[System.Numerics.Vector`1[float]]():System.Numerics.Vector`1[float][]:this (FullOpts)
 ; ============================================================

Note: some changes were skipped as they were too large to fit into a comment.

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

@MihuBot
Copy link
Owner Author

MihuBot commented Oct 24, 2024

@xtqqczze

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant