694 } 695 // remove the opaque nodes that protect the predicates so that the unused checks and 696 // uncommon traps will be eliminated from the graph. 697 void cleanup_loop_predicates(PhaseIterGVN &igvn); 698 bool is_predicate_opaq(Node * n) { 699 return _predicate_opaqs->contains(n); 700 } 701 702 // Are there candidate expensive nodes for optimization? 703 bool should_optimize_expensive_nodes(PhaseIterGVN &igvn); 704 // Check whether n1 and n2 are similar 705 static int cmp_expensive_nodes(Node* n1, Node* n2); 706 // Sort expensive nodes to locate similar expensive nodes 707 void sort_expensive_nodes(); 708 709 // Compilation environment. 710 Arena* comp_arena() { return &_comp_arena; } 711 ciEnv* env() const { return _env; } 712 CompileLog* log() const { return _log; } 713 bool failing() const { return _env->failing() || _failure_reason != NULL; } 714 const char* failure_reason() { return _failure_reason; } 715 bool failure_reason_is(const char* r) { return (r==_failure_reason) || (r!=NULL && _failure_reason!=NULL && strcmp(r, _failure_reason)==0); } 716 717 void record_failure(const char* reason); 718 void record_method_not_compilable(const char* reason, bool all_tiers = false) { 719 // All bailouts cover "all_tiers" when TieredCompilation is off. 720 if (!TieredCompilation) all_tiers = true; 721 env()->record_method_not_compilable(reason, all_tiers); 722 // Record failure reason. 723 record_failure(reason); 724 } 725 void record_method_not_compilable_all_tiers(const char* reason) { 726 record_method_not_compilable(reason, true); 727 } 728 bool check_node_count(uint margin, const char* reason) { 729 if (live_nodes() + margin > (uint)MaxNodeLimit) { 730 record_method_not_compilable(reason); 731 return true; 732 } else { 733 return false; 734 } 735 } | 694 } 695 // remove the opaque nodes that protect the predicates so that the unused checks and 696 // uncommon traps will be eliminated from the graph. 697 void cleanup_loop_predicates(PhaseIterGVN &igvn); 698 bool is_predicate_opaq(Node * n) { 699 return _predicate_opaqs->contains(n); 700 } 701 702 // Are there candidate expensive nodes for optimization? 703 bool should_optimize_expensive_nodes(PhaseIterGVN &igvn); 704 // Check whether n1 and n2 are similar 705 static int cmp_expensive_nodes(Node* n1, Node* n2); 706 // Sort expensive nodes to locate similar expensive nodes 707 void sort_expensive_nodes(); 708 709 // Compilation environment. 710 Arena* comp_arena() { return &_comp_arena; } 711 ciEnv* env() const { return _env; } 712 CompileLog* log() const { return _log; } 713 bool failing() const { return _env->failing() || _failure_reason != NULL; } 714 const char* failure_reason() const { return (_env->failing()) ? _env->failure_reason() : _failure_reason; } 715 716 bool failure_reason_is(const char* r) const { 717 return (r == _failure_reason) || (r != NULL && _failure_reason != NULL && strcmp(r, _failure_reason) == 0); 718 } 719 720 void record_failure(const char* reason); 721 void record_method_not_compilable(const char* reason, bool all_tiers = false) { 722 // All bailouts cover "all_tiers" when TieredCompilation is off. 723 if (!TieredCompilation) all_tiers = true; 724 env()->record_method_not_compilable(reason, all_tiers); 725 // Record failure reason. 726 record_failure(reason); 727 } 728 void record_method_not_compilable_all_tiers(const char* reason) { 729 record_method_not_compilable(reason, true); 730 } 731 bool check_node_count(uint margin, const char* reason) { 732 if (live_nodes() + margin > (uint)MaxNodeLimit) { 733 record_method_not_compilable(reason); 734 return true; 735 } else { 736 return false; 737 } 738 } |