RFR: 8333644: C2: assert(is_Bool()) failed: invalid node class: Phi
    Christian Hagedorn 
    chagedorn at openjdk.org
       
    Wed Jun  5 13:40:06 UTC 2024
    
    
  
In the patch of [JDK-8330386](https://bugs.openjdk.org/browse/JDK-8330386), I've added a test case that took the code path in `clone_loop_handle_data_uses()` with the new `OpaqueInitializedAssertionPredicateNode`. So, it proved that we should also add a case for `OpaqueInitializedAssertionPredicate` - yet somehow, I forgot to do that. Unfortunately, I could not come up with a failing test if we do not handle this case separately and the mistake went unnoticed.
But the fuzzer has now found such a case where we crash when creating the Mach graph because we have an `If` with a `Phi` input instead of a `Bool`. This happens exactly because of not handling `OpaqueInitializedAssertionPredicate` in  `clone_loop_handle_data_uses()`. 
We have an outside use of a `4843 Bool` (`4193 RangeCheck`) which is also an input into a `OpaqueInitializedAssertionPredicate` node:

We should now clone this `Bool/Cmp` down to avoid having a `Phi` between the `OpaqueInitializedAssertionPredicate` and
the `Bool` node which currently wrongly happens:

and we crash later. With this simple patch, this is being avoided.
The good thing is that we now have a test that makes sure that this new condition is properly tested.
Thanks,
Christian
-------------
Commit messages:
 - 8332920: C2: assert(is_Bool()) failed: invalid node class: Phi
Changes: https://git.openjdk.org/jdk/pull/19561/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19561&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8333644
  Stats: 52 lines in 2 files changed: 44 ins; 1 del; 7 mod
  Patch: https://git.openjdk.org/jdk/pull/19561.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19561/head:pull/19561
PR: https://git.openjdk.org/jdk/pull/19561
    
    
More information about the hotspot-compiler-dev
mailing list