[lworld] Integrated: 8262747: [lworld] C1 compilation fails when PinAllInstructions is turned on

Yi Yang github.com+5010047+kelthuzadx at openjdk.java.net
Tue Mar 2 13:33:58 UTC 2021


On Mon, 1 Mar 2021 11:50:07 GMT, Yi Yang <github.com+5010047+kelthuzadx at openjdk.org> wrote:

> When turning on the -XX:+PinAllInstructions, C1 hits the following assertion:
> 
> `
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  Internal Error (/home/qingfeng.yy/valhalla/src/hotspot/share/c1/c1_LIRGenerator.cpp:1524), pid=81974, tid=81994
> #  assert(!x->is_pinned()) failed: only for unpinned constants
> ...
> Stack: [0x00007fc0771fa000,0x00007fc0772fb000],  sp=0x00007fc0772f89f0,  free space=1018k
> Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
> V  [libjvm.so+0x65de6c]  LIRGenerator::load_constant(Constant*)+0x2a
> V  [libjvm.so+0x65ee4b]  LIRGenerator::access_sub_element(LIRItem&, LIRItem&, LIR_OprDesc*&, ciField*, int)+0x319
> V  [libjvm.so+0x66209c]  LIRGenerator::do_LoadIndexed(LoadIndexed*)+0x846
> V  [libjvm.so+0x6277c4]  LoadIndexed::visit(InstructionVisitor*)+0x2e
> V  [libjvm.so+0x6586ae]  LIRGenerator::do_root(Instruction*)+0xfc
> V  [libjvm.so+0x65856e]  LIRGenerator::block_do(BlockBegin*)+0x7c
> V  [libjvm.so+0x62696d]  BlockList::iterate_forward(BlockClosure*)+0x5d
> V  [libjvm.so+0x61ee24]  IR::iterate_linear_scan_order(BlockClosure*)+0x2e
> V  [libjvm.so+0x5ee90b]  Compilation::emit_lir()+0x95
> V  [libjvm.so+0x5ef140]  Compilation::compile_java_method()+0x21e
> V  [libjvm.so+0x5ef4af]  Compilation::compile_method()+0x107
> V  [libjvm.so+0x5efd05]  Compilation::Compilation(AbstractCompiler*, ciEnv*, ciMethod*, int, BufferBlob*, bool, DirectiveSet*)+0x3bb
> V  [libjvm.so+0x5f3baf]  Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0xd9
> V  [libjvm.so+0x81a938]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x88a
> V  [libjvm.so+0x81956b]  CompileBroker::compiler_thread_loop()+0x3df
> V  [libjvm.so+0x83bef1]  CompilerThread::thread_entry(JavaThread*, Thread*)+0x69
> V  [libjvm.so+0x12fd598]  JavaThread::thread_main_inner()+0x14c
> V  [libjvm.so+0x12fd444]  JavaThread::run()+0x11e
> V  [libjvm.so+0x12fa630]  Thread::call_run()+0x180
> V  [libjvm.so+0x1028936]  thread_native_entry(Thread*)+0x1e4
> `
> 
> The root cause of this crash is because LIRGenerator::access_sub_element() uses LIRGenerator::load_constant() to load the default value of a primitive class type(constant) into a register, load_constant requires unpinned constant instr, so it unquestionably crashes when PinAllInstructions is enabled.
> 
> This problem also occurred in many places under `test/hotspot/jtreg/compiler/valhalla`. After applying this patch, they all passed with slowdebug build.
> 
> Thanks,
> Yang

This pull request has now been integrated.

Changeset: 436cfe61
Author:    Yi Yang <qingfeng.yy at alibaba-inc.com>
Committer: Tobias Hartmann <thartmann at openjdk.org>
URL:       https://git.openjdk.java.net/valhalla/commit/436cfe61
Stats:     15 lines in 1 file changed: 12 ins; 0 del; 3 mod

8262747: [lworld] C1 compilation fails when PinAllInstructions is turned on

Reviewed-by: thartmann

-------------

PR: https://git.openjdk.java.net/valhalla/pull/355



More information about the valhalla-dev mailing list