forked from MihaZupan/runtime-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[JitDiff X64] [EgorBo] Expand unboxing for Nullable<> in JIT #541
Comments
Top method regressions230 (15.93 % of base) - System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) ; Assembly listing for method System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; fully interruptible
; No PGO data
; 0 inlinees with PGO data; 7 single block inlinees; 2 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T06] ( 6, 7 ) ref -> r15 class-hnd single-def <System.String[]>
-; V01 arg1 [V01,T05] ( 13, 14.62) ref -> rbx class-hnd single-def <System.Object[]>
-; V02 arg2 [V02,T19] ( 3, 3 ) ubyte -> rdx single-def
-; V03 arg3 [V03,T12] ( 6, 4 ) ref -> [rbp-0x78] class-hnd single-def <System.Reflection.Emit.MarshallingData>
+; V00 arg0 [V00,T08] ( 6, 7 ) ref -> r15 class-hnd single-def <System.String[]>
+; V01 arg1 [V01,T07] ( 13, 14.62) ref -> rbx class-hnd single-def <System.Object[]>
+; V02 arg2 [V02,T21] ( 3, 3 ) ubyte -> rdx single-def
+; V03 arg3 [V03,T14] ( 6, 4 ) ref -> [rbp-0x78] class-hnd single-def <System.Reflection.Emit.MarshallingData>
;* V04 loc0 [V04 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
;* V05 loc1 [V05 ] ( 0, 0 ) struct ( 8) zero-ref <System.Nullable`1[int]>
;* V06 loc2 [V06 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[short]>
;* V07 loc3 [V07 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op <System.Nullable`1[int]>
; V08 loc4 [V08,T00] ( 16, 53.24) int -> [rbp-0x2C]
; V09 loc5 [V09,T01] ( 32, 32 ) ref -> rsi class-hnd exact <System.String>
;# V10 OutArgs [V10 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V11 tmp1 [V11 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "NewObj constructor temp" <System.Nullable`1[int]>
;* V12 tmp2 [V12 ] ( 0, 0 ) struct ( 8) zero-ref <System.Nullable`1[int]>
; V13 tmp3 [V13,T02] ( 8, 26 ) ref -> r13 "inline UNBOX clone1"
-; V14 tmp4 [V14 ] ( 6, 24 ) struct ( 8) [rbp-0x38] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
-; V15 tmp5 [V15,T38] ( 2, 0 ) ref -> rbx
-; V16 tmp6 [V16,T39] ( 2, 0 ) ref -> r15
-;* V17 tmp7 [V17 ] ( 0, 0 ) ref -> zero-ref
+; V14 tmp4 [V14 ] ( 12, 22 ) struct ( 8) [rbp-0x38] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+; V15 tmp5 [V15,T03] ( 10, 20 ) ref -> rdx "op1 spilled for Nullable unbox"
+; V16 tmp6 [V16,T40] ( 2, 0 ) ref -> rbx
+; V17 tmp7 [V17,T41] ( 2, 0 ) ref -> r15
;* V18 tmp8 [V18 ] ( 0, 0 ) ref -> zero-ref
-; V19 tmp9 [V19,T40] ( 2, 0 ) ref -> r14
-; V20 tmp10 [V20,T37] ( 3, 0 ) ref -> r13 class-hnd exact "NewObj constructor temp" <System.ArgumentException>
-; V21 tmp11 [V21 ] ( 6, 24 ) struct ( 8) [rbp-0x40] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[short]>
-;* V22 tmp12 [V22 ] ( 0, 0 ) ref -> zero-ref "spilling varStr"
-; V23 tmp13 [V23,T07] ( 4, 8 ) int -> registers "spilling unroll qmark"
+;* V19 tmp9 [V19 ] ( 0, 0 ) ref -> zero-ref
+; V20 tmp10 [V20,T42] ( 2, 0 ) ref -> r14
+; V21 tmp11 [V21,T39] ( 3, 0 ) ref -> r13 class-hnd exact "NewObj constructor temp" <System.ArgumentException>
+; V22 tmp12 [V22 ] ( 12, 22 ) struct ( 8) [rbp-0x40] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[short]>
+; V23 tmp13 [V23,T04] ( 10, 20 ) ref -> [rbp-0x80] "op1 spilled for Nullable unbox"
;* V24 tmp14 [V24 ] ( 0, 0 ) ref -> zero-ref "spilling varStr"
-; V25 tmp15 [V25,T08] ( 4, 8 ) int -> registers "spilling unroll qmark"
+; V25 tmp15 [V25,T09] ( 4, 8 ) int -> registers "spilling unroll qmark"
;* V26 tmp16 [V26 ] ( 0, 0 ) ref -> zero-ref "spilling varStr"
-; V27 tmp17 [V27,T09] ( 4, 8 ) int -> registers "spilling unroll qmark"
+; V27 tmp17 [V27,T10] ( 4, 8 ) int -> registers "spilling unroll qmark"
;* V28 tmp18 [V28 ] ( 0, 0 ) ref -> zero-ref "spilling varStr"
-; V29 tmp19 [V29,T10] ( 4, 8 ) int -> rsi "spilling unroll qmark"
-;* V30 tmp20 [V30 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-;* V31 tmp21 [V31 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
-;* V32 tmp22 [V32 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
-; V33 tmp23 [V33,T25] ( 2, 1 ) int -> r12 "Inline return value spill temp"
-; V34 tmp24 [V34,T26] ( 2, 1 ) int -> rdx "Inline return value spill temp"
-; V35 tmp25 [V35,T13] ( 5, 6 ) ubyte -> r13 "field V04.hasValue (fldOffset=0x0)" P-INDEP
-; V36 tmp26 [V36,T14] ( 5, 6 ) int -> r12 "field V04.value (fldOffset=0x4)" P-INDEP
-; V37 tmp27 [V37,T15] ( 5, 6 ) ubyte -> [rbp-0x44] "field V05.hasValue (fldOffset=0x0)" P-INDEP
-; V38 tmp28 [V38,T16] ( 5, 6 ) int -> [rbp-0x48] "field V05.value (fldOffset=0x4)" P-INDEP
-; V39 tmp29 [V39,T17] ( 4, 5.50) ubyte -> [rbp-0x4C] "field V06.hasValue (fldOffset=0x0)" P-INDEP
-; V40 tmp30 [V40,T18] ( 4, 5.50) short -> [rbp-0x50] "field V06.value (fldOffset=0x2)" P-INDEP
-;* V41 tmp31 [V41 ] ( 0, 0 ) ubyte -> zero-ref "field V07.hasValue (fldOffset=0x0)" P-INDEP
-;* V42 tmp32 [V42 ] ( 0, 0 ) int -> zero-ref "field V07.value (fldOffset=0x4)" P-INDEP
-;* V43 tmp33 [V43,T27] ( 0, 0 ) ubyte -> zero-ref "field V11.hasValue (fldOffset=0x0)" P-INDEP
-;* V44 tmp34 [V44,T28] ( 0, 0 ) int -> zero-ref "field V11.value (fldOffset=0x4)" P-INDEP
-; V45 tmp35 [V45,T23] ( 3, 2 ) ubyte -> rcx "field V12.hasValue (fldOffset=0x0)" P-INDEP
-; V46 tmp36 [V46,T24] ( 3, 2 ) int -> rdx "field V12.value (fldOffset=0x4)" P-INDEP
-; V47 tmp37 [V47 ] ( 4, 12 ) ubyte -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
-; V48 tmp38 [V48 ] ( 4, 12 ) int -> [rbp-0x34] do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x4)" P-DEP
-; V49 tmp39 [V49 ] ( 4, 12 ) ubyte -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V21.hasValue (fldOffset=0x0)" P-DEP
-; V50 tmp40 [V50 ] ( 4, 12 ) short -> [rbp-0x3E] do-not-enreg[X] addr-exposed "field V21.value (fldOffset=0x2)" P-DEP
-;* V51 tmp41 [V51 ] ( 0, 0 ) ubyte -> zero-ref "field V31.hasValue (fldOffset=0x0)" P-INDEP
-;* V52 tmp42 [V52 ] ( 0, 0 ) int -> zero-ref "field V31.value (fldOffset=0x4)" P-INDEP
-;* V53 tmp43 [V53 ] ( 0, 0 ) ubyte -> zero-ref "field V32.hasValue (fldOffset=0x0)" P-INDEP
-;* V54 tmp44 [V54 ] ( 0, 0 ) int -> zero-ref "field V32.value (fldOffset=0x4)" P-INDEP
-; V55 tmp45 [V55,T41] ( 2, 0 ) ref -> rbx "argument with side effect"
-; V56 tmp46 [V56,T42] ( 2, 0 ) ref -> rdx "argument with side effect"
-; V57 tmp47 [V57,T20] ( 3, 3 ) struct ( 8) [rbp-0x58] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-; V58 tmp48 [V58,T21] ( 3, 3 ) struct ( 8) [rbp-0x60] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-; V59 tmp49 [V59,T22] ( 3, 3 ) struct ( 8) [rbp-0x68] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[short]>
-; V60 cse0 [V60,T04] ( 5, 18.25) int -> [rbp-0x6C] spill-single-def "CSE #01: aggressive"
-; V61 cse1 [V61,T11] ( 6, 7 ) int -> [rbp-0x70] spill-single-def "CSE #07: moderate"
-; V62 cse2 [V62,T03] ( 5, 19.80) long -> rdi "CSE #04: aggressive"
-; V63 rat0 [V63,T29] ( 3, 11.88) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
-; V64 rat1 [V64,T30] ( 3, 11.88) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
-; V65 rat2 [V65,T31] ( 3, 11.88) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
-; V66 rat3 [V66,T32] ( 3, 11.88) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
-; V67 rat4 [V67,T33] ( 3, 0.12) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
-; V68 rat5 [V68,T34] ( 3, 0.12) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
-; V69 rat6 [V69,T35] ( 3, 0.12) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
-; V70 rat7 [V70,T36] ( 3, 0.12) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V29 tmp19 [V29,T11] ( 4, 8 ) int -> registers "spilling unroll qmark"
+;* V30 tmp20 [V30 ] ( 0, 0 ) ref -> zero-ref "spilling varStr"
+; V31 tmp21 [V31,T12] ( 4, 8 ) int -> rsi "spilling unroll qmark"
+;* V32 tmp22 [V32 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
+;* V33 tmp23 [V33 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
+;* V34 tmp24 [V34 ] ( 0, 0 ) struct ( 8) zero-ref ld-addr-op "Inlining Arg" <System.Nullable`1[int]>
+; V35 tmp25 [V35,T27] ( 2, 1 ) int -> r12 "Inline return value spill temp"
+; V36 tmp26 [V36,T28] ( 2, 1 ) int -> rdx "Inline return value spill temp"
+; V37 tmp27 [V37,T15] ( 5, 6 ) ubyte -> r13 "field V04.hasValue (fldOffset=0x0)" P-INDEP
+; V38 tmp28 [V38,T16] ( 5, 6 ) int -> r12 "field V04.value (fldOffset=0x4)" P-INDEP
+; V39 tmp29 [V39,T17] ( 5, 6 ) ubyte -> [rbp-0x44] "field V05.hasValue (fldOffset=0x0)" P-INDEP
+; V40 tmp30 [V40,T18] ( 5, 6 ) int -> [rbp-0x48] "field V05.value (fldOffset=0x4)" P-INDEP
+; V41 tmp31 [V41,T19] ( 4, 5.50) ubyte -> [rbp-0x4C] "field V06.hasValue (fldOffset=0x0)" P-INDEP
+; V42 tmp32 [V42,T20] ( 4, 5.50) short -> [rbp-0x50] "field V06.value (fldOffset=0x2)" P-INDEP
+;* V43 tmp33 [V43 ] ( 0, 0 ) ubyte -> zero-ref "field V07.hasValue (fldOffset=0x0)" P-INDEP
+;* V44 tmp34 [V44 ] ( 0, 0 ) int -> zero-ref "field V07.value (fldOffset=0x4)" P-INDEP
+;* V45 tmp35 [V45,T29] ( 0, 0 ) ubyte -> zero-ref "field V11.hasValue (fldOffset=0x0)" P-INDEP
+;* V46 tmp36 [V46,T30] ( 0, 0 ) int -> zero-ref "field V11.value (fldOffset=0x4)" P-INDEP
+; V47 tmp37 [V47,T25] ( 3, 2 ) ubyte -> rcx "field V12.hasValue (fldOffset=0x0)" P-INDEP
+; V48 tmp38 [V48,T26] ( 3, 2 ) int -> rdx "field V12.value (fldOffset=0x4)" P-INDEP
+; V49 tmp39 [V49 ] ( 8, 7 ) ubyte -> [rbp-0x38] do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
+; V50 tmp40 [V50 ] ( 8, 7 ) int -> [rbp-0x34] do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x4)" P-DEP
+; V51 tmp41 [V51 ] ( 8, 7 ) ubyte -> [rbp-0x40] do-not-enreg[X] addr-exposed "field V22.hasValue (fldOffset=0x0)" P-DEP
+; V52 tmp42 [V52 ] ( 8, 7 ) short -> [rbp-0x3E] do-not-enreg[X] addr-exposed "field V22.value (fldOffset=0x2)" P-DEP
+;* V53 tmp43 [V53 ] ( 0, 0 ) ubyte -> zero-ref "field V33.hasValue (fldOffset=0x0)" P-INDEP
+;* V54 tmp44 [V54 ] ( 0, 0 ) int -> zero-ref "field V33.value (fldOffset=0x4)" P-INDEP
+;* V55 tmp45 [V55 ] ( 0, 0 ) ubyte -> zero-ref "field V34.hasValue (fldOffset=0x0)" P-INDEP
+;* V56 tmp46 [V56 ] ( 0, 0 ) int -> zero-ref "field V34.value (fldOffset=0x4)" P-INDEP
+; V57 tmp47 [V57,T43] ( 2, 0 ) ref -> rbx "argument with side effect"
+; V58 tmp48 [V58,T44] ( 2, 0 ) ref -> rdx "argument with side effect"
+; V59 tmp49 [V59,T22] ( 3, 3 ) struct ( 8) [rbp-0x58] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+; V60 tmp50 [V60,T23] ( 3, 3 ) struct ( 8) [rbp-0x60] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+; V61 tmp51 [V61,T24] ( 3, 3 ) struct ( 8) [rbp-0x68] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[short]>
+; V62 cse0 [V62,T06] ( 5, 18.25) int -> [rbp-0x6C] spill-single-def "CSE #01: aggressive"
+; V63 cse1 [V63,T13] ( 6, 7 ) int -> [rbp-0x70] spill-single-def "CSE #08: moderate"
+; V64 cse2 [V64,T05] ( 5, 19.80) long -> rdi "CSE #04: aggressive"
+; V65 rat0 [V65,T31] ( 3, 11.88) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V66 rat1 [V66,T32] ( 3, 11.88) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V67 rat2 [V67,T33] ( 3, 11.88) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V68 rat3 [V68,T34] ( 3, 11.88) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V69 rat4 [V69,T35] ( 3, 0.12) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V70 rat5 [V70,T36] ( 3, 0.12) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V71 rat6 [V71,T37] ( 3, 0.12) simd16 -> mm0 "ReplaceWithLclVar is creating a new local variable"
+; V72 rat7 [V72,T38] ( 3, 0.12) simd32 -> mm0 "ReplaceWithLclVar is creating a new local variable"
;
; Lcl frame size = 88
G_M2973_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
sub rsp, 88
lea rbp, [rsp+0x80]
mov gword ptr [rbp-0x78], rcx
mov r15, rdi
mov rbx, rsi
;; size=32 bbWeight=1 PerfScore 8.25
G_M2973_IG02:
xor r13d, r13d
xor r12d, r12d
movzx rax, dl
mov dword ptr [rbp-0x70], eax
test eax, eax
jne SHORT G_M2973_IG04
;; size=16 bbWeight=1 PerfScore 3.00
G_M2973_IG03:
xor ecx, ecx
xor edx, edx
jmp SHORT G_M2973_IG05
;; size=6 bbWeight=0.50 PerfScore 1.25
G_M2973_IG04:
mov ecx, 1
mov edx, 1
;; size=10 bbWeight=0.50 PerfScore 0.25
G_M2973_IG05:
mov byte ptr [rbp-0x44], cl
mov dword ptr [rbp-0x48], edx
mov byte ptr [rbp-0x4C], 0
mov word ptr [rbp-0x50], 0
xor r10d, r10d
mov r11d, dword ptr [r15+0x08]
mov dword ptr [rbp-0x6C], r11d
test r11d, r11d
- jle G_M2973_IG27
+ jle G_M2973_IG36
;; size=36 bbWeight=1 PerfScore 8.50
G_M2973_IG06:
test rbx, rbx
je G_M2973_IG17
cmp dword ptr [rbx+0x08], r11d
jl G_M2973_IG16
;; size=19 bbWeight=0.25 PerfScore 1.31
G_M2973_IG07:
mov dword ptr [rbp-0x2C], r10d
mov edi, r10d
mov rsi, gword ptr [r15+8*rdi+0x10]
test rsi, rsi
je G_M2973_IG18
;; size=21 bbWeight=3.96 PerfScore 17.82
G_M2973_IG08:
cmp dword ptr [rsi+0x08], 12
jne G_M2973_IG18
;; size=10 bbWeight=0.99 PerfScore 3.96
G_M2973_IG09:
vmovups xmm0, xmmword ptr [rsi+0x0C]
vmovups xmm1, xmmword ptr [rsi+0x14]
vpxor xmm1, xmm1, xmmword ptr [reloc @RWD00]
vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD16], -34
vptest xmm0, xmm0
sete r14b
movzx r14, r14b
test r14d, r14d
jne G_M2973_IG21
;; size=51 bbWeight=1.98 PerfScore 34.65
G_M2973_IG10:
cmp dword ptr [rsi+0x08], 9
jne G_M2973_IG19
;; size=10 bbWeight=0.99 PerfScore 3.96
G_M2973_IG11:
vmovups xmm0, xmmword ptr [rsi+0x0C]
vmovups xmm1, xmmword ptr [rsi+0x0E]
vpxor xmm1, xmm1, xmmword ptr [reloc @RWD32]
vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD48], -34
vptest xmm0, xmm0
sete r14b
movzx r14, r14b
test r14d, r14d
jne G_M2973_IG24
;; size=51 bbWeight=1.98 PerfScore 34.65
G_M2973_IG12:
cmp dword ptr [rsi+0x08], 14
jne G_M2973_IG20
;; size=10 bbWeight=0.99 PerfScore 3.96
G_M2973_IG13:
vmovups xmm0, xmmword ptr [rsi+0x0C]
vmovups xmm1, xmmword ptr [rsi+0x18]
vpxor xmm1, xmm1, xmmword ptr [reloc @RWD64]
vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD80], -34
vptest xmm0, xmm0
sete r14b
movzx r14, r14b
test r14d, r14d
- jne G_M2973_IG25
+ jne G_M2973_IG29
;; size=51 bbWeight=1.98 PerfScore 34.65
G_M2973_IG14:
cmp dword ptr [rsi+0x08], 16
- jne G_M2973_IG26
+ jne G_M2973_IG35
;; size=10 bbWeight=0.99 PerfScore 3.96
G_M2973_IG15:
vmovups ymm0, ymmword ptr [rsi+0x0C]
vpxor ymm0, ymm0, ymmword ptr [reloc @RWD96]
vptest ymm0, ymm0
sete sil
movzx rsi, sil
test esi, esi
- jne G_M2973_IG53
- jmp G_M2973_IG26
+ jne G_M2973_IG74
+ jmp G_M2973_IG35
;; size=39 bbWeight=1.98 PerfScore 32.67
G_M2973_IG16:
mov r11d, dword ptr [rbp-0x6C]
mov r14, gword ptr [rbp-0x78]
- jmp G_M2973_IG30
+ jmp G_M2973_IG39
;; size=13 bbWeight=0.12 PerfScore 0.50
G_M2973_IG17:
mov r14, gword ptr [rbp-0x78]
- jmp G_M2973_IG30
+ jmp G_M2973_IG39
;; size=9 bbWeight=0.12 PerfScore 0.38
G_M2973_IG18:
test rsi, rsi
jne G_M2973_IG10
;; size=9 bbWeight=1.98 PerfScore 2.48
G_M2973_IG19:
test rsi, rsi
jne G_M2973_IG12
;; size=9 bbWeight=1.98 PerfScore 2.48
G_M2973_IG20:
test rsi, rsi
- je G_M2973_IG26
+ je G_M2973_IG35
jmp SHORT G_M2973_IG14
;; size=11 bbWeight=1.98 PerfScore 6.44
G_M2973_IG21:
mov r13, gword ptr [rbx+8*rdi+0x10]
mov rsi, 0xD1FFAB1E ; System.Runtime.InteropServices.UnmanagedType
cmp qword ptr [r13], rsi
je SHORT G_M2973_IG23
;; size=21 bbWeight=3.96 PerfScore 24.75
G_M2973_IG22:
mov rsi, r13
mov rdi, 0xD1FFAB1E ; System.Runtime.InteropServices.UnmanagedType
mov r12, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX
call [r12]CORINFO_HELP_UNBOX
;; size=27 bbWeight=0.99 PerfScore 3.71
G_M2973_IG23:
mov r12d, dword ptr [r13+0x08]
mov r13d, 1
- jmp SHORT G_M2973_IG26
- ;; size=12 bbWeight=3.96 PerfScore 16.83
+ jmp G_M2973_IG35
+ ;; size=15 bbWeight=3.96 PerfScore 16.83
G_M2973_IG24:
mov rdx, gword ptr [rbx+8*rdi+0x10]
- lea rdi, [rbp-0x38]
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
- call CORINFO_HELP_UNBOX_NULLABLE
+ test rdx, rdx
+ je SHORT G_M2973_IG26
+ ;; size=10 bbWeight=3.96 PerfScore 12.87
+G_M2973_IG25:
+ mov rcx, 0xD1FFAB1E ; System.Int32
+ cmp qword ptr [rdx], rcx
+ je SHORT G_M2973_IG27
+ jmp G_M2973_IG70
+ ;; size=20 bbWeight=0.99 PerfScore 6.19
+G_M2973_IG26:
+ xor edx, edx
+ mov qword ptr [rbp-0x38], rdx
+ jmp SHORT G_M2973_IG28
+ ;; size=8 bbWeight=0.99 PerfScore 3.22
+G_M2973_IG27:
+ mov byte ptr [rbp-0x38], 1
+ mov edi, dword ptr [rdx+0x08]
+ mov dword ptr [rbp-0x34], edi
+ ;; size=10 bbWeight=0.99 PerfScore 3.96
+G_M2973_IG28:
movzx rcx, byte ptr [rbp-0x38]
- mov byte ptr [rbp-0x44], cl
mov edx, dword ptr [rbp-0x34]
- mov dword ptr [rbp-0x48], edx
- jmp SHORT G_M2973_IG26
- ;; size=39 bbWeight=3.96 PerfScore 38.61
-G_M2973_IG25:
- cmp dword ptr [rbp-0x70], 0
- jne G_M2973_IG53
- mov rdx, gword ptr [rbx+8*rdi+0x10]
- lea rdi, [rbp-0x40]
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[short]
- call CORINFO_HELP_UNBOX_NULLABLE
+ mov esi, edx
+ mov dword ptr [rbp-0x44], ecx
+ mov dword ptr [rbp-0x48], esi
+ jmp SHORT G_M2973_IG35
+ ;; size=17 bbWeight=3.96 PerfScore 24.75
+G_M2973_IG29:
+ mov eax, dword ptr [rbp-0x70]
+ test eax, eax
+ jne SHORT G_M2973_IG31
+ mov rdi, gword ptr [rbx+8*rdi+0x10]
+ test rdi, rdi
+ je SHORT G_M2973_IG32
+ ;; size=17 bbWeight=3.96 PerfScore 21.78
+G_M2973_IG30:
+ mov r8, 0xD1FFAB1E ; System.Int16
+ cmp qword ptr [rdi], r8
+ je SHORT G_M2973_IG33
+ jmp G_M2973_IG71
+ ;; size=20 bbWeight=0.99 PerfScore 6.19
+G_M2973_IG31:
+ jmp G_M2973_IG74
+ ;; size=5 bbWeight=1.98 PerfScore 3.96
+G_M2973_IG32:
+ xor edi, edi
+ mov dword ptr [rbp-0x40], edi
+ jmp SHORT G_M2973_IG34
+ ;; size=7 bbWeight=0.99 PerfScore 3.22
+G_M2973_IG33:
+ mov byte ptr [rbp-0x40], 1
+ movsx r9, word ptr [rdi+0x08]
+ mov word ptr [rbp-0x3E], r9w
+ ;; size=14 bbWeight=0.99 PerfScore 5.94
+G_M2973_IG34:
movzx r8, byte ptr [rbp-0x40]
mov byte ptr [rbp-0x4C], r8b
movsx r9, word ptr [rbp-0x3E]
mov word ptr [rbp-0x50], r9w
- ;; size=53 bbWeight=3.96 PerfScore 50.49
-G_M2973_IG26:
+ ;; size=19 bbWeight=3.96 PerfScore 23.76
+G_M2973_IG35:
mov r10d, dword ptr [rbp-0x2C]
inc r10d
mov r11d, dword ptr [rbp-0x6C]
cmp r11d, r10d
jg G_M2973_IG07
;; size=20 bbWeight=15.84 PerfScore 55.44
-G_M2973_IG27:
+G_M2973_IG36:
cmp dword ptr [rbp-0x70], 0
- je G_M2973_IG51
+ je G_M2973_IG68
;; size=10 bbWeight=1 PerfScore 3.00
-G_M2973_IG28:
+G_M2973_IG37:
mov r14, gword ptr [rbp-0x78]
mov dword ptr [r14+0x18], 30
mov r10d, -1
test r13b, r13b
cmove r12d, r10d
mov dword ptr [r14+0x1C], r12d
cmp byte ptr [rbp-0x44], 0
mov edx, r10d
cmovne edx, dword ptr [rbp-0x48]
mov dword ptr [r14+0x20], edx
;; size=44 bbWeight=0.50 PerfScore 4.50
-G_M2973_IG29:
+G_M2973_IG38:
vzeroupper
add rsp, 88
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M2973_IG30:
+G_M2973_IG39:
mov esi, r10d
mov rsi, gword ptr [r15+8*rsi+0x10]
test rsi, rsi
- je G_M2973_IG43
+ je G_M2973_IG52
;; size=17 bbWeight=0.04 PerfScore 0.14
-G_M2973_IG31:
+G_M2973_IG40:
cmp dword ptr [rsi+0x08], 12
- jne G_M2973_IG43
+ jne G_M2973_IG52
;; size=10 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG32:
+G_M2973_IG41:
vmovups xmm0, xmmword ptr [rsi+0x0C]
vmovups xmm1, xmmword ptr [rsi+0x14]
vpxor xmm1, xmm1, xmmword ptr [reloc @RWD00]
vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD16], -34
vptest xmm0, xmm0
sete dil
movzx rdi, dil
test edi, edi
- jne G_M2973_IG46
+ jne G_M2973_IG55
;; size=50 bbWeight=0.02 PerfScore 0.35
-G_M2973_IG33:
+G_M2973_IG42:
cmp dword ptr [rsi+0x08], 9
- jne G_M2973_IG44
+ jne G_M2973_IG53
;; size=10 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG34:
+G_M2973_IG43:
vmovups xmm0, xmmword ptr [rsi+0x0C]
vmovups xmm1, xmmword ptr [rsi+0x0E]
vpxor xmm1, xmm1, xmmword ptr [reloc @RWD32]
vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD48], -34
vptest xmm0, xmm0
sete dil
movzx rdi, dil
test edi, edi
- jne G_M2973_IG48
+ jne G_M2973_IG57
;; size=50 bbWeight=0.02 PerfScore 0.35
-G_M2973_IG35:
+G_M2973_IG44:
cmp dword ptr [rsi+0x08], 14
- jne G_M2973_IG45
+ jne G_M2973_IG54
;; size=10 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG36:
+G_M2973_IG45:
vmovups xmm0, xmmword ptr [rsi+0x0C]
vmovups xmm1, xmmword ptr [rsi+0x18]
vpxor xmm1, xmm1, xmmword ptr [reloc @RWD64]
vpternlogq xmm0, xmm1, xmmword ptr [reloc @RWD80], -34
vptest xmm0, xmm0
sete dil
movzx rdi, dil
test edi, edi
- jne G_M2973_IG49
+ jne G_M2973_IG62
;; size=50 bbWeight=0.02 PerfScore 0.35
-G_M2973_IG37:
+G_M2973_IG46:
cmp dword ptr [rsi+0x08], 16
- jne SHORT G_M2973_IG41
+ jne SHORT G_M2973_IG50
;; size=6 bbWeight=0.01 PerfScore 0.04
-G_M2973_IG38:
+G_M2973_IG47:
vmovups ymm0, ymmword ptr [rsi+0x0C]
vpxor ymm0, ymm0, ymmword ptr [reloc @RWD96]
vptest ymm0, ymm0
sete sil
movzx rsi, sil
test esi, esi
- je SHORT G_M2973_IG41
+ je SHORT G_M2973_IG50
;; size=30 bbWeight=0.02 PerfScore 0.29
-G_M2973_IG39:
+G_M2973_IG48:
mov dword ptr [rbp-0x2C], r10d
- jmp G_M2973_IG53
+ jmp G_M2973_IG74
;; size=9 bbWeight=0.01 PerfScore 0.03
-G_M2973_IG40:
+G_M2973_IG49:
mov r12d, dword ptr [r13+0x08]
mov r13d, 1
mov r10d, dword ptr [rbp-0x2C]
;; size=14 bbWeight=0.04 PerfScore 0.13
-G_M2973_IG41:
+G_M2973_IG50:
inc r10d
cmp r11d, r10d
mov r11d, dword ptr [rbp-0x6C]
- jg G_M2973_IG30
+ jg G_M2973_IG39
;; size=16 bbWeight=0.16 PerfScore 0.40
-G_M2973_IG42:
+G_M2973_IG51:
mov gword ptr [rbp-0x78], r14
- jmp G_M2973_IG27
+ jmp G_M2973_IG36
;; size=9 bbWeight=0.08 PerfScore 0.24
-G_M2973_IG43:
+G_M2973_IG52:
test rsi, rsi
- jne G_M2973_IG33
+ jne G_M2973_IG42
;; size=9 bbWeight=0.02 PerfScore 0.03
-G_M2973_IG44:
+G_M2973_IG53:
test rsi, rsi
- jne G_M2973_IG35
+ jne G_M2973_IG44
;; size=9 bbWeight=0.02 PerfScore 0.03
-G_M2973_IG45:
+G_M2973_IG54:
test rsi, rsi
- je SHORT G_M2973_IG41
- jmp SHORT G_M2973_IG37
+ je SHORT G_M2973_IG50
+ jmp SHORT G_M2973_IG46
;; size=7 bbWeight=0.02 PerfScore 0.07
-G_M2973_IG46:
+G_M2973_IG55:
cmp r10d, dword ptr [rbx+0x08]
- jae G_M2973_IG54
+ jae G_M2973_IG75
mov dword ptr [rbp-0x2C], r10d
mov esi, r10d
mov r13, gword ptr [rbx+8*rsi+0x10]
mov rsi, 0xD1FFAB1E ; System.Runtime.InteropServices.UnmanagedType
cmp qword ptr [r13], rsi
- je SHORT G_M2973_IG40
+ je SHORT G_M2973_IG49
;; size=38 bbWeight=0.04 PerfScore 0.46
-G_M2973_IG47:
+G_M2973_IG56:
mov rsi, r13
mov rdi, 0xD1FFAB1E ; System.Runtime.InteropServices.UnmanagedType
mov r12, 0xD1FFAB1E ; code for CORINFO_HELP_UNBOX
call [r12]CORINFO_HELP_UNBOX
mov r11d, dword ptr [rbp-0x6C]
- jmp G_M2973_IG40
+ jmp G_M2973_IG49
;; size=36 bbWeight=0.01 PerfScore 0.07
-G_M2973_IG48:
+G_M2973_IG57:
cmp r10d, dword ptr [rbx+0x08]
- jae G_M2973_IG54
- mov dword ptr [rbp-0x2C], r10d
- mov edx, r10d
- mov rdx, gword ptr [rbx+8*rdx+0x10]
- lea rdi, [rbp-0x38]
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
- call CORINFO_HELP_UNBOX_NULLABLE
+ jae G_M2973_IG75
+ mov ecx, r10d
+ mov rdx, gword ptr [rbx+8*rcx+0x10]
+ test rdx, rdx
+ je SHORT G_M2973_IG59
+ ;; size=23 bbWeight=0.04 PerfScore 0.30
+G_M2973_IG58:
+ mov rsi, 0xD1FFAB1E ; System.Int32
+ cmp qword ptr [rdx], rsi
+ je SHORT G_M2973_IG60
+ jmp G_M2973_IG72
+ ;; size=20 bbWeight=0.01 PerfScore 0.06
+G_M2973_IG59:
+ xor edx, edx
+ mov qword ptr [rbp-0x38], rdx
+ jmp SHORT G_M2973_IG61
+ ;; size=8 bbWeight=0.01 PerfScore 0.03
+G_M2973_IG60:
+ mov byte ptr [rbp-0x38], 1
+ mov esi, dword ptr [rdx+0x08]
+ mov dword ptr [rbp-0x34], esi
+ ;; size=10 bbWeight=0.01 PerfScore 0.04
+G_M2973_IG61:
movzx rcx, byte ptr [rbp-0x38]
- mov byte ptr [rbp-0x44], cl
+ movzx rdi, cl
mov edx, dword ptr [rbp-0x34]
- mov dword ptr [rbp-0x48], edx
- mov r10d, dword ptr [rbp-0x2C]
- mov r11d, dword ptr [rbp-0x6C]
- jmp G_M2973_IG41
- ;; size=67 bbWeight=0.04 PerfScore 0.68
-G_M2973_IG49:
- cmp dword ptr [rbp-0x70], 0
- jne SHORT G_M2973_IG50
+ mov ecx, edx
+ mov dword ptr [rbp-0x44], edi
+ mov dword ptr [rbp-0x48], ecx
+ jmp G_M2973_IG50
+ ;; size=24 bbWeight=0.04 PerfScore 0.26
+G_M2973_IG62:
+ mov eax, dword ptr [rbp-0x70]
+ test eax, eax
+ jne SHORT G_M2973_IG64
cmp r10d, dword ptr [rbx+0x08]
- jae G_M2973_IG54
+ jae G_M2973_IG75
+ mov r8d, r10d
+ mov rdi, gword ptr [rbx+8*r8+0x10]
+ mov r8, rdi
+ test r8, r8
+ je SHORT G_M2973_IG65
+ ;; size=33 bbWeight=0.04 PerfScore 0.40
+G_M2973_IG63:
+ mov r9, 0xD1FFAB1E ; System.Int16
+ cmp qword ptr [r8], r9
+ je SHORT G_M2973_IG66
+ jmp G_M2973_IG73
+ ;; size=20 bbWeight=0.01 PerfScore 0.06
+G_M2973_IG64:
mov dword ptr [rbp-0x2C], r10d
- mov edi, r10d
- mov rdx, gword ptr [rbx+8*rdi+0x10]
- lea rdi, [rbp-0x40]
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[short]
- call CORINFO_HELP_UNBOX_NULLABLE
+ jmp G_M2973_IG74
+ ;; size=9 bbWeight=0.02 PerfScore 0.06
+G_M2973_IG65:
+ xor r8d, r8d
+ mov dword ptr [rbp-0x40], r8d
+ jmp SHORT G_M2973_IG67
+ ;; size=9 bbWeight=0.01 PerfScore 0.03
+G_M2973_IG66:
+ mov byte ptr [rbp-0x40], 1
+ movsx rsi, word ptr [r8+0x08]
+ mov word ptr [rbp-0x3E], si
+ ;; size=13 bbWeight=0.01 PerfScore 0.06
+G_M2973_IG67:
movzx r8, byte ptr [rbp-0x40]
- movzx rsi, r8b
movsx r9, word ptr [rbp-0x3E]
- movsx rdx, r9w
- mov dword ptr [rbp-0x4C], esi
- mov dword ptr [rbp-0x50], edx
- mov r10d, dword ptr [rbp-0x2C]
- mov r11d, dword ptr [rbp-0x6C]
- jmp G_M2973_IG41
- ;; size=84 bbWeight=0.04 PerfScore 0.90
-G_M2973_IG50:
- mov dword ptr [rbp-0x2C], r10d
- jmp SHORT G_M2973_IG53
- ;; size=6 bbWeight=0.02 PerfScore 0.06
-G_M2973_IG51:
+ mov dword ptr [rbp-0x4C], r8d
+ mov dword ptr [rbp-0x50], r9d
+ jmp G_M2973_IG50
+ ;; size=23 bbWeight=0.04 PerfScore 0.32
+G_M2973_IG68:
mov r14, gword ptr [rbp-0x78]
mov byte ptr [rbp-0x58], r13b
mov dword ptr [rbp-0x54], r12d
movzx rcx, byte ptr [rbp-0x44]
mov byte ptr [rbp-0x60], cl
mov edx, dword ptr [rbp-0x48]
mov dword ptr [rbp-0x5C], edx
movzx r8, byte ptr [rbp-0x4C]
mov byte ptr [rbp-0x68], r8b
movsx r9, word ptr [rbp-0x50]
mov word ptr [rbp-0x66], r9w
mov rsi, qword ptr [rbp-0x58]
mov rdx, qword ptr [rbp-0x60]
mov ecx, dword ptr [rbp-0x68]
mov rdi, r14
mov rax, 0xD1FFAB1E ; code for System.Reflection.Emit.MarshallingData:SetMarshalAsArray(System.Nullable`1[int],System.Nullable`1[int],System.Nullable`1[short]):this
cmp dword ptr [rdi], edi
call [rax]System.Reflection.Emit.MarshallingData:SetMarshalAsArray(System.Nullable`1[int],System.Nullable`1[int],System.Nullable`1[short]):this
nop
;; size=73 bbWeight=0.50 PerfScore 11.38
-G_M2973_IG52:
+G_M2973_IG69:
vzeroupper
add rsp, 88
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M2973_IG53:
+G_M2973_IG70:
+ lea rdi, [rbp-0x38]
+ mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
+ call CORINFO_HELP_UNBOX_NULLABLE
+ jmp G_M2973_IG28
+ ;; size=24 bbWeight=0 PerfScore 0.00
+G_M2973_IG71:
+ mov gword ptr [rbp-0x80], rdi
+ lea rdi, [rbp-0x40]
+ mov rdx, gword ptr [rbp-0x80]
+ mov rsi, 0xD1FFAB1E ; System.Nullable`1[short]
+ call CORINFO_HELP_UNBOX_NULLABLE
+ mov eax, dword ptr [rbp-0x70]
+ jmp G_M2973_IG34
+ ;; size=35 bbWeight=0 PerfScore 0.00
+G_M2973_IG72:
+ mov dword ptr [rbp-0x2C], r10d
+ lea rdi, [rbp-0x38]
+ mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
+ call CORINFO_HELP_UNBOX_NULLABLE
+ mov r10d, dword ptr [rbp-0x2C]
+ mov r11d, dword ptr [rbp-0x6C]
+ jmp G_M2973_IG61
+ ;; size=36 bbWeight=0 PerfScore 0.00
+G_M2973_IG73:
+ mov dword ptr [rbp-0x2C], r10d
+ lea rdi, [rbp-0x40]
+ mov rdx, r8
+ mov rsi, 0xD1FFAB1E ; System.Nullable`1[short]
+ call CORINFO_HELP_UNBOX_NULLABLE
+ mov eax, dword ptr [rbp-0x70]
+ mov r10d, dword ptr [rbp-0x2C]
+ mov r11d, dword ptr [rbp-0x6C]
+ jmp G_M2973_IG67
+ ;; size=42 bbWeight=0 PerfScore 0.00
+G_M2973_IG74:
mov rcx, 0xD1FFAB1E ; code for System.SR:get_Argument_InvalidParameterForUnmanagedType():System.String
call [rcx]System.SR:get_Argument_InvalidParameterForUnmanagedType():System.String
mov rbx, rax
mov edi, dword ptr [rbp-0x2C]
mov r15, gword ptr [r15+8*rdi+0x10]
mov r14, 0xD1FFAB1E ; 'ByValArray'
mov rdi, 0xD1FFAB1E ; 'LPArray'
cmp dword ptr [rbp-0x70], 0
cmove r14, rdi
mov rdi, 0xD1FFAB1E ; System.ArgumentException
call CORINFO_HELP_NEWSFAST
mov r13, rax
mov rdi, rbx
mov rsi, r15
mov rdx, r14
mov rax, 0xD1FFAB1E ; code for System.SR:Format(System.String,System.Object,System.Object):System.String
call [rax]System.SR:Format(System.String,System.Object,System.Object):System.String
mov rbx, rax
mov edi, 0x1057
mov rsi, 0xD1FFAB1E
call CORINFO_HELP_STRCNS
mov rdx, rax
mov rsi, rbx
mov rdi, r13
mov rax, 0xD1FFAB1E ; code for System.ArgumentException:.ctor(System.String,System.String):this
call [rax]System.ArgumentException:.ctor(System.String,System.String):this
mov rdi, r13
call CORINFO_HELP_THROW
int3
;; size=143 bbWeight=0 PerfScore 0.00
-G_M2973_IG54:
+G_M2973_IG75:
call CORINFO_HELP_RNGCHKFAIL
int3
;; size=6 bbWeight=0 PerfScore 0.00
RWD00 dq 0062007500530079h, 0065007000790054h
RWD16 dq 0061007200720041h, 0062007500530079h
RWD32 dq 00430065007A0069h, 00740073006E006Fh
RWD48 dq 0065007A00690053h, 0073006E006F0043h
RWD64 dq 0049006D00610072h, 007800650064006Eh
RWD80 dq 0065007A00690053h, 0061007200610050h
RWD96 dq 0065006600610053h, 0061007200720041h, 0062007500530079h, 0065007000790054h
-; Total bytes of code 1444, prolog size 32, PerfScore 423.78, instruction count 324, allocated bytes for code 1444 (MethodHash=a7f5f462) for method System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) (FullOpts)
+; Total bytes of code 1674, prolog size 32, PerfScore 450.50, instruction count 386, allocated bytes for code 1674 (MethodHash=a7f5f462) for method System.Reflection.Emit.MarshallingData:DecodeMarshalAsArray(System.String[],System.Object[],ubyte,System.Reflection.Emit.MarshallingData) (FullOpts) Note: some changes were skipped as they were too large to fit into a comment. Larger list of diffs: https://gist.github.com/MihuBot/0f15591a2b8c88ec6cde96e9d821eb3c |
Top method improvements-63 (-28.77 % of base) - System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this ; Assembly listing for method System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 4, 3 ) ref -> r15 this class-hnd single-def <System.Collections.Generic.Comparer`1[System.Nullable`1[int]]>
+; V00 this [V00,T02] ( 4, 3 ) ref -> rdi this class-hnd single-def <System.Collections.Generic.Comparer`1[System.Nullable`1[int]]>
; V01 arg1 [V01,T01] ( 5, 4 ) ref -> rsi class-hnd single-def <System.Object>
-; V02 arg2 [V02,T00] ( 6, 4 ) ref -> rbx class-hnd single-def <System.Object>
+; V02 arg2 [V02,T00] ( 6, 4 ) ref -> rdx class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V05 tmp2 [V05 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
-; V06 tmp3 [V06 ] ( 3, 3 ) struct ( 8) [rbp-0x28] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
-; V07 tmp4 [V07 ] ( 2, 2 ) struct ( 8) [rbp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+; V06 tmp3 [V06 ] ( 4, 4 ) struct ( 8) [rbp-0x08] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+; V07 tmp4 [V07 ] ( 3, 3 ) struct ( 8) [rbp-0x10] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
;* V08 tmp5 [V08 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Nullable`1[int]>
; V09 tmp6 [V09,T04] ( 2, 2 ) int -> rax "Single return block return value"
-; V10 tmp7 [V10 ] ( 2, 1.50) ubyte -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
-; V11 tmp8 [V11 ] ( 2, 1.50) int -> [rbp-0x24] do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
-; V12 tmp9 [V12 ] ( 2, 2 ) ubyte -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
-; V13 tmp10 [V13 ] ( 2, 2 ) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
-; V14 tmp11 [V14,T07] ( 2, 1 ) ubyte -> r14 "field V08.hasValue (fldOffset=0x0)" P-INDEP
-; V15 tmp12 [V15,T08] ( 2, 1 ) int -> r13 "field V08.value (fldOffset=0x4)" P-INDEP
-; V16 tmp13 [V16,T03] ( 3, 3 ) struct ( 8) [rbp-0x38] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-; V17 tmp14 [V17,T05] ( 2, 2 ) struct ( 8) [rbp-0x40] do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
-; V18 cse0 [V18,T06] ( 3, 1.50) long -> rdi "CSE #01: moderate"
+; V10 tmp7 [V10 ] ( 2, 1 ) ubyte -> [rbp-0x08] do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
+; V11 tmp8 [V11 ] ( 2, 1 ) int -> [rbp-0x04] do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
+; V12 tmp9 [V12 ] ( 2, 1.50) ubyte -> [rbp-0x10] do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
+; V13 tmp10 [V13 ] ( 2, 1.50) int -> [rbp-0x0C] do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
+; V14 tmp11 [V14,T07] ( 2, 1 ) ubyte -> rsi "field V08.hasValue (fldOffset=0x0)" P-INDEP
+; V15 tmp12 [V15,T08] ( 2, 1 ) int -> rax "field V08.value (fldOffset=0x4)" P-INDEP
+; V16 tmp13 [V16,T03] ( 3, 3 ) struct ( 8) [rbp-0x18] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+; V17 tmp14 [V17,T05] ( 2, 2 ) struct ( 8) [rbp-0x20] do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
+; V18 cse0 [V18,T06] ( 3, 1.50) long -> rax "CSE #01: moderate"
;
; Lcl frame size = 32
G_M52206_IG01:
push rbp
- push r15
- push r14
- push r13
- push rbx
sub rsp, 32
- lea rbp, [rsp+0x40]
- mov r15, rdi
- mov rbx, rdx
- ;; size=23 bbWeight=1 PerfScore 6.25
+ lea rbp, [rsp+0x20]
+ ;; size=10 bbWeight=1 PerfScore 1.75
G_M52206_IG02:
test rsi, rsi
jne SHORT G_M52206_IG05
;; size=5 bbWeight=1 PerfScore 1.25
G_M52206_IG03:
xor eax, eax
mov esi, -1
- test rbx, rbx
+ test rdx, rdx
cmovne eax, esi
;; size=13 bbWeight=0.50 PerfScore 0.50
G_M52206_IG04:
add rsp, 32
- pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
+ ;; size=6 bbWeight=0.50 PerfScore 0.88
G_M52206_IG05:
- test rbx, rbx
+ test rdx, rdx
jne SHORT G_M52206_IG07
mov eax, 1
;; size=10 bbWeight=0.50 PerfScore 0.75
G_M52206_IG06:
add rsp, 32
- pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
+ ;; size=6 bbWeight=0.50 PerfScore 0.88
G_M52206_IG07:
- mov rdi, 0xD1FFAB1E ; System.Int32
- cmp qword ptr [rsi], rdi
+ mov rax, 0xD1FFAB1E ; System.Int32
+ cmp qword ptr [rsi], rax
jne SHORT G_M52206_IG09
- cmp qword ptr [rbx], rdi
+ cmp qword ptr [rdx], rax
jne SHORT G_M52206_IG09
- lea rdi, [rbp-0x28]
- mov rdx, rsi
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
- call CORINFO_HELP_UNBOX_NULLABLE
- movzx r14, byte ptr [rbp-0x28]
- mov r13d, dword ptr [rbp-0x24]
- lea rdi, [rbp-0x30]
- mov rdx, rbx
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
- call CORINFO_HELP_UNBOX_NULLABLE
- mov byte ptr [rbp-0x38], r14b
- mov dword ptr [rbp-0x34], r13d
- mov rsi, qword ptr [rbp-0x30]
- mov qword ptr [rbp-0x40], rsi
- mov rsi, qword ptr [rbp-0x38]
- mov rdx, qword ptr [rbp-0x40]
- mov rdi, r15
- mov rax, qword ptr [r15]
+ mov byte ptr [rbp-0x08], 1
+ mov esi, dword ptr [rsi+0x08]
+ mov dword ptr [rbp-0x04], esi
+ movzx rsi, byte ptr [rbp-0x08]
+ mov eax, dword ptr [rbp-0x04]
+ mov byte ptr [rbp-0x10], 1
+ mov edx, dword ptr [rdx+0x08]
+ mov dword ptr [rbp-0x0C], edx
+ mov byte ptr [rbp-0x18], sil
+ mov dword ptr [rbp-0x14], eax
+ mov rsi, qword ptr [rbp-0x10]
+ mov qword ptr [rbp-0x20], rsi
+ mov rsi, qword ptr [rbp-0x18]
+ mov rdx, qword ptr [rbp-0x20]
+ mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x40]
call [rax+0x20]System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:Compare(System.Nullable`1[int],System.Nullable`1[int]):int:this
nop
- ;; size=111 bbWeight=0.50 PerfScore 13.88
+ ;; size=82 bbWeight=0.50 PerfScore 15.75
G_M52206_IG08:
add rsp, 32
- pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
+ ;; size=6 bbWeight=0.50 PerfScore 0.88
G_M52206_IG09:
mov edi, 55
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException(int)
call [rax]System.ThrowHelper:ThrowArgumentException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
-; Total bytes of code 219, prolog size 17, PerfScore 28.25, instruction count 69, allocated bytes for code 219 (MethodHash=18db3411) for method System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts)
+; Total bytes of code 156, prolog size 10, PerfScore 22.62, instruction count 48, allocated bytes for code 156 (MethodHash=18db3411) for method System.Collections.Generic.Comparer`1[System.Nullable`1[int]]:System.Collections.IComparer.Compare(System.Object,System.Object):int:this (FullOpts) -63 (-29.58 % of base) - System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this ; Assembly listing for method System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; Final local variable assignments
;
-; V00 this [V00,T02] ( 4, 3 ) ref -> r15 this class-hnd single-def <System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]>
+; V00 this [V00,T02] ( 4, 3 ) ref -> rdi this class-hnd single-def <System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]>
; V01 arg1 [V01,T00] ( 6, 4.50) ref -> rsi class-hnd single-def <System.Object>
-; V02 arg2 [V02,T01] ( 6, 4.50) ref -> rbx class-hnd single-def <System.Object>
+; V02 arg2 [V02,T01] ( 6, 4.50) ref -> rdx class-hnd single-def <System.Object>
;# V03 OutArgs [V03 ] ( 1, 1 ) struct ( 0) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
;* V04 tmp1 [V04 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
;* V05 tmp2 [V05 ] ( 0, 0 ) int -> zero-ref "spilling qmarkNull"
-; V06 tmp3 [V06 ] ( 3, 3 ) struct ( 8) [rbp-0x28] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
-; V07 tmp4 [V07 ] ( 2, 2 ) struct ( 8) [rbp-0x30] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+; V06 tmp3 [V06 ] ( 4, 4 ) struct ( 8) [rbp-0x08] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
+; V07 tmp4 [V07 ] ( 3, 3 ) struct ( 8) [rbp-0x10] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[int]>
;* V08 tmp5 [V08 ] ( 0, 0 ) struct ( 8) zero-ref "impAppendStmt" <System.Nullable`1[int]>
-; V09 tmp6 [V09 ] ( 2, 1.50) ubyte -> [rbp-0x28] do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
-; V10 tmp7 [V10 ] ( 2, 1.50) int -> [rbp-0x24] do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
-; V11 tmp8 [V11 ] ( 2, 2 ) ubyte -> [rbp-0x30] do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
-; V12 tmp9 [V12 ] ( 2, 2 ) int -> [rbp-0x2C] do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
-; V13 tmp10 [V13,T06] ( 2, 1 ) ubyte -> r14 "field V08.hasValue (fldOffset=0x0)" P-INDEP
-; V14 tmp11 [V14,T07] ( 2, 1 ) int -> r13 "field V08.value (fldOffset=0x4)" P-INDEP
-; V15 tmp12 [V15,T03] ( 3, 3 ) struct ( 8) [rbp-0x38] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
-; V16 tmp13 [V16,T04] ( 2, 2 ) struct ( 8) [rbp-0x40] do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
-; V17 cse0 [V17,T05] ( 3, 1.50) long -> rdi "CSE #01: moderate"
+; V09 tmp6 [V09 ] ( 2, 1 ) ubyte -> [rbp-0x08] do-not-enreg[X] addr-exposed "field V06.hasValue (fldOffset=0x0)" P-DEP
+; V10 tmp7 [V10 ] ( 2, 1 ) int -> [rbp-0x04] do-not-enreg[X] addr-exposed "field V06.value (fldOffset=0x4)" P-DEP
+; V11 tmp8 [V11 ] ( 2, 1.50) ubyte -> [rbp-0x10] do-not-enreg[X] addr-exposed "field V07.hasValue (fldOffset=0x0)" P-DEP
+; V12 tmp9 [V12 ] ( 2, 1.50) int -> [rbp-0x0C] do-not-enreg[X] addr-exposed "field V07.value (fldOffset=0x4)" P-DEP
+; V13 tmp10 [V13,T06] ( 2, 1 ) ubyte -> rsi "field V08.hasValue (fldOffset=0x0)" P-INDEP
+; V14 tmp11 [V14,T07] ( 2, 1 ) int -> rax "field V08.value (fldOffset=0x4)" P-INDEP
+; V15 tmp12 [V15,T03] ( 3, 3 ) struct ( 8) [rbp-0x18] do-not-enreg[SF] "by-value struct argument" <System.Nullable`1[int]>
+; V16 tmp13 [V16,T04] ( 2, 2 ) struct ( 8) [rbp-0x20] do-not-enreg[S] "by-value struct argument" <System.Nullable`1[int]>
+; V17 cse0 [V17,T05] ( 3, 1.50) long -> rax "CSE #01: moderate"
;
; Lcl frame size = 32
G_M56570_IG01:
push rbp
- push r15
- push r14
- push r13
- push rbx
sub rsp, 32
- lea rbp, [rsp+0x40]
- mov r15, rdi
- mov rbx, rdx
- ;; size=23 bbWeight=1 PerfScore 6.25
+ lea rbp, [rsp+0x20]
+ ;; size=10 bbWeight=1 PerfScore 1.75
G_M56570_IG02:
- cmp rsi, rbx
+ cmp rsi, rdx
jne SHORT G_M56570_IG05
;; size=5 bbWeight=1 PerfScore 1.25
G_M56570_IG03:
mov eax, 1
;; size=5 bbWeight=0.50 PerfScore 0.12
G_M56570_IG04:
add rsp, 32
- pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
+ ;; size=6 bbWeight=0.50 PerfScore 0.88
G_M56570_IG05:
test rsi, rsi
je SHORT G_M56570_IG06
- test rbx, rbx
+ test rdx, rdx
jne SHORT G_M56570_IG08
;; size=10 bbWeight=0.50 PerfScore 1.25
G_M56570_IG06:
xor eax, eax
;; size=2 bbWeight=0.50 PerfScore 0.12
G_M56570_IG07:
add rsp, 32
- pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
+ ;; size=6 bbWeight=0.50 PerfScore 0.88
G_M56570_IG08:
- mov rdi, 0xD1FFAB1E ; System.Int32
- cmp qword ptr [rsi], rdi
+ mov rax, 0xD1FFAB1E ; System.Int32
+ cmp qword ptr [rsi], rax
jne SHORT G_M56570_IG10
- cmp qword ptr [rbx], rdi
+ cmp qword ptr [rdx], rax
jne SHORT G_M56570_IG10
- lea rdi, [rbp-0x28]
- mov rdx, rsi
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
- call CORINFO_HELP_UNBOX_NULLABLE
- movzx r14, byte ptr [rbp-0x28]
- mov r13d, dword ptr [rbp-0x24]
- lea rdi, [rbp-0x30]
- mov rdx, rbx
- mov rsi, 0xD1FFAB1E ; System.Nullable`1[int]
- call CORINFO_HELP_UNBOX_NULLABLE
- mov byte ptr [rbp-0x38], r14b
- mov dword ptr [rbp-0x34], r13d
- mov rsi, qword ptr [rbp-0x30]
- mov qword ptr [rbp-0x40], rsi
- mov rsi, qword ptr [rbp-0x38]
- mov rdx, qword ptr [rbp-0x40]
- mov rdi, r15
- mov rax, qword ptr [r15]
+ mov byte ptr [rbp-0x08], 1
+ mov esi, dword ptr [rsi+0x08]
+ mov dword ptr [rbp-0x04], esi
+ movzx rsi, byte ptr [rbp-0x08]
+ mov eax, dword ptr [rbp-0x04]
+ mov byte ptr [rbp-0x10], 1
+ mov edx, dword ptr [rdx+0x08]
+ mov dword ptr [rbp-0x0C], edx
+ mov byte ptr [rbp-0x18], sil
+ mov dword ptr [rbp-0x14], eax
+ mov rsi, qword ptr [rbp-0x10]
+ mov qword ptr [rbp-0x20], rsi
+ mov rsi, qword ptr [rbp-0x18]
+ mov rdx, qword ptr [rbp-0x20]
+ mov rax, qword ptr [rdi]
mov rax, qword ptr [rax+0x40]
call [rax+0x20]System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:Equals(System.Nullable`1[int],System.Nullable`1[int]):ubyte:this
nop
- ;; size=111 bbWeight=0.50 PerfScore 13.88
+ ;; size=82 bbWeight=0.50 PerfScore 15.75
G_M56570_IG09:
add rsp, 32
- pop rbx
- pop r13
- pop r14
- pop r15
pop rbp
ret
- ;; size=13 bbWeight=0.50 PerfScore 1.88
+ ;; size=6 bbWeight=0.50 PerfScore 0.88
G_M56570_IG10:
mov edi, 55
mov rax, 0xD1FFAB1E ; code for System.ThrowHelper:ThrowArgumentException(int)
call [rax]System.ThrowHelper:ThrowArgumentException(int)
int3
;; size=18 bbWeight=0 PerfScore 0.00
-; Total bytes of code 213, prolog size 17, PerfScore 28.50, instruction count 68, allocated bytes for code 213 (MethodHash=21832305) for method System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts)
+; Total bytes of code 150, prolog size 10, PerfScore 22.88, instruction count 47, allocated bytes for code 150 (MethodHash=21832305) for method System.Collections.Generic.EqualityComparer`1[System.Nullable`1[int]]:System.Collections.IEqualityComparer.Equals(System.Object,System.Object):ubyte:this (FullOpts) -46 (-3.49 % of base) - System.GC:RefreshMemoryLimit() ; Assembly listing for method System.GC:RefreshMemoryLimit() (FullOpts)
; Emitting BLENDED_CODE for X64 with AVX512 - Unix
; FullOpts code
; optimized code
; rbp based frame
; partially interruptible
; No PGO data
; 0 inlinees with PGO data; 0 single block inlinees; 8 inlinees without PGO data
; Final local variable assignments
;
;* V00 loc0 [V00 ] ( 0, 0 ) long -> zero-ref
;* V01 loc1 [V01 ] ( 0, 0 ) long -> zero-ref
;* V02 loc2 [V02 ] ( 0, 0 ) long -> zero-ref
;* V03 loc3 [V03 ] ( 0, 0 ) long -> zero-ref
;* V04 loc4 [V04 ] ( 0, 0 ) long -> zero-ref
;* V05 loc5 [V05 ] ( 0, 0 ) long -> zero-ref
;* V06 loc6 [V06 ] ( 0, 0 ) long -> zero-ref
;* V07 loc7 [V07 ] ( 0, 0 ) long -> zero-ref
-; V08 loc8 [V08,T13] ( 3, 3 ) int -> rax
+; V08 loc8 [V08,T12] ( 3, 3 ) int -> rax
;* V09 loc9 [V09 ] ( 0, 0 ) struct (16) zero-ref ld-addr-op <System.Nullable`1[ulong]>
; V10 loc10 [V10,T02] ( 10, 10 ) struct (64) [rbp-0x68] do-not-enreg[SF] ld-addr-op <System.GC+GCHeapHardLimitInfo>
; V11 OutArgs [V11 ] ( 1, 1 ) struct (64) [rsp+0x00] do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
-; V12 tmp1 [V12,T05] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V13 tmp2 [V13,T14] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V14 tmp3 [V14 ] ( 3, 6 ) struct (16) [rbp-0x78] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V15 tmp4 [V15,T06] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V16 tmp5 [V16,T15] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V17 tmp6 [V17 ] ( 3, 6 ) struct (16) [rbp-0x88] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V18 tmp7 [V18,T07] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V19 tmp8 [V19,T16] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V20 tmp9 [V20 ] ( 3, 6 ) struct (16) [rbp-0x98] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V21 tmp10 [V21,T08] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V22 tmp11 [V22,T17] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V23 tmp12 [V23 ] ( 3, 6 ) struct (16) [rbp-0xA8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V24 tmp13 [V24,T09] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V25 tmp14 [V25,T18] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V26 tmp15 [V26 ] ( 3, 6 ) struct (16) [rbp-0xB8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V27 tmp16 [V27,T10] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V28 tmp17 [V28,T19] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V29 tmp18 [V29 ] ( 3, 6 ) struct (16) [rbp-0xC8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V30 tmp19 [V30,T11] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V31 tmp20 [V31,T20] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V32 tmp21 [V32 ] ( 3, 6 ) struct (16) [rbp-0xD8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V33 tmp22 [V33,T12] ( 4, 4.75) ref -> rdx single-def "ISINST eval op1"
-; V34 tmp23 [V34,T21] ( 3, 2.75) ref -> rdx class-hnd "spilling qmarkNull" <System.UInt64>
-; V35 tmp24 [V35 ] ( 3, 6 ) struct (16) [rbp-0xE8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
-; V36 tmp25 [V36,T30] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
-; V37 tmp26 [V37,T31] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
-; V38 tmp27 [V38,T22] ( 2, 2 ) long -> r13 "Inline return value spill temp"
-; V39 tmp28 [V39,T23] ( 2, 2 ) long -> r12 "Inline return value spill temp"
-; V40 tmp29 [V40,T24] ( 2, 2 ) long -> r14 "Inline return value spill temp"
-; V41 tmp30 [V41,T25] ( 2, 2 ) long -> [rbp-0xF0] spill-single-def "Inline return value spill temp"
-; V42 tmp31 [V42,T26] ( 2, 2 ) long -> [rbp-0xF8] spill-single-def "Inline return value spill temp"
-; V43 tmp32 [V43,T27] ( 2, 2 ) long -> [rbp-0x100] spill-single-def "Inline return value spill temp"
-; V44 tmp33 [V44,T28] ( 2, 2 ) long -> [rbp-0x108] spill-single-def "Inline return value spill temp"
-; V45 tmp34 [V45,T29] ( 2, 2 ) long -> rax "Inline return value spill temp"
-; V46 FramesRoot [V46,T04] ( 6, 6 ) long -> rbx "Pinvoke FrameListRoot"
-; V47 PInvokeFrame [V47 ] ( 8, 8 ) struct (64) [rbp-0x148] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
+; V12 tmp1 [V12,T04] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V13 tmp2 [V13,T21] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V14 tmp3 [V14 ] ( 5, 5.50) struct (16) [rbp-0x78] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V15 tmp4 [V15,T05] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V16 tmp5 [V16,T22] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V17 tmp6 [V17 ] ( 5, 5.50) struct (16) [rbp-0x88] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V18 tmp7 [V18,T06] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V19 tmp8 [V19,T23] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V20 tmp9 [V20 ] ( 5, 5.50) struct (16) [rbp-0x98] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V21 tmp10 [V21,T07] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V22 tmp11 [V22,T24] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V23 tmp12 [V23 ] ( 5, 5.50) struct (16) [rbp-0xA8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V24 tmp13 [V24,T08] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V25 tmp14 [V25,T25] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V26 tmp15 [V26 ] ( 5, 5.50) struct (16) [rbp-0xB8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V27 tmp16 [V27,T09] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V28 tmp17 [V28,T26] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V29 tmp18 [V29 ] ( 5, 5.50) struct (16) [rbp-0xC8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V30 tmp19 [V30,T10] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V31 tmp20 [V31,T27] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V32 tmp21 [V32 ] ( 5, 5.50) struct (16) [rbp-0xD8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V33 tmp22 [V33,T11] ( 4, 5 ) ref -> rax single-def "ISINST eval op1"
+; V34 tmp23 [V34,T28] ( 2, 1 ) ref -> rax class-hnd "spilling qmarkNull" <System.UInt64>
+; V35 tmp24 [V35 ] ( 5, 5.50) struct (16) [rbp-0xE8] do-not-enreg[XS] addr-exposed ld-addr-op "Nullable<T> tmp" <System.Nullable`1[ulong]>
+; V36 tmp25 [V36,T29] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
+; V37 tmp26 [V37,T30] ( 3, 0 ) ref -> rbx class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
+; V38 tmp27 [V38,T13] ( 2, 2 ) long -> r14 "Inline return value spill temp"
+; V39 tmp28 [V39,T14] ( 2, 2 ) long -> r13 "Inline return value spill temp"
+; V40 tmp29 [V40,T15] ( 2, 2 ) long -> r12 "Inline return value spill temp"
+; V41 tmp30 [V41,T16] ( 2, 2 ) long -> r15 "Inline return value spill temp"
+; V42 tmp31 [V42,T17] ( 2, 2 ) long -> [rbp-0xF0] spill-single-def "Inline return value spill temp"
+; V43 tmp32 [V43,T18] ( 2, 2 ) long -> [rbp-0xF8] spill-single-def "Inline return value spill temp"
+; V44 tmp33 [V44,T19] ( 2, 2 ) long -> [rbp-0x100] spill-single-def "Inline return value spill temp"
+; V45 tmp34 [V45,T20] ( 2, 2 ) long -> rax "Inline return value spill temp"
+; V46 FramesRoot [V46,T03] ( 6, 6 ) long -> rbx "Pinvoke FrameListRoot"
+; V47 PInvokeFrame [V47 ] ( 8, 8 ) struct (64) [rbp-0x140] do-not-enreg[XS] addr-exposed "Pinvoke FrameVar"
; V48 tmp37 [V48,T00] ( 16, 16 ) ubyte -> registers "field V09.hasValue (fldOffset=0x0)" P-INDEP
; V49 tmp38 [V49,T01] ( 16, 16 ) long -> registers "field V09.value (fldOffset=0x8)" P-INDEP
-; V50 tmp39 [V50 ] ( 2, 3 ) ubyte -> [rbp-0x78] do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
-; V51 tmp40 [V51 ] ( 2, 3 ) long -> [rbp-0x70] do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x8)" P-DEP
-; V52 tmp41 [V52 ] ( 2, 3 ) ubyte -> [rbp-0x88] do-not-enreg[X] addr-exposed "field V17.hasValue (fldOffset=0x0)" P-DEP
-; V53 tmp42 [V53 ] ( 2, 3 ) long -> [rbp-0x80] do-not-enreg[X] addr-exposed "field V17.value (fldOffset=0x8)" P-DEP
-; V54 tmp43 [V54 ] ( 2, 3 ) ubyte -> [rbp-0x98] do-not-enreg[X] addr-exposed "field V20.hasValue (fldOffset=0x0)" P-DEP
-; V55 tmp44 [V55 ] ( 2, 3 ) long -> [rbp-0x90] do-not-enreg[X] addr-exposed "field V20.value (fldOffset=0x8)" P-DEP
-; V56 tmp45 [V56 ] ( 2, 3 ) ubyte -> [rbp-0xA8] do-not-enreg[X] addr-exposed "field V23.hasValue (fldOffset=0x0)" P-DEP
-; V57 tmp46 [V57 ] ( 2, 3 ) long -> [rbp-0xA0] do-not-enreg[X] addr-exposed "field V23.value (fldOffset=0x8)" P-DEP
-; V58 tmp47 [V58 ] ( 2, 3 ) ubyte -> [rbp-0xB8] do-not-enreg[X] addr-exposed "field V26.hasValue (fldOffset=0x0)" P-DEP
-; V59 tmp48 [V59 ] ( 2, 3 ) long -> [rbp-0xB0] do-not-enreg[X] addr-exposed "field V26.value (fldOffset=0x8)" P-DEP
-; V60 tmp49 [V60 ] ( 2, 3 ) ubyte -> [rbp-0xC8] do-not-enreg[X] addr-exposed "field V29.hasValue (fldOffset=0x0)" P-DEP
-; V61 tmp50 [V61 ] ( 2, 3 ) long -> [rbp-0xC0] do-not-enreg[X] addr-exposed "field V29.value (fldOffset=0x8)" P-DEP
-; V62 tmp51 [V62 ] ( 2, 3 ) ubyte -> [rbp-0xD8] do-not-enreg[X] addr-exposed "field V32.hasValue (fldOffset=0x0)" P-DEP
-; V63 tmp52 [V63 ] ( 2, 3 ) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "field V32.value (fldOffset=0x8)" P-DEP
-; V64 tmp53 [V64 ] ( 2, 3 ) ubyte -> [rbp-0xE8] do-not-enreg[X] addr-exposed "field V35.hasValue (fldOffset=0x0)" P-DEP
-; V65 tmp54 [V65 ] ( 2, 3 ) long -> [rbp-0xE0] do-not-enreg[X] addr-exposed "field V35.value (fldOffset=0x8)" P-DEP
-; V66 tmp55 [V66,T32] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V67 tmp56 [V67,T33] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
-; V68 cse0 [V68,T03] ( 9, 9 ) long -> r15 "CSE #02: aggressive"
+; V50 tmp39 [V50 ] ( 3, 1.75) ubyte -> [rbp-0x78] do-not-enreg[X] addr-exposed "field V14.hasValue (fldOffset=0x0)" P-DEP
+; V51 tmp40 [V51 ] ( 3, 1.75) long -> [rbp-0x70] do-not-enreg[X] addr-exposed "field V14.value (fldOffset=0x8)" P-DEP
+; V52 tmp41 [V52 ] ( 3, 1.75) ubyte -> [rbp-0x88] do-not-enreg[X] addr-exposed "field V17.hasValue (fldOffset=0x0)" P-DEP
+; V53 tmp42 [V53 ] ( 3, 1.75) long -> [rbp-0x80] do-not-enreg[X] addr-exposed "field V17.value (fldOffset=0x8)" P-DEP
+; V54 tmp43 [V54 ] ( 3, 1.75) ubyte -> [rbp-0x98] do-not-enreg[X] addr-exposed "field V20.hasValue (fldOffset=0x0)" P-DEP
+; V55 tmp44 [V55 ] ( 3, 1.75) long -> [rbp-0x90] do-not-enreg[X] addr-exposed "field V20.value (fldOffset=0x8)" P-DEP
+; V56 tmp45 [V56 ] ( 3, 1.75) ubyte -> [rbp-0xA8] do-not-enreg[X] addr-exposed "field V23.hasValue (fldOffset=0x0)" P-DEP
+; V57 tmp46 [V57 ] ( 3, 1.75) long -> [rbp-0xA0] do-not-enreg[X] addr-exposed "field V23.value (fldOffset=0x8)" P-DEP
+; V58 tmp47 [V58 ] ( 3, 1.75) ubyte -> [rbp-0xB8] do-not-enreg[X] addr-exposed "field V26.hasValue (fldOffset=0x0)" P-DEP
+; V59 tmp48 [V59 ] ( 3, 1.75) long -> [rbp-0xB0] do-not-enreg[X] addr-exposed "field V26.value (fldOffset=0x8)" P-DEP
+; V60 tmp49 [V60 ] ( 3, 1.75) ubyte -> [rbp-0xC8] do-not-enreg[X] addr-exposed "field V29.hasValue (fldOffset=0x0)" P-DEP
+; V61 tmp50 [V61 ] ( 3, 1.75) long -> [rbp-0xC0] do-not-enreg[X] addr-exposed "field V29.value (fldOffset=0x8)" P-DEP
+; V62 tmp51 [V62 ] ( 3, 1.75) ubyte -> [rbp-0xD8] do-not-enreg[X] addr-exposed "field V32.hasValue (fldOffset=0x0)" P-DEP
+; V63 tmp52 [V63 ] ( 3, 1.75) long -> [rbp-0xD0] do-not-enreg[X] addr-exposed "field V32.value (fldOffset=0x8)" P-DEP
+; V64 tmp53 [V64 ] ( 3, 1.75) ubyte -> [rbp-0xE8] do-not-enreg[X] addr-exposed "field V35.hasValue (fldOffset=0x0)" P-DEP
+; V65 tmp54 [V65 ] ( 3, 1.75) long -> [rbp-0xE0] do-not-enreg[X] addr-exposed "field V35.value (fldOffset=0x8)" P-DEP
+; V66 tmp55 [V66,T31] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
+; V67 tmp56 [V67,T32] ( 2, 0 ) ref -> rsi single-def "argument with side effect"
;
-; Lcl frame size = 360
+; Lcl frame size = 344
G_M12903_IG01:
push rbp
push r15
push r14
push r13
push r12
push rbx
- sub rsp, 360
+ sub rsp, 344
vzeroupper
- lea rbp, [rsp+0x190]
+ lea rbp, [rsp+0x180]
;; size=28 bbWeight=1 PerfScore 7.75
G_M12903_IG02:
- lea rdi, [rbp-0x140]
+ lea rdi, [rbp-0x138]
call CORINFO_HELP_INIT_PINVOKE_FRAME
mov rbx, rax
mov rdi, rsp
- mov qword ptr [rbp-0x128], rdi
+ mov qword ptr [rbp-0x120], rdi
mov rdi, rbp
- mov qword ptr [rbp-0x118], rdi
+ mov qword ptr [rbp-0x110], rdi
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimit'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG24
- ;; size=69 bbWeight=1 PerfScore 9.25
+ test rax, rax
+ jne SHORT G_M12903_IG04
+ ;; size=62 bbWeight=1 PerfScore 9.00
G_M12903_IG03:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0x78], xmm0
+ jmp SHORT G_M12903_IG05
+ ;; size=11 bbWeight=0.25 PerfScore 0.83
G_M12903_IG04:
- lea rdi, [rbp-0x78]
- mov r15, 0xD1FFAB1E ; System.Nullable`1[ulong]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
- movzx r14, byte ptr [rbp-0x78]
- mov r13, qword ptr [rbp-0x70]
+ mov rdi, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rdi
+ jne SHORT G_M12903_IG03
+ mov byte ptr [rbp-0x78], 1
+ mov rdi, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0x70], rdi
+ ;; size=27 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG05:
+ movzx r15, byte ptr [rbp-0x78]
+ mov r14, qword ptr [rbp-0x70]
mov rdi, -1
- test r14b, r14b
- cmove r13, rdi
+ test r15b, r15b
+ cmove r14, rdi
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimitPercent'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG26
- ;; size=82 bbWeight=1 PerfScore 9.75
-G_M12903_IG05:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
+ test rax, rax
+ jne SHORT G_M12903_IG07
+ ;; size=53 bbWeight=1 PerfScore 7.50
G_M12903_IG06:
- lea rdi, [rbp-0x88]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
- movzx r14, byte ptr [rbp-0x88]
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0x88], xmm0
+ jmp SHORT G_M12903_IG08
+ ;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG07:
+ mov rdi, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rdi
+ jne SHORT G_M12903_IG06
+ mov byte ptr [rbp-0x88], 1
+ mov rdi, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0x80], rdi
+ ;; size=30 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG08:
+ movzx r15, byte ptr [rbp-0x88]
mov rdi, qword ptr [rbp-0x80]
mov rax, -1
- test r14b, r14b
- mov r12, rax
- cmovne r12, rdi
+ test r15b, r15b
+ mov r13, rax
+ cmovne r13, rdi
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimitSOH'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG28
- ;; size=81 bbWeight=1 PerfScore 9.75
-G_M12903_IG07:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG08:
- lea rdi, [rbp-0x98]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
- movzx r14, byte ptr [rbp-0x98]
+ test rax, rax
+ jne SHORT G_M12903_IG10
+ ;; size=59 bbWeight=1 PerfScore 7.75
+G_M12903_IG09:
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0x98], xmm0
+ jmp SHORT G_M12903_IG11
+ ;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG10:
+ mov rdi, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rdi
+ jne SHORT G_M12903_IG09
+ mov byte ptr [rbp-0x98], 1
+ mov rdi, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0x90], rdi
+ ;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG11:
+ movzx r15, byte ptr [rbp-0x98]
mov rdi, qword ptr [rbp-0x90]
mov rax, -1
- test r14b, r14b
- mov r14, rax
- cmovne r14, rdi
+ test r15b, r15b
+ mov r12, rax
+ cmovne r12, rdi
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimitLOH'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG30
- ;; size=84 bbWeight=1 PerfScore 9.75
-G_M12903_IG09:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG10:
- lea rdi, [rbp-0xA8]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
- movzx rdi, byte ptr [rbp-0xA8]
- mov rax, qword ptr [rbp-0xA0]
- mov rcx, -1
- test dil, dil
- cmovne rcx, rax
- mov qword ptr [rbp-0xF0], rcx
+ test rax, rax
+ jne SHORT G_M12903_IG13
+ ;; size=62 bbWeight=1 PerfScore 7.75
+G_M12903_IG12:
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0xA8], xmm0
+ jmp SHORT G_M12903_IG14
+ ;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG13:
+ mov rdi, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rdi
+ jne SHORT G_M12903_IG12
+ mov byte ptr [rbp-0xA8], 1
+ mov rdi, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0xA0], rdi
+ ;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG14:
+ movzx r15, byte ptr [rbp-0xA8]
+ mov rdi, qword ptr [rbp-0xA0]
+ mov rax, -1
+ test r15b, r15b
+ mov r15, rax
+ cmovne r15, rdi
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimitPOH'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG32
- ;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG11:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG12:
- lea rdi, [rbp-0xB8]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
+ test rax, rax
+ jne SHORT G_M12903_IG16
+ ;; size=62 bbWeight=1 PerfScore 7.75
+G_M12903_IG15:
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0xB8], xmm0
+ jmp SHORT G_M12903_IG17
+ ;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG16:
+ mov rdi, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rdi
+ jne SHORT G_M12903_IG15
+ mov byte ptr [rbp-0xB8], 1
+ mov rdi, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0xB0], rdi
+ ;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG17:
movzx rdi, byte ptr [rbp-0xB8]
mov rax, qword ptr [rbp-0xB0]
mov rcx, -1
test dil, dil
cmovne rcx, rax
- mov qword ptr [rbp-0xF8], rcx
+ mov qword ptr [rbp-0xF0], rcx
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimitSOHPercent'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG34
- ;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG13:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG14:
- lea rdi, [rbp-0xC8]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
+ test rax, rax
+ jne SHORT G_M12903_IG19
+ ;; size=66 bbWeight=1 PerfScore 8.50
+G_M12903_IG18:
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0xC8], xmm0
+ jmp SHORT G_M12903_IG20
+ ;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG19:
+ mov rdi, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rdi
+ jne SHORT G_M12903_IG18
+ mov byte ptr [rbp-0xC8], 1
+ mov rdi, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0xC0], rdi
+ ;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG20:
movzx rdi, byte ptr [rbp-0xC8]
mov rax, qword ptr [rbp-0xC0]
mov rcx, -1
test dil, dil
cmovne rcx, rax
- mov qword ptr [rbp-0x100], rcx
+ mov qword ptr [rbp-0xF8], rcx
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimitLOHPercent'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG36
- ;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG15:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG16:
- lea rdi, [rbp-0xD8]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
+ test rax, rax
+ jne SHORT G_M12903_IG22
+ ;; size=66 bbWeight=1 PerfScore 8.50
+G_M12903_IG21:
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0xD8], xmm0
+ jmp SHORT G_M12903_IG23
+ ;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG22:
+ mov rdi, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rdi
+ jne SHORT G_M12903_IG21
+ mov byte ptr [rbp-0xD8], 1
+ mov rdi, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0xD0], rdi
+ ;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG23:
movzx rdi, byte ptr [rbp-0xD8]
mov rax, qword ptr [rbp-0xD0]
mov rcx, -1
test dil, dil
cmovne rcx, rax
- mov qword ptr [rbp-0x108], rcx
+ mov qword ptr [rbp-0x100], rcx
mov rdi, 0xD1FFAB1E ; 'GCHeapHardLimitPOHPercent'
mov rax, 0xD1FFAB1E ; code for System.AppContext:GetData(System.String):System.Object
call [rax]System.AppContext:GetData(System.String):System.Object
- mov rdx, rax
- test rdx, rdx
- jne G_M12903_IG38
- ;; size=88 bbWeight=1 PerfScore 10.50
-G_M12903_IG17:
- xor rdx, rdx
- ;; size=2 bbWeight=0.25 PerfScore 0.06
-G_M12903_IG18:
- lea rdi, [rbp-0xE8]
- mov rsi, r15
- call CORINFO_HELP_UNBOX_NULLABLE
+ test rax, rax
+ jne SHORT G_M12903_IG25
+ ;; size=66 bbWeight=1 PerfScore 8.50
+G_M12903_IG24:
+ vxorps xmm0, xmm0, xmm0
+ vmovups xmmword ptr [rbp-0xE8], xmm0
+ jmp SHORT G_M12903_IG26
+ ;; size=14 bbWeight=0.25 PerfScore 0.83
+G_M12903_IG25:
+ mov rcx, 0xD1FFAB1E ; System.UInt64
+ cmp qword ptr [rax], rcx
+ jne SHORT G_M12903_IG24
+ mov byte ptr [rbp-0xE8], 1
+ mov rax, qword ptr [rax+0x08]
+ mov qword ptr [rbp-0xE0], rax
+ ;; size=33 bbWeight=0.25 PerfScore 2.06
+G_M12903_IG26:
movzx rdi, byte ptr [rbp-0xE8]
mov rax, qword ptr [rbp-0xE0]
mov rcx, -1
test dil, dil
cmove rax, rcx
- vxorps ymm2, ymm2, ymm2
- vmovdqu32 zmmword ptr [rbp-0x68], zmm2
- mov qword ptr [rbp-0x68], r13
- mov qword ptr [rbp-0x60], r12
- mov qword ptr [rbp-0x58], r14
- mov r15, qword ptr [rbp-0xF0]
+ vxorps ymm0, ymm0, ymm0
+ vmovdqu32 zmmword ptr [rbp-0x68], zmm0
+ mov qword ptr [rbp-0x68], r14
+ mov qword ptr [rbp-0x60], r13
+ mov qword ptr [rbp-0x58], r12
mov qword ptr [rbp-0x50], r15
- mov r15, qword ptr [rbp-0xF8]
+ mov r15, qword ptr [rbp-0xF0]
mov qword ptr [rbp-0x48], r15
- mov r15, qword ptr [rbp-0x100]
+ mov r15, qword ptr [rbp-0xF8]
mov qword ptr [rbp-0x40], r15
- mov r15, qword ptr [rbp-0x108]
+ mov r15, qword ptr [rbp-0x100]
mov qword ptr [rbp-0x38], r15
mov qword ptr [rbp-0x30], rax
- vmovdqu xmm2, xmmword ptr [rbp-0x68]
- vmovdqu xmmword ptr [rsp], xmm2
- vmovdqu xmm2, xmmword ptr [rbp-0x58]
- vmovdqu xmmword ptr [rsp+0x10], xmm2
- vmovdqu xmm2, xmmword ptr [rbp-0x48]
- vmovdqu xmmword ptr [rsp+0x20], xmm2
- vmovdqu xmm2, xmmword ptr [rbp-0x38]
- vmovdqu xmmword ptr [rsp+0x30], xmm2
+ vmovdqu xmm0, xmmword ptr [rbp-0x68]
+ vmovdqu xmmword ptr [rsp], xmm0
+ vmovdqu xmm0, xmmword ptr [rbp-0x58]
+ vmovdqu xmmword ptr [rsp+0x10], xmm0
+ vmovdqu xmm0, xmmword ptr [rbp-0x48]
+ vmovdqu xmmword ptr [rsp+0x20], xmm0
+ vmovdqu xmm0, xmmword ptr [rbp-0x38]
+ vmovdqu xmmword ptr [rsp+0x30], xmm0
mov rax, 0xD1FFAB1E ; function address
- mov qword ptr [rbp-0x130], rax
- lea rax, G_M12903_IG21
- mov qword ptr [rbp-0x120], rax
- lea rax, [rbp-0x140]
+ mov qword ptr [rbp-0x128], rax
+ lea rax, G_M12903_IG29
+ mov qword ptr [rbp-0x118], rax
+ lea rax, [rbp-0x138]
mov qword ptr [rbx+0x08], rax
mov byte ptr [rbx+0x04], 0
- ;; size=210 bbWeight=1 PerfScore 39.58
-G_M12903_IG19:
+ ;; size=188 bbWeight=1 PerfScore 36.83
+G_M12903_IG27:
mov rax, 0xD1FFAB1E ; code for System.GC:_RefreshMemoryLimit(System.GC+GCHeapHardLimitInfo):int
;; size=10 bbWeight=1 PerfScore 0.25
-G_M12903_IG20:
+G_M12903_IG28:
call [rax]System.GC:_RefreshMemoryLimit(System.GC+GCHeapHardLimitInfo):int
;; size=2 bbWeight=1 PerfScore 3.00
-G_M12903_IG21:
+G_M12903_IG29:
mov byte ptr [rbx+0x04], 1
mov rcx, 0xD1FFAB1E ; function address
cmp dword ptr [rcx], 0
- je SHORT G_M12903_IG22
+ je SHORT G_M12903_IG30
mov rdi, 0xD1FFAB1E
call [rdi]CORINFO_HELP_STOP_FOR_GC
;; size=31 bbWeight=1 PerfScore 8.50
-G_M12903_IG22:
- mov rdi, qword ptr [rbp-0x138]
+G_M12903_IG30:
+ mov rdi, qword ptr [rbp-0x130]
mov qword ptr [rbx+0x08], rdi
cmp eax, 1
- je G_M12903_IG41
+ je SHORT G_M12903_IG33
cmp eax, 2
- je G_M12903_IG40
- ;; size=29 bbWeight=1 PerfScore 4.50
-G_M12903_IG23:
- add rsp, 360
+ je SHORT G_M12903_IG32
+ ;; size=21 bbWeight=1 PerfScore 4.50
+G_M12903_IG31:
+ add rsp, 344
pop rbx
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
;; size=18 bbWeight=1 PerfScore 4.25
-G_M12903_IG24:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG03
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG25:
- jmp G_M12903_IG04
- ;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG26:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG05
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG27:
- jmp G_M12903_IG06
- ;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG28:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG07
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG29:
- jmp G_M12903_IG08
- ;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG30:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG09
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG31:
- jmp G_M12903_IG10
- ;; size=5 bbWeight=0.12 PerfScore 0.25
G_M12903_IG32:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG11
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG33:
- jmp G_M12903_IG12
- ;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG34:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG13
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG35:
- jmp G_M12903_IG14
- ;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG36:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG15
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG37:
- jmp G_M12903_IG16
- ;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG38:
- mov rdi, 0xD1FFAB1E ; System.UInt64
- cmp qword ptr [rdx], rdi
- jne G_M12903_IG17
- ;; size=19 bbWeight=0.25 PerfScore 1.06
-G_M12903_IG39:
- jmp G_M12903_IG18
- ;; size=5 bbWeight=0.12 PerfScore 0.25
-G_M12903_IG40:
mov rdi, 0xD1FFAB1E ; System.InvalidOperationException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_InvalidOperationException_HardLimitInvalid():System.String
call [rax]System.SR:get_InvalidOperationException_HardLimitInvalid():System.String
mov rsi, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.InvalidOperationException:.ctor(System.String):this
call [rax]System.InvalidOperationException:.ctor(System.String):this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=57 bbWeight=0 PerfScore 0.00
-G_M12903_IG41:
+G_M12903_IG33:
mov rdi, 0xD1FFAB1E ; System.InvalidOperationException
call CORINFO_HELP_NEWSFAST
mov rbx, rax
mov rax, 0xD1FFAB1E ; code for System.SR:get_InvalidOperationException_HardLimitTooLow():System.String
call [rax]System.SR:get_InvalidOperationException_HardLimitTooLow():System.String
mov rsi, rax
mov rdi, rbx
mov rax, 0xD1FFAB1E ; code for System.InvalidOperationException:.ctor(System.String):this
call [rax]System.InvalidOperationException:.ctor(System.String):this
mov rdi, rbx
call CORINFO_HELP_THROW
int3
;; size=57 bbWeight=0 PerfScore 0.00
-; Total bytes of code 1318, prolog size 28, PerfScore 159.33, instruction count 250, allocated bytes for code 1318 (MethodHash=9341cd98) for method System.GC:RefreshMemoryLimit() (FullOpts)
+; Total bytes of code 1272, prolog size 28, PerfScore 153.50, instruction count 248, allocated bytes for code 1272 (MethodHash=9341cd98) for method System.GC:RefreshMemoryLimit() (FullOpts) Larger list of diffs: https://gist.github.com/MihuBot/c8da3d66737385a1e254c5b89ce8f6ec |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Job completed in 15 minutes.
dotnet/runtime#105073
Diffs
Diffs
Artifacts:
The text was updated successfully, but these errors were encountered: