diff -r d050cc84f57d src/share/vm/opto/loopopts.cpp --- a/src/share/vm/opto/loopopts.cpp Tue Dec 01 16:21:13 2015 +0100 +++ b/src/share/vm/opto/loopopts.cpp Tue Dec 01 17:55:00 2015 +0100 @@ -945,6 +945,13 @@ } static bool merge_point_safe(Node* region) { + // 4799512: Stop split_if_with_blocks from splitting a block with a ConvI2LNode + // having a PhiNode input. This sidesteps the dangerous case where the split + // ConvI2LNode may become TOP if the input Value() does not + // overlap the ConvI2L range, leaving a node which may not dominate its + // uses. + // A better fix for this problem can be found in the BugTraq entry, but + // expediency for Mantis demands this hack. // 6855164: If the merge point has a FastLockNode with a PhiNode input, we stop // split_if_with_blocks from splitting a block because we could not move around // the FastLockNode. @@ -955,6 +962,10 @@ Node* m = n->fast_out(j); if (m->is_FastLock()) return false; +#ifdef _LP64 + if (m->Opcode() == Op_ConvI2L) + return false; + #endif } } }