JDK-6875959 : CTW fails hotspot/src/share/vm/opto/reg_split.cpp:1087
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs16
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: x86
  • Submitted: 2009-08-26
  • Updated: 2011-03-08
  • Resolved: 2011-03-08
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 6 JDK 7 Other
6u21Fixed 7Fixed hs17Fixed
Related Reports
Relates :  
Description
Reproduced for both compilers.

To reproduce (linux-586, vmsqe-core2q-15.russia):

/net/vmsqe.russia/export/jdk/re/6u18/promoted/ea/b01/binaries/linux-i586/fastdebug/bin/java -server  -XX:-ShowMessageBoxOnError     -Xverify:all  -XX:+CompileTheWorld -Xbootclasspath/p:/net/vmsqe.russia/export/testbase/ctw/build/../jars/ibiblio/maven2/org/xerial/sqlite-jdbc/3.6.7/sqlite-jdbc-3.6.7.jar

 ...
CompileTheWorld (100) : org/sqlite/RS
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/reg_split.cpp:1087
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/BUILD_AREA/jdk6_18/hotspot/src/share/vm/opto/reg_split.cpp:1087), pid=24818, tid=1872792480
#  Error: assert(!n->is_SpillCopy(),"")
#
# JRE version: 6.0_18-b01
# Java VM: Java HotSpot(TM) Server VM (16.0-b08-fastdebug mixed mode linux-x86 )
# An error report file with more information is saved as:
# /tmp/hs_err_pid24818.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
Current thread is 1872792480
Dumping core ...
Aborted

Comments
PUBLIC COMMENTS Problem: When choosing a candidate for spilling ties may happen when live ranges defined and used only inside one block. In which case area is 0 and score set to max for all such live ranges. As result coloring is done in the order of live ranges numbers. In the bug's case the spill copy was added to break long (64 bit on 32-bit x86) mem-mem move and because of the above it processed after bound live ranges and there are no registers pair left for it. And when we try to spill it we got the assert. Solution: To break spill ties choose bound live range over unbound to free register or one with smaller cost to spill.
07-10-2009

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/e90521d61f9a
07-10-2009

PUBLIC COMMENTS reg_split.cpp is c2 only so refiling.
26-08-2009