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).