[aarch64-port-dev ] RFR: Bulk integration of Shenandoah 2018-05-15

Andrew Haley aph at redhat.com
Mon Jun 4 16:30:59 UTC 2018


On 05/31/2018 09:37 AM, Roman Kennke wrote:
> Has anybody else gotten to review this in the meantime? Is it ok to go?

I had a look.  I didn't scan the Shenadoah changes, but the shared code
changes mostly look innocuous.  I didn't look at the tests either.

These changes are not all Shenadoah-guarded.  I don't know what effect
they might have.  We need at least to justify any changes to shared code.

+++ b/src/share/vm/opto/lcm.cpp
@@ -638,9 +638,12 @@

 //------------------------------add_call_kills-------------------------------------
 // helper function that adds caller save registers to MachProjNode
-static void add_call_kills(MachProjNode *proj, RegMask& regs, const char* save_policy, bool exclude_soe) {
+static void add_call_kills(MachProjNode *proj, RegMask& regs, const char* save_policy, bool exclude_soe, bool exclude_fp) {
   // Fill in the kill mask for the call
   for( OptoReg::Name r = OptoReg::Name(0); r < _last_Mach_Reg; r=OptoReg::add(r,1) ) {
+    if (exclude_fp && (register_save_type[r] == Op_RegF || register_save_type[r] == Op_RegD)) {
+      continue;
+    }

@@ -930,7 +938,7 @@
       map_node_to_block(proj, block);
       block->insert_node(proj, phi_cnt++);

-      add_call_kills(proj, regs, _matcher._c_reg_save_policy, false);
+      add_call_kills(proj, regs, _matcher._c_reg_save_policy, false, false);
     }

diff --git a/src/share/vm/opto/cfgnode.cpp b/src/share/vm/opto/cfgnode.cpp
--- a/src/share/vm/opto/cfgnode.cpp
+++ b/src/share/vm/opto/cfgnode.cpp
@@ -1153,20 +1153,6 @@
     if (id != NULL)  return id;
   }

-  if (phase->is_IterGVN()) {
-    // A memory Phi could only have data inputs if that Phi was input
-    // to a MergeMem and MergeMemNode::Ideal() found that it's
-    // equivalent to the base memory Phi. If data uses are removed,
-    // the Phi will be removed as well. If one of the Phi inputs has
-    // changed in the meantime (shenandoah write barrier moved out of
-    // loop for instance), that input is disconnected from the memory
-    // graph.
-    Node* other_phi = has_only_data_users();
-    if (other_phi != NULL) {
-      return other_phi;
-    }
-  }
-
   return this;                     // No identity
 }

@@ -2122,30 +2108,6 @@
     _dest_bci == ((JumpProjNode&)n)._dest_bci;
 }

-PhiNode* PhiNode::has_only_data_users() const {
-  if (!UseShenandoahGC || bottom_type() != Type::MEMORY || adr_type() == TypePtr::BOTTOM || outcnt() == 0) {
-    return NULL;
-  }
-  for (DUIterator_Fast imax, i = fast_outs(imax); i < imax; i++) {
-    Node* u = fast_out(i);
-    if (u->Opcode() != Op_ShenandoahReadBarrier) {
-      return NULL;
-    }
-  }
-  Node* r = in(0);
-  if (r == NULL) {
-    return NULL;
-  }
-  for (DUIterator_Fast imax, i = r->fast_outs(imax); i < imax; i++) {
-    Node* u = r->fast_out(i);
-    if (u != this && u->is_Phi() && u->bottom_type() == Type::MEMORY &&
-        u->adr_type() == TypePtr::BOTTOM) {
-      return u->as_Phi();
-    }
-  }
-  return NULL;
-}
-
 #ifndef PRODUCT
 void JumpProjNode::dump_spec(outputStream *st) const {
   ProjNode::dump_spec(st);
diff --git a/src/share/vm/opto/cfgnode.hpp b/src/share/vm/opto/cfgnode.hpp
--- a/src/share/vm/opto/cfgnode.hpp
+++ b/src/share/vm/opto/cfgnode.hpp
@@ -220,8 +220,6 @@
 #else //ASSERT
   void verify_adr_type(bool recursive = false) const {}
 #endif //ASSERT
-
-  PhiNode* has_only_data_users() const;
 };

 //------------------------------GotoNode---------------------------------------
