-
Notifications
You must be signed in to change notification settings - Fork 5.7k
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
8279622: C2: miscompilation of map pattern as a vector reduction #8464
Conversation
👋 Welcome back rcastanedalo! A progress list of the required criteria for merging this PR into |
@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. |
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.
That looks good to me.
@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 87 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 |
Thanks for the review, Roland! |
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 reviewing, Vladimir! |
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.
Nice analysis, looks good to me!
Thanks, Tobias! |
/integrate |
Going to push as commit 6fcd322.
Your commit was automatically rebased without conflicts. |
@robcasloz Pushed as commit 6fcd322. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
The node reduction flag (
Node::Flag_is_reduction
) is only valid as long as the node remains within the reduction loop in which it was originally marked. This changeset ensures that reduction nodes are unmarked as such if they are extracted out of their associated reduction loop by the peel/main/post loop transformation (PhaseIdealLoop::insert_pre_post_loops()
). This prevents SLP from wrongly vectorizing, as parallel reductions, outer non-reduction loops to which reduction nodes have been extracted. A more detailed analysis of the failure is available in the JBS bug report.The issue could be alternatively fixed at the IGVN level by unmarking reduction nodes as soon as they are decoupled from their corresponding phi and counted loop nodes, but the fix proposed here is simpler and less intrusive.
The changeset also introduces an assertion at the use point (
SuperWord::transform_loop()
) to check that loops containing reduction nodes are marked as reductions. This invariant could be alternatively placed together with other assertions under-XX:+VerifyLoopOptimizations
, but this option is known to be broken.IR verification using the IR test framework is not feasible for the proposed test case, since the failure is triggered on a OSR compilation, for which IR verification does not seem to be supported. The assertion described above compensates this limitation.
Testing
Functionality
Performance
compiler/vectorization
andcompiler/loopopts/superword
tests using-XX:+TraceNewVectors
on linux-x64.Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.java.net/jdk pull/8464/head:pull/8464
$ git checkout pull/8464
Update a local copy of the PR:
$ git checkout pull/8464
$ git pull https://git.openjdk.java.net/jdk pull/8464/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 8464
View PR using the GUI difftool:
$ git pr show -t 8464
Using diff file
Download this PR as a diff file:
https://git.openjdk.java.net/jdk/pull/8464.diff