dotnet/runtime

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

Open

#71.545 aberto em 1 de jul. de 2022

Ver no GitHub
 (2 comments) (0 reactions) (0 assignees)C# (5.445 forks)batch import
area-CodeGen-coreclrhelp wantedtenet-performance

Métricas do repositório

Stars
 (17.886 stars)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

Description

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

Guia do colaborador