diff --git a/src/share/vm/opto/compile.cpp b/src/share/vm/opto/compile.cpp
--- a/src/share/vm/opto/compile.cpp
+++ b/src/share/vm/opto/compile.cpp
@@ -416,9 +416,6 @@
         record_for_igvn(n->fast_out(i));
       }
     }
-    if (n->is_Phi() && n->as_Phi()->has_only_data_users()) {
-      record_for_igvn(n);
-    }
   }
   // Remove useless macro and predicate opaq nodes
   for (int i = C->macro_count()-1; i >= 0; i--) {
@@ -3149,7 +3146,6 @@
         n->subsume_by(unique_in, this);
       }
     }
-    assert(!n->as_Phi()->has_only_data_users(), "memory Phi has no memory use");
     break;

 #endif
diff --git a/src/share/vm/opto/memnode.cpp b/src/share/vm/opto/memnode.cpp
--- a/src/share/vm/opto/memnode.cpp
+++ b/src/share/vm/opto/memnode.cpp
@@ -4229,11 +4229,7 @@
       // Warning:  Do not combine this "if" with the previous "if"
       // A memory slice might have be be rewritten even if it is semantically
       // unchanged, if the base_memory value has changed.
-      if (can_reshape) {
-        set_req_X(i, new_in, phase->is_IterGVN());
-      } else {
-        set_req(i, new_in);
-      }
+      set_req(i, new_in);
       progress = this;          // Report progress
     }
   }
diff --git a/src/share/vm/opto/node.cpp b/src/share/vm/opto/node.cpp
--- a/src/share/vm/opto/node.cpp
+++ b/src/share/vm/opto/node.cpp
@@ -1406,8 +1406,6 @@
             igvn->add_users_to_worklist( n );
           } else if (n->Opcode() == Op_AddP && CallLeafNode::has_only_g1_wb_pre_uses(n)) {
             igvn->add_users_to_worklist(n);
-          } else if (n->is_Phi() && n->as_Phi()->has_only_data_users()) {
-            igvn->_worklist.push(n);
           }
         }
       }
diff --git a/src/share/vm/opto/phaseX.cpp b/src/share/vm/opto/phaseX.cpp
--- a/src/share/vm/opto/phaseX.cpp
+++ b/src/share/vm/opto/phaseX.cpp
@@ -1300,8 +1300,6 @@
               _worklist.push(in);
             } else if (in->Opcode() == Op_AddP && CallLeafNode::has_only_g1_wb_pre_uses(in)) {
               add_users_to_worklist(in);
-            } else if (in->is_Phi() && in->as_Phi()->has_only_data_users()) {
-              _worklist.push(in);
             }
             if (ReduceFieldZeroing && dead->is_Load() && i == MemNode::Memory &&
                 in->is_Proj() && in->in(0) != NULL && in->in(0)->is_Initialize()) {
@@ -1978,9 +1976,6 @@
     if (old->Opcode() == Op_AddP && CallLeafNode::has_only_g1_wb_pre_uses(old)) {
       igvn->add_users_to_worklist(old);
     }
-    if (old->is_Phi() && old->as_Phi()->has_only_data_users()) {
-      igvn->_worklist.push(old);
-    }
   }

 }

-- 
Andrew Haley
Java Platform Lead Engineer
Red Hat UK Ltd. <https://www.redhat.com>
EAC8 43EB D3EF DB98 CC77 2FAD A5CD 6035 332F A671


More information about the aarch64-port-dev mailing list