-
Notifications
You must be signed in to change notification settings - Fork 5.8k
8339303: C2: dead node after failing to match cloned address expression #21829
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
8339303: C2: dead node after failing to match cloned address expression #21829
Conversation
👋 Welcome back rcastanedalo! A progress list of the required criteria for merging this PR into |
@robcasloz This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 86 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
@robcasloz The following label will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing list. If you would like to change these labels, use the /label pull request command. |
Webrevs
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. Yes, it looks like code expect LShift here instead of constant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good.
src/hotspot/share/opto/matcher.cpp
Outdated
} | ||
} | ||
for (uint j = 0; j < n->outcnt(); j++) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why don't you use DU iterator instead (e.g., DUIterator_Fast
)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, done in commit b0aa39f, thanks. Please re-review.
/integrate |
Going to push as commit 83f3d42.
Your commit was automatically rebased without conflicts. |
@robcasloz Pushed as commit 83f3d42. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
This changeset prevents the x86 platform-specific logic from cloning address expressions consisting of two chained
AddP
nodes with a small constant offset each, such as in the following example:Such patterns cannot be fully subsumed into x86 complex addressing modes, and cloning them can cause the matcher to introduce dead nodes that trigger a segmentation fault in the subsequent global code motion phase. See a detailed analysis of the failure in the JBS issue description.
The changeset additionally extends the post-matching verification logic to check that no old node is reachable by travesing both node inputs and outputs. This extension would have caused the original test case to fail directly after matching with an informative assertion message rather than an opaque segmentation fault in an unrelated code generation phase.
Note that the pattern causing the failure should be in general optimized by
AddPNode::Ideal
into a singleAddP
node with the constant sum of the offsets. While JDK-8343067 should address the missing optimization, this changeset proposes a complementary solution that is easily backportable and avoids relying on specific optimizations for correctness.Testing
Functionality
Performance
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/21829/head:pull/21829
$ git checkout pull/21829
Update a local copy of the PR:
$ git checkout pull/21829
$ git pull https://git.openjdk.org/jdk.git pull/21829/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 21829
View PR using the GUI difftool:
$ git pr show -t 21829
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/21829.diff
Using Webrev
Link to Webrev Comment