hotspot/src/share/vm/opto/callnode.cpp
changeset 35157 1a5fa0acb08b
parent 35086 bbf32241d851
child 35551 36ef3841fb34
--- a/hotspot/src/share/vm/opto/callnode.cpp	Mon Dec 21 16:58:29 2015 +0000
+++ b/hotspot/src/share/vm/opto/callnode.cpp	Sun Dec 27 05:15:14 2015 -0800
@@ -1333,6 +1333,7 @@
   init_flags(Flag_is_macro);
   _is_scalar_replaceable = false;
   _is_non_escaping = false;
+  _is_allocation_MemBar_redundant = false;
   Node *topnode = C->top();
 
   init_req( TypeFunc::Control  , ctrl );
@@ -1347,6 +1348,23 @@
   C->add_macro_node(this);
 }
 
+void AllocateNode::compute_MemBar_redundancy(ciMethod* initializer)
+{
+  assert(initializer != NULL &&
+         initializer->is_initializer() &&
+         !initializer->is_static(),
+             "unexpected initializer method");
+  BCEscapeAnalyzer* analyzer = initializer->get_bcea();
+  if (analyzer == NULL) {
+    return;
+  }
+
+  // Allocation node is first parameter in its initializer
+  if (analyzer->is_arg_stack(0) || analyzer->is_arg_local(0)) {
+    _is_allocation_MemBar_redundant = true;
+  }
+}
+
 //=============================================================================
 Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) {
   if (remove_dead_region(phase, can_reshape))  return this;