Skip to content

JIT: Unify to instParamLookup and improve GVM test coverage#126947

Open
hez2010 wants to merge 9 commits intodotnet:mainfrom
hez2010:shared-gvm-devirt/1-tests-instparamlookup
Open

JIT: Unify to instParamLookup and improve GVM test coverage#126947
hez2010 wants to merge 9 commits intodotnet:mainfrom
hez2010:shared-gvm-devirt/1-tests-instparamlookup

Conversation

@hez2010
Copy link
Copy Markdown
Contributor

@hez2010 hez2010 commented Apr 15, 2026

Extracted from #123323. This PR is the first step in splitting the shared GVM devirtualization work.

It does two things:

  • expands the generic virtual method test coverage so the later enablement PRs have good coverage
  • refactors devirtualization a bit to replace multiple ad-hoc flags in CORINFO_DEVIRTUALIZATION_INFO with a single instParamLookup

Contributes to #112596

/cc: @jakobbotsch

Copilot AI review requested due to automatic review settings April 15, 2026 12:57
@github-actions github-actions Bot added the area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI label Apr 15, 2026
@dotnet-policy-service dotnet-policy-service Bot added the community-contribution Indicates that the PR has been added by a community member label Apr 15, 2026
@dotnet-policy-service
Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch
See info in area-owners.md if you want to be subscribed.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors CoreCLR devirtualization metadata to use a unified instParamLookup and expands JIT test coverage for generic virtual method (GVM) scenarios to support follow-on GVM devirtualization work.

Changes:

  • Add a new GVM-focused runtime lookup/delegate test to broaden devirtualization coverage.
  • Replace CORINFO_DEVIRTUALIZATION_INFO ad-hoc flags with instParamLookup, and update JIT devirtualization logic to consume it.
  • Update SuperPMI and the managed JitInterface type definitions/serialization to match the new CORINFO_DEVIRTUALIZATION_INFO shape (plus bump the JIT/EE versioning GUID).

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs Adds additional GVM/runtime-lookup-related test coverage.
src/coreclr/vm/jitinterface.cpp Initializes/produces instParamLookup for devirtualization results (replacing older flags).
src/coreclr/jit/importercalls.cpp Plumbs instParamLookup through devirtualization + guarded devirtualization candidate tracking and inserts instantiation args when required.
src/coreclr/jit/morph.cpp Simplifies lookup-tree helpers to take CORINFO_LOOKUP directly.
src/coreclr/jit/compiler.h Updates declarations for the new lookup-tree helper signatures and GDV candidate plumbing.
src/coreclr/inc/corinfo.h Updates CORINFO_DEVIRTUALIZATION_INFO to carry instParamLookup instead of legacy flags; documents “no lookup needed” sentinel.
src/coreclr/inc/jiteeversionguid.h Bumps the JIT/EE version GUID for the interface change.
src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs Mirrors the CORINFO_DEVIRTUALIZATION_INFO layout change in managed definitions.
src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs Updates managed resolveVirtualMethod implementation to populate instParamLookup and method-context behavior.
src/coreclr/tools/superpmi/superpmi-shared/agnostic.h Updates SuperPMI record structs to include instParamLookup.
src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp Records/restores/dumps instParamLookup in SuperPMI method contexts.

Comment thread src/coreclr/vm/jitinterface.cpp
Comment thread src/coreclr/jit/importercalls.cpp Outdated
@hez2010
Copy link
Copy Markdown
Contributor Author

hez2010 commented Apr 16, 2026

Test failure seems unrelated.

@hez2010
Copy link
Copy Markdown
Contributor Author

hez2010 commented Apr 24, 2026

Ping @jakobbotsch

This is a refactor only change which is the prerequisites of the upcoming GVM devirt work, please take a look when you get some time.

@MichalPetryka
Copy link
Copy Markdown
Contributor

@MihuBot

Comment thread src/coreclr/inc/corinfo.h Outdated
Copilot AI review requested due to automatic review settings April 25, 2026 11:55
@hez2010 hez2010 force-pushed the shared-gvm-devirt/1-tests-instparamlookup branch from 75dec5b to 4da609f Compare April 25, 2026 11:55
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 3 comments.

Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Comment thread src/coreclr/vm/jitinterface.cpp
Comment thread src/coreclr/jit/importercalls.cpp Outdated
@hez2010 hez2010 force-pushed the shared-gvm-devirt/1-tests-instparamlookup branch from 4da609f to 42d5011 Compare April 25, 2026 12:19
Copilot AI review requested due to automatic review settings April 25, 2026 12:35
Comment thread src/coreclr/jit/importercalls.cpp Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 3 comments.

Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Comment thread src/coreclr/jit/compiler.h
Comment thread src/coreclr/inc/corinfo.h Outdated
Co-authored-by: Jakob Botsch Nielsen <Jakob.botsch.nielsen@gmail.com>
Copilot AI review requested due to automatic review settings April 25, 2026 12:59
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 13 changed files in this pull request and generated 2 comments.

Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Copilot AI review requested due to automatic review settings April 25, 2026 14:42
@hez2010 hez2010 force-pushed the shared-gvm-devirt/1-tests-instparamlookup branch from 2765090 to 5942cb8 Compare April 25, 2026 14:42
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 3 comments.

Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Comment on lines 8062 to +8068
// If the guarded method is an instantiating stub, find the instantiated method
//
if (instantiatingStub)
if (instantiatingStub != NO_METHOD_HANDLE)
{
JITDUMP(" ... method is an instantiating stub, looking for instantiated entry\n");
CORINFO_CLASS_HANDLE ignoredClass = NO_CLASS_HANDLE;
CORINFO_METHOD_HANDLE ignoredMethod = NO_METHOD_HANDLE;
CORINFO_METHOD_HANDLE instantiatedMethod =
info.compCompHnd->getInstantiatedEntry(methodHandle, &ignoredMethod, &ignoredClass);
assert(ignoredClass == NO_CLASS_HANDLE);

if (instantiatedMethod != NO_METHOD_HANDLE)
{
JITDUMP(" ... updating GDV candidate with instantiated entry info\n");
pInfo->guardedMethodInstantiatedEntryHandle = instantiatedMethod;
}
JITDUMP(" ... updating GDV candidate with instantiated entry info\n");
pInfo->guardedMethodHandle = instantiatingStub;
pInfo->guardedMethodInstantiatedEntryHandle = methodHandle;
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment says "find the instantiated method", but the code no longer calls getInstantiatedEntry (it just rewrites guardedMethodHandle / guardedMethodInstantiatedEntryHandle). Please update the comment to reflect the new semantics (e.g., that instantiatingStub is stored separately as the instantiation parameter / comparison target, while methodHandle remains the actual direct-call target).

Copilot uses AI. Check for mistakes.
Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Comment thread src/coreclr/jit/importercalls.cpp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-CodeGen-coreclr CLR JIT compiler in src/coreclr/src/jit and related components such as SuperPMI community-contribution Indicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants