diff src/share/vm/opto/memnode.cpp @ 3252:92add02409c9

Merge
author jmasa
date Fri, 08 Apr 2011 14:19:50 -0700
parents cb162b348743 e6beb62de02d
children 286c498ae0d4
line wrap: on
line diff
--- a/src/share/vm/opto/memnode.cpp	Wed Apr 06 16:02:53 2011 -0700
+++ b/src/share/vm/opto/memnode.cpp	Fri Apr 08 14:19:50 2011 -0700
@@ -2159,9 +2159,12 @@
   Node* mem     = in(MemNode::Memory);
   Node* address = in(MemNode::Address);
 
-  // Back-to-back stores to same address?  Fold em up.
-  // Generally unsafe if I have intervening uses...
-  if (mem->is_Store() && phase->eqv_uncast(mem->in(MemNode::Address), address)) {
+  // Back-to-back stores to same address?  Fold em up.  Generally
+  // unsafe if I have intervening uses...  Also disallowed for StoreCM
+  // since they must follow each StoreP operation.  Redundant StoreCMs
+  // are eliminated just before matching in final_graph_reshape.
+  if (mem->is_Store() && phase->eqv_uncast(mem->in(MemNode::Address), address) &&
+      mem->Opcode() != Op_StoreCM) {
     // Looking at a dead closed cycle of memory?
     assert(mem != mem->in(MemNode::Memory), "dead loop in StoreNode::Ideal");