-
Notifications
You must be signed in to change notification settings - Fork 6.2k
8263707: C1 RangeCheckEliminator support constant array and NewMultiArray #3041
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 hshi! A progress list of the required criteria for merging this PR into |
|
@huishi-hs 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
|
|
Could someone help review this PR? |
|
Do you have any test that exercises this code path? |
I have an example case in JBS https://bugs.openjdk.java.net/secure/attachment/93668/range_check.java. Do you suggest adding a test case to check if RC is removed as expected? |
TobiHartmann
left a comment
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 also executed some internal testing and it all passed.
| assert(length->type()->as_IntConstant() != NULL, "array length must be integer"); | ||
| set_constant(length->type()->as_IntConstant()->value()); | ||
| } else if ((nma = x->array()->as_NewMultiArray()) != NULL) { | ||
| if ((length = nma->dims()->at(0)->as_Constant()) != NULL) { |
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 ifs could be merged.
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.
ifs are merged in updated commit
|
@huishi-hs 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 239 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. As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@TobiHartmann, @neliasso) but any other Committer may sponsor as well. ➡️ To flag this PR as ready for integration with the above commit message, type |
Yes - please do that. Look at the tests in open/test/hotspot/jtreg/compiler/c1 (for example RangeCheckVerificationOfIR.java). |
|
Test is added by checking if rangchecks are eliminated in given cases. -XX:+TraceRangeCheckElimination is added when launch C1 compilation, OutputAnalyzer is used to count how many RCs are eliminated. This test can only run with debug build. Test passed with fast/slow debug on x86 and skipped for release build. Also test with -XX:+CSEArrayLength which is default on on aarch64 and other platform. RangeCheckVerificationOfIR.java constructs all kinds of CFG with loops expect pass assertions in C1 code. Actually it doesn't dump IR and check. |
|
May I proceed to sponsor state? @neliasso |
neliasso
left a comment
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.
Yes, please do that. I will sponsor your PR. |
Thanks for your help! |
|
@huishi-hs Only Committers are allowed to sponsor changes. |
|
/integrate |
|
@huishi-hs |
|
/sponsor |
|
@neliasso @huishi-hs Since your change was applied there have been 240 commits pushed to the
Your commit was automatically rebased without conflicts. Pushed as commit 21e7402. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
…rray
C1 misses range check elimination opportunities for constant and NewMultiArray with fixed length now. This patch adds constant length node for load/store Indexed node when array is constant array or allocated with NewMultiArray and its first dimension length is constant.
Tested on linux x64 release/fastdebug with tier1 and tier2.
Regards
Hui
Progress
Issue
Reviewers
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.java.net/jdk pull/3041/head:pull/3041$ git checkout pull/3041Update a local copy of the PR:
$ git checkout pull/3041$ git pull https://git.openjdk.java.net/jdk pull/3041/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 3041View PR using the GUI difftool:
$ git pr show -t 3041Using diff file
Download this PR as a diff file:
https://git.openjdk.java.net/jdk/pull/3041.diff