RFA: 8168996: C2 crash at postaloc.cpp:140 : assert(false) failed: unexpected yanked node

Severin Gehwolf sgehwolf at redhat.com
Fri Jan 8 09:35:13 UTC 2021


Hi,

On Fri, 2021-01-08 at 06:17 +0000, Yangfei (Felix) wrote:
> Hi,
> 
>   I am witnessing a known issue [1] when running jcstress test with 8u aarch64 fastdebug build.
>   This issue can be easily reproduced during a jcstress run on my aarch64 linux server.
>   Crash log looks like:
> 
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  Internal Error (/home/yangfei/openjdk8u-dev/hotspot/src/share/vm/opto/postaloc.cpp:139), pid=42814, tid=0x0000ffff72e381f0
> #  assert(false) failed: unexpected yanked node
> #
> # JRE version: OpenJDK Runtime Environment (8.0) (build 1.8.0-internal-fastdebug-yangfei_2020_12_31_10_36-b00)
> # Java VM: OpenJDK 64-Bit Server VM (25.71-b00-fastdebug mixed mode linux-aarch64 compressed oops)
> # Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
> #
> # If you would like to submit a bug report, please visit:
> #   http://bugreport.java.com/bugreport/crash.jsp
> #
> 
> ---------------  T H R E A D  ---------------
> 
> Current thread (0x0000ffff8c1c8800):  JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=44138, stack(0x0000ffff72c39000,0x0000ffff72e3
> 9000)]
> 
> Stack: [0x0000ffff72c39000,0x0000ffff72e39000],  sp=0x0000ffff72e337f0,  free space=2025k
> Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
> V  [libjvm.so+0x1084458]  VMError::report_and_die()+0x328
> V  [libjvm.so+0x6b91cc]  report_vm_error(char const*, int, char const*, char const*)+0x6c
> V  [libjvm.so+0xe454b8]  PhaseChaitin::yank_if_dead_recurse(Node*, Node*, Block*, Node_List*, Node_List*) [clone .part.51]+0x120
> V  [libjvm.so+0xe4ab7c]  PhaseChaitin::post_allocate_copy_removal()+0xcdc
> V  [libjvm.so+0x503ea0]  PhaseChaitin::Register_Allocate()+0x7a0
> V  [libjvm.so+0x620af8]  Compile::Code_Gen()+0x288
> V  [libjvm.so+0x623968]  Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool)+0xd30
> V  [libjvm.so+0x4c79a0]  C2Compiler::compile_method(ciEnv*, ciMethod*, int)+0xd8
> V  [libjvm.so+0x630034]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x814
> V  [libjvm.so+0x6313a4]  CompileBroker::compiler_thread_loop()+0x7d4
> V  [libjvm.so+0xff6250]  JavaThread::thread_main_inner()+0x1f8
> V  [libjvm.so+0xff6504]  JavaThread::run()+0x274
> V  [libjvm.so+0xdb77a4]  java_start(Thread*)+0x104
> C  [libpthread.so.0+0x7088]  start_thread+0xb0
> C  [libc.so.6+0xd04ec]
> 
>   I find that JDK-8168996 is made inaccessible for the public.  So I cannot follow the normal 8u backport procedure at [2].
>   Original RFR thread: https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2016-November/024987.html 
>   Here is the original patch for JDK-8168996: 
> 
> # HG changeset patch
> # User thartmann
> # Date 1480403775 -3600
> #      Tue Nov 29 08:16:15 2016 +0100
> # Node ID 771199a0134932b6ca0d7408115abc32125998e1
> # Parent  14af457890427b326d4eaee62581fd5c80559d4a
> 8168996: C2 crash at postaloc.cpp:140 : assert(false) failed: unexpected yanked node
> Summary: Prevent MemBarAcquire from keeping a LoadNNode alive by adding it to the worklist if it is the only user of a DecodeNNode.
> Reviewed-by: kvn
> 
> diff -r 14af45789042 -r 771199a01349 hotspot/src/share/vm/opto/node.cpp
> --- a/hotspot/src/share/vm/opto/node.cpp        Sun Nov 27 19:58:30 2016 -0800
> +++ b/hotspot/src/share/vm/opto/node.cpp        Tue Nov 29 08:16:15 2016 +0100
> @@ -1117,8 +1117,8 @@
>    if (this->is_Store()) {
>      // Condition for back-to-back stores folding.
>      return n->Opcode() == op && n->in(MemNode::Memory) == this;
> -  } else if (this->is_Load()) {
> -    // Condition for removing an unused LoadNode from the MemBarAcquire precedence input
> +  } else if (this->is_Load() || this->is_DecodeN()) {
> +    // Condition for removing an unused LoadNode or DecodeNNode from the MemBarAcquire precedence input
>      return n->Opcode() == Op_MemBarAcquire;
>    } else if (op == Op_AddL) {
>      // Condition for convL2I(addL(x,y)) ==> addI(convL2I(x),convL2I(y))
> 
>   Original patch applies cleanly to jdk8u-dev.
>   Performed full jtreg test on aarch64 linux server.  Also passed jcstress test on the same platform.
>   OK to backport?
> 
> [1] https://bugs.openjdk.java.net/browse/JDK-8168996  
> [2] https://wiki.openjdk.java.net/display/jdk8u/Main 

The aarch64 port hasn't yet been integrated with 8u mainline. I'd
suggest to wait for this until it happened[i]. Expected for the 8u292
cycle.

Thanks,
Severin

[i] https://mail.openjdk.java.net/pipermail/jdk8u-dev/2020-November/013121.html

> Thanks,
> Felix




More information about the jdk8u-dev mailing list