-
Couldn't load subscription status.
- Fork 126
8369805: [lworld] C2: assert(is_InlineType()) failed: invalid node class: Con #1694
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 chagedorn! A progress list of the required criteria for merging this PR into |
|
@chhagedorn 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 233 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 |
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.
Thanks for the thorough analysis Christian! Looks good to me.
Co-authored-by: Tobias Hartmann <[email protected]>
|
Thanks Tobias for your review! /integrate |
|
Going to push as commit 60af17f.
Your commit was automatically rebased without conflicts. |
|
@chhagedorn Pushed as commit 60af17f. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
TestLWorld.javawas failing intermittently with-XX:+StressIGVNand-XX:+StressLoopPeelingdue to not handlingtopcorrectly inInlineTypeNode::merge_with()during IGVN.We have the following graph during IGVN:

The following steps happen:
6837 Phiwas created in Loop Peeling to merge data nodes from the peeled iteration and the remaining loop (this is the reason we are only seeing this failure withStressLoopPeeling- there are simply more chances with more phis to get unlucky and hit the assert).6837 Phiin IGVN, we applyPhiNode::try_push_inline_types_down()in order to push theInlineTypenodes down recursively.PhiNode::try_push_inline_types_down()on6535 Phi.InlineTypenode based on the same klass as6259 InlineType(i.e. the same fields) but usePhisfor the inputs orInlineTypenodes if the fields are value objects themselves:valhalla/src/hotspot/share/opto/inlinetypenode.cpp
Lines 87 to 89 in abc1d5b
This new
InlineTypenode represents the resulting "pushed down"InlineType. Let's call itinline-type-result.inline-type-resultby visiting theInlineTypeinputs of6535 Phi.6259 InlineType: We update the first input of the phis ofinline-type-resultby callingmerge_with()oninline-type-result.inline-type-result: These are either phis orInlineTypenodes (see step 4). When we see anInlineTypeinput, we must also see anInlineTypeinput for6259 InlineTypebecause we used the same klass in step 4. However, we miss here that we could also have a top input because the node is actually being removed in IGVN because we only take the other path of6535 Phi. Therefore this assumption is wrong:valhalla/src/hotspot/share/opto/inlinetypenode.cpp
Lines 157 to 161 in abc1d5b
and we crash because
val2is top.The fix is straight forward to stop the merge since the node is dead. Since this is highly intermittent and occurring with
TestLWorld.javaonly, I have not added a separate test case. Additionally to standard testing, I also ranTestLWorld.java100 times in the CI with the triggering flags without any failure anymore.Thanks,
Christian
Progress
Issue
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/valhalla.git pull/1694/head:pull/1694$ git checkout pull/1694Update a local copy of the PR:
$ git checkout pull/1694$ git pull https://git.openjdk.org/valhalla.git pull/1694/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 1694View PR using the GUI difftool:
$ git pr show -t 1694Using diff file
Download this PR as a diff file:
https://git.openjdk.org/valhalla/pull/1694.diff
Using Webrev
Link to Webrev Comment