hotspot/src/share/vm/opto/memnode.cpp
changeset 12953 39d868c36dcd
parent 11568 e48ad3769aa5
child 13104 657b387034fb
--- a/hotspot/src/share/vm/opto/memnode.cpp	Mon Jun 11 08:35:28 2012 -0700
+++ b/hotspot/src/share/vm/opto/memnode.cpp	Mon Jun 11 14:58:51 2012 -0700
@@ -717,6 +717,22 @@
         adr = adr->in(1);
         continue;
 
+      case Op_EncodeP:
+        // EncodeP node's control edge could be set by this method
+        // when EncodeP node depends on CastPP node.
+        //
+        // Use its control edge for memory op because EncodeP may go away
+        // later when it is folded with following or preceding DecodeN node.
+        if (adr->in(0) == NULL) {
+          // Keep looking for cast nodes.
+          adr = adr->in(1);
+          continue;
+        }
+        ccp->hash_delete(n);
+        n->set_req(MemNode::Control, adr->in(0));
+        ccp->hash_insert(n);
+        return n;
+
       case Op_CastPP:
         // If the CastPP is useless, just peek on through it.
         if( ccp->type(adr) == ccp->type(adr->in(1)) ) {