-
Notifications
You must be signed in to change notification settings - Fork 5.5k
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
8326638: Crash in PhaseIdealLoop::remix_address_expressions due to unexpected Region instead of Loop #18002
Conversation
…expected Region instead of Loop
👋 Welcome back thartmann! A progress list of the required criteria for merging this PR into |
@TobiHartmann 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.
Otherwise, looks good!
src/hotspot/share/opto/loopopts.cpp
Outdated
@@ -583,7 +583,9 @@ Node* PhaseIdealLoop::remix_address_expressions(Node* n) { | |||
n23_loop == n_loop) { | |||
Node* add1 = new AddPNode(n->in(1), n->in(2)->in(2), n->in(3)); | |||
// Stuff new AddP in the loop preheader | |||
register_new_node(add1, n_loop->_head->as_Loop()->skip_strip_mined(1)->in(LoopNode::EntryControl)); | |||
Node* entry = n_loop->_head->is_Loop() ? n_loop->_head->as_Loop()->skip_strip_mined(1)->in(LoopNode::EntryControl) |
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.
Should we add a sanity assert (which could also serve as an explaining comment) that in the RegionNode
case, it must be an irreducible loop head?
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.
I could do that but it would feel a bit arbitrary to put the assert only in this code, given that we have the same is_Loop
check in a lot of other code as well. Maybe it would make sense to factor the checks into a separate method at some point.
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.
Makes sense to do a complete replacement of this pattern in other code as well at some point. But let's do that separately.
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.
I agree with refactoring in separate RFE.
Regarding these changes: should we simply skip this optimization if we see irreducible loop? They may have additional entry into the body so such transformation could be incorrect.
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, let's better be safe than sorry and skip this optimization for irreducible loops. The other optimizations in that method look safe though.
@TobiHartmann 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 35 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 |
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.
Good.
Thanks for the reviews, Vladimir and Christian. |
/integrate |
Going to push as commit 9f0e7da.
Your commit was automatically rebased without conflicts. |
@TobiHartmann Pushed as commit 9f0e7da. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
/backport jdk22u |
@TobiHartmann the backport was successfully created on the branch backport-TobiHartmann-9f0e7da6 in my personal fork of openjdk/jdk22u. To create a pull request with this backport targeting openjdk/jdk22u:master, just click the following link: The title of the pull request is automatically filled in correctly and below you find a suggestion for the pull request body:
If you need to update the source branch of the pull then run the following commands in a local clone of your personal fork of openjdk/jdk22u:
|
Adds a missing
_head->is_Loop()
check to handle the case when the loop head is not aLoopNode
but aRegionNode
because the loop is irreducible:We then crash when invoking
LoopNode::skip_strip_mined
on a RegionNode or assert in debug. Unfortunately, I was not able to simply the test any further.This is a regression from JDK-8303511 in JDK 21 b13
Thanks,
Tobias
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/18002/head:pull/18002
$ git checkout pull/18002
Update a local copy of the PR:
$ git checkout pull/18002
$ git pull https://git.openjdk.org/jdk.git pull/18002/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 18002
View PR using the GUI difftool:
$ git pr show -t 18002
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/18002.diff
Webrev
Link to Webrev Comment