< prev index next >

src/hotspot/share/opto/stringopts.cpp

Print this page
*** 313,41 ***
  }
  
  
  void StringConcat::eliminate_call(CallNode* call) {
    Compile* C = _stringopts->C;
!   CallProjections projs;
!   call->extract_projections(&projs, false);
!   if (projs.fallthrough_catchproj != nullptr) {
-     C->gvn_replace_by(projs.fallthrough_catchproj, call->in(TypeFunc::Control));
    }
!   if (projs.fallthrough_memproj != nullptr) {
!     C->gvn_replace_by(projs.fallthrough_memproj, call->in(TypeFunc::Memory));
    }
!   if (projs.catchall_memproj != nullptr) {
!     C->gvn_replace_by(projs.catchall_memproj, C->top());
    }
!   if (projs.fallthrough_ioproj != nullptr) {
!     C->gvn_replace_by(projs.fallthrough_ioproj, call->in(TypeFunc::I_O));
    }
!   if (projs.catchall_ioproj != nullptr) {
!     C->gvn_replace_by(projs.catchall_ioproj, C->top());
    }
!   if (projs.catchall_catchproj != nullptr) {
      // EA can't cope with the partially collapsed graph this
      // creates so put it on the worklist to be collapsed later.
!     for (SimpleDUIterator i(projs.catchall_catchproj); i.has_next(); i.next()) {
        Node *use = i.get();
        int opc = use->Opcode();
        if (opc == Op_CreateEx || opc == Op_Region) {
          _stringopts->record_dead_node(use);
        }
      }
!     C->gvn_replace_by(projs.catchall_catchproj, C->top());
    }
!   if (projs.resproj != nullptr) {
!     C->gvn_replace_by(projs.resproj, C->top());
    }
    C->gvn_replace_by(call, C->top());
  }
  
  void StringConcat::eliminate_initialize(InitializeNode* init) {
--- 313,41 ---
  }
  
  
  void StringConcat::eliminate_call(CallNode* call) {
    Compile* C = _stringopts->C;
!   CallProjections* projs = call->extract_projections(false);
!   if (projs->fallthrough_catchproj != nullptr) {
!     C->gvn_replace_by(projs->fallthrough_catchproj, call->in(TypeFunc::Control));
    }
!   if (projs->fallthrough_memproj != nullptr) {
!     C->gvn_replace_by(projs->fallthrough_memproj, call->in(TypeFunc::Memory));
    }
!   if (projs->catchall_memproj != nullptr) {
!     C->gvn_replace_by(projs->catchall_memproj, C->top());
    }
!   if (projs->fallthrough_ioproj != nullptr) {
!     C->gvn_replace_by(projs->fallthrough_ioproj, call->in(TypeFunc::I_O));
    }
!   if (projs->catchall_ioproj != nullptr) {
!     C->gvn_replace_by(projs->catchall_ioproj, C->top());
    }
!   if (projs->catchall_catchproj != nullptr) {
      // EA can't cope with the partially collapsed graph this
      // creates so put it on the worklist to be collapsed later.
!     for (SimpleDUIterator i(projs->catchall_catchproj); i.has_next(); i.next()) {
        Node *use = i.get();
        int opc = use->Opcode();
        if (opc == Op_CreateEx || opc == Op_Region) {
          _stringopts->record_dead_node(use);
        }
      }
!     C->gvn_replace_by(projs->catchall_catchproj, C->top());
    }
!   if (projs->resproj[0] != nullptr) {
!     assert(projs->nb_resproj == 1, "unexpected number of results");
+     C->gvn_replace_by(projs->resproj[0], C->top());
    }
    C->gvn_replace_by(call, C->top());
  }
  
  void StringConcat::eliminate_initialize(InitializeNode* init) {
< prev index next >