JDK-5064230 : jit/common/misctests/whet crashed
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 5.0
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2004-06-16
  • Updated: 2004-07-13
  • Resolved: 2004-07-13
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.
Other
5.0 b58Fixed
Related Reports
Relates :  
Relates :  
Relates :  
Relates :  
Description

Name: fh87463			Date: 06/16/2004



Following tests crashed when running TL PIT for tiger b57.
I only observe this crash on linux-i586 server platform running
in mixed mode.

jit/common/misctests/whet

The same tests pass in tiger b55.

Here is crashed message:

# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  SIGSEGV (0xb) at pc=0x405d40d5, pid=20740, tid=7176
#
# Java VM: Java HotSpot(TM) Server VM (1.5.0-beta3-b55 mixed mode)
# Problematic frame:
# V  [libjvm.so+0x4510d5]

You can get the tonga log and source file here:
http://vmsqe.sfbay/pit/TL/results/1.5.0-auto-tiger-167a/ServerVM/linux-i586/mixed/SERVICE/vm.jit-TLPIT-SERVICE-ServerVM-mixed-linux-i586-2004-06-15-19-23-18/ResultDir/whet/

Here is hs_err file.
http://vmsqe.sfbay/pit/TL/results/1.5.0-auto-tiger-167a/ServerVM/linux-i586/mixed/SERVICE/vm.jit-TLPIT-SERVICE-ServerVM-mixed-linux-i586-2004-06-15-19-23-18/hs_err_pid20740.log

Here is the JDK used to reproduce the crash.
/net/vmsqe.sfbay/export/pit/TL/JDK/b57/linux-i586/bin/java -server 
-Xmixed -DHANGINGJAVA15761 DWhet

======================================================================

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: tiger-rc FIXED IN: tiger-rc INTEGRATED IN: tiger-b58 tiger-rc
17-07-2004

EVALUATION ###@###.### 2004-06-17 Dead loop check in SubINode::Ideal(). For the bug 5035395 fix I added the next check: 91c92 < if( op1 == Op_AddI && in1->in(1) != in1 ) { --- > if( op1 == Op_AddI && in1->in(1) != in1 && !phase->eqv(in1->in(1), this) ) { We need additional check "&& !phase->eqv(in1->in(2), this)". Without it the next code fails: const Type *tadd = phase->type( in1->in(2) ); since in1->in(2) points to 'this' which is the new SubINode without type.
17-07-2004

WORK AROUND Name: fh87463 Date: 06/16/2004 ======================================================================
17-07-2004

SUGGESTED FIX ###@###.### 2004-06-23 The final fix: http://analemma.sfbay.sun.com/net/prt-archiver.sfbay/export2/archived_workspaces/main/c2_baseline/2004/20040623145030.kvn.5064230/workspace/webrevs/webrev-2004.06.23/index.html ###@###.### 2004-06-17 Add the additional dead loop check into SubINode::Ideal() and SubLNode::Ideal(). --- /net/jano/export/hotspot/users2/kvn/5043395/src/share/vm/opto/subnode.cpp Thu Jun 17 19:17:22 2004 *************** *** 89,95 **** } // Convert "(x+c0) - y" into (x-y) + c0" ! if( op1 == Op_AddI && in1->in(1) != in1 && !phase->eqv(in1->in(1), this) ) { // Do not collapse (x+y)-y if "+" is a loop increment, because the // "-" is loop invariant and collapsing extends the live-range of "x" // to overlap with the "+", forcing another register to be used in --- 89,97 ---- } // Convert "(x+c0) - y" into (x-y) + c0" ! if( op1 == Op_AddI && in1->in(1) != in1 ! && !phase->eqv(in1->in(1), this) ! && !phase->eqv(in1->in(2), this) ) { // Do not collapse (x+y)-y if "+" is a loop increment, because the // "-" is loop invariant and collapsing extends the live-range of "x" // to overlap with the "+", forcing another register to be used in *************** *** 199,205 **** return new (3) AddLNode(in(1), phase->makecon(TypeLong::make(-i->get_con()))); // Convert "(x+c0) - y" into (x-y) + c0" ! if( op1 == Op_AddL && in1->in(1) != in1 && !phase->eqv(in1->in(1), this) ) { // Do not collapse (x+y)-y if "+" is a loop increment, because the // "-" is loop invariant and collapsing extends the live-range of "x" // to overlap with the "+", forcing another register to be used in --- 201,209 ---- return new (3) AddLNode(in(1), phase->makecon(TypeLong::make(-i->get_con()))); // Convert "(x+c0) - y" into (x-y) + c0" ! if( op1 == Op_AddL && in1->in(1) != in1 ! && !phase->eqv(in1->in(1), this) ! && !phase->eqv(in1->in(2), this) ) { // Do not collapse (x+y)-y if "+" is a loop increment, because the // "-" is loop invariant and collapsing extends the live-range of "x" // to overlap with the "+", forcing another register to be used in
17-07-2004