RFR: 8297264: C2: Cast node is not processed again in CCP and keeps a wrong too narrow type which is later replaced by top
Roberto Castañeda Lozano
rcastanedalo at openjdk.org
Thu Dec 1 13:14:04 UTC 2022
On Thu, 1 Dec 2022 09:37:57 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:
> 
>
> During CCP, we optimize the type of `348 CastII` in `CastIINode::Value()`: It matches the `CmpI/If` pattern because the current type of `119 Phi` is a constant int:
> https://github.com/openjdk/jdk/blob/9f24a6f43c6a5e1fa92275e0a87af4f1f0603ba3/src/hotspot/share/opto/castnode.cpp#L213-L215
>
> Later in CCP, the type of `119 Phi` is updated and is no longer a constant but `348 CastII` is not processed anymore during CCP and keeps its wrong too narrow type. We apply more loop opts and at some point, the `CastII` is replaced by top because the input type is outside of the wrong type range of the `CastII`. Some data nodes are folded and the graph is left in a broken state and we assert during GCM.
>
> I propose to add a `CastII` node back to the CCP worklist if we find such a `Cmp/If` pattern to ensure that the `CastII` type is correctly set during CCP.
>
> Thanks,
> Christian
Looks good! Just a couple of questions/suggestions.
src/hotspot/share/opto/phaseX.cpp line 1967:
> 1965: push_if_not_bottom_type(worklist, cast_ii);
> 1966: }
> 1967: }
Would it make sense to assume there is at most one `CastII` output and replace the loop with a call to the auxiliary function `Node* Node::find_out_with(int opcode)`?
test/hotspot/jtreg/compiler/c2/TestCastIIWrongTypeCCP.java line 1:
> 1: /*
This file might fit better under `test/hotspot/jtreg/compiler/ccp`.
test/hotspot/jtreg/compiler/c2/TestCastIIWrongTypeCCP.java line 27:
> 25: * @test
> 26: * @bug 8297264
> 27: * @summary Test that CastII nodes are added to the CCP worklist if they could or could have been
Suggestion:
* @summary Test that CastII nodes are added to the CCP worklist if they could have been
-------------
Marked as reviewed by rcastanedalo (Reviewer).
PR: https://git.openjdk.org/jdk/pull/11448
More information about the hotspot-compiler-dev
mailing list