static bool Generic<T1, T2>(T1 a, T2 b)
{
return (object)a == (object)b;
}
static bool Test()
{
return Generic(42, 3.14);
}
Test
์ ๋ํ Codegen:
; 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 ์ ์
+--* BOX ์ฐธ์กฐ
| --* 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 ์ฐธ์กฐ). .
์นดํ
๊ณ ๋ฆฌ:cq
ํ
๋ง:์ต์ ํ
๊ธฐ์ ์์ค:์ค๊ธ
๋น์ฉ:์ค๊ฐ
์ฌ๋๋ค์ด ์ค์ ๋ก ์ด ํจํด์ ์ฌ์ฉํ๋์ง ํ์คํ์ง ์์ง๋ง
์ค์ ์ฝ๋์ ํ์๋์ง ์๋ ๊ฒ๋ณด๋ค ํจํด์ ๋ํ ์ต์ ํ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค....
@jkotas ๋๋ ๋น ๋ฅธ ํ๋กํ ํ์ ์ ๋ง๋ค์๊ณ jit-diff๋ BCL์ ๋ํด ๋ช kb diff๋ฅผ ์ฐพ์์ต๋๋ค(์: https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data ).
UPD: ๊ธ์์, pmi
์ด ์ฝ๋ฌผ์ ํฌ์ฌํ ๊ฒ ๊ฐ๊ณ ํ์ค ์ธ๊ณ์์๋ ์ผ์ด๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ด ์ค์ ์ฝ๋์์ ๋ฐ์ํ์ง ์์ ๊ฒ์ด๋ผ๋ ์์์ ๊ฐ์ํ ๋ ์ค์ ๋๊ธฐ ๋ถ์ฌ ์์ ๋ฅผ ๋ณผ ๋๊น์ง ์ด๊ฒ์ ๋ซ์ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@jkotas ๋๋ ๋น ๋ฅธ ํ๋กํ ํ์ ์ ๋ง๋ค์๊ณ jit-diff๋ BCL์ ๋ํด ๋ช kb diff๋ฅผ ์ฐพ์์ต๋๋ค(์: https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data ).
UPD: ๊ธ์์,
pmi
์ด ์ฝ๋ฌผ์ ํฌ์ฌํ ๊ฒ ๊ฐ๊ณ ํ์ค ์ธ๊ณ์์๋ ์ผ์ด๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.