875 // Exact type check used for predicted calls and casts.
876 // Rewrites (*casted_receiver) to be casted to the stronger type.
877 // (Caller is responsible for doing replace_in_map.)
878 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob,
879 Node* *casted_receiver);
880 Node* type_check(Node* recv_klass, const TypeKlassPtr* tklass, float prob);
881
882 // implementation of object creation
883 Node* set_output_for_allocation(AllocateNode* alloc,
884 const TypeOopPtr* oop_type,
885 bool deoptimize_on_exception=false);
886 Node* get_layout_helper(Node* klass_node, jint& constant_value);
887 Node* new_instance(Node* klass_node,
888 Node* slow_test = NULL,
889 Node* *return_size_val = NULL,
890 bool deoptimize_on_exception = false,
891 ValueTypeBaseNode* value_node = NULL);
892 Node* new_array(Node* klass_node, Node* count_val, int nargs,
893 Node* *return_size_val = NULL,
894 bool deoptimize_on_exception = false);
895 void initialize_value_type_array(Node* array, Node* length, ciValueKlass* vk, int nargs);
896
897 // java.lang.String helpers
898 Node* load_String_length(Node* ctrl, Node* str);
899 Node* load_String_value(Node* ctrl, Node* str);
900 Node* load_String_coder(Node* ctrl, Node* str);
901 void store_String_value(Node* ctrl, Node* str, Node* value);
902 void store_String_coder(Node* ctrl, Node* str, Node* value);
903 Node* capture_memory(const TypePtr* src_type, const TypePtr* dst_type);
904 Node* compress_string(Node* src, const TypeAryPtr* src_type, Node* dst, Node* count);
905 void inflate_string(Node* src, Node* dst, const TypeAryPtr* dst_type, Node* count);
906 void inflate_string_slow(Node* src, Node* dst, Node* start, Node* count);
907
908 // Handy for making control flow
909 IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) {
910 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's
911 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time
912 // Place 'if' on worklist if it will be in graph
913 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later
914 return iff;
|
875 // Exact type check used for predicted calls and casts.
876 // Rewrites (*casted_receiver) to be casted to the stronger type.
877 // (Caller is responsible for doing replace_in_map.)
878 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob,
879 Node* *casted_receiver);
880 Node* type_check(Node* recv_klass, const TypeKlassPtr* tklass, float prob);
881
882 // implementation of object creation
883 Node* set_output_for_allocation(AllocateNode* alloc,
884 const TypeOopPtr* oop_type,
885 bool deoptimize_on_exception=false);
886 Node* get_layout_helper(Node* klass_node, jint& constant_value);
887 Node* new_instance(Node* klass_node,
888 Node* slow_test = NULL,
889 Node* *return_size_val = NULL,
890 bool deoptimize_on_exception = false,
891 ValueTypeBaseNode* value_node = NULL);
892 Node* new_array(Node* klass_node, Node* count_val, int nargs,
893 Node* *return_size_val = NULL,
894 bool deoptimize_on_exception = false);
895 // Initialize a non-flattened value type array with default oops
896 void initialize_value_type_array(Node* array, Node* length, ciValueKlass* vk, int nargs);
897
898 // java.lang.String helpers
899 Node* load_String_length(Node* ctrl, Node* str);
900 Node* load_String_value(Node* ctrl, Node* str);
901 Node* load_String_coder(Node* ctrl, Node* str);
902 void store_String_value(Node* ctrl, Node* str, Node* value);
903 void store_String_coder(Node* ctrl, Node* str, Node* value);
904 Node* capture_memory(const TypePtr* src_type, const TypePtr* dst_type);
905 Node* compress_string(Node* src, const TypeAryPtr* src_type, Node* dst, Node* count);
906 void inflate_string(Node* src, Node* dst, const TypeAryPtr* dst_type, Node* count);
907 void inflate_string_slow(Node* src, Node* dst, Node* start, Node* count);
908
909 // Handy for making control flow
910 IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) {
911 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's
912 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time
913 // Place 'if' on worklist if it will be in graph
914 if (!tst->is_Con()) record_for_igvn(iff); // Range-check and Null-check removal is later
915 return iff;
|