--- a/hotspot/src/share/vm/opto/compile.cpp Mon Dec 15 13:58:57 2008 -0800
+++ b/hotspot/src/share/vm/opto/compile.cpp Wed Dec 17 14:09: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/hotspot/src/share/vm/opto/macro.cpp Mon Dec 15 13:58:57 2008 -0800
+++ b/hotspot/src/share/vm/opto/macro.cpp Wed Dec 17 14:09: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());