dotnet/runtime
GitHub で見るJIT: Reloc is not used in Tier1 for this simple snippet
Open
#71,545 opened on 2022年7月1日
area-CodeGen-coreclrhelp wantedtenet-performance
Repository metrics
- Stars
- (17,886 stars)
- PR merge metrics
- (平均マージ 12d 11h) (30d で 661 merged PRs)
説明
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