[lworld+vector] RFR: 8311080: [lworld+vector] Fix jdk build failures with different options
Jatin Bhateja
jbhateja at openjdk.org
Wed Jul 5 05:25:20 UTC 2023
On Mon, 3 Jul 2023 08:46:04 GMT, Xiaohong Gong <xgong at openjdk.org> wrote:
> There are several issues exposed by building jdk image with following different options:
> - `--disable-precompiled-headers`
> - `--with-jvm-variants=client`
> - `--with-jvm-variants=minimal` or `--disable-cds`
>
> 1. With `--disable-precompiled-headers`, using `class MultiFieldInfo` in `oops/fieldInfo.hpp` and `oops/fieldInfo.inline.hpp` builds error with "invalid use of incomplete type".
>
> The reason is that class `MultiFieldInfo` is used in `fieldInfo.hpp`, but the header declaring the class is not included in it. A direct
> fixing is including its header file `oops/instanceKlass.hpp` before using it. But it cannot work here since `oops/instanceKlass.hpp` has included `oops/fieldInfo.hpp`.
>
> To resolve the circle, we can move the definition of class `MultiFieldInfo` to `oops/fieldInfo.hpp`, which I think is also reasonable since `multifield` is a kind of `field`.
>
> 2. With `--with-jvm-variants=client`, calling `Deoptimization::reassign_fields_by_klass()` in `vectorsupport.cpp` builds error since `reassign_fields_by_klass()` is defined when C2 or JVMCI compiler is enabled (See [1]).
>
> Consider the caller method in `vectorSupport.cpp` is used only for C2 compiler (See [2]), adding the same limitation for definition of all the relative methods in `vectorSupport.cpp` is better and can fix this issue.
>
> 3. With `--with-jvm-variants=minimal` or `--disable-cds`, calling several CDS specific methods ([3]) in `oops/inlineKlass.cpp` builds error. Those caller methods defined in `inlineKlass.hpp` are all CDS related as well. Hence, adding the same CDS condition for them sounds reasonable and can fix this issue.
>
> This patch also fixed an return type mismatch issue exposed by building the jdk image on aarch64 windows system. The relative method is:
>
>
> jint SharedRuntime::skip_value_scalarization(InlineKlass *)
>
> The declaration type is `int` (see [4]).
>
> [1] https://github.com/openjdk/valhalla/blob/lworld%2Bvector/src/hotspot/share/runtime/deoptimization.hpp#L195
> [2] https://github.com/openjdk/valhalla/blob/lworld%2Bvector/src/hotspot/share/runtime/deoptimization.cpp#L1278
> [3] https://github.com/openjdk/valhalla/blob/lworld%2Bvector/src/hotspot/share/oops/instanceKlass.hpp#L1236
> [4] https://github.com/openjdk/valhalla/blob/lworld%2Bvector/src/hotspot/share/runtime/sharedRuntime.hpp#L186
src/hotspot/share/runtime/sharedRuntime.cpp line 555:
> 553:
> 554: JRT_LEAF(int, SharedRuntime::skip_value_scalarization(InlineKlass* klass))
> 555: return (int) VectorSupport::skip_value_scalarization(klass);
Thanks for addressing these, it will also fix the build issues with default options on Windows, I was planning to address these with JDK-8311383
-------------
PR Review Comment: https://git.openjdk.org/valhalla/pull/881#discussion_r1252545951
More information about the valhalla-dev
mailing list