static bool Generic<T1, T2>(T1 a, T2 b)
{
return (object)a == (object)b;
}
static bool Test()
{
return Generic(42, 3.14);
}
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 int
+--* рдмреЙрдХреНрд╕ рд░реЗрдлрд░реА
| --* 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 рдХреЗ рд▓рд┐рдП рдХреБрдЫ kb рдЕрдВрддрд░ рдкрд╛рдпрд╛, рдЬреИрд╕реЗ https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581
рдпреВрдкреАрдбреА: рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ pmi
рдЗрд╕реЗ рдЦреБрд░рд╛рдХ рджреЗ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдЙрдореНрдореАрдж рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рддрдм рддрдХ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрддреЗред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@jkotas рдореИрдВрдиреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдпрд╛ рдФрд░ jit-diff рдиреЗ BCL рдХреЗ рд▓рд┐рдП рдХреБрдЫ kb рдЕрдВрддрд░ рдкрд╛рдпрд╛, рдЬреИрд╕реЗ https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581
рдпреВрдкреАрдбреА: рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣
pmi
рдЗрд╕реЗ рдЦреБрд░рд╛рдХ рджреЗ рд░рд╣рд╛ рдерд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред