Skip to content

[experiment] fold definitely never instanceof casts#129891

Closed
EgorBo wants to merge 1 commit into
dotnet:mainfrom
EgorBo:fold-casts
Closed

[experiment] fold definitely never instanceof casts#129891
EgorBo wants to merge 1 commit into
dotnet:mainfrom
EgorBo:fold-casts

Conversation

@EgorBo

@EgorBo EgorBo commented Jun 26, 2026

Copy link
Copy Markdown
Member

just a ci test to get diffs.

Example of what it folds:

static void Foo(object o)
{
    if (o is Test)
    {
        if (o is int x)
        {
            Console.WriteLine(x);
        }
    }
}

to no-op

Copilot AI review requested due to automatic review settings June 26, 2026 13:13
@EgorBo

EgorBo commented Jun 26, 2026

Copy link
Copy Markdown
Member Author

@MihuBot -nuget

@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

This PR adds a JIT assertion-propagation optimization to fold exact type tests (method-table comparisons) to constants when existing subtype/exact-type assertions prove the object can never be exactly the tested type, including across PHI reaching assertions.

Changes:

  • Introduces Compiler::optAssertionVNIsNotExactType to infer “never exactly this type” from subtype/exact-type assertions and PHI-reaching assertions.
  • Uses the new helper in optAssertionPropGlobal_RelOp to fold IND(obj) ==/!= TypeHandle into false/true when provable.
  • Adds the helper declaration to compiler.h.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
src/coreclr/jit/compiler.h Declares the new optAssertionVNIsNotExactType assertion-prop helper.
src/coreclr/jit/assertionprop.cpp Implements the helper and adds a new folding case in global relop assertion propagation for exact type tests.

Comment on lines +2586 to +2591
// We have "objVN is (exactly/subtype of) cls". If "exactCls" can never be cast to
// "cls", then objVN's exact runtime type can never be "exactCls".
if (info.compCompHnd->compareTypesForCast(exactCls, cls) == TypeCompareState::MustNot)
{
return true;
}
@EgorBo EgorBo closed this Jun 26, 2026
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants