847 // Exact type check used for predicted calls and casts. 848 // Rewrites (*casted_receiver) to be casted to the stronger type. 849 // (Caller is responsible for doing replace_in_map.) 850 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob, 851 Node* *casted_receiver); 852 853 // implementation of object creation 854 Node* set_output_for_allocation(AllocateNode* alloc, 855 const TypeOopPtr* oop_type, 856 bool deoptimize_on_exception=false); 857 Node* get_layout_helper(Node* klass_node, jint& constant_value); 858 Node* new_instance(Node* klass_node, 859 Node* slow_test = NULL, 860 Node* *return_size_val = NULL, 861 bool deoptimize_on_exception = false); 862 Node* new_array(Node* klass_node, Node* count_val, int nargs, 863 Node* *return_size_val = NULL, 864 bool deoptimize_on_exception = false); 865 866 // java.lang.String helpers 867 Node* load_String_offset(Node* ctrl, Node* str); 868 Node* load_String_length(Node* ctrl, Node* str); 869 Node* load_String_value(Node* ctrl, Node* str); 870 void store_String_offset(Node* ctrl, Node* str, Node* value); 871 void store_String_length(Node* ctrl, Node* str, Node* value); 872 void store_String_value(Node* ctrl, Node* str, Node* value); 873 874 // Handy for making control flow 875 IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) { 876 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's 877 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time 878 // Place 'if' on worklist if it will be in graph 879 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 880 return iff; 881 } 882 883 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) { 884 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's 885 _gvn.transform(iff); // Value may be known at parse-time 886 // Place 'if' on worklist if it will be in graph 887 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 888 return iff; 889 } 890 891 // Insert a loop predicate into the graph 892 void add_predicate(int nargs = 0); | 847 // Exact type check used for predicted calls and casts. 848 // Rewrites (*casted_receiver) to be casted to the stronger type. 849 // (Caller is responsible for doing replace_in_map.) 850 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob, 851 Node* *casted_receiver); 852 853 // implementation of object creation 854 Node* set_output_for_allocation(AllocateNode* alloc, 855 const TypeOopPtr* oop_type, 856 bool deoptimize_on_exception=false); 857 Node* get_layout_helper(Node* klass_node, jint& constant_value); 858 Node* new_instance(Node* klass_node, 859 Node* slow_test = NULL, 860 Node* *return_size_val = NULL, 861 bool deoptimize_on_exception = false); 862 Node* new_array(Node* klass_node, Node* count_val, int nargs, 863 Node* *return_size_val = NULL, 864 bool deoptimize_on_exception = false); 865 866 // java.lang.String helpers 867 Node* load_String_length(Node* ctrl, Node* str); 868 Node* load_String_value(Node* ctrl, Node* str); 869 Node* load_String_coder(Node* ctrl, Node* str); 870 void store_String_value(Node* ctrl, Node* str, Node* value); 871 void store_String_coder(Node* ctrl, Node* str, Node* value); 872 Node* compress_string(Node* src, Node* dst, Node* count); 873 void inflate_string(Node* src, Node* dst, Node* count); 874 void inflate_string_slow(Node* src, Node* dst, Node* start, Node* count); 875 876 // Handy for making control flow 877 IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) { 878 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's 879 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time 880 // Place 'if' on worklist if it will be in graph 881 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 882 return iff; 883 } 884 885 IfNode* create_and_xform_if(Node* ctrl, Node* tst, float prob, float cnt) { 886 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's 887 _gvn.transform(iff); // Value may be known at parse-time 888 // Place 'if' on worklist if it will be in graph 889 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later 890 return iff; 891 } 892 893 // Insert a loop predicate into the graph 894 void add_predicate(int nargs = 0); |