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

Frederic Parain fparain at openjdk.java.net
Tue Sep 15 15:40:09 UTC 2020


On Mon, 14 Sep 2020 13:55:17 GMT, Frederic Parain <fparain at openjdk.org> wrote:

> 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

This pull request has now been integrated.

Changeset: 1a52191c
Author:    Frederic Parain <fparain at openjdk.org>
URL:       https://git.openjdk.java.net/valhalla/commit/1a52191c
Stats:     343 lines in 7 files changed: 9 ins; 297 del; 37 mod

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

Reviewed-by: thartmann

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

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


More information about the valhalla-dev mailing list