Skip to content

Instantly share code, notes, and snippets.

@MihuBot
Created February 15, 2024 21:41
Show Gist options
  • Save MihuBot/e4a6f95db6365272d2d881a16634631b to your computer and use it in GitHub Desktop.
Save MihuBot/e4a6f95db6365272d2d881a16634631b to your computer and use it in GitHub Desktop.
JIT diffs CoreLib improvements for https://github.com/MihuBot/runtime-utils/issues/250

Top method improvements

-130 (-87.248% of base) - System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Span`1[System.Numerics.Vector`1[float]]):this
 ; Assembly listing for method System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Span`1[System.Numerics.Vector`1[float]]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T03] (  4,  6.50)     ref  ->  r15         this class-hnd single-def <System.Random>
+;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Random>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[System.Numerics.Vector`1[float]]>
-;  V02 loc0         [V02,T09] (  2,  3   )     int  ->  r13        
-;  V03 loc1         [V03,T00] (  7, 23   )     int  ->  r12        
-;  V04 loc2         [V04,T01] (  4, 12   )     int  ->  rax        
-;  V05 loc3         [V05,T10] (  2,  4   )  simd32  ->  mm0         <System.Numerics.Vector`1[float]>
-;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V07 tmp1         [V07,T04] (  3,  5   )   byref  ->  r14         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp2         [V08,T02] (  4,  7   )     int  ->  rbx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V09 cse0         [V09,T05] (  3,  6   )   byref  ->  rcx         "CSE - aggressive"
-;  V10 cse1         [V10,T06] (  3,  6   )   byref  ->  rax         "CSE - aggressive"
-;  V11 cse2         [V11,T08] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - aggressive"
-;  V12 cse3         [V12,T07] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - aggressive"
+;# 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    ld-addr-op "Inlining Arg" <System.Span`1[System.Numerics.Vector`1[float]]>
+;  V04 tmp2         [V04,T01] (  2,  2   )   byref  ->  rsi         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V05 tmp3         [V05,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V06 tmp4         [V06    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M45852_IG01:
-       push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
-       mov      r15, rdi
-       mov      r14, rsi
-       mov      ebx, edx
-						;; size=27 bbWeight=1 PerfScore 7.50
+       push     rax
+						;; size=1 bbWeight=1 PerfScore 1.00
 G_M45852_IG02:
-       mov      r13d, ebx
-       xor      r12d, r12d
-       lea      eax, [rbx-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M45852_IG07
-						;; size=16 bbWeight=1 PerfScore 3.25
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.Numerics.Vector`1[float]](byref,int):this
+       call     [rax]System.Random:Shuffle[System.Numerics.Vector`1[float]](byref,int):this
+       nop      
+						;; size=13 bbWeight=1 PerfScore 3.50
 G_M45852_IG03:
-       mov      rdi, qword ptr [r15]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
-G_M45852_IG04:
-       mov      rdi, r15
-       mov      esi, r12d
-       mov      edx, ebx
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M45852_IG06
-						;; size=16 bbWeight=4 PerfScore 20.00
-G_M45852_IG05:
-       mov      ecx, r12d
-       shl      rcx, 5
-       add      rcx, r14
-       vmovups  ymm0, ymmword ptr [rcx]
-       cmp      eax, r13d
-       jae      SHORT G_M45852_IG08
-       mov      eax, eax
-       shl      rax, 5
-       add      rax, r14
-       vmovups  ymm1, ymmword ptr [rax]
-       vmovups  ymmword ptr [rcx], ymm1
-       vmovups  ymmword ptr [rax], ymm0
-						;; size=40 bbWeight=2 PerfScore 34.50
-G_M45852_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M45852_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M45852_IG07:
-       vzeroupper 
-       add      rsp, 24
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
-       pop      rbp
+       add      rsp, 8
        ret      
-						;; size=18 bbWeight=1 PerfScore 5.25
-G_M45852_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=5 bbWeight=1 PerfScore 1.25
 
-; Total bytes of code 149, prolog size 19, PerfScore 87.00, instruction count 54, allocated bytes for code 149 (MethodHash=07bd4ce3) for method System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Span`1[System.Numerics.Vector`1[float]]):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=07bd4ce3) for method System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Span`1[System.Numerics.Vector`1[float]]):this (FullOpts)
-127 (-86.986% of base) - System.Random:Shuffle[System.Nullable`1[int]](System.Span`1[System.Nullable`1[int]]):this
 ; Assembly listing for method System.Random:Shuffle[System.Nullable`1[int]](System.Span`1[System.Nullable`1[int]]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T05] (  4,  6.50)     ref  ->  r15         this class-hnd single-def <System.Random>
