Runtime: JIT: Optimalkan boxing(x) == boxing(y) menjadi false.

Dibuat pada 23 Nov 2019  ·  3Komentar  ·  Sumber: dotnet/runtime

static bool Generic<T1, T2>(T1 a, T2 b)
{
    return (object)a == (object)b;
}

static bool Test()
{
    return Generic(42, 3.14);
}

Kodegen untuk 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 ke
+--* BOX ref
| --* LCL_VAR ref V03 tmp1
--* BOX ref
--* LCL_VAR ref V04 tmp2

Expected codegen:
```asm
; Method Program:Test():bool
       xor      eax, eax  ; return false 
       ret     

Tidak yakin apakah orang benar-benar menggunakan pola ini. Tetapi harus menjadi perbaikan sederhana karena CoreCLR sudah mengoptimalkan tinju untuk kasus serupa (misalnya boxing(x) == null hingga false dll, lihat https://github.com/mono/mono/issues/17858 untuk tautan) .

kategori:cq
tema: pengoptimalan
tingkat keahlian: menengah
biaya: sedang

area-CodeGen-coreclr optimization

Komentar yang paling membantu

@jkotas Saya membuat prototipe cepat dan jit-diff menemukan beberapa perbedaan kb untuk BCL, misalnya https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581

UPD: yah, sepertinya pmi sedang melakukannya dan tidak akan terjadi di dunia nyata.

Semua 3 komentar

Tidak yakin apakah orang benar-benar menggunakan pola ini

Tidak ada gunanya menambahkan pengoptimalan untuk pola daripada tidak pernah muncul dalam kode dunia nyata....

@jkotas Saya membuat prototipe cepat dan jit-diff menemukan beberapa perbedaan kb untuk BCL, misalnya https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581

UPD: yah, sepertinya pmi sedang melakukannya dan tidak akan terjadi di dunia nyata.

Mengingat harapan bahwa ini tidak terjadi dalam kode dunia nyata, saya akan menutup ini sampai kita melihat contoh motivasi dunia nyata.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

sahithreddyk picture sahithreddyk  ·  3Komentar

v0l picture v0l  ·  3Komentar

omariom picture omariom  ·  3Komentar

GitAntoinee picture GitAntoinee  ·  3Komentar

jzabroski picture jzabroski  ·  3Komentar