RFR: 8261137: Optimization of Box nodes in uncommon_trap [v11]

Wang Huang whuang at openjdk.java.net
Wed Mar 24 07:12:07 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 incrementally with one additional commit since the last revision:

  refact SafePointScalarObjectNode constructor

-------------

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/2401/files
  - new: https://git.openjdk.java.net/jdk/pull/2401/files/2f0276cd..fee961bb

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=2401&range=10
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=2401&range=09-10

  Stats: 11 lines in 5 files changed: 5 ins; 0 del; 6 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