Runtime: JIT: تحسين الملاكمة (x) == boxing (y) إلى false.

تم إنشاؤها على ٢٣ نوفمبر ٢٠١٩  ·  3تعليقات  ·  مصدر: dotnet/runtime

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 int
+ - * BOX المرجع
| - * LCL_VAR المرجع V03 tmp1
- * BOX المرجع
- * 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
الموضوع: التحسين
مستوى المهارة: متوسط
التكلفة: متوسطة

area-CodeGen-coreclr optimization

التعليق الأكثر فائدة

jkotas لقد صنعت نموذجًا أوليًا سريعًا ووجدت فرق jit بضعة كيلو بايت فرق لـ BCL ، على سبيل المثال https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581

محدث: حسنًا ، يبدو أنه pmi كان يجرعه ولن يحدث في العالم الحقيقي.

ال 3 كومينتر

لست متأكدًا مما إذا كان الأشخاص يستخدمون هذا النمط بالفعل

لا فائدة من إضافة تحسينات للأنماط أكثر من عدم ظهورها مطلقًا في رمز العالم الحقيقي ...

jkotas لقد صنعت نموذجًا أوليًا سريعًا ووجدت فرق jit بضعة كيلو بايت فرق لـ BCL ، على سبيل المثال https://github.com/dotnet/corefx/blob/master/src/System.Data.Common/src/System/Data /RbTree.cs#L1581

محدث: حسنًا ، يبدو أنه pmi كان يجرعه ولن يحدث في العالم الحقيقي.

بالنظر إلى التوقع بأن هذا لا يحدث في رمز العالم الحقيقي ، سأغلق هذا حتى نرى مثالًا محفزًا في العالم الحقيقي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

GitAntoinee picture GitAntoinee  ·  3تعليقات

Timovzl picture Timovzl  ·  3تعليقات

sahithreddyk picture sahithreddyk  ·  3تعليقات

jamesqo picture jamesqo  ·  3تعليقات

matty-hall picture matty-hall  ·  3تعليقات