[lworld] RFR: 8229897: [lworld] C1 should avoid allocation when reading a field from a flattened field
Frederic Parain
fparain at openjdk.java.net
Wed Aug 26 20:16:40 UTC 2020
Please review this patch which removes temporary heap allocations when reading a field from a flattened field.
During the HIR graph construction, C1 detects sequences of consecutive getfield bytecodes involving flattened fields
and optimizes them with a single LoadField or NewInlineTypeInstance directly to the offset of the last nested field.
Performance improvement on a simple benchmark
static inline class Point {
int i = 0, j = 0;
}
static inline class Rectangle {
Point p0 = new Point(), p1 = new Point();
}
static class NamedRectangle {
Rectangle rect = new Rectangle();
String name;
}
static NamedRectangle nr = new NamedRectangle();
@Benchmark
public void testGetfieldChain1(Blackhole blackhole) {
int i = nr.rect.p0.j; // reads two flattened fields before
reading an int blackhole.consume(i);
}
@Benchmark
public void testGetfieldChain2(Blackhole blackhole) {
Point p = nr.rect.p1; // reads a flattened field inside a
flattened field blackhole.consume(p);
}
Without the optimization:
Benchmark Mode Samples Score Score error Units
o.s.MyBenchmark.testGetfieldChain1 avgt 200 8.696 0.024 ns/op
o.s.MyBenchmark.testGetfieldChain2 avgt 200 8.969 0.027 ns/op
With the optimization:
Benchmark Mode Samples Score Score error Units
o.s.MyBenchmark.testGetfieldChain1 avgt 200 2.134 0.019 ns/op
o.s.MyBenchmark.testGetfieldChain2 avgt 200 5.150 0.017 ns/op
Tested with Mach5, tiers 1 to 3.
Thank you,
Fred
-------------
Commit messages:
- Fix whitespaces
- Fix whitespaces
- Fix and upgrade tests
- Adding back refactored unit test
- Removing problematic unit test
- Fix test configuration for C2
- Add new test for NoSuchFieldError
- Fixes, cleanup and unit test
- Fix reading of flattened field, remove debug messages
- Initial getfield optimization, no exception support
Changes: https://git.openjdk.java.net/valhalla/pull/167/files
Webrev: https://webrevs.openjdk.java.net/valhalla/167/webrev.00
Issue: https://bugs.openjdk.java.net/browse/JDK-8229897
Stats: 1296 lines in 7 files changed: 1264 ins; 0 del; 32 mod
Patch: https://git.openjdk.java.net/valhalla/pull/167.diff
Fetch: git fetch https://git.openjdk.java.net/valhalla pull/167/head:pull/167
PR: https://git.openjdk.java.net/valhalla/pull/167
More information about the valhalla-dev
mailing list