diff src/share/vm/opto/memnode.cpp @ 420:a1980da045cc

6462850: generate biased locking code in C2 ideal graph Summary: Inline biased locking code in C2 ideal graph during macro nodes expansion Reviewed-by: never
author kvn
date Fri, 07 Nov 2008 09:29:38 -0800
parents 8261ee795323
children 82a980778b92 041fe019d769
line wrap: on
line diff
--- a/src/share/vm/opto/memnode.cpp	Thu Nov 06 20:00:03 2008 -0800
+++ b/src/share/vm/opto/memnode.cpp	Fri Nov 07 09:29:38 2008 -0800
@@ -227,6 +227,14 @@
   const Type *t_adr = phase->type( address );
   if( t_adr == Type::TOP )              return NodeSentinel; // caller will return NULL
 
+  PhaseIterGVN *igvn = phase->is_IterGVN();
+  if( can_reshape && igvn != NULL && igvn->_worklist.member(address) ) {
+    // The address's base and type may change when the address is processed.
+    // Delay this mem node transformation until the address is processed.
+    phase->is_IterGVN()->_worklist.push(this);
+    return NodeSentinel; // caller will return NULL
+  }
+
   // Avoid independent memory operations
   Node* old_mem = mem;