Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2137086 | 5.0u8 | Chris Phillips | P2 | Resolved | Fixed | b01 |
JDK-2122077 | 1.4.2_08 | Chris Phillips | P2 | Resolved | Fixed | b02 |
The fix for this bug containes fixes only for the next 2 problems described by Cliff.
It does not fix the problem described in Comments section.
That problem is addressed in 6472714.
======================================================================================
Subject: Bug dejeur
Date: Mon, 02 Feb 2004 08:20:47 -0800
From: Cliff Click <###@###.###>
Organization: Azul Systems
To: David Cox <###@###.###>
Fix a OBOB in the allocator. Bug is having a derived live range merging
at a Phi; this requires a bases be merged at the same block, sometimes
requiring a base-phi be inserted. If the block has no instructions
between the last Phi and the block-ending branch, you'll miss out that a
base-phi is needed. Requires a Sparc V9-style compare-n-branch in 1
instruction style thing, plus of course a merging derived live range.
====
//java/working/main-dev/spin1/java/hotspot/src/share/vm/opto/chaitin.cpp#2
(text) ====
@@ -1411,7 +1411,7 @@
// Search the current block for an existing base-Phi
Block *b = _cfg._bbs[derived->_idx];
- for( i = 1; i < b->end_idx(); i++ ) {// Search for matching Phi
+ for( i = 1; i <= b->end_idx(); i++ ) {// Search for matching Phi
Node *phi = b->_nodes[i];
if( !phi->is_Phi() ) { // Found end of Phis with no match?
b->_nodes.insert( i, base ); // Must insert created Phi here as base
Enjoy!
Cliff
===============================================================================
Subject: HotSpot bug dejeur
Date: Mon, 02 Feb 2004 08:13:41 -0800
From: Cliff Click <###@###.###>
Organization: Azul Systems
To: David Cox <###@###.###>
I fixed a bug with trying to split-thru-phi a c-move where the guard
value is loop-INvariant and the data values are loop-Varying.
I added this code:
==== //java/main-dev/java/hotspot/src/share/vm/opto/loopopts.cpp#14
(text) ====
@@ -690,6 +690,8 @@
if( get_ctrl(iff->in(2)) == n_ctrl ||
get_ctrl(iff->in(3)) == n_ctrl )
return; // Inputs not yet split-up
+ if( get_loop(n_ctrl) != get_loop(get_ctrl(iff)) )
+ return; // Loop-invar test gates loop-varying CMOVE?
}
// Do not do 'split-if' if some paths are dead. First do dead code
Enjoy!
Cliff
- backported by
-
JDK-2122077 BugFixes from Azul Systems
- Resolved
-
JDK-2137086 BugFixes from Azul Systems
- Resolved
- duplicates
-
JDK-6384760 1.4.2_04 SIGBUS in PhaseIdealLoop::split_thru_region
- Closed
-
JDK-5089864 1.4.2_05 crash in hotspot -server compiler PhaseIdealLoop::build_loop_late
- Closed
- relates to
-
JDK-6195764 Crashes at Function name=JVM_GetCPFieldSignatureUTF in jdk 1.3.1_13
- Resolved
-
JDK-6179233 1.4.2_06 crashes when setting -XX:CompileThreshold=200 -server on Windows
- Resolved
-
JDK-6472714 crash compiling com.sun.jndi.ldap.sasl.LdapSasl::saslBind
- Resolved