Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8325494

C2: Broken graph after not skipping CastII node anymore for Assertion Predicates after JDK-8309902



    • b19


      JDK-8309902 removed code to skip a CastII node for the Initialized Assertion Predicate expression to fix a bug since it was not evident that the CastII is still required for correctness.

      I now found a fuzzer case which can be traced back to JDK-8309902, i.e. that we would still require to skip the CastII node. In the test case, we do not skip the CastII node when initializing an Assertion Predicate and as a result, the Assertion Predicate is not folded away.

      We might need to revisit the fix of JDK-8309902.

      Note that (at least after an initial analysis) the full fix for missing Assertion Predicates (JDK-8288981) does not help here since we have an Assertion Predicate in place - but it's unable to fold the dead path away.

      To reproduce:
      $ java -XX:-TieredCompilation -Xcomp -XX:CompileOnly=Test::test Test.java
      $ java -XX:-TieredCompilation -Xcomp -XX:CompileOnly=Reduced::test Reduced.java

      # A fatal error has been detected by the Java Runtime Environment:
      # Internal Error (/opt/mach5/mesos/work_dir/slaves/0db9c48f-6638-40d0-9a4b-bd9cc7533eb8-S9853/frameworks/1735e8a2-a1db-478c-8104-60c8b0af87dd-0196/executors/56009ff3-1ef9-43a1-9ae7-76a9d407dde0/runs/c23ecd31-3420-4318-b56a-b489ae5be3b0/workspace/open/src/hotspot/share/opto/loopopts.cpp:1675), pid=78706, tid=78753
      # assert(!n->is_Store() && !n->is_LoadStore()) failed: no node with a side effect
      # JRE version: Java(TM) SE Runtime Environment (23.0+7) (fastdebug build 23-ea+7-448)
      # Java VM: Java HotSpot(TM) 64-Bit Server VM (fastdebug 23-ea+7-448, compiled mode, sharing, compressed oops, compressed class ptrs, g1 gc, linux-amd64)
      # Problematic frame:
      # V [libjvm.so+0x12c2f48] PhaseIdealLoop::try_sink_out_of_loop(Node*)+0xbb8
      Command Line: -XX:CompileCommand=quiet -XX:-TieredCompilation -Xcomp -XX:CompileOnly=Test::* Test
      Current CompileTask:
      C2:655 6 b Test::lMeth (286 bytes)

      Stack: [0x00007f0104e00000,0x00007f0104f00000], sp=0x00007f0104efa9c0, free space=1002k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [libjvm.so+0x12c2f48] PhaseIdealLoop::try_sink_out_of_loop(Node*)+0xbb8 (loopopts.cpp:1675)
      V [libjvm.so+0x12c3023] PhaseIdealLoop::split_if_with_blocks_post(Node*)+0x83
      V [libjvm.so+0x12c3896] PhaseIdealLoop::split_if_with_blocks(VectorSet&, Node_Stack&)+0x96
      V [libjvm.so+0x12b64a7] PhaseIdealLoop::build_and_optimize()+0xe87
      V [libjvm.so+0x9f3f08] PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)+0x388
      V [libjvm.so+0x9ecb55] Compile::optimize_loops(PhaseIterGVN&, LoopOptsMode)+0x75
      V [libjvm.so+0x9ef301] Compile::Optimize()+0xe21
      V [libjvm.so+0x9f2924] Compile::Compile(ciEnv*, ciMethod*, int, Options, DirectiveSet*)+0x1b44
      V [libjvm.so+0x846ce5] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x1d5
      V [libjvm.so+0x9fe61c] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x92c
      V [libjvm.so+0x9ff2a8] CompileBroker::compiler_thread_loop()+0x468
      V [libjvm.so+0xec18dc] JavaThread::thread_main_inner()+0xcc
      V [libjvm.so+0x17ae046] Thread::call_run()+0xb6
      V [libjvm.so+0x14b43b7] thread_native_entry(Thread*)+0x127


        1. FuzzerUtils.java
          13 kB
        2. hs_err_pid78706.log
          66 kB
        3. Reduced.java
          0.6 kB
        4. Test.java
          10 kB

        Issue Links



              roland Roland Westrelin
              chagedorn Christian Hagedorn
              0 Vote for this issue
              5 Start watching this issue