diff src/share/vm/opto/memnode.cpp @ 3284:286c498ae0d4

Merge
author kvn
date Fri, 29 Apr 2011 11:15:30 -0700
parents 66b0e2371912 92add02409c9
children f1c12354c3f7
line wrap: on
line diff
--- a/src/share/vm/opto/memnode.cpp	Thu Apr 28 14:00:13 2011 -0700
+++ b/src/share/vm/opto/memnode.cpp	Fri Apr 29 11:15:30 2011 -0700
@@ -2155,9 +2155,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");