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
8290451: Incorrect result when switching to C2 OSR compilation from C1 #9938
Conversation
|
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.
Looks good to me.
*/ | ||
|
||
super public class BadStateAtLongCmp | ||
version 61:0 |
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 use an older bytecode version to simplify backports.
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.
Done (with the class file version for jdk 8 now)
@rwestrel This change now passes all automated pre-integration checks. 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 88 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.
|
Thanks for the review. |
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.
Ok.
@vnkozlov thanks for the review |
/integrate |
Going to push as commit afa5d4c.
Your commit was automatically rebased without conflicts. |
In BadStateAtLongCmp.test(), the field increment is between the lcmp
and iflt bytecodes that implement the loop exit condition (handcrafted
bytecodes required as such a sequence is not generated by javac). When
compiled by C1, lcmp+iflt is canonicalized to a single If and it
captures the state of the lcmp bytecode. Tiered compilation attaches
the state to a deoptimization call to switch to an OSR
compilation. That state causes the field increment to be reexecuted
when the switch to a C2 method occurs at the backbranch. Proposed fix
is to use the state at the iflt instead.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk pull/9938/head:pull/9938
$ git checkout pull/9938
Update a local copy of the PR:
$ git checkout pull/9938
$ git pull https://git.openjdk.org/jdk pull/9938/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 9938
View PR using the GUI difftool:
$ git pr show -t 9938
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/9938.diff