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

Tobias Hartmann thartmann at openjdk.java.net
Tue Sep 15 13:12:17 UTC 2020


On Tue, 15 Sep 2020 13:02:33 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
>
> Frederic Parain has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fixes from review

Looks good, thanks for making these changes!

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

Marked as reviewed by thartmann (Committer).

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


More information about the valhalla-dev mailing list