changeset 497:dd70dd4c91de

6782820: Server VM fails with "unhandled implicit exception in compiled code" Summary: Restore the code which sets a control edge for a klass load node. Reviewed-by: never
author kvn
date Tue, 16 Dec 2008 12:23:39 -0800
parents 7b75310e57e2
children 6c345e1c5992 5496e074077f
files src/share/vm/opto/compile.cpp src/share/vm/opto/macro.cpp
diffstat 2 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/opto/compile.cpp	Thu Dec 11 17:20:10 2008 -0800
+++ b/src/share/vm/opto/compile.cpp	Tue Dec 16 12:23:39 2008 -0800
@@ -2192,6 +2192,7 @@
 
   case Op_DecodeN:
     assert(!n->in(1)->is_EncodeP(), "should be optimized out");
+    assert(n->in(0) == NULL, "no control");
     break;
 
   case Op_EncodeP: {
--- a/src/share/vm/opto/macro.cpp	Thu Dec 11 17:20:10 2008 -0800
+++ b/src/share/vm/opto/macro.cpp	Tue Dec 16 12:23:39 2008 -0800
@@ -1724,6 +1724,13 @@
     if (klass_node == NULL) {
       Node* k_adr = basic_plus_adr(obj, oopDesc::klass_offset_in_bytes());
       klass_node = transform_later( LoadKlassNode::make(_igvn, mem, k_adr, _igvn.type(k_adr)->is_ptr()) );
+#ifdef _LP64
+      if (UseCompressedOops && klass_node->is_DecodeN()) {
+        assert(klass_node->in(1)->Opcode() == Op_LoadNKlass, "sanity");
+        klass_node->in(1)->init_req(0, ctrl);
+      } else
+#endif
+      klass_node->init_req(0, ctrl);
     }
     Node *proto_node = make_load(ctrl, mem, klass_node, Klass::prototype_header_offset_in_bytes() + sizeof(oopDesc), TypeX_X, TypeX_X->basic_type());