859 Node* n = Phase::gen_subtype_check(subklass, superklass, &ctrl, mem, &_gvn);
860 set_control(ctrl);
861 return n;
862 }
863
864 // Exact type check used for predicted calls and casts.
865 // Rewrites (*casted_receiver) to be casted to the stronger type.
866 // (Caller is responsible for doing replace_in_map.)
867 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob,
868 Node* *casted_receiver);
869 Node* type_check(Node* recv_klass, const TypeKlassPtr* tklass, float prob);
870
871 // implementation of object creation
872 Node* set_output_for_allocation(AllocateNode* alloc,
873 const TypeOopPtr* oop_type,
874 bool deoptimize_on_exception=false);
875 Node* get_layout_helper(Node* klass_node, jint& constant_value);
876 Node* new_instance(Node* klass_node,
877 Node* slow_test = NULL,
878 Node* *return_size_val = NULL,
879 bool deoptimize_on_exception = false);
880 Node* new_array(Node* klass_node, Node* count_val, int nargs,
881 Node* *return_size_val = NULL,
882 bool deoptimize_on_exception = false);
883 void initialize_value_type_array(Node* array, Node* length, ciValueKlass* vk, int nargs);
884
885 // java.lang.String helpers
886 Node* load_String_length(Node* ctrl, Node* str);
887 Node* load_String_value(Node* ctrl, Node* str);
888 Node* load_String_coder(Node* ctrl, Node* str);
889 void store_String_value(Node* ctrl, Node* str, Node* value);
890 void store_String_coder(Node* ctrl, Node* str, Node* value);
891 Node* capture_memory(const TypePtr* src_type, const TypePtr* dst_type);
892 Node* compress_string(Node* src, const TypeAryPtr* src_type, Node* dst, Node* count);
893 void inflate_string(Node* src, Node* dst, const TypeAryPtr* dst_type, Node* count);
894 void inflate_string_slow(Node* src, Node* dst, Node* start, Node* count);
895
896 // Handy for making control flow
897 IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) {
898 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's
899 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time
|
859 Node* n = Phase::gen_subtype_check(subklass, superklass, &ctrl, mem, &_gvn);
860 set_control(ctrl);
861 return n;
862 }
863
864 // Exact type check used for predicted calls and casts.
865 // Rewrites (*casted_receiver) to be casted to the stronger type.
866 // (Caller is responsible for doing replace_in_map.)
867 Node* type_check_receiver(Node* receiver, ciKlass* klass, float prob,
868 Node* *casted_receiver);
869 Node* type_check(Node* recv_klass, const TypeKlassPtr* tklass, float prob);
870
871 // implementation of object creation
872 Node* set_output_for_allocation(AllocateNode* alloc,
873 const TypeOopPtr* oop_type,
874 bool deoptimize_on_exception=false);
875 Node* get_layout_helper(Node* klass_node, jint& constant_value);
876 Node* new_instance(Node* klass_node,
877 Node* slow_test = NULL,
878 Node* *return_size_val = NULL,
879 bool deoptimize_on_exception = false,
880 ValueTypeNode* value_node = NULL);
881 Node* new_array(Node* klass_node, Node* count_val, int nargs,
882 Node* *return_size_val = NULL,
883 bool deoptimize_on_exception = false);
884 void initialize_value_type_array(Node* array, Node* length, ciValueKlass* vk, int nargs);
885
886 // java.lang.String helpers
887 Node* load_String_length(Node* ctrl, Node* str);
888 Node* load_String_value(Node* ctrl, Node* str);
889 Node* load_String_coder(Node* ctrl, Node* str);
890 void store_String_value(Node* ctrl, Node* str, Node* value);
891 void store_String_coder(Node* ctrl, Node* str, Node* value);
892 Node* capture_memory(const TypePtr* src_type, const TypePtr* dst_type);
893 Node* compress_string(Node* src, const TypeAryPtr* src_type, Node* dst, Node* count);
894 void inflate_string(Node* src, Node* dst, const TypeAryPtr* dst_type, Node* count);
895 void inflate_string_slow(Node* src, Node* dst, Node* start, Node* count);
896
897 // Handy for making control flow
898 IfNode* create_and_map_if(Node* ctrl, Node* tst, float prob, float cnt) {
899 IfNode* iff = new IfNode(ctrl, tst, prob, cnt);// New IfNode's
900 _gvn.set_type(iff, iff->Value(&_gvn)); // Value may be known at parse-time
|