-
Notifications
You must be signed in to change notification settings - Fork 6.1k
8311932: Suboptimal compiled code of nested loop over memory segment #16650
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 roland! A progress list of the required criteria for merging this PR into |
Webrevs
|
|
Thanks for running testing. Should be fixed now. |
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. I've re-submitted testing and report back once it passed.
@rwestrel 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 96 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 |
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!
TestFramework.runWithFlags("-XX:-UseCountedLoopSafepoints"); | ||
TestFramework.runWithFlags("-XX:+UseCountedLoopSafepoints", "-XX:LoopStripMiningIter=1"); | ||
TestFramework.runWithFlags("-XX:+UseCountedLoopSafepoints", "-XX:LoopStripMiningIter=1000"); | ||
TestFramework.runWithFlags("-XX:+TieredCompilation", "-XX:-UseCountedLoopSafepoints", "-XX:LoopUnrollLimit=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.
You could add 8311932
to the @bug
numbers above.
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 in new commit.
test/hotspot/jtreg/compiler/c2/irTests/TestLongRangeChecks.java
Outdated
Show resolved
Hide resolved
test/hotspot/jtreg/compiler/c2/irTests/TestLongRangeChecks.java
Outdated
Show resolved
Hide resolved
Co-authored-by: Christian Hagedorn <christian.hagedorn@oracle.com>
Co-authored-by: Christian Hagedorn <christian.hagedorn@oracle.com>
Co-authored-by: Christian Hagedorn <christian.hagedorn@oracle.com>
Thanks for reviewing and for the suggestions. |
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.
All tests passed.
src/hotspot/share/opto/loopnode.cpp
Outdated
|
||
if (range_checks.size() > 0) { | ||
// This transformation requires peeling one iteration. Also, if it has range checks and they are eliminated by | ||
// Loop Predication, then 2 Hoisted Check Predicates are added for one range check. Finally, transforming a long range check requires |
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.
Just noticed that the line wraps are off now - maybe you want to re-wrap these lines. But that's just a minor detail.
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, thanks for the update.
@TobiHartmann @chhagedorn thanks for the reviews |
/integrate |
Going to push as commit 129c470.
Your commit was automatically rebased without conflicts. |
To enable the elimination of long range checks, the loop that contains
the range checks is transformed into a loop nest and the range checks
are changed to operate on int values computed before the loop is
entered. This causes extra overhead out of loop and once, the range
checks are eliminated, can only pay off if the loop is executed for
long enough. This change disable the transformation if the trip count
computed from profile data is too low. This came up with a
MemorySegment API micro benchmarks and improves performance
significantly.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/16650/head:pull/16650
$ git checkout pull/16650
Update a local copy of the PR:
$ git checkout pull/16650
$ git pull https://git.openjdk.org/jdk.git pull/16650/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 16650
View PR using the GUI difftool:
$ git pr show -t 16650
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/16650.diff
Webrev
Link to Webrev Comment