- 
                Notifications
    You must be signed in to change notification settings 
- Fork 6.1k
8370481: C2 SuperWord: Long/Integer.compareUnsigned return wrong value in SLP #27942
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 mli! A progress list of the required criteria for merging this PR into  | 
| @Hamlin-Li 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 148 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  | 
| @Hamlin-Li 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.
@Hamlin-Li That looks like a great improvement :)
All I am missing are some test cases. And if possible: IR rules 😉
| 
 Thank you for having a look! :) 
 Yes, I also added some tests and IR rules of course. :) | 
| /solves JDK-8370481 | 
| @Hamlin-Li  | 
| @Hamlin-Li If you are fixing a bug here, we should focus on the bug only. After all, we may want to backport the bugfix. | 
| @eme64 I just keep Op_CmpI/L. | 
Co-authored-by: Emanuel Peter <[email protected]>
Co-authored-by: Emanuel Peter <[email protected]>
| 
 I ran all the tests under test/hotspot/jtreg/compiler on x86, 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.
The code looks really good now (modulo one tiny suggestion).
I'll run some internal testing now...
Co-authored-by: Emanuel Peter <[email protected]>
Co-authored-by: Emanuel Peter <[email protected]>
| 
 Fixed with github help, thanks for the suggestion! :) 
 Thank you! | 
| Hi, while @eme64 running some tests, can someone else have another look at this pr? Thanks! | 
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.
Testing passed - Approved. Thanks for all the work, and looking forward to what you have still planned :)
| 
 @eme64 Thank you for reviewing and testing! | 
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.
LGTM
| 
 @gctony Thank you for reviewing! :) | 
| /integrate | 
| Going to push as commit eab5644. 
 Your commit was automatically rebased without conflicts. | 
| @Hamlin-Li Pushed as commit eab5644. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. | 
Hi,
Can you help to review the patch? @eme64
Issue
Currently, in SLP when transform from (Bool + CmpU + CMove) to (VectorMaskCmp + VectorBlend), the unsigned-ness in CmpU is lost, then end up doing a signed instead of unsigned comparison in VectorMaskCmp.
For details please check code at
SuperWordVTransformBuilder::make_vector_vtnode_for_packandPackSet::get_bool_test.Fix
Currently,
BoolTestdoes not support an unsigned construction (BoolTest( mask btm ) : _test(btm) { assert((btm & unsigned_compare) == 0, "unsupported");}), seems to me a feasible solution would be get the unsigned information from CmpU (which could be an input of Bool) and pass it to VectorMaskCmp.Thanks
This pr could also lead to more optimizations, like: #25336 and #25341.
Progress
Issue
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/27942/head:pull/27942$ git checkout pull/27942Update a local copy of the PR:
$ git checkout pull/27942$ git pull https://git.openjdk.org/jdk.git pull/27942/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 27942View PR using the GUI difftool:
$ git pr show -t 27942Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/27942.diff
Using Webrev
Link to Webrev Comment