-
Notifications
You must be signed in to change notification settings - Fork 6.2k
JDK-8272570: C2: crash in PhaseCFG::global_code_motion #5140
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
Conversation
|
👋 Welcome back casparcwang! A progress list of the required criteria for merging this PR into |
|
@casparcwang 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
|
|
/contributor add hshi |
|
@casparcwang |
|
@casparcwang @hshi same question as the other bug: does the test assert in a debug build? |
TobiHartmann
left a comment
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.
So this code assumes that the number of nodes per block does not change. Where did we add a new node?
| * @summary crash in PhaseCFG::global_code_motion | ||
| * @requires vm.compiler2.enabled | ||
| * | ||
| * @run main/othervm TestGCMRecalcPressureNodes |
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.
Test can be executed in agent VM mode.
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.
no, the test directly crashes with command java TestGCMRecalcPressureNodes. I will remove othervm
The test assert in debug build. I have upload the fast debug crash log in JBS. |
Thank you for your review.
|
TobiHartmann
left a comment
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.
Thanks for the explanation! The fix looks reasonable to me.
| * @summary crash in PhaseCFG::global_code_motion | ||
| * @requires vm.compiler2.enabled | ||
| * | ||
| * @run main TestGCMRecalcPressureNodes |
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.
Please move the test to test/hotspot/jtreg/compiler/regalloc/ and the corresponding package.
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 have move it to regalloc directory.
|
/reviewers 2 |
|
|
@casparcwang 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 70 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. As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@TobiHartmann, @rickard) but any other Committer may sponsor as well. ➡️ To flag this PR as ready for integration with the above commit message, type |
|
@TobiHartmann |
src/hotspot/share/opto/lcm.cpp
Outdated
| int cand_cnt = 0; // Candidate count | ||
| bool block_size_threshold_ok = (block->number_of_nodes() > 10) ? true : false; | ||
| bool block_size_threshold_ok = recalc_pressure_nodes != NULL && | ||
| (block->number_of_nodes() > 10) ? true : false; |
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.
And this really should be:
block_size_threshold_ok = (recalc_pressure_nodes != NULL) && (block->number_of_nodes() > 10);
Thank you for the review and suggestion, I have modify the code according to your suggestion. |
TobiHartmann
left a comment
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.
|
Looks good to me too. |
… option(s) found, need to specify /othervm"
Thank you for your review. |
|
/integrate |
|
@casparcwang |
|
/sponsor |
|
Going to push as commit 0f428ca.
Your commit was automatically rebased without conflicts. |
|
@DamonFool @casparcwang Pushed as commit 0f428ca. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
In PhaseCFG::global_code_motion, it allocate recalc_pressure_nodes array. condition is at least one block has more than 10 nodes:
In PhaseCFG::select, it uses recalc_pressure_nodes array, if block's node exceed 10:
In this case, block#4's node size is 10 at GCM begin, but increased to 11 later. PhaseCFG::select use null recalc_pressure_nodes array, this leads to crash.
Progress
Issue
Reviewers
Contributors
<hshi@openjdk.org>Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.java.net/jdk pull/5140/head:pull/5140$ git checkout pull/5140Update a local copy of the PR:
$ git checkout pull/5140$ git pull https://git.openjdk.java.net/jdk pull/5140/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 5140View PR using the GUI difftool:
$ git pr show -t 5140Using diff file
Download this PR as a diff file:
https://git.openjdk.java.net/jdk/pull/5140.diff