dotnet/runtime

JIT: Reloc is not used in Tier1 for this simple snippet

Open

#71,545 建立於 2022年7月1日

在 GitHub 查看
 (2 留言) (0 反應) (0 負責人)C# (5,445 fork)batch import
area-CodeGen-coreclrhelp wantedtenet-performance

倉庫指標

Star
 (17,886 star)
PR 合併指標
 (平均合併 12天 11小時) (30 天內合併 661 個 PR)

描述

public class Program
{
    public static void Main(string[] args)
    {
        for (int i = 0; i < 100; i++)
        {
            F();
            Thread.Sleep(16);
        }
    }

    static int f;

    [MethodImpl(MethodImplOptions.NoInlining)]
    static void F() => f++;
}

Codegen for Tier0 and Tier1 for method F():

; Assembly listing for method Program:F()
; Tier-0 compilation
       55                   push     rbp
       488BEC               mov      rbp, rsp
       FF05CEDB1900         inc      dword ptr [(reloc 0x7ffa7536f918)]
       5D                   pop      rbp
       C3                   ret      


; Assembly listing for method Program:F()
; Tier-1 compilation
       48B818F93675FA7F0000 mov      rax, 0x7FFA7536F918
       FF00                 inc      dword ptr [rax]
       C3                   ret

Tier0 managed to use a reloc for inc while tier1 does not (the address remains the same)

category:cq theme:tiering skill-level:intermediate cost:small impact:medium

貢獻者指南