Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Jit: fix issue with single-def type propagation #10867

Merged
merged 1 commit into from
Apr 11, 2017

Conversation

AndyAyersMS
Copy link
Member

To avoid overly aggressive type propagation when there are multiple
reaching definitions, only propagate types to single-IL-def locals
when the defining value comes from the same basic block as the store.
We check this conservatively by insisting that the block's entry stack
be empty.

Added a test case where the jit will improperly devirtualize without
such a check.

Closes #10858.

To avoid overly aggressive type propagation when there are multiple
reaching definitions, only propagate types to single-IL-def locals
when the definiting value comes from the same basic block as the store.
We check this conservatively by insisting that the block's entry stack
be empty.

Added a test case where the jit will improperly devirtualize without
such a check.

Closes #10858.
@AndyAyersMS
Copy link
Member Author

Should also fix various x86 desktop assertion failures; still verifying this.

7 diffs in the framework jit-diff set. They are all cases where we're now overly conservative, eg the stack is non-empty going into the block but the value that reaches the single-IL-def comes from within the block.

Copy link

@JosephTremoulet JosephTremoulet left a comment

Choose a reason for hiding this comment

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

LGTM

@AndyAyersMS
Copy link
Member Author

Desktop tests also look good.

@AndyAyersMS AndyAyersMS merged commit 98bb73b into dotnet:master Apr 11, 2017
@AndyAyersMS AndyAyersMS deleted the FixSingleDefBug branch April 11, 2017 21:31
@karelz karelz modified the milestone: 2.0.0 Aug 28, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
4 participants