Assembly Diffs

windows x64

Diffs are based on 1,999,231 contexts (587,594 MinOpts, 1,411,637 FullOpts).

MISSED contexts: 3,657 (0.18%)

Overall (-2 bytes)

Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x64.checked.mch 296,147,901 -2

FullOpts (-2 bytes)

Collection Base size (bytes) Diff size (bytes)
coreclr_tests.run.windows.x64.checked.mch 110,373,511 -2

Example diffs

coreclr_tests.run.windows.x64.checked.mch

-9 (-7.09%) : 244766.dasm - System.Runtime.CompilerServices.CastHelpers:IsInstanceOfClass(ulong,System.Object):System.Object (FullOpts)

@@ -10,11 +10,12 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 1 inlinees without PGO data ; Final local variable assignments ;
-; V00 arg0 [V00,T01] ( 8, 30.05) long -> rcx single-def -; V01 arg1 [V01,T02] ( 7, 5.44) ref -> rdx class-hnd <System.Object> -; V02 loc0 [V02,T00] ( 17, 95.49) long -> rax
+; V00 arg0 [V00,T01] ( 8, 6.97) long -> rcx single-def +; V01 arg1 [V01,T02] ( 7, 4.90) ref -> rdx class-hnd <System.Object> +; V02 loc0 [V02,T00] ( 17, 9.21) long -> rax
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg"
+; V05 cse0 [V05,T03] ( 3, 0.19) ref -> rdx "CSE - conservative"
; ; Lcl frame size = 40 @@ -24,89 +25,84 @@ G_M45526_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, G_M45526_IG02: ; bbWeight=1, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rdx] test rdx, rdx
- je SHORT G_M45526_IG16
+ je SHORT G_M45526_IG14
;; size=5 bbWeight=1 PerfScore 1.25
-G_M45526_IG03: ; bbWeight=0.80, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+G_M45526_IG03: ; bbWeight=0.50, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
cmp qword ptr [rdx], rcx
- je SHORT G_M45526_IG16 - ;; size=5 bbWeight=0.80 PerfScore 3.20 -G_M45526_IG04: ; bbWeight=0.64, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
+ je SHORT G_M45526_IG14 + ;; size=5 bbWeight=0.50 PerfScore 2.00 +G_M45526_IG04: ; bbWeight=0.40, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
mov rax, qword ptr [rdx] mov rax, qword ptr [rax+0x18]
- ;; size=7 bbWeight=0.64 PerfScore 2.56 -G_M45526_IG05: ; bbWeight=8.99, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz - cmp rcx, rax - je SHORT G_M45526_IG16 - ;; size=5 bbWeight=8.99 PerfScore 11.24 -G_M45526_IG06: ; bbWeight=8.09, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz - test rax, rax
+ ;; size=7 bbWeight=0.40 PerfScore 1.60 +G_M45526_IG05: ; bbWeight=3.24, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz + cmp rax, rcx
je SHORT G_M45526_IG14
- ;; size=5 bbWeight=8.09 PerfScore 10.11 -G_M45526_IG07: ; bbWeight=7.28, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+ ;; size=5 bbWeight=3.24 PerfScore 4.05 +G_M45526_IG06: ; bbWeight=1.62, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz + test rax, rax + je SHORT G_M45526_IG16 + ;; size=5 bbWeight=1.62 PerfScore 2.03 +G_M45526_IG07: ; bbWeight=0.81, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
mov rax, qword ptr [rax+0x18] cmp rcx, rax
- je SHORT G_M45526_IG16 - ;; size=9 bbWeight=7.28 PerfScore 23.67 -G_M45526_IG08: ; bbWeight=6.55, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz - test rax, rax
je SHORT G_M45526_IG14
- ;; size=5 bbWeight=6.55 PerfScore 8.19 -G_M45526_IG09: ; bbWeight=5.90, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+ ;; size=9 bbWeight=0.81 PerfScore 2.63 +G_M45526_IG08: ; bbWeight=0.41, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz + test rax, rax + je SHORT G_M45526_IG16 + ;; size=5 bbWeight=0.41 PerfScore 0.51 +G_M45526_IG09: ; bbWeight=0.20, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
mov rax, qword ptr [rax+0x18] cmp rcx, rax
- je SHORT G_M45526_IG16 - ;; size=9 bbWeight=5.90 PerfScore 19.17 -G_M45526_IG10: ; bbWeight=5.31, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz - test rax, rax
je SHORT G_M45526_IG14
- ;; size=5 bbWeight=5.31 PerfScore 6.64 -G_M45526_IG11: ; bbWeight=4.78, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+ ;; size=9 bbWeight=0.20 PerfScore 0.66 +G_M45526_IG10: ; bbWeight=0.10, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz + test rax, rax + je SHORT G_M45526_IG16 + ;; size=5 bbWeight=0.10 PerfScore 0.13 +G_M45526_IG11: ; bbWeight=0.09, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
mov rax, qword ptr [rax+0x18] cmp rcx, rax
- je SHORT G_M45526_IG16 - ;; size=9 bbWeight=4.78 PerfScore 15.53 -G_M45526_IG12: ; bbWeight=4.30, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz - test rax, rax
je SHORT G_M45526_IG14
- ;; size=5 bbWeight=4.30 PerfScore 5.37 -G_M45526_IG13: ; bbWeight=3.87, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
+ ;; size=9 bbWeight=0.09 PerfScore 0.30 +G_M45526_IG12: ; bbWeight=0.05, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz + test rax, rax + je SHORT G_M45526_IG16 + ;; size=5 bbWeight=0.05 PerfScore 0.06 +G_M45526_IG13: ; bbWeight=0.04, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref, isz
mov rax, qword ptr [rax+0x18] jmp SHORT G_M45526_IG05
- ;; size=6 bbWeight=3.87 PerfScore 15.48 -G_M45526_IG14: ; bbWeight=0.30, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rdx] - test dword ptr [rcx], 0xD1FFAB1E - je SHORT G_M45526_IG19 - ;; size=8 bbWeight=0.30 PerfScore 1.21 -G_M45526_IG15: ; bbWeight=0.24, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz - jmp SHORT G_M45526_IG18 - ;; size=2 bbWeight=0.24 PerfScore 0.49 -G_M45526_IG16: ; bbWeight=0.36, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref - ; gcrRegs +[rdx]
+ ;; size=6 bbWeight=0.04 PerfScore 0.16 +G_M45526_IG14: ; bbWeight=0.60, gcrefRegs=0004 {rdx}, byrefRegs=0000 {}, byref
mov rax, rdx ; gcrRegs +[rax]
- ;; size=3 bbWeight=0.36 PerfScore 0.09 -G_M45526_IG17: ; bbWeight=0.36, epilog, nogc, extend
+ ;; size=3 bbWeight=0.60 PerfScore 0.15 +G_M45526_IG15: ; bbWeight=0.60, epilog, nogc, extend
add rsp, 40 ret
- ;; size=5 bbWeight=0.36 PerfScore 0.45 -G_M45526_IG18: ; bbWeight=0.24, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=5 bbWeight=0.60 PerfScore 0.75 +G_M45526_IG16: ; bbWeight=0.13, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
; gcrRegs -[rax rdx]
- mov rcx, 0xD1FFAB1E - ; gcrRegs +[rcx]
+ test dword ptr [rcx], 0xD1FFAB1E + je SHORT G_M45526_IG18 + ;; size=8 bbWeight=0.13 PerfScore 0.51 +G_M45526_IG17: ; bbWeight=0.06, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov rdx, 0xD1FFAB1E ; gcrRegs +[rdx]
+ mov rcx, rdx + ; gcrRegs +[rcx]
call [<unknown method>] ; gcrRegs -[rcx rdx] ; gcr arg pop 0
- ;; size=26 bbWeight=0.24 PerfScore 0.85 -G_M45526_IG19: ; bbWeight=0.64, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ;; size=19 bbWeight=0.06 PerfScore 0.22 +G_M45526_IG18: ; bbWeight=0.40, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
xor rdx, rdx ; gcrRegs +[rdx]
- jmp SHORT G_M45526_IG16 - ;; size=4 bbWeight=0.64 PerfScore 1.44
+ jmp SHORT G_M45526_IG14 + ;; size=4 bbWeight=0.40 PerfScore 0.90
-; Total bytes of code 127, prolog size 4, PerfScore 127.18, instruction count 39, allocated bytes for code 127 (MethodHash=e8d84e29) for method System.Runtime.CompilerServices.CastHelpers:IsInstanceOfClass(ulong,System.Object):System.Object (FullOpts)
+; Total bytes of code 118, prolog size 4, PerfScore 18.16, instruction count 38, allocated bytes for code 118 (MethodHash=e8d84e29) for method System.Runtime.CompilerServices.CastHelpers:IsInstanceOfClass(ulong,System.Object):System.Object (FullOpts)
; ============================================================ Unwind Info:

-7 (-3.93%) : 244765.dasm - System.Runtime.InteropServices.GCHandle:AddrOfPinnedObject():long:this (FullOpts)

@@ -11,20 +11,21 @@ ; Final local variable assignments ; ; V00 this [V00,T00] ( 3, 3 ) byref -> rcx this single-def
-; V01 loc0 [V01,T02] ( 4, 4 ) long -> rcx -; V02 loc1 [V02,T01] ( 9, 4.85) ref -> rbx class-hnd single-def <System.Object>
+; V01 loc0 [V01,T01] ( 4, 4 ) long -> rcx +; V02 loc1 [V02,T02] ( 9, 3.80) ref -> rbx class-hnd single-def <System.Object>
; V03 OutArgs [V03 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace" ;* V04 tmp1 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <System.Array> ;* V05 tmp2 [V05 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def "updating class info" <System.String> ;* V06 tmp3 [V06 ] ( 0, 0 ) long -> zero-ref ld-addr-op "NewObj constructor temp" ;* V07 tmp4 [V07 ] ( 0, 0 ) long -> zero-ref "Inlining Arg"
-; V08 tmp5 [V08,T03] ( 2, 3.20) byref -> rax single-def "Inlining Arg"
+; V08 tmp5 [V08,T03] ( 2, 2 ) byref -> rax single-def "Inlining Arg"
;* V09 tmp6 [V09 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V10 tmp7 [V10 ] ( 0, 0 ) byref -> zero-ref "impAppendStmt" ;* V11 tmp8 [V11 ] ( 0, 0 ) ref -> zero-ref class-hnd "updating class info" <<unknown class>>
-; V12 tmp9 [V12,T06] ( 2, 0.64) long -> rax "Cast away GC" -; V13 tmp10 [V13,T05] ( 2, 1.23) long -> rax "Cast away GC" -; V14 tmp11 [V14,T04] ( 2, 1.33) long -> rax "Cast away GC"
+; V12 tmp9 [V12,T06] ( 2, 0.40) long -> rax "Cast away GC" +; V13 tmp10 [V13,T04] ( 2, 0.80) long -> rax "Cast away GC" +; V14 tmp11 [V14,T05] ( 2, 0.80) long -> rax "Cast away GC" +; V15 cse0 [V15,T07] ( 3, 0.30) ref -> rdx "CSE - conservative"
; ; Lcl frame size = 32 @@ -47,29 +48,38 @@ G_M56886_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0002 {rcx}, byr mov rbx, rax ; gcrRegs +[rbx] test rbx, rbx
- je SHORT G_M56886_IG11
+ jne SHORT G_M56886_IG05
;; size=38 bbWeight=1 PerfScore 7.25
-G_M56886_IG03: ; bbWeight=0.80, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - ; gcrRegs -[rax] - mov rax, qword ptr [rbx] - test dword ptr [rax], 0xD1FFAB1E - je SHORT G_M56886_IG13 - ;; size=11 bbWeight=0.80 PerfScore 4.80 -G_M56886_IG04: ; bbWeight=0.64, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - mov rax, 0xD1FFAB1E ; System.String - cmp qword ptr [rbx], rax - jne SHORT G_M56886_IG07 - ;; size=15 bbWeight=0.64 PerfScore 2.72 -G_M56886_IG05: ; bbWeight=0.33, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref - lea rax, bword ptr [rbx+0x0C] - ; byrRegs +[rax] - ;; size=4 bbWeight=0.33 PerfScore 0.17 -G_M56886_IG06: ; bbWeight=0.33, epilog, nogc, extend
+G_M56886_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref + ; gcrRegs -[rax rbx] + xor eax, eax + ;; size=2 bbWeight=0.50 PerfScore 0.12 +G_M56886_IG04: ; bbWeight=0.50, epilog, nogc, extend
add rsp, 32 pop rbx ret
- ;; size=6 bbWeight=0.33 PerfScore 0.58 -G_M56886_IG07: ; bbWeight=0.31, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
+ ;; size=6 bbWeight=0.50 PerfScore 0.88 +G_M56886_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz + ; gcrRegs +[rbx] + mov rax, qword ptr [rbx] + test dword ptr [rax], 0xD1FFAB1E + je SHORT G_M56886_IG13 + ;; size=11 bbWeight=0.50 PerfScore 3.00 +G_M56886_IG06: ; bbWeight=0.40, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + mov rax, 0xD1FFAB1E ; System.String + cmp qword ptr [rbx], rax + jne SHORT G_M56886_IG09 + ;; size=15 bbWeight=0.40 PerfScore 1.70 +G_M56886_IG07: ; bbWeight=0.20, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + lea rax, bword ptr [rbx+0x0C] + ; byrRegs +[rax] + ;; size=4 bbWeight=0.20 PerfScore 0.10 +G_M56886_IG08: ; bbWeight=0.20, epilog, nogc, extend + add rsp, 32 + pop rbx + ret + ;; size=6 bbWeight=0.20 PerfScore 0.35 +G_M56886_IG09: ; bbWeight=0.20, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz
; byrRegs -[rax] mov rdx, rbx ; gcrRegs +[rdx] @@ -78,49 +88,39 @@ G_M56886_IG07: ; bbWeight=0.31, gcVars=0000000000000000 {}, gcrefRegs=000 ; gcrRegs -[rdx] +[rax] ; gcr arg pop 0 test rax, rax
- jne SHORT G_M56886_IG09 - ;; size=24 bbWeight=0.31 PerfScore 1.46 -G_M56886_IG08: ; bbWeight=0.25, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ jne SHORT G_M56886_IG11 + ;; size=24 bbWeight=0.20 PerfScore 0.95 +G_M56886_IG10: ; bbWeight=0.10, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
; gcrRegs -[rax]
- mov rcx, 0xD1FFAB1E - ; gcrRegs +[rcx]
mov rdx, 0xD1FFAB1E ; gcrRegs +[rdx]
+ mov rcx, rdx + ; gcrRegs +[rcx]
call [<unknown method>] ; gcrRegs -[rcx rdx] ; gcr arg pop 0
- ;; size=26 bbWeight=0.25 PerfScore 0.86 -G_M56886_IG09: ; bbWeight=0.31, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ ;; size=19 bbWeight=0.10 PerfScore 0.35 +G_M56886_IG11: ; bbWeight=0.20, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
mov rax, qword ptr [rbx] mov eax, dword ptr [rax+0x04] lea rax, bword ptr [rbx+rax-0x08] ; byrRegs +[rax]
- ;; size=11 bbWeight=0.31 PerfScore 1.54 -G_M56886_IG10: ; bbWeight=0.31, epilog, nogc, extend - add rsp, 32 - pop rbx - ret - ;; size=6 bbWeight=0.31 PerfScore 0.54 -G_M56886_IG11: ; bbWeight=0.20, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs -[rbx] - ; byrRegs -[rax] - xor eax, eax - ;; size=2 bbWeight=0.20 PerfScore 0.05
+ ;; size=11 bbWeight=0.20 PerfScore 1.00
G_M56886_IG12: ; bbWeight=0.20, epilog, nogc, extend add rsp, 32 pop rbx ret ;; size=6 bbWeight=0.20 PerfScore 0.35
-G_M56886_IG13: ; bbWeight=0.16, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref - ; gcrRegs +[rbx]
+G_M56886_IG13: ; bbWeight=0.10, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref + ; byrRegs -[rax]
lea rax, bword ptr [rbx+0x08] ; byrRegs +[rax]
- ;; size=4 bbWeight=0.16 PerfScore 0.08 -G_M56886_IG14: ; bbWeight=0.16, epilog, nogc, extend
+ ;; size=4 bbWeight=0.10 PerfScore 0.05 +G_M56886_IG14: ; bbWeight=0.10, epilog, nogc, extend
add rsp, 32 pop rbx ret
- ;; size=6 bbWeight=0.16 PerfScore 0.28
+ ;; size=6 bbWeight=0.10 PerfScore 0.18
G_M56886_IG15: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref ; gcrRegs -[rbx] ; byrRegs -[rax] @@ -134,7 +134,7 @@ G_M56886_IG16: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref int3 ;; size=7 bbWeight=0 PerfScore 0.00
-; Total bytes of code 178, prolog size 5, PerfScore 21.92, instruction count 48, allocated bytes for code 178 (MethodHash=78c021c9) for method System.Runtime.InteropServices.GCHandle:AddrOfPinnedObject():long:this (FullOpts)
+; Total bytes of code 171, prolog size 5, PerfScore 17.53, instruction count 48, allocated bytes for code 171 (MethodHash=78c021c9) for method System.Runtime.InteropServices.GCHandle:AddrOfPinnedObject():long:this (FullOpts)
; ============================================================ Unwind Info:

-1 (-0.63%) : 244772.dasm - JIT.HardwareIntrinsics.General.Vector128.VectorBooleanBinaryOpTest_LessThanOrEqualAnySingle:ValidateResult(float[],float[],ubyte,System.String):this (FullOpts)

@@ -11,24 +11,21 @@ ; Final local variable assignments ; ; V00 this [V00,T06] ( 3, 2.80) ref -> rcx this class-hnd single-def <JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle>
-; V01 arg1 [V01,T04] ( 7, 75.91) ref -> rdx class-hnd single-def <float[]> -; V02 arg2 [V02,T03] ( 7, 76.52) ref -> r8 class-hnd single-def <float[]>
+; V01 arg1 [V01,T03] ( 7, 11.58) ref -> rdx class-hnd single-def <float[]> +; V02 arg2 [V02,T04] ( 7, 11.08) ref -> r8 class-hnd single-def <float[]>
; V03 arg3 [V03,T05] ( 3, 3 ) ubyte -> r9 single-def ;* V04 arg4 [V04 ] ( 0, 0 ) ref -> zero-ref class-hnd single-def <System.String> ;* V05 loc0 [V05 ] ( 0, 0 ) ubyte -> zero-ref
-; V06 loc1 [V06,T02] ( 6,146.00) ubyte -> rax -; V07 loc2 [V07,T00] ( 11,290.44) int -> r10
+; V06 loc1 [V06,T02] ( 6, 18 ) ubyte -> rax +; V07 loc2 [V07,T00] ( 12, 33.24) int -> r10
; V08 OutArgs [V08 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V09 cse0 [V09,T07] ( 4, 2.53) int -> r11 hoist multi-def "CSE - aggressive" -; V10 cse1 [V10,T01] ( 3,213.84) long -> r11 "CSE - aggressive" -; V11 cse2 [V11,T08] ( 3, 2.16) long -> rbx "CSE - aggressive"
+; V09 cse0 [V09,T01] ( 3, 23.76) long -> r11 "CSE - aggressive"
;
-; Lcl frame size = 32
+; Lcl frame size = 40
G_M23149_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
- push rbx - sub rsp, 32 - ;; size=5 bbWeight=1 PerfScore 1.25
+ sub rsp, 40 + ;; size=4 bbWeight=1 PerfScore 0.25
G_M23149_IG02: ; bbWeight=1, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref, isz ; gcrRegs +[rcx rdx r8] xor eax, eax @@ -36,16 +33,15 @@ G_M23149_IG02: ; bbWeight=1, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 test rdx, rdx je SHORT G_M23149_IG06 ;; size=10 bbWeight=1 PerfScore 1.75
-G_M23149_IG03: ; bbWeight=0.90, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref, isz
+G_M23149_IG03: ; bbWeight=0.50, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref, isz
test r8, r8 je SHORT G_M23149_IG06
- mov r11d, dword ptr [rdx+0x08] - cmp r11d, 4
+ cmp dword ptr [rdx+0x08], 4
jl SHORT G_M23149_IG06 cmp dword ptr [r8+0x08], 4 jl SHORT G_M23149_IG06
- ;; size=22 bbWeight=0.90 PerfScore 7.65 -G_M23149_IG04: ; bbWeight=71.28, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref, isz
+ ;; size=18 bbWeight=0.50 PerfScore 4.62 +G_M23149_IG04: ; bbWeight=7.92, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref, isz
mov r11d, r10d movss xmm0, dword ptr [rdx+4*r11+0x10] movss xmm1, dword ptr [r8+4*r11+0x10] @@ -57,54 +53,51 @@ G_M23149_IG04: ; bbWeight=71.28, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0 inc r10d cmp r10d, 4 jl SHORT G_M23149_IG04
- ;; size=42 bbWeight=71.28 PerfScore 962.28
+ ;; size=42 bbWeight=7.92 PerfScore 106.92
G_M23149_IG05: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref, isz ; gcrRegs -[rdx r8]
- jmp SHORT G_M23149_IG08
+ jmp SHORT G_M23149_IG07
;; size=2 bbWeight=1 PerfScore 2.00
-G_M23149_IG06: ; bbWeight=0.01, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref
+G_M23149_IG06: ; bbWeight=0.08, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[rdx r8]
- mov r11d, dword ptr [rdx+0x08] - ;; size=4 bbWeight=0.01 PerfScore 0.02 -G_M23149_IG07: ; bbWeight=0.72, gcrefRegs=0106 {rcx rdx r8}, byrefRegs=0000 {}, byref, isz - cmp r10d, r11d - jae SHORT G_M23149_IG11 - mov ebx, r10d - movss xmm0, dword ptr [rdx+4*rbx+0x10]
+ cmp r10d, dword ptr [rdx+0x08] + jae SHORT G_M23149_IG10 + mov r11d, r10d + movss xmm0, dword ptr [rdx+4*r11+0x10]
cmp r10d, dword ptr [r8+0x08]
- jae SHORT G_M23149_IG11 - movss xmm1, dword ptr [r8+4*rbx+0x10] - xor ebx, ebx
+ jae SHORT G_M23149_IG10 + mov r11d, r10d + movss xmm1, dword ptr [r8+4*r11+0x10] + xor r11d, r11d
ucomiss xmm1, xmm0
- setae bl - or ebx, eax - movzx rax, bl
+ setae r11b + or r11d, eax + movzx rax, r11b
inc r10d cmp r10d, 4
- jl SHORT G_M23149_IG07 - ;; size=49 bbWeight=0.72 PerfScore 13.50 -G_M23149_IG08: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref, isz
+ jl SHORT G_M23149_IG06 + ;; size=58 bbWeight=0.08 PerfScore 1.74 +G_M23149_IG07: ; bbWeight=1, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref, isz
; gcrRegs -[rdx r8] movzx rdx, r9b cmp edx, eax
- je SHORT G_M23149_IG10
+ je SHORT G_M23149_IG09
;; size=8 bbWeight=1 PerfScore 1.50
-G_M23149_IG09: ; bbWeight=0.80, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref
+G_M23149_IG08: ; bbWeight=0.80, gcrefRegs=0002 {rcx}, byrefRegs=0000 {}, byref
mov byte ptr [rcx+0x08], 0 ;; size=4 bbWeight=0.80 PerfScore 0.80
-G_M23149_IG10: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+G_M23149_IG09: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
; gcrRegs -[rcx]
- add rsp, 32 - pop rbx
+ add rsp, 40
ret
- ;; size=6 bbWeight=1 PerfScore 1.75 -G_M23149_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=5 bbWeight=1 PerfScore 1.25 +G_M23149_IG10: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
call CORINFO_HELP_RNGCHKFAIL ; gcr arg pop 0 int3 ;; size=6 bbWeight=0 PerfScore 0.00
-; Total bytes of code 158, prolog size 5, PerfScore 992.50, instruction count 50, allocated bytes for code 158 (MethodHash=cb84a592) for method JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:ValidateResult(float[],float[],ubyte,System.String):this (FullOpts)
+; Total bytes of code 157, prolog size 4, PerfScore 120.83, instruction count 47, allocated bytes for code 157 (MethodHash=cb84a592) for method JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:ValidateResult(float[],float[],ubyte,System.String):this (FullOpts)
; ============================================================ Unwind Info: @@ -112,10 +105,9 @@ Unwind Info: >> End offset : 0xd1ffab1e (not in unwind data) Version : 1 Flags : 0x00
- SizeOfProlog : 0x05 - CountOfUnwindCodes: 2
+ SizeOfProlog : 0x04 + CountOfUnwindCodes: 1
FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes :
- CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20 - CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rbx (3)
+ CodeOffset: 0x04 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 4 * 8 + 8 = 40 = 0x28

+0 (0.00%) : 244767.dasm - JIT.HardwareIntrinsics.General.Vector128.VectorBooleanBinaryOpTestLessThanOrEqualAnySingle:RunBasicScenarioUnsafeRead():this (FullOpts)

@@ -10,56 +10,56 @@ ; 0 inlinees with PGO data; 4 single block inlinees; 13 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 5, 12.47) ref -> rbx this class-hnd single-def <JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle>
+; V00 this [V00,T00] ( 5, 5 ) ref -> rbx this class-hnd single-def <JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle>
;* V01 loc0 [V01 ] ( 0, 0 ) ubyte -> zero-ref ; V02 OutArgs [V02 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V03 tmp1 [V03,T11] ( 3, 24.74) simd16 -> [rsp+0x50] do-not-enreg[SF] "non-inline candidate call" -; V04 tmp2 [V04,T09] ( 3, 2 ) ubyte -> rdx "Inline return value spill temp" -; V05 tmp3 [V05,T12] ( 3, 24.74) simd16 -> [rsp+0x40] do-not-enreg[SF] "Inlining Arg" <System.Runtime.Intrinsics.Vector128`1[float]> -;* V06 tmp4 [V06,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -;* V07 tmp5 [V07,T05] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V08 tmp6 [V08 ] ( 3, 28.42) struct ( 8) [rsp+0x38] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V09 tmp7 [V09 ] ( 3, 28.42) struct ( 8) [rsp+0x30] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V10 tmp8 [V10,T10] ( 4, 37.89) float -> mm0 "impAppendStmt" -;* V11 tmp9 [V11,T01] ( 0, 0 ) int -> zero-ref
+; V03 tmp1 [V03,T12] ( 3, 6 ) simd16 -> [rsp+0x50] do-not-enreg[SF] "non-inline candidate call" +; V04 tmp2 [V04,T01] ( 3, 2 ) ubyte -> rdx "Inline return value spill temp" +; V05 tmp3 [V05,T13] ( 3, 6 ) simd16 -> [rsp+0x40] do-not-enreg[SF] "Inlining Arg" <System.Runtime.Intrinsics.Vector128`1[float]> +;* V06 tmp4 [V06,T04] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +;* V07 tmp5 [V07,T08] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V08 tmp6 [V08 ] ( 3, 6 ) struct ( 8) [rsp+0x38] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V09 tmp7 [V09 ] ( 3, 6 ) struct ( 8) [rsp+0x30] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V10 tmp8 [V10,T10] ( 4, 8 ) float -> mm0 "impAppendStmt" +;* V11 tmp9 [V11,T02] ( 0, 0 ) int -> zero-ref
;* V12 tmp10 [V12 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V13 tmp11 [V13 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V14 tmp12 [V14 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V15 tmp13 [V15 ] ( 0, 0 ) float -> zero-ref "Inline return value spill temp"
-;* V16 tmp14 [V16,T02] ( 0, 0 ) int -> zero-ref
+;* V16 tmp14 [V16,T03] ( 0, 0 ) int -> zero-ref
;* V17 tmp15 [V17 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V18 tmp16 [V18 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V19 tmp17 [V19 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V20 tmp18 [V20 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V21 tmp19 [V21,T08] ( 3, 2.27) ubyte -> rdx "Inline return value spill temp" -;* V22 tmp20 [V22,T07] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" -; V23 tmp21 [V23 ] ( 3, 16.51) struct ( 8) [rsp+0x28] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V24 tmp22 [V24 ] ( 3, 16.51) struct ( 8) [rsp+0x20] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> -; V25 tmp23 [V25,T13] ( 4, 21.43) float -> mm0 "impAppendStmt" -;* V26 tmp24 [V26,T03] ( 0, 0 ) int -> zero-ref
+; V21 tmp19 [V21,T07] ( 3, 1.17) ubyte -> rdx "Inline return value spill temp" +;* V22 tmp20 [V22,T09] ( 0, 0 ) int -> zero-ref "Inline stloc first use temp" +; V23 tmp21 [V23 ] ( 3, 5 ) struct ( 8) [rsp+0x28] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V24 tmp22 [V24 ] ( 3, 5 ) struct ( 8) [rsp+0x20] do-not-enreg[XS] addr-exposed ld-addr-op "Inlining Arg" <System.Runtime.Intrinsics.Vector64`1[float]> +; V25 tmp23 [V25,T11] ( 4, 6 ) float -> mm0 "impAppendStmt" +;* V26 tmp24 [V26,T05] ( 0, 0 ) int -> zero-ref
;* V27 tmp25 [V27 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V28 tmp26 [V28 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V29 tmp27 [V29 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V30 tmp28 [V30 ] ( 0, 0 ) float -> zero-ref "Inline return value spill temp"
-;* V31 tmp29 [V31,T04] ( 0, 0 ) int -> zero-ref
+;* V31 tmp29 [V31,T06] ( 0, 0 ) int -> zero-ref
;* V32 tmp30 [V32 ] ( 0, 0 ) byref -> zero-ref "Inline stloc first use temp" ;* V33 tmp31 [V33 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V34 tmp32 [V34 ] ( 0, 0 ) ubyte -> zero-ref "Inlining Arg" ;* V35 tmp33 [V35 ] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp"
-; V36 tmp34 [V36 ] ( 3, 23.68) long -> [rsp+0x38] do-not-enreg[X] addr-exposed "field V08._00 (fldOffset=0x0)" P-DEP -; V37 tmp35 [V37 ] ( 3, 23.68) long -> [rsp+0x30] do-not-enreg[X] addr-exposed "field V09._00 (fldOffset=0x0)" P-DEP -; V38 tmp36 [V38 ] ( 3, 13.61) long -> [rsp+0x28] do-not-enreg[X] addr-exposed "field V23._00 (fldOffset=0x0)" P-DEP -; V39 tmp37 [V39 ] ( 3, 13.61) long -> [rsp+0x20] do-not-enreg[X] addr-exposed "field V24._00 (fldOffset=0x0)" P-DEP
+; V36 tmp34 [V36 ] ( 3, 5 ) long -> [rsp+0x38] do-not-enreg[X] addr-exposed "field V08._00 (fldOffset=0x0)" P-DEP +; V37 tmp35 [V37 ] ( 3, 5 ) long -> [rsp+0x30] do-not-enreg[X] addr-exposed "field V09._00 (fldOffset=0x0)" P-DEP +; V38 tmp36 [V38 ] ( 3, 4 ) long -> [rsp+0x28] do-not-enreg[X] addr-exposed "field V23._00 (fldOffset=0x0)" P-DEP +; V39 tmp37 [V39 ] ( 3, 4 ) long -> [rsp+0x20] do-not-enreg[X] addr-exposed "field V24._00 (fldOffset=0x0)" P-DEP
; ; Lcl frame size = 96
-G_M21877_IG01: ; bbWeight=4.74, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
+G_M21877_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
push rbx sub rsp, 96 mov rbx, rcx ; gcrRegs +[rbx]
- ;; size=8 bbWeight=4.74 PerfScore 7.11 -G_M21877_IG02: ; bbWeight=4.74, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ ;; size=8 bbWeight=1 PerfScore 1.50 +G_M21877_IG02: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
mov rcx, rbx ; gcrRegs +[rcx] call [<unknown method>] @@ -81,13 +81,11 @@ G_M21877_IG02: ; bbWeight=4.74, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, movss xmm0, dword ptr [rsp+0x38] movss xmm1, dword ptr [rsp+0x30] ucomiss xmm1, xmm0
- jae SHORT G_M21877_IG08
+ jae SHORT G_M21877_IG06
movss xmm0, dword ptr [rsp+0x3C] movss xmm1, dword ptr [rsp+0x34] ucomiss xmm1, xmm0
- jae SHORT G_M21877_IG08 - ;; size=88 bbWeight=4.74 PerfScore 182.37 -G_M21877_IG03: ; bbWeight=2.89, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ jae SHORT G_M21877_IG06
mov rcx, qword ptr [rsp+0x58] mov qword ptr [rsp+0x28], rcx mov rcx, qword ptr [rsp+0x48] @@ -95,18 +93,26 @@ G_M21877_IG03: ; bbWeight=2.89, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, movss xmm0, dword ptr [rsp+0x28] movss xmm1, dword ptr [rsp+0x20] ucomiss xmm1, xmm0
- jae SHORT G_M21877_IG09 - ;; size=37 bbWeight=2.89 PerfScore 37.63 -G_M21877_IG04: ; bbWeight=2.46, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
+ jae SHORT G_M21877_IG05 + ;; size=125 bbWeight=1 PerfScore 51.50 +G_M21877_IG03: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz
movss xmm0, dword ptr [rsp+0x2C] movss xmm1, dword ptr [rsp+0x24] ucomiss xmm1, xmm0
- jae SHORT G_M21877_IG09 - ;; size=17 bbWeight=2.46 PerfScore 22.17 -G_M21877_IG05: ; bbWeight=1.51, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ jae SHORT G_M21877_IG05
xor edx, edx
- ;; size=2 bbWeight=1.51 PerfScore 0.38 -G_M21877_IG06: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
+ ;; size=19 bbWeight=0.50 PerfScore 4.62 +G_M21877_IG04: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + jmp SHORT G_M21877_IG07 + ;; size=2 bbWeight=0.50 PerfScore 1.00 +G_M21877_IG05: ; bbWeight=0.17, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz + mov edx, 1 + jmp SHORT G_M21877_IG04 + ;; size=7 bbWeight=0.17 PerfScore 0.37 +G_M21877_IG06: ; bbWeight=0.50, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref + mov edx, 1 + ;; size=5 bbWeight=0.50 PerfScore 0.12 +G_M21877_IG07: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref
mov rcx, rbx ; gcrRegs +[rcx] call [<unknown method>] @@ -114,22 +120,13 @@ G_M21877_IG06: ; bbWeight=1, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byr ; gcr arg pop 0 nop ;; size=10 bbWeight=1 PerfScore 3.50
-G_M21877_IG07: ; bbWeight=1, epilog, nogc, extend
+G_M21877_IG08: ; bbWeight=1, epilog, nogc, extend
add rsp, 96 pop rbx ret ;; size=6 bbWeight=1 PerfScore 1.75
-G_M21877_IG08: ; bbWeight=0.48, gcVars=0000000000000000 {}, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, gcvars, byref, isz - ; gcrRegs +[rbx] - mov edx, 1 - jmp SHORT G_M21877_IG06 - ;; size=7 bbWeight=0.48 PerfScore 1.08 -G_M21877_IG09: ; bbWeight=0.25, gcrefRegs=0008 {rbx}, byrefRegs=0000 {}, byref, isz - mov edx, 1 - jmp SHORT G_M21877_IG06 - ;; size=7 bbWeight=0.25 PerfScore 0.55
-; Total bytes of code 182, prolog size 5, PerfScore 256.53, instruction count 46, allocated bytes for code 182 (MethodHash=3f44aa8a) for method JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:RunBasicScenario_UnsafeRead():this (FullOpts)
+; Total bytes of code 182, prolog size 5, PerfScore 64.38, instruction count 46, allocated bytes for code 182 (MethodHash=3f44aa8a) for method JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:RunBasicScenario_UnsafeRead():this (FullOpts)
; ============================================================ Unwind Info:

+15 (+2.46%) : 244763.dasm - JIT.HardwareIntrinsics.General.Vector128.VectorBooleanBinaryOpTest_LessThanOrEqualAnySingle+DataTable:.ctor(float[],float[],int):this (FullOpts)

@@ -10,44 +10,42 @@ ; 0 inlinees with PGO data; 11 single block inlinees; 5 inlinees without PGO data ; Final local variable assignments ;
-; V00 this [V00,T00] ( 13, 13 ) byref -> rbx this single-def -; V01 arg1 [V01,T04] ( 5, 5 ) ref -> rdi class-hnd single-def <float[]> -; V02 arg2 [V02,T05] ( 5, 5 ) ref -> rbp class-hnd single-def <float[]> -; V03 arg3 [V03,T01] ( 8, 7.52) int -> rsi single-def -; V04 loc0 [V04,T13] ( 3, 3 ) int -> r14 single-def -; V05 loc1 [V05,T14] ( 3, 3 ) int -> r15 single-def
+; V00 this [V00,T01] ( 13, 3.38) byref -> rsi this single-def +; V01 arg1 [V01,T02] ( 5, 3.25) ref -> rdi class-hnd single-def <float[]> +; V02 arg2 [V02,T03] ( 5, 3.25) ref -> rbp class-hnd single-def <float[]> +; V03 arg3 [V03,T00] ( 11, 6.12) int -> rbx single-def +; V04 loc0 [V04,T04] ( 3, 1.62) int -> r14 single-def +; V05 loc1 [V05,T05] ( 3, 1.38) int -> r15 single-def
; V06 OutArgs [V06 ] ( 1, 1 ) struct (32) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V07 tmp1 [V07,T19] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -;* V08 tmp2 [V08,T18] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" -; V09 tmp3 [V09,T02] ( 4, 7.60) ref -> r13 class-hnd single-def "Inlining Arg" <<unknown class>>
+; V07 tmp1 [V07,T17] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +;* V08 tmp2 [V08,T06] ( 0, 0 ) ubyte -> zero-ref "Inline return value spill temp" +; V09 tmp3 [V09,T09] ( 4, 0.64) ref -> r13 class-hnd single-def "Inlining Arg" <<unknown class>>
;* V10 tmp4 [V10 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> ;* V11 tmp5 [V11 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
-; V12 tmp6 [V12,T20] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V13 tmp7 [V13,T11] ( 4, 3.80) long -> rax "Inline stloc first use temp" -; V14 tmp8 [V14,T03] ( 4, 7.60) ref -> r13 class-hnd single-def "Inlining Arg" <<unknown class>>
+; V12 tmp6 [V12,T18] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V13 tmp7 [V13,T15] ( 4, 0.24) long -> rax "Inline stloc first use temp" +; V14 tmp8 [V14,T10] ( 4, 0.64) ref -> r13 class-hnd single-def "Inlining Arg" <<unknown class>>
;* V15 tmp9 [V15 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Runtime.InteropServices.GCHandle> ;* V16 tmp10 [V16 ] ( 0, 0 ) long -> zero-ref "Inline stloc first use temp"
-; V17 tmp11 [V17,T21] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> -; V18 tmp12 [V18,T12] ( 4, 3.80) long -> rax "Inline stloc first use temp"
+; V17 tmp11 [V17,T19] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <<unknown class>> +; V18 tmp12 [V18,T16] ( 4, 0.24) long -> rax "Inline stloc first use temp"
;* V19 tmp13 [V19 ] ( 0, 0 ) long -> zero-ref ld-addr-op "Inline stloc first use temp"
-; V20 tmp14 [V20,T09] ( 2, 4 ) long -> rax "Inlining Arg" -; V21 tmp15 [V21,T06] ( 3, 6 ) long -> rcx "Inlining Arg"
+; V20 tmp14 [V20,T11] ( 2, 0.50) long -> rax "Inlining Arg" +; V21 tmp15 [V21,T07] ( 3, 0.75) long -> rcx "Inlining Arg"
;* V22 tmp16 [V22 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V23 tmp17 [V23 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V24 tmp18 [V24 ] ( 0, 0 ) long -> zero-ref ld-addr-op "Inline stloc first use temp"
-; V25 tmp19 [V25,T10] ( 2, 4 ) long -> rax "Inlining Arg" -; V26 tmp20 [V26,T07] ( 3, 6 ) long -> rcx "Inlining Arg"
+; V25 tmp19 [V25,T12] ( 2, 0.50) long -> rax "Inlining Arg" +; V26 tmp20 [V26,T08] ( 3, 0.75) long -> rcx "Inlining Arg"
;* V27 tmp21 [V27 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg" ;* V28 tmp22 [V28 ] ( 0, 0 ) byref -> zero-ref "Inlining Arg"
-; V29 tmp23 [V29,T16] ( 2, 2 ) long -> rax single-def "field V10._handle (fldOffset=0x0)" P-INDEP -; V30 tmp24 [V30,T17] ( 2, 2 ) long -> rax single-def "field V15._handle (fldOffset=0x0)" P-INDEP -; V31 tmp25 [V31,T22] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V32 tmp26 [V32,T23] ( 2, 0 ) ref -> r8 single-def "argument with side effect" -; V33 tmp27 [V33,T24] ( 2, 0 ) ref -> rsi single-def "argument with side effect" -; V34 tmp28 [V34,T25] ( 2, 0 ) ref -> r8 single-def "argument with side effect" -; V35 tmp29 [V35,T26] ( 2, 0 ) ref -> rdx single-def "argument with side effect" -; V36 cse0 [V36,T15] ( 3, 3 ) long -> r13 "CSE - moderate" -; V37 cse1 [V37,T08] ( 4, 4 ) int -> rdx "CSE - moderate"
+; V29 tmp23 [V29,T13] ( 2, 0.25) long -> rax single-def "field V10._handle (fldOffset=0x0)" P-INDEP +; V30 tmp24 [V30,T14] ( 2, 0.25) long -> rax single-def "field V15._handle (fldOffset=0x0)" P-INDEP +; V31 tmp25 [V31,T20] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V32 tmp26 [V32,T21] ( 2, 0 ) ref -> r8 single-def "argument with side effect" +; V33 tmp27 [V33,T22] ( 2, 0 ) ref -> rsi single-def "argument with side effect" +; V34 tmp28 [V34,T23] ( 2, 0 ) ref -> r8 single-def "argument with side effect" +; V35 tmp29 [V35,T24] ( 2, 0 ) ref -> rdx single-def "argument with side effect"
; ; Lcl frame size = 32 @@ -60,61 +58,65 @@ G_M14781_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, push rbp push rbx sub rsp, 32
- mov rbx, rcx - ; byrRegs +[rbx]
+ mov rsi, rcx + ; byrRegs +[rsi]
mov rdi, rdx ; gcrRegs +[rdi] mov rbp, r8 ; gcrRegs +[rbp]
- mov esi, r9d
+ mov ebx, r9d
;; size=26 bbWeight=1 PerfScore 8.25
-G_M14781_IG02: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rbx}, byref
+G_M14781_IG02: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0040 {rsi}, byref
mov r14d, dword ptr [rdi+0x08] shl r14d, 2 mov r15d, dword ptr [rbp+0x08] shl r15d, 2
- lea edx, [rsi-0x01] - test edx, esi - jne G_M14781_IG13
+ lea edx, [rbx-0x01] + test edx, ebx + jne G_M14781_IG14
;; size=27 bbWeight=1 PerfScore 6.75
-G_M14781_IG03: ; bbWeight=0.52, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rbx}, byref - test esi, esi - jle G_M14781_IG13 - ;; size=8 bbWeight=0.52 PerfScore 0.65 -G_M14781_IG04: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rbx}, byref, isz - cmp esi, 16 - jg G_M14781_IG13 - lea edx, [rsi+rsi] - cmp edx, r14d - jl G_M14781_IG13 - cmp r15d, edx - jg G_M14781_IG13 - movsxd r13, edx - mov rdx, r13
+G_M14781_IG03: ; bbWeight=0.50, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0040 {rsi}, byref + test ebx, ebx + jle G_M14781_IG14 + cmp ebx, 16 + jg G_M14781_IG14 + lea edx, [rbx+rbx] + cmp r14d, edx + jg G_M14781_IG14 + ;; size=29 bbWeight=0.50 PerfScore 2.12 +G_M14781_IG04: ; bbWeight=0.25, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0040 {rsi}, byref + lea edx, [rbx+rbx] + cmp edx, r15d + jl G_M14781_IG14 + ;; size=12 bbWeight=0.25 PerfScore 0.44 +G_M14781_IG05: ; bbWeight=0.12, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0040 {rsi}, byref + lea edx, [rbx+rbx] + movsxd rdx, edx
mov rcx, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_NEWARR_1_VC ; gcrRegs +[rax] ; gcr arg pop 0 mov rdx, rax ; gcrRegs +[rdx]
- mov rcx, rbx
+ mov rcx, rsi
; byrRegs +[rcx] call CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[rax rdx] ; byrRegs -[rcx]
- mov rdx, r13
+ lea edx, [rbx+rbx] + movsxd rdx, edx
mov rcx, 0xD1FFAB1E ; <unknown class> call CORINFO_HELP_NEWARR_1_VC ; gcrRegs +[rax] ; gcr arg pop 0
- lea rcx, bword ptr [rbx+0x08]
+ lea rcx, bword ptr [rsi+0x08]
; byrRegs +[rcx] mov rdx, rax ; gcrRegs +[rdx] call CORINFO_HELP_CHECKED_ASSIGN_REF ; gcrRegs -[rax rdx] ; byrRegs -[rcx]
- mov r13, gword ptr [rbx]
+ mov r13, gword ptr [rsi]
; gcrRegs +[r13] mov rcx, r13 ; gcrRegs +[rcx] @@ -122,7 +124,9 @@ G_M14781_IG04: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rb ; gcrRegs -[rcx] ; gcr arg pop 0 test eax, eax
- je G_M14781_IG10
+ je G_M14781_IG15 + ;; size=85 bbWeight=0.12 PerfScore 1.72 +G_M14781_IG06: ; bbWeight=0.05, gcrefRegs=20A0 {rbp rdi r13}, byrefRegs=0040 {rsi}, byref
mov rcx, r13 ; gcrRegs +[rcx] mov edx, 3 @@ -130,20 +134,13 @@ G_M14781_IG04: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rb ; gcrRegs -[rcx] ; gcr arg pop 0 test rax, rax
- jne SHORT G_M14781_IG06 - ;; size=130 bbWeight=1 PerfScore 20.00 -G_M14781_IG05: ; bbWeight=0.80, gcrefRegs=20A0 {rbp rdi r13}, byrefRegs=0008 {rbx}, byref - mov rcx, r13 - ; gcrRegs +[rcx] - mov edx, 3 - call [<unknown method>] - ; gcrRegs -[rcx r13] - ; gcr arg pop 0 - ;; size=14 bbWeight=0.80 PerfScore 2.80 -G_M14781_IG06: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rbx}, byref, isz
+ je G_M14781_IG12 + ;; size=22 bbWeight=0.05 PerfScore 0.13 +G_M14781_IG07: ; bbWeight=0.12, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0040 {rsi}, byref + ; gcrRegs -[r13]
or rax, 1
- mov qword ptr [rbx+0x18], rax - mov r13, gword ptr [rbx+0x08]
+ mov qword ptr [rsi+0x18], rax + mov r13, gword ptr [rsi+0x08]
; gcrRegs +[r13] mov rcx, r13 ; gcrRegs +[rcx] @@ -151,42 +148,37 @@ G_M14781_IG06: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rb ; gcrRegs -[rcx] ; gcr arg pop 0 test eax, eax
+ je G_M14781_IG16 + ;; size=29 bbWeight=0.12 PerfScore 0.97 +G_M14781_IG08: ; bbWeight=0.05, gcrefRegs=20A0 {rbp rdi r13}, byrefRegs=0040 {rsi}, byref + mov rcx, r13 + ; gcrRegs +[rcx] + mov edx, 3 + call <unknown method> + ; gcrRegs -[rcx] + ; gcr arg pop 0 + test rax, rax
je G_M14781_IG11
- mov rcx, r13 - ; gcrRegs +[rcx] - mov edx, 3 - call <unknown method> - ; gcrRegs -[rcx] - ; gcr arg pop 0 - test rax, rax - jne SHORT G_M14781_IG08 - ;; size=47 bbWeight=1 PerfScore 10.50 -G_M14781_IG07: ; bbWeight=0.80, gcrefRegs=20A0 {rbp rdi r13}, byrefRegs=0008 {rbx}, byref - mov rcx, r13 - ; gcrRegs +[rcx] - mov edx, 3 - call [<unknown method>] - ; gcrRegs -[rcx r13] - ; gcr arg pop 0 - ;; size=14 bbWeight=0.80 PerfScore 2.80 -G_M14781_IG08: ; bbWeight=1, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0008 {rbx}, byref
+ ;; size=22 bbWeight=0.05 PerfScore 0.13 +G_M14781_IG09: ; bbWeight=0.12, gcrefRegs=00A0 {rbp rdi}, byrefRegs=0040 {rsi}, byref, isz + ; gcrRegs -[r13]
or rax, 1
- mov qword ptr [rbx+0x20], rax - movsxd rcx, esi - mov qword ptr [rbx+0x10], rcx - lea rcx, bword ptr [rbx+0x18]
+ mov qword ptr [rsi+0x20], rax + movsxd rcx, ebx + mov qword ptr [rsi+0x10], rcx + lea rcx, bword ptr [rsi+0x18]
; byrRegs +[rcx] call [<unknown method>] ; byrRegs -[rcx] ; gcr arg pop 0
- mov rcx, qword ptr [rbx+0x10]
+ mov rcx, qword ptr [rsi+0x10]
...

Details

Improvements/regressions per collection

Collection Contexts with diffs Improvements Regressions Same size Improvements (bytes) Regressions (bytes)
aspnet.run.windows.x64.checked.mch 0 0 0 0 -0 +0
benchmarks.run.windows.x64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_pgo.windows.x64.checked.mch 0 0 0 0 -0 +0
benchmarks.run_tiered.windows.x64.checked.mch 0 0 0 0 -0 +0
coreclr_tests.run.windows.x64.checked.mch 5 3 1 1 -17 +15
libraries.crossgen2.windows.x64.checked.mch 0 0 0 0 -0 +0
libraries.pmi.windows.x64.checked.mch 0 0 0 0 -0 +0
libraries_tests.run.windows.x64.Release.mch 0 0 0 0 -0 +0
librariestestsnotieredcompilation.run.windows.x64.Release.mch 0 0 0 0 -0 +0
realworld.run.windows.x64.checked.mch 0 0 0 0 -0 +0
smoke_tests.nativeaot.windows.x64.checked.mch 0 0 0 0 -0 +0
5 3 1 1 -17 +15

Context information

Collection Diffed contexts MinOpts FullOpts Missed, base Missed, diff
aspnet.run.windows.x64.checked.mch 129,157 61,702 67,455 133 (0.10%) 133 (0.10%)
benchmarks.run.windows.x64.checked.mch 36,886 6 36,880 55 (0.15%) 55 (0.15%)
benchmarks.run_pgo.windows.x64.checked.mch 107,598 68,114 39,484 379 (0.35%) 379 (0.35%)
benchmarks.run_tiered.windows.x64.checked.mch 82,880 62,052 20,828 63 (0.08%) 63 (0.08%)
coreclr_tests.run.windows.x64.checked.mch 492,183 273,478 218,705 118 (0.02%) 118 (0.02%)
libraries.crossgen2.windows.x64.checked.mch 273,759 15 273,744 352 (0.13%) 352 (0.13%)
libraries.pmi.windows.x64.checked.mch 343,885 6 343,879 92 (0.03%) 92 (0.03%)
libraries_tests.run.windows.x64.Release.mch 120,206 100,260 19,946 40 (0.03%) 40 (0.03%)
librariestestsnotieredcompilation.run.windows.x64.Release.mch 341,591 21,947 319,644 2,321 (0.67%) 2,321 (0.67%)
realworld.run.windows.x64.checked.mch 38,742 3 38,739 14 (0.04%) 14 (0.04%)
smoke_tests.nativeaot.windows.x64.checked.mch 32,344 11 32,333 90 (0.28%) 90 (0.28%)
1,999,231 587,594 1,411,637 3,657 (0.18%) 3,657 (0.18%)

jit-analyze output

coreclr_tests.run.windows.x64.checked.mch

To reproduce these diffs on Windows x64: superpmi.py asmdiffs -target_os windows -target_arch x64 -arch x64


Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 296147901 (overridden on cmd)
Total bytes of diff: 296147899 (overridden on cmd)
Total bytes of delta: -2 (-0.00 % of base)
    diff is an improvement.
    relative diff is an improvement.

Detail diffs



Top file regressions (bytes):
          15 : 244763.dasm (2.46 % of base)

Top file improvements (bytes):
          -9 : 244766.dasm (-7.09 % of base)
          -7 : 244765.dasm (-3.93 % of base)
          -1 : 244772.dasm (-0.63 % of base)

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

Top method regressions (bytes):
          15 (2.46 % of base) : 244763.dasm - JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle+DataTable:.ctor(float[],float[],int):this (FullOpts)

Top method improvements (bytes):
          -9 (-7.09 % of base) : 244766.dasm - System.Runtime.CompilerServices.CastHelpers:IsInstanceOfClass(ulong,System.Object):System.Object (FullOpts)
          -7 (-3.93 % of base) : 244765.dasm - System.Runtime.InteropServices.GCHandle:AddrOfPinnedObject():long:this (FullOpts)
          -1 (-0.63 % of base) : 244772.dasm - JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:ValidateResult(float[],float[],ubyte,System.String):this (FullOpts)

Top method regressions (percentages):
          15 (2.46 % of base) : 244763.dasm - JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle+DataTable:.ctor(float[],float[],int):this (FullOpts)

Top method improvements (percentages):
          -9 (-7.09 % of base) : 244766.dasm - System.Runtime.CompilerServices.CastHelpers:IsInstanceOfClass(ulong,System.Object):System.Object (FullOpts)
          -7 (-3.93 % of base) : 244765.dasm - System.Runtime.InteropServices.GCHandle:AddrOfPinnedObject():long:this (FullOpts)
          -1 (-0.63 % of base) : 244772.dasm - JIT.HardwareIntrinsics.General._Vector128.VectorBooleanBinaryOpTest__LessThanOrEqualAnySingle:ValidateResult(float[],float[],ubyte,System.String):this (FullOpts)

4 total methods with Code Size differences (3 improved, 1 regressed).