< prev index next >

src/hotspot/share/opto/memnode.cpp

Print this page

        

@@ -1675,10 +1675,21 @@
       set_req(MemNode::Memory, prev_mem);
       return this;
     }
   }
 
+  AllocateNode* alloc = AllocateNode::Ideal_allocation(address, phase);
+  if (alloc != NULL && mem->is_Proj() &&
+      mem->in(0) != NULL &&
+      mem->in(0) == alloc->initialization() &&
+      Opcode() == Op_LoadX &&
+      alloc->initialization()->proj_out_or_null(0) != NULL) {
+    InitializeNode* init = alloc->initialization();
+    Node* control = init->proj_out(0);
+    return alloc->make_ideal_mark(phase, address, control, mem, NULL);
+  }
+
   return progress ? this : NULL;
 }
 
 // Helper to recognize certain Klass fields which are invariant across
 // some group of array types (e.g., int[] or all T[] where T < Object).
< prev index next >