RFR: 8286104: use aggressive liveness for unstable_if traps [v4]

Xin Liu xliu at openjdk.java.net
Wed May 25 19:31:00 UTC 2022


> I found that some phi nodes are useful because its uses are uncommon_trap nodes. In worse case, it would hinder boxing object eliminating and scalar replacement. Test.java of JDK-8286104 reveals this issue. This patch allows c2 parser to collect liveness based on next bci for unstable_if traps.  In most cases, next bci is closer to exits, so live locals are diminishing.  It helps to reduce the number of inputs of unstable_if traps. 
> 
> This is not a REDO of Optimization of Box nodes in uncommon_trap(JDK-8261137). Two patches are orthogonal.  I adapt test from [TestEliminateBoxInDebugInfo.java](https://github.com/openjdk/jdk/pull/2401/files#diff-49b2e38825aa4c28ca196bdc70c3cbecc2e835c2899f4f393527df4796b177ea), so part of credit goes to the original author.  I found that Scalar replacement can take care of the object `Integer ii = Integer.valueOf(value)` in original test even it can't be removed by later inliner.  I tweak the profiling data of Integer.valueOf() to hinder scalar replacement. 
> 
> This patch can cover the problem discovered by JDK-8261137. I ran the microbench and got 9x speedup on x86_64. It's almost same as JDK-8261137. 
> 
> Before:  
> 
> Benchmark               Mode  Cnt   Score   Error  Units
> MyBenchmark.testMethod  avgt   10  32.776 ± 0.075  us/op
> 
> After: 
> 
> Benchmark               Mode  Cnt   Score   Error  Units
> MyBenchmark.testMethod  avgt   10  3.656 ± 0.006  us/op
>  ```
> 
> Testing
> I ran tier1 test with and without `-XX:+DeoptimizeALot`. No regression has been found yet.

Xin Liu 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 17 additional commits since the last revision:

 - Merge branch 'master' into JDK-8286104
 - reimplement process_unstable_ifs
 - remember UnstableIfTrap in parser.
   
   Also add a statistical counter for trivial counter
 - Merge branch 'master' into JDK-8286104
 - bail out a corner case that ifnode postpones fold-compares after loop
   optimization.
 - revert code change from 1st revision.
 - Merge branch 'JDK-8276998' into JDK-8286104
 - rule out if a If nodes has 2 branches of unstable_if trap.
 - change the flag to diagnostic.
 - add sanity check for operands if bc is if_acmp_eq/ne and ifnull/nonnull
 - ... and 7 more: https://git.openjdk.java.net/jdk/compare/ffb7cc59...849cdec3

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/8545/files
  - new: https://git.openjdk.java.net/jdk/pull/8545/files/3eae8c5e..849cdec3

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=8545&range=03
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=8545&range=02-03

  Stats: 36442 lines in 602 files changed: 8041 ins; 27017 del; 1384 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8545.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8545/head:pull/8545

PR: https://git.openjdk.java.net/jdk/pull/8545


More information about the hotspot-compiler-dev mailing list