< prev index next >

src/hotspot/share/opto/compile.cpp

Print this page
*** 2139,21 ***
    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 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);
    }
  
    // Now that all inlining is over and no PhaseRemoveUseless will run, cut edge from root to loop
    // safepoints
    remove_root_to_sfpts_edges(igvn);
--- 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);
!     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(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 ***
  
  //---------------------------- Bitwise operation packing optimization ---------------------------
  
  static bool is_vector_unary_bitwise_op(Node* n) {
    return n->Opcode() == Op_XorV &&
           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;
  
      case Op_XorV:
        return !is_vector_unary_bitwise_op(n);
  
      default:
--- 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 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 >