8375548: [lworld] C2: Compiler replay does not work due to not creating ObjArrayKlass objects with ArrayProperties::DEFAULT #1931
+88
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When using compiler replay with
--enable-previewwith array store/load profiling, we only createObjArrayKlassobjects instead of subclass objects (i.e.RefArrayKlassorFlatArrayKlass). The reason is that we are directly resolving klasses withSystemDirectory::resolve_or_fail():valhalla/src/hotspot/share/ci/ciReplay.cpp
Line 557 in a4fb7eb
This method will call
InstanceKlass::array_klass()at some point which directly creates anObjArrayKlassobject. This let's the replayed compilation fail when trying to speculate on an value class array which expects a subclass ofObjArrayKlass.The fix I propose is to make sure that we are always creating subclass objects by explicitly using
ArrayProperties::DEFAULTwhen parsing anArrayKlassduring replay compilation.I added a compiler replay test which triggers the same assert as shown in the report.
Thanks,
Christian
Progress
Issue
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/valhalla.git pull/1931/head:pull/1931$ git checkout pull/1931Update a local copy of the PR:
$ git checkout pull/1931$ git pull https://git.openjdk.org/valhalla.git pull/1931/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 1931View PR using the GUI difftool:
$ git pr show -t 1931Using diff file
Download this PR as a diff file:
https://git.openjdk.org/valhalla/pull/1931.diff
Using Webrev
Link to Webrev Comment