JDK-8239850 : Shenandoah: VerifyGraphEdges verification failed in PhaseCFG::global_code_motion()
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 8-shenandoah,11-shenandoah,14,15
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2020-02-24
  • Updated: 2020-02-27
  • Resolved: 2020-02-27
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 15
15Resolved
Related Reports
Duplicate :  
Relates :  
Description
Run this:

$ CONF=linux-x86_64-server-fastdebug make images run-test TEST=java/lang/StackWalker/LocalsAndOperands.java TEST_VM_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -XX:+VerifyGraphEdges"

...

#  Internal Error (/home/shade/trunks/jdk-jdk/src/hotspot/share/opto/gcm.cpp:1443), pid=22295, tid=22308
#  assert(!VerifyGraphEdges) failed: verification should have failed
#
# JRE version: OpenJDK Runtime Environment (15.0) (fastdebug build 15-internal+0-adhoc.shade.jdk-jdk)
# Java VM: OpenJDK 64-Bit Server VM (fastdebug 15-internal+0-adhoc.shade.jdk-jdk, compiled mode, sharing, compressed oops, shenandoah gc, linux-amd64)
# Problematic frame:
# V  [libjvm.so+0xb23f3e]  PhaseCFG::global_code_motion()+0x3de
#

Current CompileTask:
C2:  32153 4870    b        java.lang.StackStreamFactory$AbstractStackWalker::checkState (163 bytes)

Stack: [0x00007f7ee63f3000,0x00007f7ee64f4000],  sp=0x00007f7ee64eedf0,  free space=1007k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0xb23f3e]  PhaseCFG::global_code_motion()+0x3de
V  [libjvm.so+0xb268e1]  PhaseCFG::do_global_code_motion()+0x51
V  [libjvm.so+0x85909f]  Compile::Code_Gen()+0x26f
V  [libjvm.so+0x85d502]  Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool, DirectiveSet*)+0x1342
V  [libjvm.so+0x6d1e50]  C2Compiler::compile_method(ciEnv*, ciMethod*, int, DirectiveSet*)+0x110
V  [libjvm.so+0x869a6b]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x2db
V  [libjvm.so+0x86aaa8]  CompileBroker::compiler_thread_loop()+0x538
V  [libjvm.so+0x1689d76]  JavaThread::thread_main_inner()+0x206
V  [libjvm.so+0x168eba6]  Thread::call_run()+0xf6
V  [libjvm.so+0x128cc2e]  thread_native_entry(Thread*)+0x10e

This only happens with Shenandoah, not with Parallel, nor with G1.
Comments
I believe this thing is full duplicate of JDK-8239852. Since JDK-8239852 removes the assert, this one gets "fixed" by extension.
27-02-2020

The assert is triggered because late scheduling failed but VerifyGraphEdges didn't catch an invalid graph. Assuming the real bug is that scheduling fails although the graph is valid: ILW = Same as JDK-8239852 = Late scheduling fails on valid graph (compilation bailout), triggered by several tests, no workaround = MMH = P3
25-02-2020

Might be related to JDK-8239852.
24-02-2020