393 PhiNode *result = get_map_phi(orig_phi->_idx); |
393 PhiNode *result = get_map_phi(orig_phi->_idx); |
394 const TypePtr *atype = C->get_adr_type(alias_idx); |
394 const TypePtr *atype = C->get_adr_type(alias_idx); |
395 if (result != NULL && C->get_alias_index(result->adr_type()) == alias_idx) { |
395 if (result != NULL && C->get_alias_index(result->adr_type()) == alias_idx) { |
396 return result; |
396 return result; |
397 } |
397 } |
|
398 if ((int)C->unique() + 2*NodeLimitFudgeFactor > MaxNodeLimit) { |
|
399 if (C->do_escape_analysis() == true && !C->failing()) { |
|
400 // Retry compilation without escape analysis. |
|
401 // If this is the first failure, the sentinel string will "stick" |
|
402 // to the Compile object, and the C2Compiler will see it and retry. |
|
403 C->record_failure(C2Compiler::retry_no_escape_analysis()); |
|
404 } |
|
405 return NULL; |
|
406 } |
398 |
407 |
399 orig_phi_worklist.append_if_missing(orig_phi); |
408 orig_phi_worklist.append_if_missing(orig_phi); |
400 result = PhiNode::make(orig_phi->in(0), NULL, Type::MEMORY, atype); |
409 result = PhiNode::make(orig_phi->in(0), NULL, Type::MEMORY, atype); |
401 set_map_phi(orig_phi->_idx, result); |
410 set_map_phi(orig_phi->_idx, result); |
402 igvn->set_type(result, result->bottom_type()); |
411 igvn->set_type(result, result->bottom_type()); |
669 assert (addr_t->isa_ptr() != NULL, "pointer type required."); |
681 assert (addr_t->isa_ptr() != NULL, "pointer type required."); |
670 int alias_idx = _compile->get_alias_index(addr_t->is_ptr()); |
682 int alias_idx = _compile->get_alias_index(addr_t->is_ptr()); |
671 Node *mem = find_mem(n->in(MemNode::Memory), alias_idx, igvn); |
683 Node *mem = find_mem(n->in(MemNode::Memory), alias_idx, igvn); |
672 if (mem->is_Phi()) { |
684 if (mem->is_Phi()) { |
673 mem = split_memory_phi(mem->as_Phi(), alias_idx, orig_phis, igvn); |
685 mem = split_memory_phi(mem->as_Phi(), alias_idx, orig_phis, igvn); |
|
686 } |
|
687 if (_compile->failing()) { |
|
688 return; |
674 } |
689 } |
675 if (mem != n->in(MemNode::Memory)) |
690 if (mem != n->in(MemNode::Memory)) |
676 set_map(n->_idx, mem); |
691 set_map(n->_idx, mem); |
677 if (n->is_Load()) { |
692 if (n->is_Load()) { |
678 continue; // don't push users |
693 continue; // don't push users |
740 // a value of the instance along the chain. |
755 // a value of the instance along the chain. |
741 for (uint ni = new_index_start; ni < new_index_end; ni++) { |
756 for (uint ni = new_index_start; ni < new_index_end; ni++) { |
742 if((uint)_compile->get_general_index(ni) == i) { |
757 if((uint)_compile->get_general_index(ni) == i) { |
743 Node *m = (ni >= nmm->req()) ? nmm->empty_memory() : nmm->in(ni); |
758 Node *m = (ni >= nmm->req()) ? nmm->empty_memory() : nmm->in(ni); |
744 if (nmm->is_empty_memory(m)) { |
759 if (nmm->is_empty_memory(m)) { |
745 nmm->set_memory_at(ni, split_memory_phi(mem->as_Phi(), ni, orig_phis, igvn)); |
760 m = split_memory_phi(mem->as_Phi(), ni, orig_phis, igvn); |
|
761 if (_compile->failing()) { |
|
762 return; |
|
763 } |
|
764 nmm->set_memory_at(ni, m); |
746 } |
765 } |
747 } |
766 } |
748 } |
767 } |
749 } |
768 } |
750 } |
769 } |
879 _collecting = false; |
898 _collecting = false; |
880 |
899 |
881 // Now use the escape information to create unique types for |
900 // Now use the escape information to create unique types for |
882 // unescaped objects |
901 // unescaped objects |
883 split_unique_types(alloc_worklist); |
902 split_unique_types(alloc_worklist); |
|
903 if (_compile->failing()) return; |
|
904 |
|
905 // Clean up after split unique types. |
|
906 ResourceMark rm; |
|
907 PhaseRemoveUseless pru(_compile->initial_gvn(), _compile->for_igvn()); |
884 } |
908 } |
885 |
909 |
886 Node * ConnectionGraph::skip_casts(Node *n) { |
910 Node * ConnectionGraph::skip_casts(Node *n) { |
887 while(n->Opcode() == Op_CastPP || n->Opcode() == Op_CheckCastPP) { |
911 while(n->Opcode() == Op_CastPP || n->Opcode() == Op_CheckCastPP) { |
888 n = n->in(1); |
912 n = n->in(1); |