+;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Random>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[System.Nullable`1[int]]>
-;  V02 loc0         [V02,T13] (  2,  3   )     int  ->  r13        
-;  V03 loc1         [V03,T00] (  7, 23   )     int  ->  r12        
-;  V04 loc2         [V04,T01] (  4, 12   )     int  ->  rax        
-;* V05 loc3         [V05    ] (  0,  0   )  struct ( 8) zero-ref    <System.Nullable`1[int]>
-;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V07 tmp1         [V07,T06] (  3,  5   )   byref  ->  r14         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp2         [V08,T04] (  4,  7   )     int  ->  rbx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V09 tmp3         [V09,T11] (  2,  4   )   ubyte  ->  rdi         "field V05.hasValue (fldOffset=0x0)" P-INDEP
-;  V10 tmp4         [V10,T12] (  2,  4   )     int  ->  rdx         "field V05.value (fldOffset=0x4)" P-INDEP
-;  V11 tmp5         [V11,T02] (  3, 12   )   byref  ->  rdx         "BlockOp address local"
-;  V12 tmp6         [V12,T03] (  3, 12   )   byref  ->  rax         "BlockOp address local"
-;  V13 cse0         [V13,T07] (  3,  6   )   byref  ->  rcx         "CSE - moderate"
-;  V14 cse1         [V14,T08] (  3,  6   )   byref  ->  rax         "CSE - moderate"
-;  V15 cse2         [V15,T10] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - moderate"
-;  V16 cse3         [V16,T09] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - moderate"
+;# 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    ld-addr-op "Inlining Arg" <System.Span`1[System.Nullable`1[int]]>
+;  V04 tmp2         [V04,T01] (  2,  2   )   byref  ->  rsi         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V05 tmp3         [V05,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V06 tmp4         [V06    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M4412_IG01:
-       push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
-       mov      r15, rdi
-       mov      r14, rsi
-       mov      ebx, edx
-						;; size=27 bbWeight=1 PerfScore 7.50
+       push     rax
+						;; size=1 bbWeight=1 PerfScore 1.00
 G_M4412_IG02:
-       mov      r13d, ebx
-       xor      r12d, r12d
-       lea      eax, [rbx-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M4412_IG07
-						;; size=16 bbWeight=1 PerfScore 3.25
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.Nullable`1[int]](byref,int):this
+       call     [rax]System.Random:Shuffle[System.Nullable`1[int]](byref,int):this
+       nop      
+						;; size=13 bbWeight=1 PerfScore 3.50
 G_M4412_IG03:
-       mov      rdi, qword ptr [r15]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
-G_M4412_IG04:
-       mov      rdi, r15
-       mov      esi, r12d
-       mov      edx, ebx
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M4412_IG06
-						;; size=16 bbWeight=4 PerfScore 20.00
-G_M4412_IG05:
-       mov      ecx, r12d
-       lea      rcx, bword ptr [r14+8*rcx]
-       mov      rdx, rcx
-       movzx    rdi, byte  ptr [rdx]
-       mov      edx, dword ptr [rdx+0x04]
-       cmp      eax, r13d
-       jae      SHORT G_M4412_IG08
-       mov      eax, eax
-       lea      rax, bword ptr [r14+8*rax]
-       mov      rsi, qword ptr [rax]
-       mov      qword ptr [rcx], rsi
-       mov      byte  ptr [rax], dil
-       mov      dword ptr [rax+0x04], edx
-						;; size=40 bbWeight=2 PerfScore 24.00
-G_M4412_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M4412_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M4412_IG07:
-       add      rsp, 24
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
-       pop      rbp
+       add      rsp, 8
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M4412_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=5 bbWeight=1 PerfScore 1.25
 
-; Total bytes of code 146, prolog size 19, PerfScore 75.50, instruction count 54, allocated bytes for code 146 (MethodHash=f6feeec3) for method System.Random:Shuffle[System.Nullable`1[int]](System.Span`1[System.Nullable`1[int]]):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=f6feeec3) for method System.Random:Shuffle[System.Nullable`1[int]](System.Span`1[System.Nullable`1[int]]):this (FullOpts)
-120 (-86.331% of base) - System.Random:Shuffle[double](System.Span`1[double]):this
 ; Assembly listing for method System.Random:Shuffle[double](System.Span`1[double]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T04] (  4,  6.50)     ref  ->  r14         this class-hnd single-def <System.Random>
+;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Random>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[double]>
-;  V02 loc0         [V02,T09] (  2,  3   )     int  ->  r13        
-;  V03 loc1         [V03,T00] (  7, 23   )     int  ->  r12        
-;  V04 loc2         [V04,T01] (  4, 12   )     int  ->  rax        
-;  V05 loc3         [V05,T10] (  2,  4   )  double  ->  mm0        
-;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V07 tmp1         [V07,T02] (  5,  9   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp2         [V08,T03] (  4,  7   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V09 cse0         [V09,T08] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - aggressive"
-;  V10 cse1         [V10,T05] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - aggressive"
-;  V11 cse2         [V11,T06] (  3,  6   )    long  ->  rcx         "CSE - aggressive"
-;  V12 cse3         [V12,T07] (  3,  6   )    long  ->  rax         "CSE - aggressive"
+;# 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    ld-addr-op "Inlining Arg" <System.Span`1[double]>
+;  V04 tmp2         [V04,T01] (  2,  2   )   byref  ->  rsi         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V05 tmp3         [V05,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V06 tmp4         [V06    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M20668_IG01:
-       push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
-       mov      r14, rdi
-       mov      rbx, rsi
-       mov      r15d, edx
-						;; size=28 bbWeight=1 PerfScore 7.50
+       push     rax
+						;; size=1 bbWeight=1 PerfScore 1.00
 G_M20668_IG02:
-       mov      r13d, r15d
-       xor      r12d, r12d
-       lea      eax, [r15-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M20668_IG07
-						;; size=17 bbWeight=1 PerfScore 3.25
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[double](byref,int):this
+       call     [rax]System.Random:Shuffle[double](byref,int):this
+       nop      
+						;; size=13 bbWeight=1 PerfScore 3.50
 G_M20668_IG03:
-       mov      rdi, qword ptr [r14]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
-G_M20668_IG04:
-       mov      rdi, r14
-       mov      esi, r12d
-       mov      edx, r15d
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M20668_IG06
-						;; size=17 bbWeight=4 PerfScore 20.00
-G_M20668_IG05:
-       mov      ecx, r12d
-       vmovsd   xmm0, qword ptr [rbx+8*rcx]
-       cmp      eax, r13d
-       jae      SHORT G_M20668_IG08
-       mov      eax, eax
-       vmovsd   xmm1, qword ptr [rbx+8*rax]
-       vmovsd   qword ptr [rbx+8*rcx], xmm1
-       vmovsd   qword ptr [rbx+8*rax], xmm0
-						;; size=30 bbWeight=2 PerfScore 27.50
-G_M20668_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M20668_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M20668_IG07:
-       add      rsp, 24
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
-       pop      rbp
+       add      rsp, 8
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M20668_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=5 bbWeight=1 PerfScore 1.25
 
-; Total bytes of code 139, prolog size 19, PerfScore 79.00, instruction count 49, allocated bytes for code 139 (MethodHash=621baf43) for method System.Random:Shuffle[double](System.Span`1[double]):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=621baf43) for method System.Random:Shuffle[double](System.Span`1[double]):this (FullOpts)
-118 (-86.131% of base) - System.Random:Shuffle[short](System.Span`1[short]):this
 ; Assembly listing for method System.Random:Shuffle[short](System.Span`1[short]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T04] (  4,  6.50)     ref  ->  r14         this class-hnd single-def <System.Random>
+;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Random>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[short]>
-;  V02 loc0         [V02,T10] (  2,  3   )     int  ->  r13        
-;  V03 loc1         [V03,T00] (  7, 23   )     int  ->  r12        
-;  V04 loc2         [V04,T01] (  4, 12   )     int  ->  rax        
-;  V05 loc3         [V05,T09] (  2,  4   )   short  ->  rdx        
-;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V07 tmp1         [V07,T02] (  5,  9   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp2         [V08,T03] (  4,  7   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V09 cse0         [V09,T08] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - aggressive"
-;  V10 cse1         [V10,T05] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - aggressive"
-;  V11 cse2         [V11,T06] (  3,  6   )    long  ->  rcx         "CSE - aggressive"
-;  V12 cse3         [V12,T07] (  3,  6   )    long  ->  rax         "CSE - aggressive"
+;# 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    ld-addr-op "Inlining Arg" <System.Span`1[short]>
+;  V04 tmp2         [V04,T01] (  2,  2   )   byref  ->  rsi         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V05 tmp3         [V05,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V06 tmp4         [V06    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M32252_IG01:
-       push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
-       mov      r14, rdi
-       mov      rbx, rsi
-       mov      r15d, edx
-						;; size=28 bbWeight=1 PerfScore 7.50
+       push     rax
+						;; size=1 bbWeight=1 PerfScore 1.00
 G_M32252_IG02:
-       mov      r13d, r15d
-       xor      r12d, r12d
-       lea      eax, [r15-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M32252_IG07
-						;; size=17 bbWeight=1 PerfScore 3.25
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[short](byref,int):this
+       call     [rax]System.Random:Shuffle[short](byref,int):this
+       nop      
+						;; size=13 bbWeight=1 PerfScore 3.50
 G_M32252_IG03:
-       mov      rdi, qword ptr [r14]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
-G_M32252_IG04:
-       mov      rdi, r14
-       mov      esi, r12d
-       mov      edx, r15d
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M32252_IG06
-						;; size=17 bbWeight=4 PerfScore 20.00
-G_M32252_IG05:
-       mov      ecx, r12d
-       movsx    rdx, word  ptr [rbx+2*rcx]
-       cmp      eax, r13d
-       jae      SHORT G_M32252_IG08
-       mov      eax, eax
-       movsx    rdi, word  ptr [rbx+2*rax]
-       mov      word  ptr [rbx+2*rcx], di
-       mov      word  ptr [rbx+2*rax], dx
-						;; size=28 bbWeight=2 PerfScore 23.50
-G_M32252_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M32252_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M32252_IG07:
-       add      rsp, 24
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
-       pop      rbp
+       add      rsp, 8
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M32252_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=5 bbWeight=1 PerfScore 1.25
 
-; Total bytes of code 137, prolog size 19, PerfScore 75.00, instruction count 49, allocated bytes for code 137 (MethodHash=89df8203) for method System.Random:Shuffle[short](System.Span`1[short]):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=89df8203) for method System.Random:Shuffle[short](System.Span`1[short]):this (FullOpts)
-116 (-85.926% of base) - System.Random:Shuffle[long](System.Span`1[long]):this
 ; Assembly listing for method System.Random:Shuffle[long](System.Span`1[long]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T04] (  4,  6.50)     ref  ->  r14         this class-hnd single-def <System.Random>
+;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Random>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[long]>
-;  V02 loc0         [V02,T10] (  2,  3   )     int  ->  r13        
-;  V03 loc1         [V03,T00] (  7, 23   )     int  ->  r12        
-;  V04 loc2         [V04,T01] (  4, 12   )     int  ->  rax        
-;  V05 loc3         [V05,T09] (  2,  4   )    long  ->  rdx        
-;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V07 tmp1         [V07,T02] (  5,  9   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp2         [V08,T03] (  4,  7   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V09 cse0         [V09,T08] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - aggressive"
-;  V10 cse1         [V10,T05] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - aggressive"
-;  V11 cse2         [V11,T06] (  3,  6   )    long  ->  rcx         "CSE - aggressive"
-;  V12 cse3         [V12,T07] (  3,  6   )    long  ->  rax         "CSE - aggressive"
+;# 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    ld-addr-op "Inlining Arg" <System.Span`1[long]>
+;  V04 tmp2         [V04,T01] (  2,  2   )   byref  ->  rsi         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V05 tmp3         [V05,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V06 tmp4         [V06    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M2428_IG01:
-       push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
-       mov      r14, rdi
-       mov      rbx, rsi
-       mov      r15d, edx
-						;; size=28 bbWeight=1 PerfScore 7.50
+       push     rax
+						;; size=1 bbWeight=1 PerfScore 1.00
 G_M2428_IG02:
-       mov      r13d, r15d
-       xor      r12d, r12d
-       lea      eax, [r15-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M2428_IG07
-						;; size=17 bbWeight=1 PerfScore 3.25
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[long](byref,int):this
+       call     [rax]System.Random:Shuffle[long](byref,int):this
+       nop      
+						;; size=13 bbWeight=1 PerfScore 3.50
 G_M2428_IG03:
-       mov      rdi, qword ptr [r14]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
-G_M2428_IG04:
-       mov      rdi, r14
-       mov      esi, r12d
-       mov      edx, r15d
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M2428_IG06
-						;; size=17 bbWeight=4 PerfScore 20.00
-G_M2428_IG05:
-       mov      ecx, r12d
-       mov      rdx, qword ptr [rbx+8*rcx]
-       cmp      eax, r13d
-       jae      SHORT G_M2428_IG08
-       mov      eax, eax
-       mov      rdi, qword ptr [rbx+8*rax]
-       mov      qword ptr [rbx+8*rcx], rdi
-       mov      qword ptr [rbx+8*rax], rdx
-						;; size=26 bbWeight=2 PerfScore 15.50
-G_M2428_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M2428_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M2428_IG07:
-       add      rsp, 24
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
-       pop      rbp
+       add      rsp, 8
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M2428_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=5 bbWeight=1 PerfScore 1.25
 
-; Total bytes of code 135, prolog size 19, PerfScore 67.00, instruction count 49, allocated bytes for code 135 (MethodHash=0961f683) for method System.Random:Shuffle[long](System.Span`1[long]):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=0961f683) for method System.Random:Shuffle[long](System.Span`1[long]):this (FullOpts)
-116 (-85.926% of base) - System.Random:Shuffle[ubyte](System.Span`1[ubyte]):this
 ; Assembly listing for method System.Random:Shuffle[ubyte](System.Span`1[ubyte]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T04] (  4,  6.50)     ref  ->  r14         this class-hnd single-def <System.Random>
+;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Random>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[ubyte]>
-;  V02 loc0         [V02,T10] (  2,  3   )     int  ->  r13        
-;  V03 loc1         [V03,T00] (  7, 23   )     int  ->  r12        
-;  V04 loc2         [V04,T01] (  4, 12   )     int  ->  rax        
-;  V05 loc3         [V05,T09] (  2,  4   )   ubyte  ->  rdx        
-;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V07 tmp1         [V07,T02] (  5,  9   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp2         [V08,T03] (  4,  7   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V09 cse0         [V09,T08] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - aggressive"
-;  V10 cse1         [V10,T05] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - aggressive"
-;  V11 cse2         [V11,T06] (  3,  6   )    long  ->  rcx         "CSE - aggressive"
-;  V12 cse3         [V12,T07] (  3,  6   )    long  ->  rax         "CSE - aggressive"
+;# 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    ld-addr-op "Inlining Arg" <System.Span`1[ubyte]>
+;  V04 tmp2         [V04,T01] (  2,  2   )   byref  ->  rsi         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V05 tmp3         [V05,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V06 tmp4         [V06    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M13980_IG01:
-       push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
-       mov      r14, rdi
-       mov      rbx, rsi
-       mov      r15d, edx
-						;; size=28 bbWeight=1 PerfScore 7.50
+       push     rax
+						;; size=1 bbWeight=1 PerfScore 1.00
 G_M13980_IG02:
-       mov      r13d, r15d
-       xor      r12d, r12d
-       lea      eax, [r15-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M13980_IG07
-						;; size=17 bbWeight=1 PerfScore 3.25
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[ubyte](byref,int):this
+       call     [rax]System.Random:Shuffle[ubyte](byref,int):this
+       nop      
+						;; size=13 bbWeight=1 PerfScore 3.50
 G_M13980_IG03:
-       mov      rdi, qword ptr [r14]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
-G_M13980_IG04:
-       mov      rdi, r14
-       mov      esi, r12d
-       mov      edx, r15d
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M13980_IG06
-						;; size=17 bbWeight=4 PerfScore 20.00
-G_M13980_IG05:
-       mov      ecx, r12d
-       movzx    rdx, byte  ptr [rbx+rcx]
-       cmp      eax, r13d
-       jae      SHORT G_M13980_IG08
-       mov      eax, eax
-       movzx    rdi, byte  ptr [rbx+rax]
-       mov      byte  ptr [rbx+rcx], dil
-       mov      byte  ptr [rbx+rax], dl
-						;; size=26 bbWeight=2 PerfScore 15.50
-G_M13980_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M13980_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M13980_IG07:
-       add      rsp, 24
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
-       pop      rbp
+       add      rsp, 8
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M13980_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=5 bbWeight=1 PerfScore 1.25
 
-; Total bytes of code 135, prolog size 19, PerfScore 67.00, instruction count 49, allocated bytes for code 135 (MethodHash=637dc963) for method System.Random:Shuffle[ubyte](System.Span`1[ubyte]):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=637dc963) for method System.Random:Shuffle[ubyte](System.Span`1[ubyte]):this (FullOpts)
-112 (-85.496% of base) - System.Random:Shuffle[int](System.Span`1[int]):this
 ; Assembly listing for method System.Random:Shuffle[int](System.Span`1[int]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
-; rbp based frame
+; rsp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T04] (  4,  6.50)     ref  ->  r14         this class-hnd single-def <System.Random>
+;  V00 this         [V00,T00] (  3,  3   )     ref  ->  rdi         this class-hnd single-def <System.Random>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[int]>
-;  V02 loc0         [V02,T10] (  2,  3   )     int  ->  r13        
-;  V03 loc1         [V03,T00] (  7, 23   )     int  ->  r12        
-;  V04 loc2         [V04,T01] (  4, 12   )     int  ->  rax        
-;  V05 loc3         [V05,T09] (  2,  4   )     int  ->  rdx        
-;# V06 OutArgs      [V06    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V07 tmp1         [V07,T02] (  5,  9   )   byref  ->  rbx         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp2         [V08,T03] (  4,  7   )     int  ->  r15         single-def "field V01._length (fldOffset=0x8)" P-INDEP
-;  V09 cse0         [V09,T08] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - aggressive"
-;  V10 cse1         [V10,T05] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - aggressive"
-;  V11 cse2         [V11,T06] (  3,  6   )    long  ->  rcx         "CSE - aggressive"
-;  V12 cse3         [V12,T07] (  3,  6   )    long  ->  rax         "CSE - aggressive"
+;# 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    ld-addr-op "Inlining Arg" <System.Span`1[int]>
+;  V04 tmp2         [V04,T01] (  2,  2   )   byref  ->  rsi         single-def "field V01._reference (fldOffset=0x0)" P-INDEP
+;  V05 tmp3         [V05,T02] (  2,  2   )     int  ->  rdx         single-def "field V01._length (fldOffset=0x8)" P-INDEP
+;* V06 tmp4         [V06    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V03._reference (fldOffset=0x0)" P-INDEP
+;* V07 tmp5         [V07    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
 ;
-; Lcl frame size = 24
+; Lcl frame size = 8
 
 G_M28188_IG01:
-       push     rbp
-       push     r15
-       push     r14
-       push     r13
-       push     r12
-       push     rbx
-       sub      rsp, 24
-       lea      rbp, [rsp+0x40]
-       mov      r14, rdi
-       mov      rbx, rsi
-       mov      r15d, edx
-						;; size=28 bbWeight=1 PerfScore 7.50
+       push     rax
+						;; size=1 bbWeight=1 PerfScore 1.00
 G_M28188_IG02:
-       mov      r13d, r15d
-       xor      r12d, r12d
-       lea      eax, [r15-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M28188_IG07
-						;; size=17 bbWeight=1 PerfScore 3.25
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[int](byref,int):this
+       call     [rax]System.Random:Shuffle[int](byref,int):this
+       nop      
+						;; size=13 bbWeight=1 PerfScore 3.50
 G_M28188_IG03:
-       mov      rdi, qword ptr [r14]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
-G_M28188_IG04:
-       mov      rdi, r14
-       mov      esi, r12d
-       mov      edx, r15d
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M28188_IG06
-						;; size=17 bbWeight=4 PerfScore 20.00
-G_M28188_IG05:
-       mov      ecx, r12d
-       mov      edx, dword ptr [rbx+4*rcx]
-       cmp      eax, r13d
-       jae      SHORT G_M28188_IG08
-       mov      eax, eax
-       mov      edi, dword ptr [rbx+4*rax]
-       mov      dword ptr [rbx+4*rcx], edi
-       mov      dword ptr [rbx+4*rax], edx
-						;; size=22 bbWeight=2 PerfScore 15.50
-G_M28188_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M28188_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M28188_IG07:
-       add      rsp, 24
-       pop      rbx
-       pop      r12
-       pop      r13
-       pop      r14
-       pop      r15
-       pop      rbp
+       add      rsp, 8
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M28188_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=5 bbWeight=1 PerfScore 1.25
 
-; Total bytes of code 131, prolog size 19, PerfScore 67.00, instruction count 49, allocated bytes for code 131 (MethodHash=13c891e3) for method System.Random:Shuffle[int](System.Span`1[int]):this (FullOpts)
+; Total bytes of code 19, prolog size 1, PerfScore 5.75, instruction count 6, allocated bytes for code 19 (MethodHash=13c891e3) for method System.Random:Shuffle[int](System.Span`1[int]):this (FullOpts)
-64 (-39.752% of base) - System.Random:Shuffle[System.__Canon](System.Span`1[System.__Canon]):this
 ; Assembly listing for method System.Random:Shuffle[System.__Canon](System.Span`1[System.__Canon]):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; 1 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T04] (  4,  6.50)     ref  ->  r14         this class-hnd single-def <System.Random>
-;* V01 TypeCtx      [V01    ] (  0,  0   )    long  ->  zero-ref    single-def
+;  V00 this         [V00,T02] (  3,  3   )     ref  ->  rbx         this class-hnd single-def <System.Random>
+;  V01 TypeCtx      [V01,T00] (  5,  4.20)    long  ->  rsi         single-def
 ;* V02 arg1         [V02    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op single-def <System.Span`1[System.__Canon]>
-;  V03 loc0         [V03,T10] (  2,  3   )     int  ->  r13        
-;  V04 loc1         [V04,T00] (  7, 23   )     int  ->  r12        
-;  V05 loc2         [V05,T01] (  4, 12   )     int  ->  rax        
-;  V06 loc3         [V06,T09] (  2,  4   )     ref  ->  [rbp-0x48]  class-hnd spill-single-def <System.__Canon>
-;# V07 OutArgs      [V07    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V08 tmp1         [V08,T02] (  5,  9   )   byref  ->  rbx         single-def "field V02._reference (fldOffset=0x0)" P-INDEP
-;  V09 tmp2         [V09,T03] (  4,  7   )     int  ->  r15         single-def "field V02._length (fldOffset=0x8)" P-INDEP
-;  V10 cse0         [V10,T08] (  2,  4.50)    long  ->  [rbp-0x30]  spill-single-def hoist "CSE - aggressive"
-;  V11 cse1         [V11,T05] (  3,  6   )     int  ->  [rbp-0x34]  spill-single-def "CSE - aggressive"
-;  V12 cse2         [V12,T06] (  3,  6   )    long  ->  rdi         "CSE - aggressive"
-;  V13 cse3         [V13,T07] (  3,  6   )    long  ->  [rbp-0x40]  spill-single-def "CSE - aggressive"
+;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
+;* V04 tmp1         [V04    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V05 tmp2         [V05    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op "Inlining Arg" <System.Span`1[System.__Canon]>
+;  V07 tmp4         [V07,T04] (  2,  2   )   byref  ->  r15         single-def "field V02._reference (fldOffset=0x0)" P-INDEP
+;  V08 tmp5         [V08,T05] (  2,  2   )     int  ->  r14         single-def "field V02._length (fldOffset=0x8)" P-INDEP
+;* V09 tmp6         [V09    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V06._reference (fldOffset=0x0)" P-INDEP
+;* V10 tmp7         [V10    ] (  0,  0   )     int  ->  zero-ref    "field V06._length (fldOffset=0x8)" P-INDEP
+;  V11 tmp8         [V11,T06] (  2,  4   )    long  ->  rsi         "argument with side effect"
+;  V12 rat0         [V12,T03] (  3,  4   )    long  ->  rsi         "runtime lookup"
+;  V13 rat1         [V13,T01] (  3,  5.60)    long  ->  rax         "fgMakeTemp is creating a new local variable"
 ;
-; Lcl frame size = 40
+; Lcl frame size = 8
 
 G_M43260_IG01:
        push     rbp
        push     r15
        push     r14
-       push     r13
-       push     r12
        push     rbx
-       sub      rsp, 40
-       lea      rbp, [rsp+0x50]
-       mov      r14, rdi
-       mov      rbx, rdx
-       mov      r15d, ecx
-						;; size=28 bbWeight=1 PerfScore 7.50
+       push     rax
+       lea      rbp, [rsp+0x20]
+       mov      qword ptr [rbp-0x20], rsi
+       mov      rbx, rdi
+       mov      r15, rdx
+       mov      r14d, ecx
+						;; size=25 bbWeight=1 PerfScore 7.25
 G_M43260_IG02:
-       mov      r13d, r15d
-       xor      r12d, r12d
-       lea      eax, [r15-0x01]
-       mov      dword ptr [rbp-0x34], eax
-       test     eax, eax
-       jle      SHORT G_M43260_IG07
-						;; size=17 bbWeight=1 PerfScore 3.25
+       mov      rdi, qword ptr [rsi+0x10]
+       mov      rax, qword ptr [rdi+0x18]
+       test     rax, rax
+       je       SHORT G_M43260_IG04
+						;; size=13 bbWeight=1 PerfScore 5.25
 G_M43260_IG03:
-       mov      rdi, qword ptr [r14]
-       mov      rcx, qword ptr [rdi+0x40]
-       mov      qword ptr [rbp-0x30], rcx
-						;; size=11 bbWeight=0.50 PerfScore 2.50
+       mov      rsi, rax
+       jmp      SHORT G_M43260_IG05
+						;; size=5 bbWeight=0.80 PerfScore 1.80
 G_M43260_IG04:
-       mov      rdi, r14
-       mov      esi, r12d
-       mov      edx, r15d
-       call     [rcx+0x30]System.Random:Next(int,int):int:this
-       cmp      eax, r12d
-       je       SHORT G_M43260_IG06
-						;; size=17 bbWeight=4 PerfScore 20.00
+       mov      rdi, rsi
+       mov      rsi, 0xD1FFAB1E      ; global ptr
+       call     CORINFO_HELP_RUNTIMEHANDLE_METHOD
+       mov      rsi, rax
+						;; size=21 bbWeight=0.20 PerfScore 0.35
 G_M43260_IG05:
-       mov      edi, r12d
-       mov      rcx, gword ptr [rbx+8*rdi]
-       mov      gword ptr [rbp-0x48], rcx
-       lea      rdi, bword ptr [rbx+8*rdi]
-       cmp      eax, r13d
-       jae      SHORT G_M43260_IG08
-       mov      eax, eax
-       mov      qword ptr [rbp-0x40], rax
-       mov      rsi, gword ptr [rbx+8*rax]
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-       mov      rdi, qword ptr [rbp-0x40]
-       lea      rdi, bword ptr [rbx+8*rdi]
-       mov      rsi, gword ptr [rbp-0x48]
-       call     CORINFO_HELP_CHECKED_ASSIGN_REF
-						;; size=52 bbWeight=2 PerfScore 25.50
+       mov      rdi, rbx
+       mov      rdx, r15
+       mov      ecx, r14d
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.__Canon](byref,int):this
+       call     [rax]System.Random:Shuffle[System.__Canon](byref,int):this
+       nop      
+						;; size=22 bbWeight=1 PerfScore 4.25
 G_M43260_IG06:
-       inc      r12d
-       mov      eax, dword ptr [rbp-0x34]
-       cmp      r12d, eax
-       mov      rcx, qword ptr [rbp-0x30]
-       jl       SHORT G_M43260_IG04
-						;; size=15 bbWeight=4 PerfScore 14.00
-G_M43260_IG07:
-       add      rsp, 40
+       add      rsp, 8
        pop      rbx
-       pop      r12
-       pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=15 bbWeight=1 PerfScore 4.25
-G_M43260_IG08:
-       call     CORINFO_HELP_RNGCHKFAIL
-       int3     
-						;; size=6 bbWeight=0 PerfScore 0.00
+						;; size=11 bbWeight=1 PerfScore 3.25
 
-; Total bytes of code 161, prolog size 19, PerfScore 77.00, instruction count 55, allocated bytes for code 161 (MethodHash=d6715703) for method System.Random:Shuffle[System.__Canon](System.Span`1[System.__Canon]):this (FullOpts)
+; Total bytes of code 97, prolog size 16, PerfScore 22.15, instruction count 32, allocated bytes for code 97 (MethodHash=d6715703) for method System.Random:Shuffle[System.__Canon](System.Span`1[System.__Canon]):this (FullOpts)
-61 (-33.516% of base) - System.Random:Shuffle[System.__Canon](System.__Canon[]):this
 ; Assembly listing for method System.Random:Shuffle[System.__Canon](System.__Canon[]):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T04] (  3,  3   )     ref  ->  r14         this class-hnd single-def <System.Random>
-;  V01 TypeCtx      [V01,T00] (  7,  5.40)    long  ->  rbx         single-def
-;  V02 arg1         [V02,T01] (  4,  4   )     ref  ->  r15         class-hnd single-def <System.__Canon[]>
+;  V00 this         [V00,T03] (  3,  3   )     ref  ->  r14         this class-hnd single-def <System.Random>
+;  V01 TypeCtx      [V01,T01] (  5,  4.20)    long  ->  r15         single-def
+;  V02 arg1         [V02,T00] (  6,  6   )     ref  ->  rbx         class-hnd single-def <System.__Canon[]>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-;  V04 tmp1         [V04,T05] (  3,  4   )    long  ->  r13         "spilling helperCall"
-;  V05 tmp2         [V05,T06] (  3,  4   )    long  ->  r12         "spilling helperCall"
-;* V06 tmp3         [V06    ] (  0,  0   )  struct (16) zero-ref    multireg-arg multireg-ret "spilled call-like call argument" <System.Span`1[System.__Canon]>
-;  V07 tmp4         [V07,T07] (  2,  2   )   byref  ->  rax         "field V06._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp5         [V08,T08] (  2,  2   )     int  ->  rcx         "field V06._length (fldOffset=0x8)" P-INDEP
-;  V09 rat0         [V09,T02] (  3,  5.60)    long  ->  r13         "fgMakeTemp is creating a new local variable"
-;  V10 rat1         [V10,T03] (  3,  5.60)    long  ->  r12         "fgMakeTemp is creating a new local variable"
+;* V04 tmp1         [V04    ] (  0,  0   )    long  ->  zero-ref    "spilling helperCall"
+;  V05 tmp2         [V05,T05] (  2,  4   )    long  ->  rsi         "argument with side effect"
+;  V06 rat0         [V06,T04] (  3,  4   )    long  ->  rsi         "runtime lookup"
+;  V07 rat1         [V07,T02] (  3,  5.60)    long  ->  rsi         "fgMakeTemp is creating a new local variable"
 ;
 ; Lcl frame size = 8
 
 G_M57994_IG01:
        push     rbp
        push     r15
        push     r14
-       push     r13
-       push     r12
        push     rbx
        push     rax
-       lea      rbp, [rsp+0x30]
-       mov      qword ptr [rbp-0x30], rsi
+       lea      rbp, [rsp+0x20]
+       mov      qword ptr [rbp-0x20], rsi
        mov      r14, rdi
-       mov      rbx, rsi
-       mov      r15, rdx
-						;; size=29 bbWeight=1 PerfScore 9.25
+       mov      r15, rsi
+       mov      rbx, rdx
+						;; size=25 bbWeight=1 PerfScore 7.25
 G_M57994_IG02:
-       mov      rdi, r15
+       mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       mov      rdi, qword ptr [rbx+0x10]
-       mov      r13, qword ptr [rdi+0x10]
-       test     r13, r13
+       cmp      byte  ptr [rbx], bl
+       mov      rdi, qword ptr [r15+0x10]
+       mov      rsi, qword ptr [rdi+0x10]
+       test     rsi, rsi
        je       SHORT G_M57994_IG04
-						;; size=38 bbWeight=1 PerfScore 9.00
+						;; size=40 bbWeight=1 PerfScore 12.00
 G_M57994_IG03:
        jmp      SHORT G_M57994_IG05
 						;; size=2 bbWeight=0.80 PerfScore 1.60
 G_M57994_IG04:
-       mov      rdi, rbx
+       mov      rdi, r15
        mov      rsi, 0xD1FFAB1E      ; global ptr
        call     CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       mov      r13, rax
+       mov      rsi, rax
 						;; size=21 bbWeight=0.20 PerfScore 0.35
 G_M57994_IG05:
-       mov      rdi, qword ptr [rbx+0x10]
-       mov      r12, qword ptr [rdi+0x18]
-       test     r12, r12
-       je       SHORT G_M57994_IG07
-						;; size=13 bbWeight=1 PerfScore 5.25
-G_M57994_IG06:
-       jmp      SHORT G_M57994_IG08
-						;; size=2 bbWeight=0.80 PerfScore 1.60
-G_M57994_IG07:
-       mov      rdi, rbx
-       mov      rsi, 0xD1FFAB1E      ; global ptr
-       call     CORINFO_HELP_RUNTIMEHANDLE_METHOD
-       mov      r12, rax
-						;; size=21 bbWeight=0.20 PerfScore 0.35
-G_M57994_IG08:
-       mov      rdi, r13
-       mov      rsi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[]):System.Span`1[System.__Canon]
-       call     [rax]System.MemoryExtensions:AsSpan[System.__Canon](System.__Canon[]):System.Span`1[System.__Canon]
-       mov      ecx, edx
-       mov      rdx, rax
+       mov      ecx, dword ptr [rbx+0x08]
+       lea      rdx, bword ptr [rbx+0x10]
        mov      rdi, r14
-       mov      rsi, r12
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.__Canon](System.Span`1[System.__Canon]):this
-						;; size=39 bbWeight=1 PerfScore 5.00
-G_M57994_IG09:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.__Canon](byref,int):this
+						;; size=20 bbWeight=1 PerfScore 3.00
+G_M57994_IG06:
        add      rsp, 8
        pop      rbx
-       pop      r12
-       pop      r13
        pop      r14
        pop      r15
        pop      rbp
-       tail.jmp [rax]System.Random:Shuffle[System.__Canon](System.Span`1[System.__Canon]):this
-						;; size=17 bbWeight=1 PerfScore 5.25
+       tail.jmp [rax]System.Random:Shuffle[System.__Canon](byref,int):this
+						;; size=13 bbWeight=1 PerfScore 4.25
 
-; Total bytes of code 182, prolog size 20, PerfScore 37.65, instruction count 51, allocated bytes for code 182 (MethodHash=86001d75) for method System.Random:Shuffle[System.__Canon](System.__Canon[]):this (FullOpts)
+; Total bytes of code 121, prolog size 16, PerfScore 28.45, instruction count 34, allocated bytes for code 121 (MethodHash=86001d75) for method System.Random:Shuffle[System.__Canon](System.__Canon[]):this (FullOpts)
-12 (-15.190% of base) - System.Random:Shuffle[double](double[]):this
 ; Assembly listing for method System.Random:Shuffle[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; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  r15         this class-hnd single-def <System.Random>
-;  V01 arg1         [V01,T00] (  6,  5   )     ref  ->  rbx         class-hnd single-def <double[]>
+;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <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[double]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[double]>
-;* V05 tmp3         [V05    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V07 tmp5         [V07,T02] (  3,  2   )   byref  ->  rsi         "field V04._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp6         [V08,T03] (  3,  2   )     int  ->  rdx         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M49546_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M49546_IG02:
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       test     rbx, rbx
-       jne      SHORT G_M49546_IG04
-						;; size=30 bbWeight=1 PerfScore 5.00
-G_M49546_IG03:
-       xor      rsi, rsi
-       xor      edx, edx
-       jmp      SHORT G_M49546_IG05
-						;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M49546_IG04:
-       lea      rsi, bword ptr [rbx+0x10]
        mov      edx, dword ptr [rbx+0x08]
-						;; size=7 bbWeight=0.50 PerfScore 1.25
-G_M49546_IG05:
+       lea      rsi, bword ptr [rbx+0x10]
        mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[double](System.Span`1[double]):this
-       call     [rax]System.Random:Shuffle[double](System.Span`1[double]):this
-       nop      
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M49546_IG06:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[double](byref,int):this
+						;; size=45 bbWeight=1 PerfScore 6.75
+G_M49546_IG03:
        pop      rbx
        pop      r15
        pop      rbp
-       ret      
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Random:Shuffle[double](byref,int):this
+						;; size=7 bbWeight=1 PerfScore 3.50
 
-; Total bytes of code 79, prolog size 9, PerfScore 17.75, instruction count 25, allocated bytes for code 79 (MethodHash=05ec3e75) for method System.Random:Shuffle[double](double[]):this (FullOpts)
+; Total bytes of code 67, prolog size 9, PerfScore 14.25, instruction count 18, allocated bytes for code 67 (MethodHash=05ec3e75) for method System.Random:Shuffle[double](double[]):this (FullOpts)
-12 (-15.190% of base) - System.Random:Shuffle[int](int[]):this
 ; Assembly listing for method System.Random:Shuffle[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; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  r15         this class-hnd single-def <System.Random>
-;  V01 arg1         [V01,T00] (  6,  5   )     ref  ->  rbx         class-hnd single-def <int[]>
+;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <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[int]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[int]>
-;* V05 tmp3         [V05    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V07 tmp5         [V07,T02] (  3,  2   )   byref  ->  rsi         "field V04._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp6         [V08,T03] (  3,  2   )     int  ->  rdx         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M13002_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M13002_IG02:
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       test     rbx, rbx
-       jne      SHORT G_M13002_IG04
-						;; size=30 bbWeight=1 PerfScore 5.00
-G_M13002_IG03:
-       xor      rsi, rsi
-       xor      edx, edx
-       jmp      SHORT G_M13002_IG05
-						;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M13002_IG04:
-       lea      rsi, bword ptr [rbx+0x10]
        mov      edx, dword ptr [rbx+0x08]
-						;; size=7 bbWeight=0.50 PerfScore 1.25
-G_M13002_IG05:
+       lea      rsi, bword ptr [rbx+0x10]
        mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[int](System.Span`1[int]):this
-       call     [rax]System.Random:Shuffle[int](System.Span`1[int]):this
-       nop      
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M13002_IG06:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[int](byref,int):this
+						;; size=45 bbWeight=1 PerfScore 6.75
+G_M13002_IG03:
        pop      rbx
        pop      r15
        pop      rbp
-       ret      
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Random:Shuffle[int](byref,int):this
+						;; size=7 bbWeight=1 PerfScore 3.50
 
-; Total bytes of code 79, prolog size 9, PerfScore 17.75, instruction count 25, allocated bytes for code 79 (MethodHash=1989cd35) for method System.Random:Shuffle[int](int[]):this (FullOpts)
+; Total bytes of code 67, prolog size 9, PerfScore 14.25, instruction count 18, allocated bytes for code 67 (MethodHash=1989cd35) for method System.Random:Shuffle[int](int[]):this (FullOpts)
-12 (-15.190% of base) - System.Random:Shuffle[long](long[]):this
 ; Assembly listing for method System.Random:Shuffle[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; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  r15         this class-hnd single-def <System.Random>
-;  V01 arg1         [V01,T00] (  6,  5   )     ref  ->  rbx         class-hnd single-def <long[]>
+;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <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[long]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[long]>
-;* V05 tmp3         [V05    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V07 tmp5         [V07,T02] (  3,  2   )   byref  ->  rsi         "field V04._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp6         [V08,T03] (  3,  2   )     int  ->  rdx         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M5770_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M5770_IG02:
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       test     rbx, rbx
-       jne      SHORT G_M5770_IG04
-						;; size=30 bbWeight=1 PerfScore 5.00
-G_M5770_IG03:
-       xor      rsi, rsi
-       xor      edx, edx
-       jmp      SHORT G_M5770_IG05
-						;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M5770_IG04:
-       lea      rsi, bword ptr [rbx+0x10]
        mov      edx, dword ptr [rbx+0x08]
-						;; size=7 bbWeight=0.50 PerfScore 1.25
-G_M5770_IG05:
+       lea      rsi, bword ptr [rbx+0x10]
        mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[long](System.Span`1[long]):this
-       call     [rax]System.Random:Shuffle[long](System.Span`1[long]):this
-       nop      
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M5770_IG06:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[long](byref,int):this
+						;; size=45 bbWeight=1 PerfScore 6.75
+G_M5770_IG03:
        pop      rbx
        pop      r15
        pop      rbp
-       ret      
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Random:Shuffle[long](byref,int):this
+						;; size=7 bbWeight=1 PerfScore 3.50
 
-; Total bytes of code 79, prolog size 9, PerfScore 17.75, instruction count 25, allocated bytes for code 79 (MethodHash=1048e975) for method System.Random:Shuffle[long](long[]):this (FullOpts)
+; Total bytes of code 67, prolog size 9, PerfScore 14.25, instruction count 18, allocated bytes for code 67 (MethodHash=1048e975) for method System.Random:Shuffle[long](long[]):this (FullOpts)
-12 (-15.190% of base) - System.Random:Shuffle[short](short[]):this
 ; Assembly listing for method System.Random:Shuffle[short](short[]):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; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  r15         this class-hnd single-def <System.Random>
-;  V01 arg1         [V01,T00] (  6,  5   )     ref  ->  rbx         class-hnd single-def <short[]>
+;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <short[]>
 ;# 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[short]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[short]>
-;* V05 tmp3         [V05    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V07 tmp5         [V07,T02] (  3,  2   )   byref  ->  rsi         "field V04._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp6         [V08,T03] (  3,  2   )     int  ->  rdx         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M52650_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M52650_IG02:
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       test     rbx, rbx
-       jne      SHORT G_M52650_IG04
-						;; size=30 bbWeight=1 PerfScore 5.00
-G_M52650_IG03:
-       xor      rsi, rsi
-       xor      edx, edx
-       jmp      SHORT G_M52650_IG05
-						;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M52650_IG04:
-       lea      rsi, bword ptr [rbx+0x10]
        mov      edx, dword ptr [rbx+0x08]
-						;; size=7 bbWeight=0.50 PerfScore 1.25
-G_M52650_IG05:
+       lea      rsi, bword ptr [rbx+0x10]
        mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[short](System.Span`1[short]):this
-       call     [rax]System.Random:Shuffle[short](System.Span`1[short]):this
-       nop      
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M52650_IG06:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[short](byref,int):this
+						;; size=45 bbWeight=1 PerfScore 6.75
+G_M52650_IG03:
        pop      rbx
        pop      r15
        pop      rbp
-       ret      
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Random:Shuffle[short](byref,int):this
+						;; size=7 bbWeight=1 PerfScore 3.50
 
-; Total bytes of code 79, prolog size 9, PerfScore 17.75, instruction count 25, allocated bytes for code 79 (MethodHash=3d3b3255) for method System.Random:Shuffle[short](short[]):this (FullOpts)
+; Total bytes of code 67, prolog size 9, PerfScore 14.25, instruction count 18, allocated bytes for code 67 (MethodHash=3d3b3255) for method System.Random:Shuffle[short](short[]):this (FullOpts)
-12 (-15.190% of base) - System.Random:Shuffle[System.Nullable`1[int]](System.Nullable`1[int][]):this
 ; Assembly listing for method System.Random:Shuffle[System.Nullable`1[int]](System.Nullable`1[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; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  r15         this class-hnd single-def <System.Random>
-;  V01 arg1         [V01,T00] (  6,  5   )     ref  ->  rbx         class-hnd single-def <System.Nullable`1[int][]>
+;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <System.Nullable`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[System.Nullable`1[int]]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.Nullable`1[int]]>
-;* V05 tmp3         [V05    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V07 tmp5         [V07,T02] (  3,  2   )   byref  ->  rsi         "field V04._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp6         [V08,T03] (  3,  2   )     int  ->  rdx         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M15882_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M15882_IG02:
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       test     rbx, rbx
-       jne      SHORT G_M15882_IG04
-						;; size=30 bbWeight=1 PerfScore 5.00
-G_M15882_IG03:
-       xor      rsi, rsi
-       xor      edx, edx
-       jmp      SHORT G_M15882_IG05
-						;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M15882_IG04:
-       lea      rsi, bword ptr [rbx+0x10]
        mov      edx, dword ptr [rbx+0x08]
-						;; size=7 bbWeight=0.50 PerfScore 1.25
-G_M15882_IG05:
+       lea      rsi, bword ptr [rbx+0x10]
        mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.Nullable`1[int]](System.Span`1[System.Nullable`1[int]]):this
-       call     [rax]System.Random:Shuffle[System.Nullable`1[int]](System.Span`1[System.Nullable`1[int]]):this
-       nop      
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M15882_IG06:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.Nullable`1[int]](byref,int):this
+						;; size=45 bbWeight=1 PerfScore 6.75
+G_M15882_IG03:
        pop      rbx
        pop      r15
        pop      rbp
-       ret      
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Random:Shuffle[System.Nullable`1[int]](byref,int):this
+						;; size=7 bbWeight=1 PerfScore 3.50
 
-; Total bytes of code 79, prolog size 9, PerfScore 17.75, instruction count 25, allocated bytes for code 79 (MethodHash=2535c1f5) for method System.Random:Shuffle[System.Nullable`1[int]](System.Nullable`1[int][]):this (FullOpts)
+; Total bytes of code 67, prolog size 9, PerfScore 14.25, instruction count 18, allocated bytes for code 67 (MethodHash=2535c1f5) for method System.Random:Shuffle[System.Nullable`1[int]](System.Nullable`1[int][]):this (FullOpts)
-12 (-15.190% of base) - System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float][]):this
 ; Assembly listing for method System.Random:Shuffle[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; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  r15         this class-hnd single-def <System.Random>
-;  V01 arg1         [V01,T00] (  6,  5   )     ref  ->  rbx         class-hnd single-def <System.Numerics.Vector`1[float][]>
+;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <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[System.Numerics.Vector`1[float]]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[System.Numerics.Vector`1[float]]>
-;* V05 tmp3         [V05    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V07 tmp5         [V07,T02] (  3,  2   )   byref  ->  rsi         "field V04._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp6         [V08,T03] (  3,  2   )     int  ->  rdx         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M29770_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M29770_IG02:
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       test     rbx, rbx
-       jne      SHORT G_M29770_IG04
-						;; size=30 bbWeight=1 PerfScore 5.00
-G_M29770_IG03:
-       xor      rsi, rsi
-       xor      edx, edx
-       jmp      SHORT G_M29770_IG05
-						;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M29770_IG04:
-       lea      rsi, bword ptr [rbx+0x10]
        mov      edx, dword ptr [rbx+0x08]
-						;; size=7 bbWeight=0.50 PerfScore 1.25
-G_M29770_IG05:
+       lea      rsi, bword ptr [rbx+0x10]
        mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Span`1[System.Numerics.Vector`1[float]]):this
-       call     [rax]System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Span`1[System.Numerics.Vector`1[float]]):this
-       nop      
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M29770_IG06:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[System.Numerics.Vector`1[float]](byref,int):this
+						;; size=45 bbWeight=1 PerfScore 6.75
+G_M29770_IG03:
        pop      rbx
        pop      r15
        pop      rbp
-       ret      
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Random:Shuffle[System.Numerics.Vector`1[float]](byref,int):this
+						;; size=7 bbWeight=1 PerfScore 3.50
 
-; Total bytes of code 79, prolog size 9, PerfScore 17.75, instruction count 25, allocated bytes for code 79 (MethodHash=1e858bb5) for method System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float][]):this (FullOpts)
+; Total bytes of code 67, prolog size 9, PerfScore 14.25, instruction count 18, allocated bytes for code 67 (MethodHash=1e858bb5) for method System.Random:Shuffle[System.Numerics.Vector`1[float]](System.Numerics.Vector`1[float][]):this (FullOpts)
-12 (-15.190% of base) - System.Random:Shuffle[ubyte](ubyte[]):this
 ; Assembly listing for method System.Random:Shuffle[ubyte](ubyte[]):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; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  3,  3   )     ref  ->  r15         this class-hnd single-def <System.Random>
-;  V01 arg1         [V01,T00] (  6,  5   )     ref  ->  rbx         class-hnd single-def <ubyte[]>
+;  V01 arg1         [V01,T00] (  5,  5   )     ref  ->  rbx         class-hnd single-def <ubyte[]>
 ;# 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[ubyte]>
-;* V04 tmp2         [V04    ] (  0,  0   )  struct (16) zero-ref    multireg-arg ld-addr-op "NewObj constructor temp" <System.Span`1[ubyte]>
-;* V05 tmp3         [V05    ] (  0,  0   )   byref  ->  zero-ref    "field V03._reference (fldOffset=0x0)" P-INDEP
-;* V06 tmp4         [V06    ] (  0,  0   )     int  ->  zero-ref    "field V03._length (fldOffset=0x8)" P-INDEP
-;  V07 tmp5         [V07,T02] (  3,  2   )   byref  ->  rsi         "field V04._reference (fldOffset=0x0)" P-INDEP
-;  V08 tmp6         [V08,T03] (  3,  2   )     int  ->  rdx         "field V04._length (fldOffset=0x8)" P-INDEP
 ;
 ; Lcl frame size = 0
 
 G_M10570_IG01:
        push     rbp
        push     r15
        push     rbx
        lea      rbp, [rsp+0x10]
        mov      r15, rdi
        mov      rbx, rsi
 						;; size=15 bbWeight=1 PerfScore 4.00
 G_M10570_IG02:
        mov      rdi, rbx
        mov      rsi, 0xD1FFAB1E      ; 'values'
 
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
        call     [rax]System.ArgumentNullException:ThrowIfNull(System.Object,System.String)
-       test     rbx, rbx
-       jne      SHORT G_M10570_IG04
-						;; size=30 bbWeight=1 PerfScore 5.00
-G_M10570_IG03:
-       xor      rsi, rsi
-       xor      edx, edx
-       jmp      SHORT G_M10570_IG05
-						;; size=6 bbWeight=0.50 PerfScore 1.25
-G_M10570_IG04:
-       lea      rsi, bword ptr [rbx+0x10]
        mov      edx, dword ptr [rbx+0x08]
-						;; size=7 bbWeight=0.50 PerfScore 1.25
-G_M10570_IG05:
+       lea      rsi, bword ptr [rbx+0x10]
        mov      rdi, r15
-       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[ubyte](System.Span`1[ubyte]):this
-       call     [rax]System.Random:Shuffle[ubyte](System.Span`1[ubyte]):this
-       nop      
-						;; size=16 bbWeight=1 PerfScore 3.75
-G_M10570_IG06:
+       mov      rax, 0xD1FFAB1E      ; code for System.Random:Shuffle[ubyte](byref,int):this
+						;; size=45 bbWeight=1 PerfScore 6.75
+G_M10570_IG03:
        pop      rbx
        pop      r15
        pop      rbp
-       ret      
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Random:Shuffle[ubyte](byref,int):this
+						;; size=7 bbWeight=1 PerfScore 3.50
 
-; Total bytes of code 79, prolog size 9, PerfScore 17.75, instruction count 25, allocated bytes for code 79 (MethodHash=cf61d6b5) for method System.Random:Shuffle[ubyte](ubyte[]):this (FullOpts)
+; Total bytes of code 67, prolog size 9, PerfScore 14.25, instruction count 18, allocated bytes for code 67 (MethodHash=cf61d6b5) for method System.Random:Shuffle[ubyte](ubyte[]):this (FullOpts)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment