Skip to content

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

Merged
jakobbotsch merged 43 commits into
dotnet:mainfrom
hez2010:shared-gvm-devirt/1-tests-instparamlookup
May 28, 2026
Merged

JIT: Unify to instParamLookup and improve GVM test coverage#126947
jakobbotsch merged 43 commits into
dotnet:mainfrom
hez2010:shared-gvm-devirt/1-tests-instparamlookup

Conversation

@hez2010

@hez2010 hez2010 commented Apr 15, 2026

Copy link
Copy Markdown
Contributor

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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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

hez2010 commented Apr 16, 2026

Copy link
Copy Markdown
Contributor Author

Test failure seems unrelated.

@hez2010

hez2010 commented Apr 24, 2026

Copy link
Copy Markdown
Contributor Author

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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
Copilot AI review requested due to automatic review settings May 23, 2026 16:20
@hez2010

hez2010 commented May 23, 2026

Copy link
Copy Markdown
Contributor Author

@MihuBot

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 4 comments.

Comment thread src/coreclr/jit/importercalls.cpp
Comment thread src/coreclr/jit/indirectcalltransformer.cpp
Comment thread src/coreclr/jit/compiler.h
Comment thread src/tests/JIT/Generics/VirtualMethods/generic_virtual_methods.cs
Copilot AI review requested due to automatic review settings May 23, 2026 16:49
@hez2010
hez2010 force-pushed the shared-gvm-devirt/1-tests-instparamlookup branch from aba164b to d02eec1 Compare May 23, 2026 16:49
@hez2010

hez2010 commented May 23, 2026

Copy link
Copy Markdown
Contributor Author

@MihuBot

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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/coreclr/jit/compiler.h
@hez2010

hez2010 commented May 23, 2026

Copy link
Copy Markdown
Contributor Author

Now it's zero diff as expected.

Also CI failures seem unrelated.

Comment thread src/coreclr/jit/importercalls.cpp
Comment thread src/coreclr/jit/importercalls.cpp Outdated
Copilot AI review requested due to automatic review settings May 26, 2026 10:24

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 3 comments.

Comments suppressed due to low confidence (1)

src/coreclr/jit/importercalls.cpp:1

  • When transforming a virtual/interface call into a direct call, clearing only GTF_CALL_VIRT_VTABLE may leave other virtual-kind bits set (e.g., interface/stub dispatch kinds). This can misclassify the call later in the pipeline. Prefer clearing the full virtual-kind mask (e.g., GTF_CALL_VIRT_KIND_MASK) before setting the direct-call state.
// Licensed to the .NET Foundation under one or more agreements.

Comment thread src/coreclr/vm/jitinterface.cpp
Comment thread src/coreclr/jit/importercalls.cpp
Comment thread src/coreclr/jit/compiler.h
Comment thread src/coreclr/jit/compiler.h
Comment thread src/coreclr/jit/compiler.h
Comment thread src/coreclr/jit/importercalls.cpp

@jakobbotsch jakobbotsch left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! Thanks for sticking with this.

@jakobbotsch
jakobbotsch merged commit 54cfeb4 into dotnet:main May 28, 2026
125 of 131 checks passed
@dotnet-milestone-bot dotnet-milestone-bot Bot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 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
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

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.

5 participants