JDK-6746892 : Register Allocator does not process a data phi with one unique input correctly
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs14
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: solaris_10
  • CPU: sparc
  • Submitted: 2008-09-10
  • Updated: 2010-04-03
  • Resolved: 2008-09-23
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
6u14Fixed 7Fixed hs14Fixed
Related Reports
Relates :  
Description
During my work on compressed oops I found this problem which is
also reported by one customer who also works with hotspot sources:

gamma -XX:CICompilerCount=8 -XX:+UseCompressedOops -XX:-CheckCompressedOops -Xss4m -Xverify:all -XX:-ShowMessageBoxOnError -XX:+CompileTheWorld -XX:CompileTheWorldStartAt=3962 -Xbootclasspath/p:/net/vmsqe.sfbay/export/backup/testbase/CompileTheWorld/jarfiles/weblogicbig.jar

CompileTheWorld (5243) : utils/dbping
CompileTheWorld (5244) : utils/dbserializec
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/reg_split.cpp:1221
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/net/jaberwocky/export/home2/work2/hg/6706829/src/share/vm/opto/reg_split.cpp:1221), pid=25949, tid=20
#  Error: assert(def,"must have reaching def")
#

Comments
SUGGESTED FIX Always look for the existing phi for a processed live_range.
11-09-2008

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/1c6e3bfb543a
11-09-2008

EVALUATION Register Allocator does not process a data phi with one unique input correctly. In PhaseChaitin::Split() when it see all predecessors have the same input it does not look for existing phi. As result the live range of this phi is not updated and the new live range is not propagated to successors. So the new live range is lost on this path.
10-09-2008