JDK-6792161 : assert("No dead instructions after post-alloc")
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs15,hs17
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: solaris_9,solaris_10
  • CPU: sparc
  • Submitted: 2009-01-09
  • Updated: 2010-04-03
  • Resolved: 2010-02-09
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
Duplicate :  
Relates :  
Description
Note:  CompileThreshold=2

intelsdv20% /java/re/jdk/7/promoted/all/b42/binaries/solaris-i586/fastdebug/bin/java -cp /net/sqenfs-1.sfbay/export1/comp/vm/testbase/jck/6b/dist/JCK-runtime-6b/classes:/java/sqe/comp/vm/testbase/sqe/vm/6/build/latest/vm/bin/classes -XX:CompileThreshold=2 -Xverify:all nsk.stress.share.StressTestRunner -testList /java/sqe/comp/vm/testbase/sqe/vm/6/build/latest/vm/src/nsk/stress/jck60/jck60022/tests -stress:indulgent
VM option 'CompileThreshold=2'
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/chaitin.cpp:1354
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/BUILD_AREA/jdk7/hotspot/src/share/vm/opto/chaitin.cpp:1354), pid=22140, tid=16[thread 15 also had an error]
#  Error: assert(n->outcnt() != 0 || C->top() == n || n->is_Proj(),"No dead instructions after post-alloc")

#
# Java VM: Java HotSpot(TM) Server VM (14.0-b09-fastdebug mixed mode solaris-x86 )
# An error report file with more information is saved as:
# /export/kvn/build/6790209/hs_err_pid22140.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
Current thread is 16
Dumping core ...
Abort

Comments
EVALUATION In this failure a MemBarNode is the only user of a node through it's Precedent input and the liveness calculation in ifg.cpp doesn't consider precedent edges in the liveness calculation. Because of this the node appears dead and we end up deleting it during post allocation copy removal. It's possible this node is a chain of phis and loads and the dead code elimination can't handle that complex of a dead structure so it ends up hitting asserts. The fix is to modify ifg.cpp to keep the precedent input alive if the membar node is the only user. It's not possible to delete the membar node completely since we have to preserve it's barrier semantics. Tested with failing test case.
29-01-2010

EVALUATION ChangeSet=http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/0e14bd797dad,ChangeRequest=6792161
29-01-2010