< prev index next >

src/hotspot/share/opto/compile.cpp

Print this page
@@ -2139,21 +2139,22 @@
    assert(!has_vbox_nodes(), "sanity");
  
    if (!failing() && RenumberLiveNodes && live_nodes() + NodeLimitFudgeFactor < unique()) {
      Compile::TracePhase tp("", &timers[_t_renumberLive]);
      initial_gvn()->replace_with(&igvn);
-     for_igvn()->clear();
+     Unique_Node_List* old_worklist = for_igvn();
+     old_worklist->clear();
      Unique_Node_List new_worklist(C->comp_arena());
      {
        ResourceMark rm;
        PhaseRenumberLive prl = PhaseRenumberLive(initial_gvn(), for_igvn(), &new_worklist);
      }
      Unique_Node_List* save_for_igvn = for_igvn();
      set_for_igvn(&new_worklist);
      igvn = PhaseIterGVN(initial_gvn());
      igvn.optimize();
-     set_for_igvn(save_for_igvn);
+     set_for_igvn(old_worklist); // new_worklist is dead beyond this point
    }
  
    // Now that all inlining is over and no PhaseRemoveUseless will run, cut edge from root to loop
    // safepoints
    remove_root_to_sfpts_edges(igvn);

@@ -2363,18 +2364,19 @@
  
  //---------------------------- Bitwise operation packing optimization ---------------------------
  
  static bool is_vector_unary_bitwise_op(Node* n) {
    return n->Opcode() == Op_XorV &&
+          n->req() == 2 &&
           VectorNode::is_vector_bitwise_not_pattern(n);
  }
  
  static bool is_vector_binary_bitwise_op(Node* n) {
    switch (n->Opcode()) {
      case Op_AndV:
      case Op_OrV:
-       return true;
+       return n->req() == 2;
  
      case Op_XorV:
        return !is_vector_unary_bitwise_op(n);
  
      default:

@@ -3429,10 +3431,12 @@
  
    case Op_LoadVector:
    case Op_StoreVector:
    case Op_LoadVectorGather:
    case Op_StoreVectorScatter:
+   case Op_LoadVectorGatherMasked:
+   case Op_StoreVectorScatterMasked:
    case Op_VectorCmpMasked:
    case Op_VectorMaskGen:
    case Op_LoadVectorMasked:
    case Op_StoreVectorMasked:
      break;
< prev index next >