[lworld] RFR: 8253113: [lworld] [lw3] C1 should avoid copying element of flattened arrays when reading a sub-element [v2]

Frederic Parain fparain at openjdk.java.net
Tue Sep 15 13:02:33 UTC 2020


> Please review these changes optimizing access to flattened arrays in C1.
> 
> The optimization avoids unnecessary copies of intermediate values when the code accesses a sub-element of a flattened
> array.
> For instance, with the following code:
> 
> inline class Point { int x = 0, y = 0; }
> void foo() {
>     Point[] array = new Point[10];
>     int i = array[1].x;
> }
> 
> C1 used to create a new instance of Point, copy the content from the array, then reads the x field from this new
> instance. With the optimization, C1 directly accesses the x field from the flattened array, and makes no heap
> allocation.
> A simple benchmark on the "int i = array[1].x;" line gives these results:
> 
> baseline:
> Benchmark                          Mode  Samples  Score  Score error  Units
> o.s.MyBenchmark.testArrayReads     avgt      200  4.250        0.011  ns/op
> 
> optimized:
> Benchmark                          Mode  Samples  Score  Score error  Units
> o.s.MyBenchmark.testArrayReads     avgt      200  2.228        0.004  ns/op
> 
> Thank you,
> 
> Fred

Frederic Parain has updated the pull request incrementally with one additional commit since the last revision:

  Fixes from review

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

Changes:
  - all: https://git.openjdk.java.net/valhalla/pull/187/files
  - new: https://git.openjdk.java.net/valhalla/pull/187/files/c67a81a7..c7480441

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=valhalla&pr=187&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=valhalla&pr=187&range=00-01

  Stats: 54 lines in 2 files changed: 14 ins; 36 del; 4 mod
  Patch: https://git.openjdk.java.net/valhalla/pull/187.diff
  Fetch: git fetch https://git.openjdk.java.net/valhalla pull/187/head:pull/187

PR: https://git.openjdk.java.net/valhalla/pull/187


More information about the valhalla-dev mailing list