static bool Generic<T1, T2>(T1 a, T2 b)
{
return (object)a == (object)b;
}
static bool Test()
{
return Generic(42, 3.14);
}
Codegen Π΄Π»Ρ Test
:
; Method Program:Test():bool
G_M11853_IG01:
push rsi
sub rsp, 32
vzeroupper
G_M11853_IG02:
mov rcx, 0xD1FFAB1E
call CORINFO_HELP_NEWSFAST
mov rsi, rax
mov dword ptr [rsi+8], 42
mov rcx, 0xD1FFAB1E
call CORINFO_HELP_NEWSFAST
vmovsd xmm0, qword ptr [reloc @RWD00]
vmovsd qword ptr [rax+8], xmm0
cmp rsi, rax
sete al
movzx rax, al
G_M11853_IG03:
add rsp, 32
pop rsi
ret
RWD00 dq 40091EB851EB851Fh
```
--* EQ\NE ΡΠ΅Π»ΠΎΠ΅
+--* ΠΠΠ ΠΠΠΠ ref
| --* LCL_VAR ΡΡΡΠ»ΠΊΠ° V03 tmp1
--* ΠΠΠ ΠΠΠΠ β
--* LCL_VAR ΡΡΡΠ»ΠΊΠ° V04 tmp2
Expected codegen:
```asm
; Method Program:Test():bool
xor eax, eax ; return false
ret
ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½. ΠΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ CoreCLR ΡΠΆΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π±ΠΎΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, boxing(x) == null
Π΄ΠΎ false
ΠΈ Ρ. Π΄., ΡΠΌ. https://github.com/mono/mono/issues/17858 Π΄Π»Ρ ΡΡΡΠ»ΠΎΠΊ) .
ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ:ΠΊΠΊ
ΡΠ΅ΠΌΠ°:ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ
ΡΡΠΎΠ²Π΅Π½Ρ ΠΌΠ°ΡΡΠ΅ΡΡΡΠ²Π°: ΡΡΠ΅Π΄Π½ΠΈΠΉ
ΡΡΠΎΠΈΠΌΠΎΡΡΡ:ΡΡΠ΅Π΄Π½ΡΡ
ΠΠ΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½.
ΠΠ΅Ρ ΡΠΌΡΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅....
@jkotas Π― ΡΠ΄Π΅Π»Π°Π» Π±ΡΡΡΡΡΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ, ΠΈ jit-diff Π½Π°ΡΠ΅Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΠ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ Π΄Π»Ρ BCL, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581
UPD: Π½Ρ, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ pmi
ddos ββΡΡΠΎ ΠΈ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅.
Π£ΡΠΈΡΡΠ²Π°Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ Π·Π°ΠΊΡΡΡΡ ΡΡΠΎ, ΠΏΠΎΠΊΠ° ΠΌΡ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΠΌΠΎΡΠΈΠ²ΠΈΡΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ°.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@jkotas Π― ΡΠ΄Π΅Π»Π°Π» Π±ΡΡΡΡΡΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ, ΠΈ jit-diff Π½Π°ΡΠ΅Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΠ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ Π΄Π»Ρ BCL, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581
UPD: Π½Ρ, ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ
pmi
ddos ββΡΡΠΎ ΠΈ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅.