- 
                Notifications
    
You must be signed in to change notification settings  - Fork 5.2k
 
Closed
Labels
User StoryA single user-facing feature. Can be grouped under an epic.A single user-facing feature. Can be grouped under an epic.area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Milestone
Description
This issue captures the planned work for .NET 7. This list is expected to change throughout the release cycle according to ongoing planning and discussions, with possible additions and subtractions to the scope.
Summary
Dynamic PGO is an opt-in feature introduced in .NET 6. In .NET 7 we will work on making Dynamic PGO easier to use, applicable to more scenarios, and offering more performance improvements.
As part of this work, we will also enable On-Stack Replacement (OSR) and change the default for QuickJitForLoops for x64 and arm64. This will improve Dynamic PGO by including methods with loops in the Tier0 set. It will also notably improve startup time for apps that have jit-intensive startup interval.
Planned for .NET 7
- (EgorBo WIP) Add support for enabling Dynamic PGO in SDK projects and runtime configs (Proposal: Public PGO config switch #70410, Introduce System.Runtime.TieredPGO knob #71438, Introduce System.Runtime.TieredPGO knob sdk#26350)
 - (Aman WIP) Hot/Cold splitting (Implement fake hot/cold splitting and corresponding stress mode #69763, Add hot/cold splitting test job to jit-runtime-experimental #69922, Enable fake hot/cold splitting on ARM64 #70708, Enable hot/cold splitting of EH funclets #71236, Disable HANDLER_ENTRY_MUST_BE_IN_HOT_SECTION #71273) -- and more over in dotnet/runtimelabs; eg Initial hot cold splitting support for crossgen2/VM runtimelab#1900, Add Hot-Cold splitting experiment runtimelab#1915, ...
 - Add GDV-like capability for delegate calls (Add support for delegate GDV and method-based vtable GDV #68703)
 - Clone loops based on presence of loop-invariant GDV tests in the loop body (Loop cloning driven by type tests #65206) JIT: enable cloning based on loop invariant type tests #70377
 - Above depends on: JIT: cloning invariant analysis seems oddly limited #70100 and Loop cloning misses definitions for fields of promoted structs #61040
 - Fix OSR x64 epilog unwind (see note) JIT: revise approach for x64 OSR epilogs #65609
 - Enable OSR by default for x64/arm64 Enable QJFL and OSR by default for x64 and arm64 #65675
 - Address microbenchmark perf issues seen with QJFL=1 and OSR (see note) Revise heuristic for initial jitting. BenchmarkDotNet#1949 and Fix optimization of action methods for coreclr BenchmarkDotNet#1935
 - JIT: Fold type checks with GDV #52370
 - PGO: Optimize isinst with class probes #55325 (more generally: optimize type tests via PGO)
 
Under Consideration
- (EgorBo WIP for Native AOT) Add no-fallback GDV when runtime can provide full set of possible classes
 
Cut from .NET 7 Plans
- (EgorBo in PR) PGO: Add new tiers #70941
 - Array interface method devirtualization #62457 (too many missing pieces)
 - Fix issues in profile maintenance: JIT: PGO: fgOptimizeUncondBranchToSimpleCond corrupts profile data #50419, [JIT][PGO] Incorrect weights produced by expand-casts optimizations #50030, optOptimizeLayout introducing edge profile inconsistencies #48476
 - PGO considerations for finally cloning #48925
 - JIT: refactor edge weight representation #46885
 - JIT: use normalized counts throughout #46883
 - Reduce performance overhead of Tier0 instrumentation
 - Add GDV-like capability for indirect calls (optimization of indirect calls #44610)
 - JIT: optimize redundant type tests created by PGO #46887 (needs SSA update)
 
omariom, hez2010, wzchua, martincostello, EgorBo and 7 more
Metadata
Metadata
Assignees
Labels
User StoryA single user-facing feature. Can be grouped under an epic.A single user-facing feature. Can be grouped under an epic.area-CodeGen-coreclrCLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMICLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI
Type
Projects
Status
Done