JDK-8129094 : assert(is_java_primitive(bt)) failed: only primitive type vectors
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 9
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: x86
  • Submitted: 2015-06-18
  • Updated: 2017-07-26
  • Resolved: 2015-06-18
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 9
9 b72Fixed
Related Reports
Relates :  
Relates :  
Description
Nightly failures after 8080325 changes were pushed:

#  Internal Error (hotspot/src/cpu/x86/vm/x86.ad:1702), pid=1299, tid=0x00007fc03c7a6700
#  assert(is_java_primitive(bt)) failed: only primitive type vectors
#
# JRE version: Java(TM) SE Runtime Environment (9.0) (build 1.9.0-internal-fastdebug-20150617002303.vkozlov.8080325-b00)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.9.0-internal-fastdebug-20150617002303.vkozlov.8080325-b00 compiled mode linux-amd64 compressed oops)
# Core dump will be written. Default location: Core dumps may be processed with "/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e"
#
# 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 (0x00007fc050142000):  JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=1307, stack(0x00007fc03c6a6000,0x00007fc03c7a7000)]

Stack: [0x00007fc03c6a6000,0x00007fc03c7a7000],  sp=0x00007fc03c7a0d70,  free space=1003k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x10dde41]  VMError::report_and_die()+0x151;;  VMError::report_and_die()+0x151
V  [libjvm.so+0x7cf26b]  report_vm_error(char const*, int, char const*, char const*)+0x7b;;  report_vm_error(char const*, int, char const*, char const*)+0x7b
V  [libjvm.so+0x299467]  Matcher::max_vector_size(BasicType)+0xf7;;  Matcher::max_vector_size(BasicType)+0xf7
V  [libjvm.so+0xfedf0d]  SuperWord::unrolling_analysis(CountedLoopNode*, int&)+0x61d;;  SuperWord::unrolling_analysis(CountedLoopNode*, int&)+0x61d
V  [libjvm.so+0xc967f7]  IdealLoopTree::policy_unroll_slp_analysis(CountedLoopNode*, PhaseIdealLoop*, int)+0x427;;  IdealLoopTree::policy_unroll_slp_analysis(CountedLoopNode*, PhaseIdealLoop*, int)+0x427
V  [libjvm.so+0xc9bcea]  IdealLoopTree::policy_unroll(PhaseIdealLoop*)+0x52a;;  IdealLoopTree::policy_unroll(PhaseIdealLoop*)+0x52a
V  [libjvm.so+0xc9eeb3]  IdealLoopTree::iteration_split_impl(PhaseIdealLoop*, Node_List&)+0x1b3;;  IdealLoopTree::iteration_split_impl(PhaseIdealLoop*, Node_List&)+0x1b3
V  [libjvm.so+0xc9f12e]  IdealLoopTree::iteration_split(PhaseIdealLoop*, Node_List&)+0x15e;;  IdealLoopTree::iteration_split(PhaseIdealLoop*, Node_List&)+0x15e
V  [libjvm.so+0xc9f04e]  IdealLoopTree::iteration_split(PhaseIdealLoop*, Node_List&)+0x7e;;  IdealLoopTree::iteration_split(PhaseIdealLoop*, Node_List&)+0x7e
V  [libjvm.so+0xcb7370]  PhaseIdealLoop::build_and_optimize(bool, bool)+0x1070;;  PhaseIdealLoop::build_and_optimize(bool, bool)+0x1070
V  [libjvm.so+0x750ee1]  Compile::Optimize()+0xb61;;  Compile::Optimize()+0xb61

Comments
verified by nightly testing
26-07-2017

Here is StoreN (narrow oop store) node which failed: [t@40 l@40]: print n->dump(1) 138 ConN === 0 [[ 633 550 573 588 592 610 ]] #narrowoop: NULL 136 AddP === _ 134 134 135 [[ 633 550 573 588 592 610 ]] Oop:java/lang/ArithmeticException:exact+16 * [narrow] !jvms: DeoptArithmetic::run @ bci:6 DeoptArithmetic::main @ bci:12 634 Phi === 635 610 633 [[ 633 ]] #memory Memory: @java/lang/Throwable+16 * [narrow], name=detailMessage, idx=6; !orig=[620],[561],543,[541],[97],[142] !jvms: DeoptArithmetic::main @ bci:2 635 CountedLoop === 635 609 106 [[ 633 634 635 568 638 ]] inner stride: 4 main of N635 !orig=[621],[569],[557],[545] !jvms: DeoptArithmetic::main @ bci:24 633 StoreN === 635 634 136 138 [[ 634 602 ]] @java/lang/Throwable+16 * [narrow], name=detailMessage, idx=6; Memory: @java/lang/ArithmeticException:exact+16 * [narrow], name=detailMessage, idx=6; !orig=[619],[139],[144] !jvms: DeoptArithmetic::run @ bci:6 DeoptArithmetic::main @ bci:12 It is not recorded in ignored_loop_nodes[] because its address is outside the loop so next check failed: if (n->is_Mem()) { Node* adr = n->in(MemNode::Address); Node* n_ctrl = _phase->get_ctrl(adr); // save a queue of post process nodes if (n_ctrl != NULL && lpt()->is_member(_phase->get_loop(n_ctrl))) { I think we should ignore not primitive memory nodes in a loop regardless their (or their address) control.
18-06-2015