RFR: 8261137: Optimization of Box nodes in uncommon_trap [v9]
Wang Huang
whuang at openjdk.java.net
Tue Mar 23 08:32:34 UTC 2021
> JDK-8075052 has removed useless autobox. However, in some cases, the box is still saved. For instance:
> @Benchmark
> public void testMethod(Blackhole bh) {
> int sum = 0;
> for (int i = 0; i < data.length; i++) {
> Integer ii = Integer.valueOf(data[i]);
> if (i < data.length) {
> sum += ii.intValue();
> }
> }
> bh.consume(sum);
> }
> Although the variable ii is only used at ii.intValue(), it cannot be eliminated as a result of being used by a hidden uncommon_trap.
> The uncommon_trap is generated by the optimized "if", because its condition is always true.
>
> We can postpone box in uncommon_trap in this situation. We treat box as a scalarized object by adding a SafePointScalarObjectNode in the uncommon_trap node,
> and deleting the use of box:
>
> There is no additional fail/error(s) of jtreg after this patch.
>
> I adjust my codes and add a new benchmark
>
> public class MyBenchmark {
>
> static int[] data = new int[10000];
>
> static {
> for(int i = 0; i < data.length; ++i) {
> data[i] = i * 1337 % 7331;
> }
> }
>
> @Benchmark
> public void testMethod(Blackhole bh) {
> int sum = 0;
> for (int i = 0; i < data.length; i++) {
> Integer ii = Integer.valueOf(data[i]);
> black();
> if (i < 100000) {
> sum += ii.intValue();
> }
> }
> bh.consume(sum);
> }
>
> public void black(){}
> }
>
>
> aarch64:
> base line:
> Benchmark Mode Samples Score Score error Units
> o.s.MyBenchmark.testMethod avgt 30 88.513 1.111 us/op
>
> opt:
> Benchmark Mode Samples Score Score error Units
> o.s.MyBenchmark.testMethod avgt 30 52.776 0.096 us/op
>
> x86:
> base line:
> Benchmark Mode Samples Score Score error Units
> o.s.MyBenchmark.testMethod avgt 30 81.066 3.156 us/op
>
> opt:
> Benchmark Mode Samples Score Score error Units
> o.s.MyBenchmark.testMethod avgt 30 55.596 0.775 us/op
Wang Huang has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains ten additional commits since the last revision:
- Merge branch 'master' into JDK-8261137
- refactor
- refactor some codes
- fix bugs
- add debuginfo optimization
- delete useless line
- fix some bugs
- refactor codes
- 8261137: Optimization of Box nodes in uncommon_trap
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/2401/files
- new: https://git.openjdk.java.net/jdk/pull/2401/files/3934fd9a..4c1b5035
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=2401&range=08
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=2401&range=07-08
Stats: 221753 lines in 5602 files changed: 113368 ins; 64482 del; 43903 mod
Patch: https://git.openjdk.java.net/jdk/pull/2401.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/2401/head:pull/2401
PR: https://git.openjdk.java.net/jdk/pull/2401
More information about the hotspot-compiler-dev
mailing list